Commit Graph

33734 Commits

Author SHA1 Message Date
wm4 0a20d13dfc libvo: remove videodev_mjpeg.h
This was used by stream/tvi_v4l.c, which was removed a while ago.
2012-08-06 19:02:35 +02:00
wm4 6ecfa42a46 VO: remove vo_gif89a, vo_md5sum, vo_yuv4mpeg
The encoding branch by divverent can handle of these via libavformat.

Note: for some reason, libav/ffmpeg have a GIF muxer only, and no
demuxer. The gif configure checks needef for the mplayer internal gif
demuxer can't be removed yet.
2012-08-06 18:58:17 +02:00
wm4 44f23e36e8 VO: remove vo_jpeg, vo_png, vo_pnm, vo_tga
All of these have been replaced by vo_image.
2012-08-06 18:49:35 +02:00
wm4 eb1182eb50 vo_image: add outdir option
The function checked_mkdir is taken from vo_jpeg, with the error
handling stripped down to a reasonable level.
2012-08-06 17:52:47 +02:00
wm4 c7b66d99d1 vo_image: add new video output for writing images
This is supposed to replace vo_png and others.
2012-08-06 17:52:17 +02:00
wm4 b43adea6c8 video_out: rename privsize member to priv_size 2012-08-06 17:51:53 +02:00
wm4 927c58854f image_writer: support all JPEG specific options vo_jpeg supports
Most of these are useless or probably even dangerous. Support them
anyway, because it's easy, and we want to replace vo_jpeg without any
disadvantages.
2012-08-06 17:51:04 +02:00
wm4 0a0925be82 image_writer: add TGA image format
For getting rid of vo_tga.

This makes use of the libavcodec TGA encoder.
2012-08-06 17:50:31 +02:00
wm4 c74afab393 image_writer: add some PNM family image formats
While the PNM formats are not that useful, supporting them helps
getting rid of vo_pnm.

This makes use of the libavcodec PNM encoder.

Compared to vo_pnm, at least PNM ASCII mode is not supported. It doesn't
look like libavcodec supports this mode for encoding.
2012-08-06 17:49:37 +02:00
wm4 5f57d27656 image_writer: add option parsing
image_writer now provides its own option parsing, and screenshot.c and
the mplayer frontend use it.
2012-08-06 17:48:30 +02:00
wm4 4de99d9c0c image_writer: allow specifying pixel formats for image writers 2012-08-06 17:47:28 +02:00
wm4 e7da13ed86 image_writer: never pass anamorphic images to image writer 2012-08-06 17:47:10 +02:00
wm4 39593c138d screenshot: move image writer code into new file image_writer.c 2012-08-06 17:46:42 +02:00
wm4 7aae399239 m_config: support auto-allocated sub-structs
Given your option struct has a field that is a pointer to another
struct, this commit allows you to declare options that write into that
other struct. The code in m_config will dereference the pointer field
on its own if such an option is accessed. If the field is NULL on
initialization of the containing m_config, the struct is automatically
allocated.

OPT_SUBSTRUCT() can be used to declare such a field.
struct m_sub_options is used to describe the pointed-to struct, and
includes size and defaults if the struct has to be allocated by
m_config.
2012-08-06 17:45:17 +02:00
wm4 0c1dd8a8f5 m_config: support flatten and merge flags for suboptions
M_OPT_PREFIXED allows adding top-level options with the suboption
mechanism. The point of this is that, even though these options are
top-level options, they don't need to be added directly to a top-
level option array (such as mplayer_opts[]). Instead, the suboption
can be defined in a separate source file. Only a suboption declaration
is needed to add these options.

M_OPT_MERGE is similar to M_OPT_PREFIXED, but doesn't add the name of
the suboptions entry as prefix.

Given you have a suboption declaration "prefix" and the suboption
"subopt", you can pass them as follows on the command line:
  normal:           --prefix=subopt=value
  M_OPT_PREFIXED:   --prefix-subopt=value
  M_OPT_MERGE:      --subopt=value
2012-08-06 17:42:53 +02:00
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