aboutsummaryrefslogtreecommitdiffhomepage
path: root/audio
Commit message (Collapse)AuthorAge
...
* ad_spdif: if DTS-HD is requested, and profile unknown, use DTS-HDGravatar wm42016-01-20
| | | | | This means there will be no loss if profile detection failed for some reason.
* audio: change downmix behavior, add --audio-normalize-downmixGravatar wm42016-01-20
| | | | | | This is probably the 3rd time the user-visible behavior changes. This time, switch back because not normalizing seems to be the more expected behavior from users.
* audio: remove initial decoding retry limitationGravatar wm42016-01-19
| | | | | | | | | | | | | | | Seems useless. This only helped in one case: one audio stream in the sample av_find_best_stream_fails.ts had a AC3 packets which couldn't be decoded, and for which avcodec_decode_audio4() returned 0 forever. In this specific case, playback will now not start, and you have to deselect audio manually. (If someone complains, the old behavior might be restored, but differently.) Also remove the stale "bitrate" field.
* audio: move direct packet reading from decoders to common codeGravatar wm42016-01-19
| | | | Another bit of preparation.
* audio: move dec_audio.pool to ad_spdifGravatar wm42016-01-19
| | | | That's where its only use is.
* ao_coreaudio_chmap: change license to LGPLGravatar wm42016-01-19
| | | | | | While the situation is not really clear for the other rewritten coreaudio code, it's very clear for the channel mapping code. It was all written by us. (MPlayer doesn't even have any channel map handling.)
* Relicense some non-MPlayer source files to LGPL 2.1 or laterGravatar wm42016-01-19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This covers source files which were added in mplayer2 and mpv times only, and where all code is covered by LGPL relicensing agreements. There are probably more files to which this applies, but I'm being conservative here. A file named ao_sdl.c exists in MPlayer too, but the mpv one is a complete rewrite, and was added some time after the original ao_sdl.c was removed. The same applies to vo_sdl.c, for which the SDL2 API is radically different in addition (MPlayer supports SDL 1.2 only). common.c contains only code written by me. But common.h is a strange case: although it originally was named mp_common.h and exists in MPlayer too, by now it contains only definitions written by uau and me. The exceptions are the CONTROL_ defines - thus not changing the license of common.h yet. codec_tags.c contained once large tables generated from MPlayer's codecs.conf, but all of these tables were removed. From demux_playlist.c I'm removing a code fragment from someone who was not asked; this probably could be done later (see commit 15dccc37). misc.c is a bit complicated to reason about (it was split off mplayer.c and thus contains random functions out of this file), but actually all functions have been added post-MPlayer. Except get_relative_time(), which was written by uau, but looks similar to 3 different versions of something similar in each of the Unix/win32/OSX timer source files. I'm not sure what that means in regards to copyright, so I've just moved it into another still-GPL source file for now. screenshot.c once had some minor parts of MPlayer's vf_screenshot.c, but they're all gone.
* ao_wasapi: use share_mode value instead of raw option opt_exclusiveGravatar Kevin Mitchell2016-01-18
| | | | | | | Previously used opt_exclusive option to decide which volume control code to run. The might not always reflect the actual state, for example if passthrough is used. Admittedly, none of the volume controls will work anyway with passthrough, but this is the right thing to do.
* ao_openal: wipe out global context on init errorGravatar Kevin Mitchell2016-01-18
| | | | | Previously this would break all further attempts to init the driver after one had failed.
* af_lavrresample: fudge some channel layout conversionGravatar wm42016-01-18
| | | | | | | | | | | | Prevents channels from being dropped, e.g. when going 7.1 -> 7.1(wide) and similar cases. The reasoning here is that channel layouts over HDMI don't work anyway, and not dropping a channel and playing it on a slightly "wrong" (but expected) speaker is preferable to playing silence on these speakers. Do this to remove issues with ao_coreaudio. Frankly I'm not sure whether our mapping (between CA and mpv/FFmpeg speakers) is correct, but on the other hand due to the reasons stated above it's not all that meaningful.
* demux: merge sh_video/sh_audio/sh_subGravatar wm42016-01-12
| | | | | | | | | | This is mainly a refactor. I'm hoping it will make some things easier in the future due to cleanly separating codec metadata and stream metadata. Also, declare that the "codec" field can not be NULL anymore. demux.c will set it to "" if it's NULL when added. This gets rid of a corner case everything had to handle, but which rarely happened.
* mpv_talloc.h: rename from talloc.hGravatar Dmitrij D. Czarkoff2016-01-11
| | | | This change helps avoiding conflict with talloc.h from libtalloc.
* ao_coreaudio: replace fourcc_repr()Gravatar wm42016-01-11
| | | | Replace with the more general mp_tag_str().
* ao_wasapi: move out some utility functionsGravatar wm42016-01-11
| | | | | | Note that hresult_to_str() (coming from wasapi_explain_err()) is mostly wasapi-specific, but since HRESULT error codes are unique, it can be extended for any other use.
* player: detect audio PTS jumps, make video PTS heuristic less aggressiveGravatar wm42016-01-09
| | | | | | | | | | | | | | | | | | | | | | This is another attempt at making files with sparse video frames work better. The problem is that you generally can't know whether a jump in video timestamps is just a (very) long video frame, or a timestamp reset. Due to the existence of files with sparse video frames (new frame only every few seconds or longer), every heuristic will be arbitrary (in general, at least). But we can use the fact that if video is continuous, audio should also be continuous. Audio discontinuities can be easily detected, and if that happens, reset some of the playback state. The way the playback state is reset is rather radical (resets decoders as well), but it's just better not to cause too much obscure stuff to happen here. If the A/V sync code were to be rewritten, it should probably strictly use PTS values (not this strange time_frame/delay stuff), which would make it much easier to detect such situations and to react to them.
* ao_dsound: remove this audio outputGravatar wm42016-01-06
| | | | | | | It existed for XP-compatibility only. There was also a time where ao_wasapi caused issues, but we're relatively confident that ao_wasapi works better or at least as good as ao_dsound on Windows Vista and later.
* ao_wasapi: remove unnecessary header fileGravatar Kevin Mitchell2016-01-05
| | | | | All the wasapi files were including both ao_wasapi.h and ao_wasapi_utils.h. Just merge them into a single file.
* ao_wasapi: initialize change notify in main threadGravatar Kevin Mitchell2016-01-05
| | | | This is something else that has nothing to do with audio rendering.
* ao_wasapi: remove old vistablob prototypeGravatar Kevin Mitchell2016-01-05
| | | | this function was removed earlier, but the prototype was missed
* ao_wasapi: make find_deviceID read only wrt struct aoGravatar Kevin Mitchell2016-01-05
| | | | This makes it clearer that state->device is being allocated.
* ao_wasapi: move device selection to main threadGravatar Kevin Mitchell2016-01-05
| | | | In attempt to simplify the audio event thread, this can now be moved out.
* ao_wasapi: avoid some redundant error messages in device selectionGravatar Kevin Mitchell2016-01-05
| | | | | If these error conditions are triggered, the called function will have already output a sufficiently informantive error message.
* ao_wasapi: alloc later to avoid free on errorGravatar Kevin Mitchell2016-01-05
| | | | | In get_device_desc, don't alloc the return value until we know there wasn't an error.
* ao_pulse: attempt to fall back to an arbitrary sample formatGravatar wm42016-01-05
| | | | | | | | | | | | | | | | | | | | | | | Normally, PulseAudio accepts any combination of sample format, sample rate, channel count/map. Sometimes it does not. For example, the channel rate or channel count have fixed maximum values. We should not fail fatally in such cases, but attempt to fall back to a working format. We could just send pass an "unset" format to Pulse, but this is not too attractive. Pulse could use a format which we do not support, and also doing so much for an obscure corner case is not reasonable. So just pick a format that is very likely supported. This still could fail at runtime (the stream could fail instead of going to the ready state), but this sounds also too complicated. In particular, it doesn't look like pulse will tell us the cause of the stream failure. (Or maybe it does - but I didn't find anything.) Last but not least, our fallback could be less dumb, and e.g. try to fix only one of samplerate or channel count first to reduce the loss, but this is also not particularly worthy the effort. Fixes #2654.
* ao_pulse: check for sample rate boundsGravatar wm42016-01-05
| | | | | | | pa_format_info_valid() does not do this. (Although there is a proposed patch on the PulseAudio mailing list.) See #2654.
* ao_pulse: move format setting into a functionGravatar wm42016-01-05
| | | | No real functional changes.
* ao_wasapi: remove +x flag from filesGravatar wm42016-01-04
|
* chmap_sel: prefer inexact equivalents over perfect upmixGravatar wm42016-01-04
| | | | | | | | | | | | | Given 5.1(side), this lets it pick 5.1 from [5.1, 7.1]. Which was probably the original intention of this replacement stuff. Until now, the opposite was done in some cases. Keep the old heuristic if the replacement is not perfect. This would mean that a subset of the channel layout is an inexact equivalent, but not all of it. (My conclusion is that audio output APIs should be designed to simply take any channel layout, like the PulseAudio API does.)
* ao_wasapi: just use a pointer to the deviceID in change_notifyGravatar Kevin Mitchell2016-01-04
| | | | | Rather than creating a new string from the device instance. This will allow moving the change_init to the main thread before the device is loaded.
* ao_wasapi: correctly name the IMMNotificationClientVtblGravatar Kevin Mitchell2016-01-04
|
* ao_wasapi: make persistent enumerator local to change_notifyGravatar Kevin Mitchell2016-01-04
| | | | This is no longer required by anything else
* ao_wasapi: rewrite device listing and selectionGravatar Kevin Mitchell2016-01-04
| | | | | | | | | | | | | Unify and clean up listing and selection. Use common enumerator code for both operations to avoid duplication or inconsistencies. Maintain, but significatnly simplify manual device selection by id, name or number. This actually fixes loading by name which didn't really work before since the "name" displayed by --audio-device=help differed from that used to match the selection, which used the device "description" instead. Save the selected deviceID in the private structure for later loading. This will permit moving the device selection into the main thread in a future commit.
* ao_wasapi: fix delay calculation againGravatar Kevin Mitchell2016-01-02
| | | | | | | | Apparently it's only wine where the qpc_position returned by IAudioClock_GetPosition can be overflowed. So actually do the rescaling correctly, but throw away the result if it looks unreasonable. this fixes a regression in 5afa68835ade9f21f9c709f791319bf9d2e35265
* ao_wasapi: fix delay calculationGravatar Kevin Mitchell2015-12-21
| | | | | | | | | | | | | | | | | | | Make sure that subtraction of performance counters is done correctly. Follow the *exact* instructions for converting performance counter to something comparable to the QPCposition returned by IAudioClient::GetPosition https://msdn.microsoft.com/en-us/library/windows/desktop/dd370889%28v=vs.85%29.aspx Also make sure that subtraction of unsigned integers is stored into a signed integer to avoid nastiness. Also be more careful about overflow in the conversion of the device position into number of samples. Avoid casting mp_time_us() to a double, and use llrint to convert the double precision delay_us back to integer for ao_read_data. Finally, actually check the return value of ao_read_data and add a verbose message if it is not the expected value. Unfortunately, there is no way to tell WASAPI when this happens since the frame_count in ReleaseBuffer must match GetBuffer.
* Fix some typos in code commentsGravatar Aman Gupta2015-12-21
| | | | Signed-off-by: wm4 <wm4@nowhere>
* ao_wasapi: move volume control init to it's own functionGravatar Kevin Mitchell2015-12-21
| | | | also make failure non-fatal
* ao_wasapi: correctly handle audio session display failureGravatar Kevin Mitchell2015-12-21
| | | | | In particular, try and release/null the interface so that it won't be marshalled.
* ao_wasapi: non-fatal error handling for COM marshallingGravatar Kevin Mitchell2015-12-21
| | | | | Also make sure that CoReleaseMarshalData is called if errors occur before unmarshalling.
* ao_wasapi: wrap long lines and use only c99 comment styleGravatar Kevin Mitchell2015-12-21
| | | | | also remove a log message in AOCONTROL_UPDATE_STREAM_TITLE since none of the other controls have one.
* ao_wasapi: reorganize private structureGravatar Kevin Mitchell2015-12-21
|
* ao_wasapi: remove useless buffer_block_sizeGravatar Kevin Mitchell2015-12-21
| | | | this was only ever used for a verbose message
* ao_wasapi: move exclusive and shared-specific controls to functionsGravatar Kevin Mitchell2015-12-21
|
* ao_wasapi: call the class-specific release functionsGravatar Kevin Mitchell2015-12-20
| | | | | IUnknown_Release() might be alright, but stay on the safe side.
* ao_wasapi: check for proxy availability in controlGravatar Kevin Mitchell2015-12-20
| | | | | Make sure that the proxy has been created before using it. This will be used when a future commit makes proxy setup optional.
* ao_wasapi: actually use hw volume support information for exclusive modeGravatar Kevin Mitchell2015-12-20
| | | | | | | | | Do not try and set/get master volume in exclusive if there is no hardware support. This would just uselessly change the master slider, but have no effect on the actual volume. Furthermore if getting hardware volume support information fails, then assume it has none.
* ao_wasapi: don't cast control arg to something it isn'tGravatar Kevin Mitchell2015-12-20
| | | | | the ao_control_vol_t cast was happening outside AOCONTROL_GET/SET_VOLUME which is the only place that would be valid
* ao_wasapi: remove volume "restore" on exitGravatar Kevin Mitchell2015-12-20
| | | | | | It was complicated and not even very intuitive to the user. If you are controlling the master volume, you just have to be prepared to deal with the consequences.
* ao_wasapi: split exclusive/shared specific ao controlsGravatar Kevin Mitchell2015-12-20
| | | | | this avoids having to check if we're exclusive or shared for every control
* ao_wasapi: add E_NOINTERFACE to error listGravatar Kevin Mitchell2015-12-20
| | | | this is encountered trying to set up COM proxies in wine
* mixer: fix volume initialization with --af=volumeGravatar wm42015-12-11
| | | | | | | | A manually added af_volume could lead to muted audio when switching to a new file. af_volume keeps the last volume set by AF_CONTROL_SET_VOLUME to return it with AF_CONTROL_GET_VOLUME, but the initial value is 0. So the mixer volume was forced to 0 when unintializing the filter chain and reading back the previously set volume.