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

35463 Commits

Author SHA1 Message Date
wm4
a6706c41d8 video: eliminate frametime variable 2013-07-11 19:21:45 +02:00
wm4
6f6632b8dd ad_lavc: re-unsimplify, fix libavcodec API usage
It turns out that some code that was removed earlier was still needed.
avcodec_decode_audio4() can decode packets "partially". In that case,
you have to "slice" the packet and call the decode function again.

Codecs which need this are obscure and in low numbers. One sample that
needs it is here:

   rsync://fate-suite.ffmpeg.org/fate-suite/lossless-audio/luckynight-partial.shn

(This one decodes in rather small increments.)

The new code is much simpler than what has been removed earlier,
though. The fact that we own the packet returned by the demuxer helps
a lot.

Not sure what should happen if avcodec_decode_audio4() returns 0.
Currently, we throw away the packet in this case. We don't want to be
stuck in an endless loop (could happen if the decoder produces no
output either).
2013-07-11 19:20:41 +02:00
wm4
06281848de demux: refactor 2013-07-11 19:20:25 +02:00
wm4
6ede485e4b core: don't access demux_stream outside of demux.c, make it private
Generally remove all accesses to demux_stream from all the code, except
inside of demux.c. Make it completely private to demux.c.

This simplifies the code because it removes an extra concept. In demux.c
it is reduced to a simple packet queue. There were other uses of
demux_stream, but they were removed or are removed with this commit.

Remove the extra "ds" argument to demux fill_buffer callback. It was
used by demux_avi and the TV pseudo-demuxer only.

Remove usage of d_video->last_pts from the no-correct-pts code. This
field contains the last PTS retrieved after a packet that is not NOPTS.
We can easily get this value manually because we read the packets
ourselves. Reuse sh_video->last_pts to store the packet PTS values. It
was used only by the correct-pts code before, and like d_video->last_pts,
it is reset on seek. The behavior should be exactly the same.
2013-07-11 19:17:51 +02:00
wm4
fa74be880c tv: add hack in preparation of demux_stream removal
Currently, all demuxer fill_buffer functions have a demux_stream
parameter. We want to remove that, but the TV code still depends on
it. Add a hack to remove that dependency.

The problem with the TV code is that reading video and audio frames
blocks, so in order to avoid a deadlock, you should read either of
them only if the decoder actually requests new data.
2013-07-11 19:17:05 +02:00
wm4
11383696db demux_lavf: different hack for DVD sub autoselection hack
For now, we want to get rid of the demux->sub access, because this
field will become private to demux.c in a later commit. So replace the
current hack with another hack.

The need for the hack will be removed sooner or later. (Instead of
autoselecting a specific stream, all new streams will be enabled by
default, so that no packets can get lost. The frontend will then be
responsible to deselect unwanted streams.)
2013-07-11 19:16:37 +02:00
wm4
29cc249173 mplayer: invert negated boolean variable
Boolean variables shouldn't carry a negated meaning, so rename
non_interleaved to interleaved.
2013-07-11 19:16:25 +02:00
wm4
23e303859a mplayer: fix incorrect audio sync after format changes
This is not directly related to the handling of format changes itself,
but playing audio normally after the change. This was broken: the output
byte rate was not recalculated, so audio-video sync was simply broken.
Fix this by calculating the byte rate on the fly, instead of storing it
in sh_audio.

Format changes are relatively common (switches between stereo and 5.1
in TV recordings), so this fixes a somewhat critical bug.
2013-07-11 19:15:09 +02:00
wm4
7a4f9cc4d2 ad_spdif: better PTS sync
pts_bytes can't just be changed at the end. It must be offset to the pts
value, which is reset with each packet read from the demuxer. Make sure
the pts_byte field is always reset after receiving a new PTS, i.e.
increment it after actually writing to the output buffer.

Flush the AVFormatContext's write buffer, because otherwise the audio
PTS will jump around too much: the calculation doesn't use the exact
output buffer size if there's still data in the avio buffer.
2013-07-11 19:14:30 +02:00
wm4
995fe05254 mplayer: remove "old" audio PTS calculation code
Removing this code doesn't change anything. All remaining audio decoders
are well-behaved enough to not overwrite sh_audio->pts if they don't
know the PTS. And if they don't know the PTS, the d_audio->last_pts
field can't contain any usable value either, because both fields contain
theame value: the last known valid PTS found in an audio packet.
2013-07-11 19:13:44 +02:00
wm4
8a3615f2d8 mplayer: don't set bogus video pts after seek reset
As the comment n the removed code says, this was once needed for
something subtitle related. This code has been cleaned up long ago,
so at least the original reason for it is gone.
2013-07-11 19:13:22 +02:00
wm4
a522483629 demux: remove facility for partial packet reads
Partial packet reads were needed because the video/audio parsers were
working on top of them. So it could happen that a parser read a part of
a packet, and returned that to the decoder. With libavformat/libavcodec,
packets are already parsed, and everything is much simpler.

