Windows uses a legacy codepage for char* / runtime functions accepting
char *. Using UTF-8 as the codepage with setlocale() is explicitly
forbidden.
Work this around by overriding the MSVCRT functions with wrapper
macros, that assume UTF-8 and use "proper" API calls like _wopen etc.
to deal with unicode filenames. All code that uses standard functions
that take or return filenames must now include osdep/io.h. stat()
can't be overridden, because MinGW-w64 itself defines "stat" as a
macro. Change code to use use mp_stat() instead.
This is not perfectly clean, but still somewhat sane, and much better
than littering the rest of the mplayer code with MinGW specific hacks.
It's also a bit fragile, but that's actually little different from the
previous situation. Also, MinGW is unlikely to ever include a nice way
of dealing with this.
Some of the code, especially the dshow and windows codec loader parts,
are extremely hacky and likely full of bugs. The goal is merely getting
rid of warnings that could obscure more important warnings and actual
bugs, instead of fixing actual problems. This reduces the number of
warnings from over 500 to almost the same as when compiling on Linux.
Note that many problems stem from using the ancient wine-derived
windows headers. There are some differences to the "proper" windows
header. Changing the code to compile with the proper headers would be
too much trouble, and it still has to work on Unix.
Some of the changes might actually break compilation on legacy MinGW,
but we don't support that anymore. Always use MinGW-w64, even when
compiling to 32 bit.
Fixes some warnings in the win32 loader code on Linux too.
Remove the private bswap and intreadwrite.h implementations and use
libavutil headers instead.
Originally these headers weren't publicly installed by libavutil at
all. That already changed in 2010, but the pure C bswap version in
installed headers was very inefficient. That was recently (2011-12)
improved and now using the public bswap version probably shouldn't
cause noticeable performance problems, at least if using a new enough
compiler.
Change various code to use the latest Libav API. The libavcodec
error_recognition setting has been removed and replaced with different
semantics. I removed the "--lavdopts=er=<value>" option accordingly,
as I don't think it's widely enough used to be worth attempting to
emulate the old option semantics using the new API. A new option with
the new semantics can be added later if needed.
Libav dropped APIs that were necessary with all Libav versions
until quite recently (like setting avctx->age), and it would thus not
be possible to keep compatibility with previous Libav versions without
adding workarounds. The new APIs also had some bugs/limitations in the
recent Libav release 0.8, and it would not work fully (at least some
avcodec options would not be set correctly). Because of those issues,
this commit makes no attempt to maintain compatibility with anything
but the latest Libav git head. Hopefully the required fixes and
improvements will be included in a following Libav point release.
stream_ffmpeg was using the libavformat URLContext API. This API has
been deprecated (for public use at least) in libavformat. Switch to
the AVIOContext API.
Require versions of the Libav libraries corresponding to Libav release
0.7. These are:
libavutil 51.7.0
libavcodec 53.5.0
libavformat 53.2.0
libswscale 2.0.0
libpostproc 52.0.0
Also disable the fallback to simple header check if these libraries
could not be found with pkg-config; now compiling without pkg-config
support for these always requires explicitly setting --enable-libav
and any needed compiler/linker flags. The simple check would have let
compilation proceed even if a version mismatch was detected.
After commit 39e373aa8d ("options: allocate dynamic options with
talloc") dynamically allocated options must be allocated with talloc.
stream_cdda allocated a string used with the option machinery using
strdup(). Fix. Also silence a warning.
Command line options like "-foo xyz" are ambiguous: "xyz" may be a
parameter to the option "foo" or an unrelated argument. Instead of
relying on the struct m_config mode field (commandline/file) pass
parameters to specify ambiguous mode explicitly. Meant for "--foo"
options which are never ambiguous on command line either.
Do the global initialization of libavcodec and libavformat
(avcodec_register_all(), av_register_all()) immediately on program
startup and remove the initialization calls from various individual
modules that use libavcodec/libavformat functionality.
Improve checks for when to try reconnecting to be more thorough and
readable.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33809 b3059339-0415-0410-9bf9-f77b7e298cf2
Reindent, add empty lines.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33810 b3059339-0415-0410-9bf9-f77b7e298cf2
Fixes a possible endless loop with HTTP files where seeking to
the very end returns the full file again instead of e.g. an error.
Apache/2.2.4 seems to show this behaviour.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33808 b3059339-0415-0410-9bf9-f77b7e298cf2
Ensure we do not add strange values to amount of buffered bytes
read on error.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33807 b3059339-0415-0410-9bf9-f77b7e298cf2
Signal EOF vs. error also via streaming control API (not yet evaluated).
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33806 b3059339-0415-0410-9bf9-f77b7e298cf2
When handling STREAM_CTRL calls for the cached stream, do not modify
the return parameter if the underlying stream returns an error for the
operation.
Avoids issues with some places that don't check the return
value of stream_control.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33802 b3059339-0415-0410-9bf9-f77b7e298cf2
Remove condition that is now always true.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33803 b3059339-0415-0410-9bf9-f77b7e298cf2
Do a proper calculation of free RAM to be used as V4L buffers.
The code uses sysinfo to query the available RAM, however it used
ancient form available in some early development 2.3.x kernels.
Newer form reports the size in memory units (usually same as page size),
as result the code would fall back on 2 buffers even on multi GB system.
The commit does: Improve the check in configure to ensure that we
do use sysinfo struct with present mem_unit. Use free RAM instead of
total RAM (to avoid swapping). Tweak memory constants and simplify code.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33732 b3059339-0415-0410-9bf9-f77b7e298cf2
tvi_dshow: Mark functions not used outside of the file as static.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33706 b3059339-0415-0410-9bf9-f77b7e298cf2
tvi_dshow: Adjust mp_msg printf conversion specifier to avoid warnings
stream/tvi_dshow.c:2807: warning: format '%x' expects type 'unsigned int', but argument 4 has type 'long unsigned int'
stream/tvi_dshow.c:2821: warning: format '%x' expects type 'unsigned int', but argument 4 has type 'long unsigned int'
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33710 b3059339-0415-0410-9bf9-f77b7e298cf2
Change code to allow STREAM_CTRL_GET_CURRENT_TIME with cache enabled.
Due to that time being from what is currently read into the cache it
is unfortunately somewhat inaccurate and unsmooth, however for streams
that do have stream timestamps it is till a lot better than going by
the demuxer alone.
In particular it fixes bug #1081, when starting a DVD with -chapter
following seeks would be relative to the start of the DVD instead
of the current position.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33605 b3059339-0415-0410-9bf9-f77b7e298cf2
Fix dvd_get_current_time so the cell argument actually has a purpose.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33603 b3059339-0415-0410-9bf9-f77b7e298cf2
Replace sys/fcntl.h include by fcntl.h include used everywhere else.
Also fixes compilation with the Android NDK.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33584 b3059339-0415-0410-9bf9-f77b7e298cf2
Constrain libcdparanoia's caching which badly breaks playback with
-nocache (libcdparanoia requests a huge chunk at once, then lets the
disk spin down while that is being played, leading to a pause when the
disk needs to spin back up after the big chunk is finished). Switching
to libcdio by default which does not have this ssue might be a better
long-term solution though.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33557 b3059339-0415-0410-9bf9-f77b7e298cf2
Make "Invalid seek to negative position" message more useful by
printing the actual value.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33556 b3059339-0415-0410-9bf9-f77b7e298cf2
Spelling fix.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33510 b3059339-0415-0410-9bf9-f77b7e298cf2
Simplify: remove an unnecessary loop variable.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33511 b3059339-0415-0410-9bf9-f77b7e298cf2
Add some "const".
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33512 b3059339-0415-0410-9bf9-f77b7e298cf2
Simplify NULL check.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33513 b3059339-0415-0410-9bf9-f77b7e298cf2
Avoid crash if terminating " is missing.
Part of patch by Ivan Kalvachev [ikalvachev gmail com].
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33514 b3059339-0415-0410-9bf9-f77b7e298cf2
Fix 0-termination being placed one byte too far.
Part of patch by Ivan Kalvachev [ikalvachev gmail com].
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33515 b3059339-0415-0410-9bf9-f77b7e298cf2
Ensure 0-termination even if line does not start with FILE "
Part of patch by Ivan Kalvachev [ikalvachev gmail com].
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33516 b3059339-0415-0410-9bf9-f77b7e298cf2
Only accept regular files as .bin files for .cue files.
In particular avoids trying to use directories as .bin
when e.g. we failed to extract a filename.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33517 b3059339-0415-0410-9bf9-f77b7e298cf2
Remove a duplicated open() call that could lead to a
file-descriptor leak in some cases.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33518 b3059339-0415-0410-9bf9-f77b7e298cf2
Avoid possible crash if cue filename is very short.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33519 b3059339-0415-0410-9bf9-f77b7e298cf2
Simplify by using av_strlcpy.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33520 b3059339-0415-0410-9bf9-f77b7e298cf2
In practice this should not really make a difference, but
the code is not significantly worse and it is more correct.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33435 b3059339-0415-0410-9bf9-f77b7e298cf2
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33447 b3059339-0415-0410-9bf9-f77b7e298cf2
Ensure we always pass a buffer of at least sector size to the read
function. This is never an issue with streams that have actual
sectors, as the reads will always return a multiple of sector size and
the cache is always used in blocks of sector size. However the rtp
protocol misuses this so it can just assume it always has a
sufficiently large buffer available and thus fails without this extra
hack.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33120 b3059339-0415-0410-9bf9-f77b7e298cf2
There is no reason to use manual language list splitting when an
automatic split function is already available.
Some types change from "unsigned char" to "char", but this shouldn't
cause issues since [as]lang settings are unlikely to have characters
above 127.
Add ID_DVD_TITLE_x_CHAPTERS and ID_DVD_CURRENT_TITLE to the output of
dvdnav:// -identify.
Patch by Mike Castle, dalgoda+mplayer A gmail
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32982 b3059339-0415-0410-9bf9-f77b7e298cf2
When reading from a stream fails, try one more time after a reset.
This should re-establish for example timed-out network connections.
Fixes bug #1841.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32954 b3059339-0415-0410-9bf9-f77b7e298cf2
100l, fix incorrect len when retrying read.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32957 b3059339-0415-0410-9bf9-f77b7e298cf2
Improve stream reset on read error, should now fix bug #1841 in more
cases, e.g. also with -cache.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32977 b3059339-0415-0410-9bf9-f77b7e298cf2
Add ugly hack to compensate DVDNAV's ugly hacks and fix seeking.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@33122 b3059339-0415-0410-9bf9-f77b7e298cf2