Commit Graph

35 Commits

Author SHA1 Message Date
wm4 65fc530f0c Rename to "mpv"
This changes the name of this project to mpv. Most user-visible mentions
of "MPlayer" and "mplayer" are changed to "mpv". The binary name and the
default config file location are changed as well.

The new default config file location is: ~/.mpv/

Remove etc/mplayer.desktop. Apparently this was for the MPlayer GUI,
which has been removed from mplayer2 ages ago.

We don't have a logo, and the MS Windows resource files sort-of require
one, so leave etc/mplayer.ico/.xpm as-is.

Remove the debian and rpm packaging scripts. These contained outdated
dependencies and likely were more harmful than useful. (Patches which
add working and well-tested packaging are welcome.)
2012-10-12 10:14:32 +02:00
wm4 85a64b76cc ao_pulse: extend maximum settable volume beyond 100%
The old maximum is 100%. Raise it to PA_VOLUME_UI_MAX, which is about
150%. PA_VOLUME_UI_MAX is the PulseAudio recommended UI-settable
maximum volume, so it seems to be a good idea to use that.
2012-09-23 14:57:37 +02:00
wm4 425ac31a3b softvol, ao_pulse: prefer ao_pulse volume control by default
--softvol is enabled by default. For most audio outputs, this is a good
thing, as they have either their own (bad) soft volume implementation,
or control the system mixer. With ao_pulse, the situation is a bit
different: it supports per-application volume (i.e. volume control is
not really global). More importantly, ao_pulse uses a rather large audio
buffer, and changing the volume with mplayer's volume filter has a large
delay. With the native ao_pulse volume control, it's instant, because
PulseAudio's audio filtering happens at a later stage in its processing
pipeline (inaccessible for mplayer).

This means native volume control should really be allowed for ao_pulse,
while it's the reverse for other audio outputs. Make --softvol a choice
option, and add a new "auto" choice. This is default and will use PA's
volume control with ao_pulse, and mplayer's volume filter otherwise
(i.e. the old softvol behavior).
2012-09-23 14:57:01 +02:00
wm4 cafa00841f libaf: rename af_format.h to format.h
af_format.h declares some symbols which are defined in format.c. The
fact that af_format.c is a completely unrelated file is rather
confusing. Having the header and implementation file use the same base
name is more uniform. (af_format.c is the audio conversion filter, while
af_format.h and format.c are about audio formats and their properties.)

Also fix all source files which include this file.
2012-08-29 00:50:26 +02:00
wm4 bff71641f6 Merge remote-tracking branch 'origin/master' 2012-07-30 15:42:32 +02:00
wm4 f113e20794 ao_pulse: don't always print error message if PulseAudio unavailable
PulseAudio is rather high on the auto proving order (to avoid using an
emulated sound API), but it prints an annoying error message if the
PA client library can't connect to a server. On the other hand, we do
want this error message printed if the user explicitly selects the
pulse audio output driver.

Add a flag to indicate that an AO is opened due to auto probing.
ao_pulse checks that flag, and if it's set, do not print if the
initialization error is PA_ERR_CONNECTIONREFUSED, whcih I assume is
the error signalling PulseAudio unavailability. (This error happens
if no PulseAudio server is installed.)
2012-07-30 01:46:04 +02:00
Uoti Urpala de435ed56e ao_pulse: work around PulseAudio timing bugs
Work around PulseAudio bugs more effectively. In particular, this
should avoid two issues: playback never finishing at end of file /
segment due to PulseAudio always claiming there's still time before
audio playback reaches the end, and jerky playback especially after
seeking due to bogus output from PulseAudio's timing interpolation
code.

This time, I looked into the PulseAudio code itself and analyzed the
bugs causing problems. Fortunately, two of the serious ones can be
worked around in client code. Write a new get_delay() implementation
doing that, and remove some of the previous workarounds which are now
unnecessary. Also add a pa_stream_trigger() call to ensure playback of
files shorter than prebuf value starts (btw doing that by setting a
low prebuf hits yet another PulseAudio bug, even if you then write the
whole file in one call).

There are still a couple of known PulseAudio bugs that can not be
worked around in client code. Especially, bug 4 below can cause issues
when pausing.

Below is a copy of a message I sent to the pulseaudio-discuss mailing
list, describing some of the PulseAudio bugs:

==================================================

A lot of mplayer2 users with PulseAudio have experienced problems. I
investigated some of those and confirmed that they are caused by
PulseAudio. There are quite a few distinct PulseAudio bugs; some are
analyzed below. Overall, however, I wonder why there are so many fairly
obvious bugs in a widely used piece of software. Is there no
maintenance? Or do people not test it? Some of the bugs are probably
less obvious if you request low latency (though they're not specific to
higher-latency case); do people test the low-latency case only?