Most of the simplifications in ad_spdif could have been done earlier.
Remove some other stuff as well, like the questionable slave mode start
time reporting (could be replaced by proper code, but we don't bother).
Remove the unused skip_audio_frame() functionality as well (it was used
by old demuxers). Some functions become private to demux.c, like
demux_fill_buffer(). Introduce new packet read functions, which have
simpler semantics. Packets returned from them are owned by the caller,
and all packets in the demux.c packet queue are considered unread.
Remove special code that dropped subtitle packets with size 0. This
used to be needed because it caused special cases in the old code.
2013-07-11 19:10:33 +02:00
wm4
07c5327fa0 core: remove demux_mpg subtitle PTS hack
This code used to be part of the demux_mpg and vobsub specific code
path. Then (just recently) the different code paths for subtitles were
merged, so this code became active even for demux_lavf and demux_mkv.
As far as I can tell, this code won't help much, and at least sd_lavc
(which will be used for DVD subs and other potentially weird things) can
deal with NOPTS values.
2013-07-10 02:09:10 +02:00
wm4
5ec611e7ba core: simplify some no-correct-pts code
Remove the special handling for mng/mkv. These don't profit at all from
no-correct-pts mode, and even removing the mkv specific code makes mkv
work better (wow!).

Don't check for (int)fps == 1000. I don't know where this value comes
from. Maybe it was once a special value which triggered certain
behavior, but the code for that must have gone away. The only way to
trigger this value would be by coincidence if two frames are 1 ms apart.

Otherwise, the behavior should be exactly the same, except for some
removed messages.
2013-07-10 02:07:47 +02:00
wm4
186f6021b1 core: move code from demux/video.c to mplayer.c
Although I don't like putting even more crap into mplayer.c, this is a
bit better, especially with coming cleanups in mind.
2013-07-10 02:07:26 +02:00
wm4
052d4ddbbb ad_lavc: simplify
We don't need to deal with partial packet reads, manually using an audio
parser, or having to call the libavcodec decoder multiple times per
packet.

Actually, I'm not sure about the last point. ffplay still does this, but
the ffmpeg demuxing.c example doesn't.
2013-07-10 02:06:49 +02:00
wm4
89252631bd ms_hdr: remove unused definitions 2013-07-10 02:00:47 +02:00
wm4
b096269af5 demux: remove ds_read_packet() 2013-07-10 02:00:46 +02:00
wm4
9200538b39 audio: remove decoder input buffer
This was unused.
2013-07-10 02:00:46 +02:00
wm4
32ad313844 demux: remove some more minor unused things 2013-07-10 02:00:46 +02:00
wm4
9bb7935ce1 options: remove --ignore-start
This was used only with demux_avi.
2013-07-08 21:59:44 +02:00
wm4
31f685040b Merge branch 'master' into remove_old_demuxers
Conflicts:
	DOCS/man/en/changes.rst
	DOCS/man/en/options.rst
2013-07-08 21:55:44 +02:00
wm4
7a71a2cc48 configure: fix oversight in log message 2013-07-08 21:29:01 +02:00
wm4
c460258f5a command: add screenshot_to_file command 2013-07-08 20:37:11 +02:00
wm4
0bb41524f0 input: actually copy sub commands
This was missing from the previous commit. It worked by luck, because
the sub-commands weren't freed either (as long as the original command
was around), but this is proper.

Also, set the original string for command lists (needed for input-test
only).
2013-07-08 20:37:11 +02:00
Stefano Pigozzi
846f46ec1d cache: fix compilation without posix timers
This is a regression caused by 854303a. This commit removed the include of
`sys/time.h` which was included in `cache.c` through a chain of recurvive
includes.
2013-07-08 20:04:07 +02:00
wm4
15a5422dd2 input: allow binding multiple commands to a key
Separate the commands with ';'.
2013-07-08 19:28:52 +02:00
wm4
09250d9921 configure: make zlib non-optional
This is needed by demux_mkv to decode files with compressed tracks.

Requested by nikoli.
2013-07-08 19:28:11 +02:00
Martin Herkt
062b22b7cb Merge remote-tracking branch 'origin/low_quality_intel_crap'
Conflicts:
	video/out/gl_video_shaders.glsl
