aboutsummaryrefslogtreecommitdiffhomepage
path: root/audio
Commit message (Collapse)AuthorAge
* af_hrtf: Fix out-of-range read.Gravatar reimar2014-12-06
| | | | | | | Based on patch by Yuriy Kaminskiy [yumkam gmail]. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@37330 b3059339-0415-0410-9bf9-f77b7e298cf2 Signed-off-by: wm4 <wm4@nowhere>
* ao_alsa: minor simplificationGravatar wm42014-12-05
| | | | | | | | Whether we print it as warning or error doesn't really matter; we continue anyway. (I don't actually know what the implications of running in non-blocking mode are; for what's it worth, when I tested with explicitly changing to non-blocking, it seemed to work fine anyway, so don't change that part.)
* ao_alsa: hackfix mono playbackGravatar wm42014-12-05
| | | | | | ALSA returns "FL" as channel layout when trying to play mono. mpv and libavresample don't like this; in particular, using libavresample to convert stereo to "FL" fails.
* coreaudio: don't output too many channel descriptionsGravatar Stefano Pigozzi2014-12-05
| | | | for #1279 and #1249
* coreaudio: add missing \n in log lineGravatar Stefano Pigozzi2014-12-05
|
* coreaudio: don't print layout a second timeGravatar Stefano Pigozzi2014-12-05
| | | | For #1279
* ao_alsa: simplify, remove no-block suboptionGravatar wm42014-12-05
| | | | | | | | | | | If no-block was given, the device would be opened with SND_PCM_NOBLOCK. Also, after opening, blocking mode was unconditionally enabled anyway with snd_pcm_nonblock(). Further, if opening with SND_PCM_NOBLOCK failed, opening was retried without this flag. This doesn't make any sense to me, and I've never heard of someone using this suboption. I suspect it has to do with ancient ALSA bugs or API caveats. Remove it and simplify the code.
* ao_alsa: try to fallback to "default" device if device is busyGravatar wm42014-12-04
| | | | | | | | | | | | | ALSA is crap. It's impossible to make multichannel playback just do the right thing. dmix (the default on most distros) can do stereo only, and will refuse to play multichannel. On the other hand, if you try like mpv (and mplayer) to open a multichannel device (like "surround51" etc.), this will actually open a hardware device, which will either fail if dmix is active, or block out dmix if opening succeeds. This commit falls back to "default" (i.e. dmix) if opening a multichannel device fails, which is a tiny step towards the right behavior. (Although fixing it fully is impossible.)
* coreaudio: reject descriptions with too many channelsGravatar Stefano Pigozzi2014-12-04
| | | | This is a fix attempt for #1279 and #1249.
* coreaudio: fix more layout printsGravatar Stefano Pigozzi2014-12-04
|
* coreaudio: fix prints of uint32_t in log_layoutGravatar Stefano Pigozzi2014-12-04
|
* audio: fix one of the previous commitsGravatar wm42014-12-01
| | | | | Fixes commit 52c51149. It broke multichannel (or possibly everything) for ao_alsa, ao_oss, ao_sndio.
* ao_coreaudio: initialize fetched properties to zerosGravatar Stefano Pigozzi2014-12-01
| | | Should hopefully fix #1249 and #1279
* audio: allow more than 20 channel map entriesGravatar wm42014-12-01
| | | | | | | | | | | | | This could trigger an assertion when using ao_alsa or ao_coreaudio. The code was simply assuming the number of channel maps was bounded statically (which was true at first in both AOs). Fix by using dynamic memory allocation. It needs to be explicitly enabled by the AOs by setting a temp context, because otherwise the memory couldn't be freed. (Or at least this seems to be the most elegant solution.) Fixes #1306.
* ao/wasapi: make set_ao_format EX/EXTENSIBLE agnosticGravatar Kevin Mitchell2014-12-01
| | | | | | | | | There is no guarantee that closestMatch returned by IsFormatSupported is actually a WAVEFORMATEXTENSIBLE. http://msdn.microsoft.com/en-us/library/windows/desktop/dd370876%28v=vs.85%29.aspx We should therefore not blindly treat it as such.
* ao/wasapi: fix set_ao_formatGravatar Kevin Mitchell2014-12-01
| | | | | | | | | | | Before it used whatever was in ao->format and changed the bits even though this might have nothing to do with the actual WAVEFORMAT negotiated with WASAPI. For example, if the initial ao->format was a float and we had set the WAVEFORMAT to s24, this would create a non-existent float24 format. Worse, it might put an u16 into ao->format when WAVEFORMAT described s16. WASAPI doesn't support unsigned at all as far as I can tell.
* ao/wasapi: show actual waveformat triedGravatar Kevin Mitchell2014-12-01
| | | | also remove bogus ao_format
* ao/wasapi: don't assume 32-bits == floatGravatar Kevin Mitchell2014-12-01
| | | | | | | | | | This was based on old WAVEFORMATEX restrictions http://msdn.microsoft.com/en-us/library/windows/hardware/ff538799%28v=vs.85%29.aspx With the new WAVEFORMATEXTENSIBLE, this is no longer a problem. and we can have s32 or float32 so we need to actually check / set these correctly. fixes #1287
* ao/format: add af_fmt_is_floatGravatar Kevin Mitchell2014-12-01
|
* ao/wasapi: make sure that < 16-bit pcm never happensGravatar Kevin Mitchell2014-12-01
| | | | it just sucks. noone should have to listen to that.
* ao/wasapi: get rid of WAVEFMT unionGravatar Kevin Mitchell2014-12-01
| | | | | It only confused the issue. Replace it's functionality with waveformat_copy function where needed.
* ao/wasapi: handle VistaBlob failure more gracefullyGravatar Kevin Mitchell2014-11-28
|
* ao/wasapi: remove unnecessary check of audio thread inputGravatar Kevin Mitchell2014-11-28
| | | | it would have caused a deadlock if it fired anyway.
* ao/wasapi: more consistent/reliable method of computing extra ↵Gravatar Kevin Mitchell2014-11-28
| | | | WAVEFORMATEXTENSIBLE size
* ao/wasapi: more missed cleanup on failureGravatar Kevin Mitchell2014-11-28
|
* ao/wasapi: check return valuesGravatar Kevin Mitchell2014-11-28
| | | | | Only issue a warning for failure of wasapi_enumerate_devices and wasapi_fill_VistaBlob.
* ao/wasapi: make functions return bool that were acting like itGravatar Kevin Mitchell2014-11-28
| | | | | | | this involved inverting the logic of find_formats, enumerate_devies and wasapi_fill_VistaBlob. The latter two were trivial as their return values were not actually checked (to be fixed in a later commit).
* ao/wasapi: check full GUID of KSDATAFORMAT to determine floatGravatar Kevin Mitchell2014-11-28
|
* ao/wasapi: expose GUID and PKEY convenience functionsGravatar Kevin Mitchell2014-11-28
| | | | Give them the prefix mp_ and make them nonstatic.
* ao/wasapi: remove unused variableGravatar Kevin Mitchell2014-11-28
|
* ao/wasapi: safely define PKEY constantsGravatar Kevin Mitchell2014-11-28
| | | | | | | | | Before these definitions were incorrectly guarded by and #ifdef but since they aren't macros, this would never be true so that if they were ever added to mingw headers we would have problems. rename KSDATAFORMAT constants with the same mp prefix for consistency. also use DEFINE_GUID rather than defining the bare structure
* ao/wasapi: avoid redundant passing of ao and wasapi_state as argumentsGravatar Kevin Mitchell2014-11-28
| | | | also drop some useless const declaraitons
* ao/wasapi: just return 0 unconditionally from the threadGravatar Kevin Mitchell2014-11-28
| | | | | We weren't actually checking this value anyway. We only really cared about init failure, which was checked another way.
* ao/wasapi: fix unmatched CoUninitialize() on init failureGravatar Kevin Mitchell2014-11-28
|
* ao/wasapi: more debugging messagesGravatar Kevin Mitchell2014-11-28
|
* ao/wasapi: simplify the init retryGravatar Kevin Mitchell2014-11-28
|
* ao/wasapi: make get_device_delay return an error codeGravatar Kevin Mitchell2014-11-28
|
* ao_wasapi: don't treat SetDisplayName() failure as fatalGravatar wm42014-11-27
| | | | Same for SetIconPath().
* mixer: don't show softvol neutral marker on OSD if not using softvolGravatar wm42014-11-27
| | | | Also fix the comment on the softvol field.
* Do not call strerror()Gravatar wm42014-11-26
| | | | | | | | | | | | | | | | | | | | | | | | | ...because everything is terrible. strerror() is not documented as having to be thread-safe by POSIX and C11. (Which is pretty much bullshit, because both mandate threads and some form of thread-local storage - so there's no excuse why implementation couldn't implement this in a thread-safe way. Especially with C11 this is ridiculous, because there is no way to use threads and convert error numbers to strings at the same time!) Since we heavily use threads now, we should avoid unsafe functions like strerror(). strerror_r() is in POSIX, but GNU/glibc deliberately fucks it up and gives the function different semantics than the POSIX one. It's a bit of work to convince this piece of shit to expose the POSIX standard function, and not the messed up GNU one. strerror_l() is also in POSIX, but only since the 2008 standard, and thus is not widespread. The solution is using avlibc (libavutil, by its official name), which handles the unportable details for us, mostly. We avoid some pain.
* ao_alsa: fix channel map in pre-channel map API caseGravatar wm42014-11-25
| | | | Forgotten in commit 5d5f5b09.
* ao_alsa: always enable "plug" plugin for non-default deviceGravatar wm42014-11-25
| | | | | | | | | | | | | | This seems safer: otherwise, opening the AO could randomly fail if the audio formats happens to be not float. Unfortunately, this only works if the user does not select a device. Since ALSA devices are arbitrary strings, including plugins with complex parameters, it's not trivial or maybe even impossible to edit the string in a way the "plug" plugin is added. With --audio-device, it would be safe for users to select either "default" or one of the "plughw" devices. Everything else seems questionable.
* ao_alsa: select and set channel maps via channel map APIGravatar wm42014-11-25
| | | | | | | | | | | | | | | | Use the ALSA channel map API for querying and selecting supported channel maps. Since we (probably?) want to be compatible with ALSA versions before the change, we still try to select the device name by channel map, and open that device. There's no way to negotiate a channel map before opening, so we're stuck with this approach. Fortunately, it seems these devices allow selecting and setting any other supported channel layout, so maybe this is not an issue at all. In particular, this avoids selecting the default (dmix) device, which can only do stereo. Most code is based on Martin Herkt <lachs0r@srsfckn.biz>'s alsa_ng branch, with heavy modifications.
* ao_alsa: minor fixesGravatar wm42014-11-25
| | | | | | | | | | | | | Don't crash if no fallback channel layout could be found (caller can't handle NULL return from select_chmap()). Apparently this could never actually happen, though. Don't treat snd_pcm_hw_params_set_periods_near() failure as fatal error. Same deal as with snd_pcm_hw_params_set_buffer_time_near(). Actually free channel maps returned by snd_pcm_get_chmap(). Adjust some messages.
* audio: make mp_audio_config_to_str return a stack-allocated stringGravatar wm42014-11-25
| | | | Simpler overall.
* ao_alsa: cleanupsGravatar wm42014-11-25
| | | | | | | | | No functional changes. ALSA_PCM_NEW_HW_PARAMS_API was a pre-ALSA 1.0.0 thing and does nothing with modern ALSA. It stopped being necessary about 10 years ago. 3 functions are moved to avoid forward references.
* audio: make mp_chmap_to_str() return a stack-allocated stringGravatar wm42014-11-24
| | | | Simplifies memory management.
* ao_alsa: try to use the channel map reported by ALSAGravatar wm42014-11-24
| | | | | | | | If ALSA reports a channel map, and it looks like it makes sense (i.e. could be converted to mpv channel map, and the channel count matches), then use that instead of the channel map we are assuming. This is based on code written by lachs0r (alsa_ng branch).
* ao_pcm: simplifyGravatar wm42014-11-21
| | | | Also shuts up Coverity.
* ao_oss: check whether setting samplerate succeedsGravatar wm42014-11-21
| | | | | | | Independent from whether the samplerate was accepted or adjusted, errors returned by the ioctl are fatal errors. Found by Coverity.