1. The timing interpolation functionality can return completely bogus
values for playback position and latency, especially after seeking
(mplayer2 does cork / flush / uncork, as flushing alone does not seem to
remove data already in sink). I've seen quickly repeated seeks report
over 10 second latency, when there aren't any buffers anywhere that big.
I have not investigated the exact cause. Instead I disabled
interpolation and added code to always call
pa_stream_update_timing_info(). (I assume that always waiting for this
to complete, instead of doing custom interpolation, may give bad
performance if it queries a remote server. But at least it works better
locally.)

2. Position/latency reporting is wrong at the end of a stream (after the
lack of more data triggers underflow status). As a result mplayer2 never
ends the playback of a file, as it's waiting forever for audio to finish
playing. The reason for this is that the calculations in PulseAudio add
the whole length of data in the sink to the current latency (subtract
from position), even if the sink does not contain that much data *from
this stream* in underflow conditions. I was able to work around this bug
by calculating latency from pa_timing_info data myself as follows
(ti=pa_timing_info):

    int64_t latency = pa_bytes_to_usec(ti->write_index - ti->read_index, ss);
    latency -= ti->transport_usec;
    int64_t sink_latency = ti->sink_usec;
    if (!ti->playing)
        // this part is missing from PulseAudio itself
        sink_latency -= pa_bytes_to_usec(ti->since_underrun, ss);
    if (sink_latency > 0)
        latency += sink_latency;
    if (latency < 0)
        latency = 0;

However, this still doesn't always work due to the next bug.

3. The since_underrun field in pa_timing_info is wrong if PulseAudio is
resampling the stream. As a result, the above code indicated that the
playback of a 0.1 second 8-bit mono file would take about 0.5 seconds.
This bug is in pa_sink_input_peek(). The problematic parts are:

ilength = pa_resampler_request(i->thread_info.resampler, slength);
...
if (ilength > block_size_max_sink_input)
    ilength = block_size_max_sink_input;
...
pa_memblockq_seek(i->thread_info.render_memblockq, (int64_t) slength, PA_SEEK_RELATIVE, TRUE);
...
i->thread_info.underrun_for += ilength;

This is measuring audio in two different units, bytes for
resampled-to-sink (slength) and original stream (ilength). However, the
block_size_max_sink_input test only adjusts ilength; after that the
values may be out of sync. Thus underrun_for is incremented by less than
it should be to match the slength value used in pa_memblockq_seek.

4. Stream rewind functionality breaks if the sink is suspended (while
the stream is corked). Thus, if you pause for more than 5 seconds
without other audio playing, things are broken after that. The most
obvious symptom is that playback can continue for a significant time
after corking. This is caused by sink_input and sink getting out of
sync. First, after uncorking a stream on a suspended sink,
pa_sink_input_request_rewind() is called while the sink is still in
suspended state. This sets sink_input->thread_info.rewrite_nbytes to -1
and calls pa_sink_request_rewind(). However, the sink ignores rewind
requests while suspended. Thus this particular rewind does nothing. The
problem is that rewrite_nbytes is left at -1. Further calls to
pa_sink_input_request_rewind() do nothing because "nbytes =
PA_MAX(i->thread_info.rewrite_nbytes, nbytes);" sets nbytes to -1, and
the call to pa_sink_request_rewind() is under "if (nbytes != (size_t)
-1) {". Usually, after a sink responds to a rewind request,
rewrite_bytes is reset in pa_sink_input_process_rewind(), but this
doesn't happen if the sink ever ignores one request. This broken state
can be resolved if pa_sink_input_process_rewind() is called due to a
rewind triggered by _another_ stream.

There were more bugs, but I'll leave those for later.
2012-07-29 22:03:21 +03:00
Uoti Urpala bb90802717 ao_pulse: fix specifying host/sink after 4fed8ad197
Commit 4fed8ad197 ("ao_pulse: convert to new AO API") failed to change
the variable name used on one line in suboption handling. This caused
a crash due to NULL dereference if you tried to specify any suboptions
for the AO (as in "--ao=pulse:foo"). Fix.
2012-05-03 23:45:57 +03:00
wm4 fc8db0ca88 ao_pulse: support native mute control 2012-04-11 03:56:30 +03:00
Uoti Urpala 3a01606dc0 libao2: change control() types to enum, remove unused ones
Change the audio driver control() command argument from "int" to "enum
aocontrol". Remove unused control types (SET_DEVICE, GET_DEVICE,
QUERY_FORMAT, SET_PLUGIN_DRIVER, SET_PLUGIN_LIST). The QUERY_FORMAT
one looks like there's a possibility such functionality could be
useful in the future, but as ao_oss was the only driver to have an
actual implementation of it, the current code wasn't worth keeping.
2012-04-08 16:35:09 +03:00
Uoti Urpala 81de9a52d0 ao_pulse: add hacks to work around seek problems
pa_stream_flush() seems to work pretty badly in general. The visible
symptoms included at least old audio continuing for a significant time
after the call, and bogus latency reporting causing temporary video
freezes after a seek. Add some hacks to work around these problems.
The result seems to work most of the time on my machine at least...
2012-03-26 03:55:31 +03:00
Uoti Urpala a0de4bc500 ao_pulse, core: make pulse thread wake up core for more data
For ao_pulse, the current latency is not a good indicator of how soon
the AO requires new data to avoid underflow. Add an internal pipe that
can be used to wake up the input loop from select(), and make the
pulseaudio main loop (which runs in a separate thread) use this
mechanism when pulse requests more data. The wakeup signal currently
contains no information about the reason for the wakup, but audio
buffers are always filled when the event loop wakes up.

