Commit 91ea30c585 ("demux_lavf: use lavf for all formats except those
listed") broke handling of files whose type libavformat couldn't
recognize at all. Fix the demux_lavf probe function to correctly
return failure in that case.
Commit 3c2cfee488 ("demux: improve -alang / -slang track choosing
logic") had a copy/paste error which left the subtitle code using
audio variables and broke initial subtitle track selection. Fix.
I actually realized soon after creating the original commit that I'd
forgotten to change the variables and went back to fix it, but then
somehow thought that it was already OK and didn't change it...
When loading automatically enabled profiles (like "[extension.avi]")
flag options were handled as on the command line; for example "fs=no"
was interpreted like "-fs" on command line, ignoring the "no" part.
Fix the parsing to treat them the same as other config file entries.
Due to a bug created back in 2006 when SimpleBlock support was added,
demux_mkv demuxed one audio packet from the initial file position
after a seek, then skipped the following ones until a video keyframe
was found. This wasn't very noticeable earlier, but it had bad effects
after the recently added -initial-audio-sync code as the extra packet
with an earlier timestamp confused timing calculations and resulted in
desync after seeking. Fix.
Commit fc66c94360 ("demux_mkv: seek: with no track-specific index
entries use any") used uint64_t for a variable that should have been
int64_t. Fix. The practical effects of this error were minor; mainly
it made the player unnecessarily read the file contents between the
previous index entry and the correct one when seeking.
If audio_block_size is 0 that is a bug (and will result in a division by 0
in one case that does not check this), thus remove all checks for it.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32623 b3059339-0415-0410-9bf9-f77b7e298cf2
[ Note: the questionable changes in svn that triggered this problem
were never included in git, and so this commit is not strictly
necessary here. It's included to reduce the differences between git
and svn demux_avi versions. ]
Fix possible division by 0 if -aid is used for AVI files.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32622 b3059339-0415-0410-9bf9-f77b7e298cf2
This makes MPlayer handle it the same way as curl, and it also is the
only method that works with http_proxy://...http://user:password@...
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32621 b3059339-0415-0410-9bf9-f77b7e298cf2
Select a stereo pixel format for window when Quadbuffer OpenGL was
selected as 3D mode.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32620 b3059339-0415-0410-9bf9-f77b7e298cf2
Make the file protocol read up to 64 KiB at once when the cache is used,
assuming that files will generally be readable with high bandwidth.
This should improve performance when playing e.g. from high-latency
network shares.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32616 b3059339-0415-0410-9bf9-f77b7e298cf2
Use fist(p)s instead of fist(p), fixes compilation with clang.
Patch by İsmail Dönmez, ismail namtrac org
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32613 b3059339-0415-0410-9bf9-f77b7e298cf2
Some indentation fixes.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32611 b3059339-0415-0410-9bf9-f77b7e298cf2
Simplify: Use early return instead of large if block.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32612 b3059339-0415-0410-9bf9-f77b7e298cf2
FFmpeg's AAC decoder is much faster than libfaad2. The only known
exception is libfaad2 compiled in fixed-point mode on systems with
slow FPUs. Now that LATM support in FFmpeg is complete, FFmpeg's AAC
decoder has a similar feature set as libfaad2. This leaves no reason
not to use FFmpeg by default.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32605 b3059339-0415-0410-9bf9-f77b7e298cf2
Playing AVI files containing B-frames with demux_lavf printed two
"decreasing pts" info messages at the start of the file. We know the
timestamps from AVI won't be valid pts, so add a demuxer field to
convey that information to the timing code and make that not even try
to use the timestamps as valid pts.
lavf demuxers are mostly better and receive more maintenance,
therefore it makes sense to prefer them in most cases. Change the
"preferred" logic from listing all formats for which lavf is preferred
to listing exceptions for which it isn't. Currently there are 3
exceptions: Matroska, FLAC and RealMedia (.rm).
Add code to enforce matching pts with video when (re)starting the
audio stream, by either cutting away the first samples or inserting
silence at the beginning. New option -noinitial-audio-sync can be used
to disable this and return to old behavior.
demuxer_get_current_chapter() accessed sh_video/sh_audio pts fields to
determine playback position. demux layer shouldn't access those and
the values used weren't quite correct anyway. Give the playback
position as a parameter to the demux layer function instead. Also
change the top-level get_current_chapter() to use get_current_time()
in the timeline case where it didn't refer to demux layer.
If the option is enabled and all audio has been buffered to the AO,
then the player will move to the next file without waiting for the
buffered audio to drain, while leaving the AO initialized. If the
playback of the next file starts quickly enough (before the AO buffer
empties) then it should continue writing audio to the same AO with no
gap in between.
At least with PCM it's possible to get an audio stream that doesn't
end at a multiple of whole sample per channel. At least ao_alsa
refuses to accept that part of input, and so EOF detection in
fill_audio_out_buffers didn't trigger until the 0.04 second sanity
check (as there "was still audio not sent to AO left"). Change the
logic to detect EOF if there's less than one sample per channel of
unsent data left.
"libavformat file format detected" wasn't a very useful message due to
the many file formats supported to libavformat. Change the message so
that for demux_lavf it says something like
"Detected file format: QuickTime/MPEG-4/Motion JPEG 2000 format (libavformat)"
(using long name from FFmpeg), and for non-lavf something like
"Detected file format: Matroska".
When file format detection failed the output only said
"Exiting... (End of file)" after "Playing <file>." (or possibly error
messages triggered by format-specific check functions in between). Add
an explicit "Failed to recognize file format." error message.
The code choosing the demuxer to use only printed an error if given an
unknown demuxer name, then continued with default demuxer selection.
Change it to abort instead. This feels like more sensible behavior.
Also there's no fallback to autodetection in the case where the
demuxer name is recognized but the demuxer fails to open the file
either.
Seeking in MPEG files with pts resets could fail completely, as it was
always done by timestamps and those of course don't unambiguously
specify a file position in such files. Add basic functionality for
byte-based seeking and playback position reporting, and decide whether
to use that functionality based on a simple heuristic (could be
improved).
When -alang / -slang was specified the numerically first matching
track (if any) was always chosen. This meant that specifying "-alang
eng" could change the track choice even if all tracks were in English,
because now the default flag of tracks was ignored. Change the logic
to take the default flag into account as a secondary sorting key.
The code also accepted prefix matches, so that "-slang g" would match
track language "ger". I think that was not intentional. Change it to
require exact matches.
The Cue entries in typical Matroska files have information for the
video track only. This caused seeks to fail when playing with
-novideo, as demux_mkv tried to use audio track index entries then.
Add a fallback case that uses any index entries without caring what
track they're for if there are no entries specific to the track we're
interested in.
Relative seeks didn't add the current position as they should. Fix.
Note that this had no effect in normal playback case even if the file
had no index, because the "accurate_seek" logic at higher level would
convert all commands to absolute seeks before calling demuxer level.
Various code referred to "mpctx->demuxer" where it should really have
referred to the one used for audio/subtitles in case those differ. Fix
by using "mpctx->d_audio->demuxer" etc instead. Disable the copying of
streams in demux_demuxers; that was a partial workaround for things
referring to the main demuxer (and it wasn't enough anyway).
This fixes, among other things, switching audio tracks within the file
specified by -audiofile.
demux_demuxers doesn't run the normal demuxer.c initialization for new
demuxers. Initialize stream_pts separately (it won't ever be changed
with the current implementation). This at least avoids other code
assuming it was set properly.
Move functions to query current playback position, percentage position
and total video length from from the demuxer layer to top level. The
functions need access to playback state that doesn't belong on the
demuxing level. Make the new functions more capable and simplify some
code that can now rely on them. This fixes some errors in displayed in
OSD and slave mode information when using timeline (ordered chapters).