2013-07-08 18:07:54 +02:00
Martin Herkt
09d2dd7c3a manpage: proofread and fix formatting 2013-07-08 18:02:46 +02:00
Martin Herkt
1a8ab1d6ad stream/tv: remove unused dshow-specific options 2013-07-08 18:02:46 +02:00
Martin Herkt
c7f631e2c0 sub: Do not use deprecated “Sans” fontconfig alias 2013-07-08 18:02:46 +02:00
wm4
f2ad12a819 stream_radio: fix build
This was accidentally broken with 37c5c11 and has been nroken for
5 months.

Does anyone (want to) use this at all?
2013-07-08 03:19:46 +02:00
wm4
49bf0fb9df configure: fix previous commit
This doesn't help if -pthread is omitted. (Apparently, glibc 2.17, on
which I tested the previous commit, doesn't require -lpthread in order
to use pthreads either.)
2013-07-08 02:24:42 +02:00
wm4
bfe0207a7a configure: link with -lrt
In order to use clock_gettime() (which we need for use with
pthread_cond_timedwait()), most glibc versions need to link with -lrt.
2013-07-08 01:53:59 +02:00
wm4
f630ee1597 Fix building with --disable-libass
Obscure corner case, but in theory we support this.
2013-07-08 01:40:13 +02:00
wm4
73c76de91e demux: simplify demux_open() calls
The demux_open as well as demux_open_withparams calls don't use the
stream selection parameters anymore, so remove them everywhere.
Completes the previous commit.
2013-07-08 01:37:30 +02:00
wm4
05ae5afd62 demux: remove separate arrays for audio/video/sub streams, simplify
These separate arrays were used by the old demuxers and are not needed
anymore. We can simplify track switching as well.

One interesting thing is that stream/tv.c (which is a demuxer) won't
respect --no-audio anymore. It will probably work as expected, but it
will still open an audio device etc. - this is because track selection
is now always done with the runtime track switching mechanism. Maybe
the TV code could be updated to do proper runtime switching, but I
can't test this stuff.
2013-07-08 01:36:02 +02:00
wm4
50808bab8d demux: merge functions 2013-07-08 01:02:45 +02:00
wm4
8a46d4c49f demux: remove unused function 2013-07-08 00:50:59 +02:00
wm4
90813f3402 demux: remove video_read_properties 2013-07-08 00:39:29 +02:00
wm4
c4f33d784a demux: remove some old stream header functions 2013-07-08 00:35:04 +02:00
wm4
aac5d758c5 demux: remove audio parser
The audio parser was needed only by the "old" demuxers, and
demux_rawaudio. All other demuxers output already parsed packets.

demux_rawaudio is usually for raw audio, so using a parser with it
doesn't usually make sense. But you can also force it to read
compressed formats with fixed packet sizes, in which case the parser
would have been used. This use case is probably broken now, but you
will be able to do the same thing with libavformat demuxers.
2013-07-08 00:13:53 +02:00
wm4
af0c41e162 Remove old demuxers
Delete demux_avi, demux_asf, demux_mpg, demux_ts. libavformat does
better than them (except in rare corner cases), and the demuxers have
a bad influence on the rest of the code. Often they don't output
proper packets, and require additional audio and video parsing. Most
work only in --no-correct-pts mode.

Remove them to facilitate further cleanups.
2013-07-07 23:54:11 +02:00
wm4
8781e5a55c stream: unbreak streams with large sector sizes (stream_cdda)
Commit 7b16d4b changed some stream implementations to check the buffer
size passed to them. This made stream_cdda stop working, because the
default buffer size is smaller than the CDIO frame size. So pass the
sector size instead of the (arbitrary) default buffer size.
2013-07-07 21:58:48 +02:00
wm4
659a314a19 osdep: remove unused mmap compatibility hacks
Not sure how this worked. Only af_export.c and tvi_v4l2.c were
using mmap, but they didn't include osdep/mmap.h or mmap_anon.h. In
any case, we trust that the target system is sufficiently POSIX
compliant if mmap is actually defined (as checked by configure).
2013-07-07 21:44:37 +02:00
wm4
74b6d8f306 configure: simplify arch macros 2013-07-07 21:37:31 +02:00
wm4
fb1e2425ed configure: prune some more crap
All of the removed lines are hopefully useless and didn't do anything.
2013-07-07 21:29:14 +02:00
wm4
441b684fc8 stream: don't treat position 0 specially
Seeking to position 0 meant to try reconnecting with some streams,
actually just the internal http implementation. This has been removed,
so we don't need the special handling anymore.

This means we don't have to be stuck in a retry loop if the stream
doesn't even support reconnect.
2013-07-07 21:10:44 +02:00
wm4
4caa3356b2 Remove some leftovers from network removal
stream_vstream.c in particular was actually dependent on the network
code, and didn't compile anymore.

Cleanup the protocol list in mpv.rst, and add some missing ones
supported by libavformat to stream_lavf.c.
2013-07-07 21:10:44 +02:00