summaryrefslogtreecommitdiffstats
path: root/libao2
Commit message (Collapse)AuthorAgeFilesLines
* Remove compile time/runtime CPU detection, and drop some platformswm42012-07-302-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | mplayer had three ways of enabling CPU specific assembler routines: a) Enable them at compile time; crash if the CPU can't handle it. b) Enable them at compile time, but let the configure script detect your CPU. Your binary will only crash if you try to run it on a different system that has less features than yours. This was the default, I think. c) Runtime detection. The implementation of b) and c) suck. a) is not really feasible (it sucks for users). Remove all code related to this, and use libav's CPU detection instead. Now the configure script will always enable CPU specific features, and disable them at runtime if libav reports them not as available. One implication is that now the compiler is always expected to handle SSE (etc.) inline assembly at runtime, unless it's explicitly disabled. Only checks for x86 CPU specific features are kept, the rest is either unused or barely used. Get rid of all the dump -mpcu, -march etc. flags. Trust the compiler to select decent settings. Get rid of support for the following operating systems: - BSD/OS (some ancient BSD fork) - QNX (don't care) - BeOS (dead, Haiku support is still welcome) - AIX (don't care) - HP-UX (don't care) - OS/2 (dead, actual support has been removed a while ago) Remove the configure code for detecting the endianness. Instead, use the standard header <endian.h>, which can be used if _GNU_SOURCE or _BSD_SOURCE is defined. (Maybe these changes should have been in a separate commit.) Since this is a quite violent code removal orgy, and I'm testing only on x86 32 bit Linux, expect regressions.
* libvo, libao: remove useless video and audio output driverswm42012-07-287-2513/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some of these have only limited use, and some of these have no use at all. Remove them. They make maintainance harder and nobody needs them. It's possible that many of the removed drivers were very useful a dozen of years ago, but now it's 2012. Note that some of these could be added back, in case they were more useful than I thought. But right now, they are just a burden. Reason for removal for each module: vo_3dfx, vo_dfbmga, vo_dxr3, vo_ivtv, vo_mga, vo_s3fb, vo_tdfxfb, vo_xmga, vo_tdfx_vid: All of these are for very specific and outdated hardware. Some of them require non-standard kernel drivers or do direct HW access. vo_dga: the most crappy and ancient way to get fast output on X. vo_aa: there's vo_caca for the same purpose. vo_ggi: this never lived, and is entirely useless. vo_mpegpes: for DVB cards, I can't test this and it's crappy. vo_fbdev, vo_fbdev2: there's vo_directfb2 vo_bl: what is this even? But it's neither important, nor alive. vo_svga, vo_vesa: you want to use this? You can't be serious. vo_wii: I can't test this, and who the hell uses this? vo_xvr100: some Sun thing. vo_xover: only useful in connection with xvr100. ao_nas: still alive, but I doubt it has any meaning today. ao_sun: Sun. ao_win32: use ao_dsound or ao_portaudio instead. ao_ivtv: removed along vo_ivtv. Also get rid of anything SDL related. SDL 1.x is total crap for video output, and will be replaced with SDL 2.x soon (perhaps), so if you want to use SDL, write output drivers for SDL 2.x. Additionally, I accidentally damaged Sun support, which made me completely remove Sun/Solaris support. Nobody cares about this anyway. Some left overs from previous commits removing modules were cleaned up.
* Merge remote-tracking branch 'origin/master'wm42012-05-206-935/+435
|\
| * ao_arts, ao_esd: remove these AOsUoti Urpala2012-05-063-631/+0
| | | | | | | | Delete ao_arts and ao_esd. Both have been deprecated upstream.
| * build: remove IRIX supportUoti Urpala2012-05-062-304/+0
| |
| * ao_portaudio: add new PortAudio audio output driverwm42012-05-062-0/+435
| | | | | | | | | | | | | | | | | | | | This AO has potential to be useful on platforms other than Linux. On Windows in particular, PortAudio can make use of newer/better audio APIs like WASAPI, instead of DirectSound. As an implementation choice, the PortAudio callback API was used. The blocking API might be a better match for mplayer's requirements, but caused severe problems on Linux/ALSA (possibly PortAudio bugs).
| * ao_pulse: fix specifying host/sink after 4fed8ad197Uoti Urpala2012-05-031-1/+1
| | | | | | | | | | | | | | 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.
* | Merge remote-tracking branch 'origin/master'wm42012-04-287-106/+67
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: command.c libao2/ao_alsa.c libao2/ao_dsound.c libao2/ao_pulse.c libao2/audio_out.h mixer.c mixer.h mplayer.c Replace my mixer changes with uau's implementation, which is based on my code.
| * ao_coreaudio: fix partial volume controlwm42012-04-111-1/+5
| | | | | | | | | | | | | | If digital pass-through is used, this supported setting the volume (just mute, actually), but not getting the volume. This will probably lead to a stuck mute state in the mplayer frontend. Make the code respond to volume queries even if digital pass-through is used.
| * ao_pulse: support native mute controlwm42012-04-111-29/+55
| |
| * ao_alsa: support native mute controlwm42012-04-111-25/+46
| |
| * mixer: support native audio driver muteUoti Urpala2012-04-111-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | Make mixer support setting the mute attribute at audio driver level, if one exists separately from volume. As of this commit, no libao2 driver exposes such an attribute yet; that will be added in later commits. Since the mute status can now be set externally, it's no longer completely obvious when the player should automatically disable mute when uninitializing an audio output. The implemented behavior is to turn mute off at uninitialization if we turned it on and haven't noticed it turn off (by external means) since.
| * audio: restore volume setting after AO reinit if neededUoti Urpala2012-04-117-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MPlayer volume control was originally implemented with the assumption that it controls a system-wide volume setting which keeps its value even if a process closes and reopens the audio device. However, this is not actually true for --softvol mode or some audio output APIs that only consider volume as a per-client setting for software mixing. This could have annoying results, as the volume would be reset to a default value if the AO was closed and reopened, for example whem moving to a new file or crossing ordered chapter boundaries. Add code to set the previous volume again after audio reinitialization if the current audio chain is known to behave this way (softvol active or the AO driver is known to not keep persistent volume externally). This also avoids an inconsistency with the mute flag. The frontend assumed the mute status is persistent across file changes, but it could be similarly lost. The audio drivers that are assumed to not keep persistent volume are: coreaudio, dsound, esd, nas, openal, sdl. None of these changes have been tested. I'm guessing that ESD and NAS do per-connection non-persistent volume settings. Partially based on code by wm4.
| * libao2: change control() types to enum, remove unused onesUoti Urpala2012-04-087-58/+27
| | | | | | | | | | | | | | | | | | 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.
* | ao_openal: fix crash when no device parameter is passedwm42012-04-251-1/+1
| |
* | Merge remote-tracking branch 'origin/master'wm42012-04-132-608/+0
|\| | | | | | | | | Conflicts: libvo/vo_kva.c
| * ao_alsa: use "Master" mixer channel instead of "PCM" by defaultwm42012-04-081-1/+1
| | | | | | | | | | | | | | Do this, because the "Master" channel normally provides proper mute control. The old default can be forced with: --mixer-channel=PCM
| * build: remove OS/2 supportUoti Urpala2012-04-062-608/+0
| |
* | Merge remote-tracking branch 'origin/master'wm42012-04-014-239/+342
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: bstr.c bstr.h etc/input.conf input/input.c input/input.h libao2/ao_pulse.c libmpcodecs/vf_ass.c libmpcodecs/vf_vo.c libvo/gl_common.c libvo/x11_common.c mixer.c mixer.h mplayer.c
| * ao_pulse: add hacks to work around seek problemsUoti Urpala2012-03-261-1/+19
| | | | | | | | | | | | | | | | 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...
| * ao_pulse, core: make pulse thread wake up core for more dataUoti Urpala2012-03-263-5/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
| * ao_pulse: convert to new AO APIUoti Urpala2012-03-261-222/+282
| |
| * options: move mixer.h options to structUoti Urpala2012-03-202-0/+5
| |
* | ao_openal: allow setting the OpenAL sub-devicewm42012-03-171-2/+28
| | | | | | | | | | | | | | | | Now "-ao openal:device=<subdevice>" will pass <subdevice> as device to OpenAL. This allows selecting both the OpenAL backend (OS-level audio API) and the physical output device. The available devices can be listed with "-ao openal:device=help".
* | ao_dsound: fix volume controlswm42012-03-171-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | The recent changes in mixer.c require the AO to return a volume of exactly 0 when audio has been muted. Rather than adding just another special case to mixer.c, fix ao_dsound.c to return previously set volumes exactly. Because DirectSound volume control is not connected with the system mixer, which could change the volume without mplayer knowing, reading the volume back from DirectSound is pointless. Also, the code tried to calculate log10(0). Clip the volume to 1, which results in -10000, DirectSound's definition of silence.
* | ao_dsound: don't repeat parts of the audio buffer when playback endswm42012-03-171-24/+34
| | | | | | | | | | | | | | | | | | When layback of a file ends, the audio output doesn't receive new audio data, but the rest of the data must be played properly. ao_dsound.c doesn't handle this properly: DirectSound will continue to play the ringbuffer, even if mplayer doesn't write any data. There's no explicit way to prevent such a buffer underrun. Try to detect it and stop playback.
* | Merge remote-tracking branch 'origin/master' into my_masterwm42012-03-161-2/+4
|\| | | | | | | | | | | | | | | Conflicts: command.c mp_core.h mplayer.c screenshot.c
| * cleanup: Silence compilation warnings on MinGW-w64wm42012-03-011-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* | Merge remote-tracking branch 'origin/master' into my_masterwm42012-03-053-408/+0
|\| | | | | | | | | | | Conflicts: mplayer.c screenshot.c
| * configure, ao_alsa: drop support for obsolete ALSA versionsUoti Urpala2012-02-273-408/+0
| | | | | | | | | | Drop compatibility code for ALSA versions prior to 1.0.9. Change the configure check to use pkg-config only.
* | Merge branch 'softvol' into my_masterwm42012-01-189-45/+109
|\ \ | |/ |/|
| * ao_coreaudio: fix partial volume controlwm42012-01-181-1/+5
| | | | | | | | | | | | | | | | | | | | If digital pass-through is used, this supported setting the volume (just mute, actually), but not getting the volume. This will probably lead to a stuck mute state in the mplayer frontend. Make the code respond to volume queries even if digital pass-through is used. Ideally, ao_coreaudio should implement full mute control, but I can't even test on OSX.
| * ao_pulse: add mute controlwm42012-01-181-18/+37
| |
| * ao_alsa: add mute controlwm42012-01-181-23/+43
| |
| * ao_alsa: use "Master" mixer channel instead of "PCM" by defaultwm42012-01-181-1/+1
| | | | | | | | | | | | | | Do this, because the "Master" channel normally provides proper mute control. The old default can be forced with: --mixer-channel=PCM
| * mixer, libao: add proper mute controlwm42012-01-181-2/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The mixer frontend code can now make use of a proper system mixer mute toggle, if the audio output driver supports it. The consequence is that, if support is available, mplayer will no longer temporarily set the system volume to 0 if mute is enabled. Generally, the code now deals with the following combinations of available AO features: - software volume control forced by user (--softvol / soft_vol flag) => if enabled, never touch the "hardware" controls - "hardware"/driver volume control available (whether AOCONTROL_GET/SET_VOLUME works) => if not available, enable volume controls by enabling softvol - "hardware"/driver mute control (AOCONTROL_GET/SET_MUTE) => if not available, emulate by setting volume to 0 - whether the volume+mute controls are kept or not when the AO is closed (indicated by ao->no_persistent_volume) => if not persistent, restore the volume/mute next time the AO is opened
| * libao2: try to identify some audio outputs that have persistent volumewm42012-01-185-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | The mplayer frontend (specifically, mixer.c) needs to know this. If the audio output doesn't remember the volume across reinitialization, the frontend will restore the volume settings. There is also the assumption that the volume setting isn't global in this case (i.e. changing it won't change the volume of other applications or annoy the user otherwise). None of these changes have been tested. I'm guessing that ESD and NAS do per-connection non-persistent volume settings.
| * ao_coreaudio: signal that volume controls are not persistentwm42012-01-181-0/+2
| | | | | | | | | | This will make the mplayer frontend restore the volume on its own when the audio device is reinitialized.
| * mixer: restore volume with audio output drivers without persistent volumewm42012-01-181-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some audio outputs don't provide access to a system-wide mixer control, and do per-application audio mixing. Further, some of these forget the volume as soon as the audio device is closed. This can be annoying, because mplayer will "forget" the volume when playing a new file or when crossing ordered chapter boundaries. Support restoring the volume on audio reinitialization if an audio output driver knowingly behaves this way. (This doesn't change that mplayer never writes any settings into the config file, including volume settings.) This commit doesn't yet change any actual output driver to use this code. Hopefully make some logic in the volume restore code a bit more robust.
* | audio: change default preference order of AO driverswm42012-01-161-8/+8
|/ | | | | | | | | | | | | | | Now PulseAudio is preferred over ALSA, which in turn is preferred over OSS. This should give best results on all systems. On systems with PulseAudio, we will always use it natively, rather than through the suboptimal ALSA emulation (which the default ALSA output is normally redirected to when PulseAudio is active; ALSA hardware devices will not be, but to use those the user must set AO explicitly in any case, so changing the defaults makes no difference). The fallback from ao_pulse to ao_alsa causes no noticeable delay on systems without PulseAudio. On systems with ALSA, we won't attempt to use OSS anymore. Also, move OpenAL above SDL. OpenAL should generally work better than SDL.
* ao_coreaudio: fix crash when using mute with S/PDIF outputreimar2011-11-251-1/+4
| | | | | | | | | | RenderCallbackSPDIF might call read_buffer with NULL data. The purpose is to drain data from the buffer when the output is muted. Add a check to call av_fifo_drain() in this case. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34241 b3059339-0415-0410-9bf9-f77b7e298cf2 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@34242 b3059339-0415-0410-9bf9-f77b7e298cf2
* ao_coreaudio: fix S/PDIF output on OS X 10.7Zongyao Qu2011-11-251-37/+50
|
* ao_pcm: fix pointless message due to uninitialize variableUoti Urpala2011-08-111-1/+1
| | | | | | The variable corresponding to the "fast" suboption of ao_pcm was uninitialized. Fix. The only effect was possibly printing a warning about the suboption being deprecated even if it wasn't used.
* audio: export audio pts to AO driversUoti Urpala2011-07-314-11/+12
| | | | | Currently the pts value is not directly used by any AO. Will be used by encoding code.
* audio: move ready-for-ao data buffer from decoder to AOUoti Urpala2011-07-022-0/+10
| | | | | | | | | | | | Move the buffer storing audio data ready to be fed to the audio output driver from the audio decoder object to the AO object. This will help encoding code deal with end of input, and may also be useful to improve other general gapless audio behavior (as AOs which do not accept chunks smaller than a certain size may keep them in the buffer while the decoder changes). Less data may be dropped now when changing audio filters or switching timeline parts.