Also, request a latency of 1 second from the Pulseaudio server. The
default is normally significantly higher. We don't need low latency,
while higher latency helps prevent underflows reduces need for
wakeups.
2012-03-26 03:55:31 +03:00
Uoti Urpala 4fed8ad197 ao_pulse: convert to new AO API 2012-03-26 03:55:31 +03:00
reimar cb7a098c81 Add a missing const, fixes a compiler warning.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30062 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-12-18 20:27:35 +00:00
reimar b7fa147ee8 Allow pulseaudio to restore the previous volume on init instead of forcing to
full volume.
The old behaviour can be restored by using -volume 100.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30061 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-12-18 20:26:28 +00:00
reimar e858d98f4f Get rid of global volume variable, it is only used for temporary values.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30060 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-12-18 20:22:39 +00:00
reimar fe9c8d60b4 Disable pause-hack from PulseAudio 0.9.15 on, it should be fixed.
Patch Lennart Poettering [lennart poettering net] with documentation
update by me.


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29160 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-04-09 20:20:00 +00:00
reimar 33645075f1 Split oversized of "argument" onto a separate line.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29159 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-04-09 20:10:35 +00:00
reimar d1c4d6c7ef Also lock the mainloop when doing adjusting the volume for PulseAudio.
Patch by Lennart Poettering [lennart poettering net]


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29158 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-04-09 20:07:26 +00:00
reimar a7e4ab04d7 Make sure waitop always unlocks the mainloop even if the operation could not
be created.
Patch by Lennart Poettering [lennart poettering net]


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29157 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-04-09 20:04:24 +00:00
reimar d6bf2e318e Make ao_info_t structs const.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28858 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-03-06 19:43:12 +00:00
reimar 0927ebeef7 Work around a PulseAudio bug that causes MPlayer to hang after unpausing.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@28668 b3059339-0415-0410-9bf9-f77b7e298cf2
2009-02-19 14:00:33 +00:00
diego b10c35e0ed Use standard license headers with standard formatting.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26775 b3059339-0415-0410-9bf9-f77b7e298cf2
2008-05-14 18:02:27 +00:00
reimar c8b5921d06 Avoid dependency on newer pulseaudio version.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26681 b3059339-0415-0410-9bf9-f77b7e298cf2
2008-05-07 22:46:50 +00:00
reimar 71247a97b3 Add support for 32 bit format to ao_pulse.
Based on patch by James Warden [warjamy yahoo com]


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26635 b3059339-0415-0410-9bf9-f77b7e298cf2
2008-05-01 16:51:25 +00:00
reimar e1e2527cd4 Make ao_pulse fall back to s16le format instead of just failing.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@26634 b3059339-0415-0410-9bf9-f77b7e298cf2
2008-05-01 16:47:54 +00:00
reimar 8f186a3535 pa_stream_write reportedly needs locking of the main loop
(could not find official documentation on this subject...)


git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25414 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-12-15 17:10:06 +00:00
reimar 65792a201f Fix indentation
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25413 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-12-15 17:07:40 +00:00
reimar 8778005565 Remove pointless pa_stream_trigger call
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25412 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-12-15 17:06:59 +00:00
reimar fd77e65860 Documentation for waitop function
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@25411 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-12-15 16:58:25 +00:00
reimar 11e44a3936 Remove idiotic check that would always be false
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24951 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-11-03 10:46:15 +00:00
reimar 2de070ff95 Change parsing to allow host == NULL and sink != NULL
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24949 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-11-03 10:42:23 +00:00
reimar f4f7560a1e Simplify argument "parsing"
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24948 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-11-03 10:37:22 +00:00
reimar a44c9616a8 Make sink variable local, it is only used in one place
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24947 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-11-03 10:35:03 +00:00
reimar 4d8266c739 Add missing ao_pulse.c
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@24810 b3059339-0415-0410-9bf9-f77b7e298cf2
2007-10-18 13:36:59 +00:00