summaryrefslogtreecommitdiffstats
path: root/audio/filter
Commit message (Collapse)AuthorAgeFilesLines
* af_lavcac3enc: use planar formatswm42013-11-121-134/+82
| | | | | | | | | | | Remove the awkward planarization. It had to be done because the AC3 encoder requires planar formats, but now we support them natively. Try to simplify buffer management with mp_audio_buffer. Improve checking for buffer overflows and out of bound writes. In theory, these shouldn't happen due to AC3 fixed frame sizes, but being paranoid is better.
* af_lavcac3enc: simplify format negotiationwm42013-11-121-28/+33
| | | | | | | | | | | | | The format negotiation is the same, except don't confusingly copy the input format into af->data, just to overwrite it later. af->data should alwass contain the output format, and the existing code was just a very misguided use of the af_test_output() helper function. Just set af->data to the output format immediately, and modify the input format properly. Also, if format negotiation fails (and needs another iteration), don't initialize the libavcodec encoder.
* audio/filter: fix mul/delay scale and valueswm42013-11-1227-51/+20
| | | | | | | | | | | | | Before this commit, the af_instance->mul/delay values were in bytes. Using bytes is confusing for non-interleaved audio, so switch mul to samples, and delay to seconds. For delay, seconds are more intuitive than bytes or samples, because it's used for the latency calculation. We also might want to replace the delay mechanism with real PTS tracking inside the filter chain some time in the future, and PTS will also require time-adjustments to be done in seconds. For most filters, we just remove the redundant mul=1 initialization. (Setting this used to be required, but not anymore.)
* af: don't require filters to allocate af_instance->data, redo bufferswm42013-11-1227-211/+36
| | | | | | | | | | | | | Allocate af_instance->data in generic code before filter initialization. Every filter needs af->data (since it contains the output configuration), so there's no reason why every filter should allocate and free it. Remove RESIZE_LOCAL_BUFFER(), and replace it with mp_audio_realloc_min(). Interestingly, most code becomes simpler, because the new function takes the size in samples, and not in bytes. There are larger change in af_scaletempo.c and af_lavcac3enc.c, because these had copied and modified versions of the RESIZE_LOCAL_BUFFER macro/function.
* af_lavfi: add support for non-interleaved audiowm42013-11-121-30/+24
|
* af_volume: add support for non-interleaved audiowm42013-11-121-16/+25
|
* af_lavrresample: add support for non-interleaved audiowm42013-11-121-27/+45
|
* audio/filter: prepare filter chain for non-interleaved audiowm42013-11-1225-155/+163
| | | | | | | | | | | | | | | | | | Based on earlier work by Stefano Pigozzi. There are 2 changes: 1. Instead of mp_audio.audio, mp_audio.planes[0] must be used. 2. mp_audio.len used to contain the size of the audio in bytes. Now mp_audio.samples must be used. (Where 1 sample is the smallest unit of audio that covers all channels.) Also, some filters need changes to reject non-interleaved formats properly. Nothing uses the non-interleaved features yet, but this is needed so that things don't just break when doing so.
* af: don't skip filtering if there's no more audiowm42013-11-102-3/+5
| | | | | | | | | | | | | | My main problem with this is that the output format will be incorrect. (This doesn't matter right, because there are no samples output.) This assumes all audio filters can deal with len==0 passed in for filtering (though I wouldn't see why not). A filter can still signal an error by returning NULL. af_lavrresample has to be fixed, since resampling 0 samples makes libavresample fail and return a negative error code. (Even though it's not documented to return an error code!)
* af_volume: use only one volume setting for all channelswm42013-11-091-22/+14
| | | | | | | | In theory, af_volume could use separate volume levels for each channel. But this was never used anywhere. MPlayer implemented something similar before (svn r36498), but kept the old path for some reason.
* af_scaletempo: uncrustifywm42013-11-091-404/+388
| | | | | | | | | Also do some cosmetic changes, like merging definition and initialization of local variables. Remove an annoying debug mp_msg() from af_open(). It just printed the command line parameters; if this is really needed, it could be added to af.c instead (similar as to what vf.c does).
* af_lavrresample: reconfigure libavresample only on successful initwm42013-11-091-7/+6
| | | | | If filter initialization fails anyway, we don't need to reconfigure libavresample.
* af_lavrresample: move libavresample setup to separate functionwm42013-11-091-90/+98
| | | | | | | Helps with readability. Also remove the ctx_opt_set_* helper macros and use av_opt_set_* directly (I think these macros were used because the lines ended up too long, but this commit removes two indentation levels, giving more space).
* af_convert24: fix complicated and incorrect format negotiationwm42013-11-091-9/+4
| | | | | The conversion works for native endian only. The correct check lists supported format combination explicitly, but is also much simpler.
* af_surround: fix format negotiationwm42013-11-091-12/+9
| | | | This did strange things; perhaps caused by the channel layout changes.
* af: allow filters to return AF_OK, even if format doesn't matchwm42013-11-091-0/+2
| | | | | | | This should allow to make format negotiation much simpler, since it takes the responsibility to compare actual input and accepted input formats from the filters. It's also backwards compatible. Filters which have expensive initialization still can use the old method.
* af: always remove auto-inserted filters, improve error messagewm42013-11-091-4/+3
| | | | | | | | | | It's probably better if all auto-inserted filters are removed when doing an af_add operation. If they're really needed, they will be automatically re-added. Fix the error message. It used to be for an actual internal error, but now it happens when format negotiation fails, e.g. when trying to use spdif and real audio filters.
* af: remove a pointless macrowm42013-11-072-28/+16
| | | | | The code should be equivalent; a compatibility macro definition is left. (It should be mass-replaced later.)
* audio: replace af_fmt2str_short -> af_fmt_to_strwm42013-11-073-5/+3
| | | | Also, remove all af_fmt2str usages.
* configure: uniform the defines to #define HAVE_xxx (0|1)Stefano Pigozzi2013-11-032-8/+8
| | | | | | | | | | | | | | | | | | | | | The configure followed 5 different convetions of defines because the next guy always wanted to introduce a new better way to uniform it[1]. For an hypothetic feature 'hurr' you could have had: * #define HAVE_HURR 1 / #undef HAVE_DURR * #define HAVE_HURR / #undef HAVE_DURR * #define CONFIG_HURR 1 / #undef CONFIG_DURR * #define HAVE_HURR 1 / #define HAVE_DURR 0 * #define CONFIG_HURR 1 / #define CONFIG_DURR 0 All is now uniform and uses: * #define HAVE_HURR 1 * #define HAVE_DURR 0 We like definining to 0 as opposed to `undef` bcause it can help spot typos and is very helpful when doing big reorganizations in the code. [1]: http://xkcd.com/927/ related
* af: replace macros with too generic nameswm42013-10-2611-43/+33
| | | | | | | | Defining names like min, max etc. in an often used header is not really a good idea. Somewhat similar to MPlayer svn commit 36491, but don't use libavutil, because that typically causes us sorrow.
* af_volume: some more cosmeticswm42013-10-261-27/+15
|
* af_volume: switch to new option parsingwm42013-10-261-31/+18
|
* af_volume: uncrustifywm42013-10-261-94/+85
| | | | Also, use more C99 and remove "register" keywords.
* af_volume: don't change volume if nothing is to be changedwm42013-10-261-0/+2
| | | | | On the float path. Note that this skips clipping, but we expect that everything on the audio-path is pre-clipped anyway.
* af_volume: remove unused featureswm42013-10-263-56/+1
| | | | | | Roughly follows MPlayer svn commits 36492 and 36493. We also remove the volume peak reporting. (There are much better libavfilter filters for this, I think.)
* audio/filter: remove useless af_info fieldswm42013-10-2326-152/+94
| | | | | | | Drop the author and comment fields. They were completely unused - not even printed in verbose mode, just dead weight. Also use designated initializers and drop redundant flags.
* af_force: set format early for better debug outputwm42013-10-231-18/+34
| | | | | | | Set the input/output format in filter init. This doesn't change anything functionally, but it makes the forced format show up in the filter chain init verbose output (which sometimes prints the filter chain before all filters have been configured).
* af_force: minor simplificationswm42013-10-231-9/+0
|
* audio/filter: rename af_force.c to af_format.cwm42013-10-231-0/+0
| | | | The filter itself was already renamed earlier - but rename the file too.
* audio/filter: split af_format into separate filters, rename af_forcewm42013-10-235-516/+365
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | af_format is the old audio conversion filter. It could do all possible conversions supported by the audio chain. However, ever since the addition of af_lavrresample, most conversions are done by libav/swresample, and af_format is used as fallback. Separate out the fallback cases and remove af_format. af_convert24 does 24 bit <-> 32 bit conversions, while af_convertsignendian does sign and endian conversions. Maybe the way the conversions are split sounds a bit odd. But the former changes the size of the audio data, while the latter is fully in-place, so there's at least different buffer management. This requires a quite complicated algorithm to make sure all these "partial" conversion filters can actually get from one format to another. E.g. s24le->s32be always requires convertsignendian and convert24, but af.c has no idea what the intermediate format should be. So I added a graph search (trying every possible format and filter) to determine required format and filter. When I wrote this, it seemed this was still better than messing everything into af_lavrresample, but maybe this is overkill and I'll change my opinion. For now, it seems nice to get rid of af_format though. The AC3->IEC61937 conversion isn't supported anymore, but I don't think this is needed anywhere. Most AOs test all formats explicitly, or use the AF_FORMAT_IS_IEC61937() macro (which includes AC3). One positive consequence of this change is that conversions always include dithering (done by libav/swresample), instead of possibly going through af_format, which doesn't do anything fancy. Rename af_force to af_format. It's essentially compatible with command line uses of af_format. We retain a compatibility alias for af_force.
* af_lavrresample: actually free resamplerwm42013-10-191-0/+3
| | | | Fixes #304.
* af: merge af_reinit() and fix_output_format()wm42013-09-201-29/+12
| | | | | | | | | | | | | | | | Calling them separately doesn't really make sense, and all existing calls to them usually combined them. One subtitle difference was that af_init() didn't wipe the filter chain if initialization of the chain itself failed, but that didn't really make sense anyway. Also remove af_init() from the code for setting balance in mixer.c. The mixer should be in the initialized state only if audio is fully initialized, so the af_init() call made no sense. Note that the filter "editing" code in command.c doesn't really do a nice job of handling errors in case recreating an _old_ (known to work) filter chain unexpectedly fails, and this obscure/rare case might be differently handled after this change.
* mixer, af_volume: use linear values instead of dBwm42013-09-191-4/+9
| | | | | | | Softvol always used a linear multiplier for volume control. This was converted to dB, and then back to linear in af_volume. Remove this non- sense. We still try to keep the command line argument to af_volume in dB, though.
* af_export: fix compilation warningwm42013-09-191-2/+1
| | | | Blargh.
* Config path functions can return NULLwm42013-09-181-0/+6
| | | | | | | It's quite unlikely, but functions like mp_find_user_config_file() can return NULL, e.g. if $HOME is unset. Fix all the code that didn't check for this correctly yet.
* audio: make internal audio format 0 an invalid formatwm42013-08-261-1/+1
| | | | | | | | | | | | Having to use -1 for that is generally quite annoying. Audio formats are created from bitmasks, and it can't be excluded that 0 is not a valid format. Fix this by adjusting AF_FORMAT_I so that it is never 0. Along with AF_FORMAT_F and the special formats, all valid formats are covered and guaranteed to be non-0. It's possible that this commit will cause some regressions, as the check for invalid audio formats changes a bit.
* core: move contents to mpvcore (2/2)Stefano Pigozzi2013-08-068-14/+14
| | | | Followup commit. Fixes all the files references.
* core: change speed option/property to doublewm42013-08-051-2/+2
| | | | | | | | | | | | | The --speed option and the speed property used float. Change them to double. Change the commands that manipulate the property (speed_mult/add) to double as well. Since the cycle command shares code with the add command, we change that as well. The reason for this change is that this allows better control over speed, such as stepping by semitones. Using floats is also just plain unnecessary.
* Fix some -Wshadow warningswm42013-07-232-5/+5
| | | | | | In general, this warning can hint to actual bugs. We don't enable it yet, because it would conflict with some unmerged code, and we should check with clang too (this commit was done by testing with gcc).
* options: make legacy hacks for AFs/VFs more explicitwm42013-07-221-0/+1
| | | | | This means that AOs/VOs with no options set do not take the legacy option parsing path, but instead report that they have no options.
* af_bs2b: use new option APIwm42013-07-221-84/+28
|
* af_lavfi: switch to new option APIwm42013-07-221-8/+24
| | | | | This makes it actually possible to use the filter with more complicated filter graphs (such as graphs containing the "," character).
* af_scaletempo: use new option APIwm42013-07-221-84/+44
|
* af_lavrresample: switch to new option APIwm42013-07-221-51/+45
| | | | | Also add a "o" suboption, which should allow fine control over libavresample.
* af_force: use new option APIwm42013-07-221-34/+21
|
* audio/filter: use new option APIwm42013-07-222-147/+92
| | | | | | | | | | | | | Make the VF/VO/AO option parser available to audio filters. No audio filter uses this yet, but it's still a quite intrusive change. In particular, the commands for manipulating filters at runtime completely change. We delete the old code, and use the same infrastructure as for video filters. (This forces complete reinitialization of the filter chain, which hopefully isn't a problem for any use cases. The old code forced reinitialization too, but it could potentially allow a filter to cache things; e.g. consider loaded ladspa plugins and such.)
* af_force: add option that causes filter to fail at initializationwm42013-07-221-1/+9
| | | | This is useful for debugging.
* af: fix recovery code for filter insertion (changing volume with spdif crash)wm42013-07-221-4/+2
| | | | | | | | | | | | This code is supposed to run if dynamic filter insertion (such as when inserting a volume filter in mixer.c) fails. Then it removes all filters and recreates the default list of filters. But the code just blew up and entered an endless loop, because it removed even the sentinel in/out filters. This could happen when trying to use softvol controls while using spdif, but also other situations. Fix it by calling the correct code. Also remove these obnoxious yoda-conditions.
* af_lavfi: add libavfilter bridgewm42013-05-232-0/+310
| | | | | | | | | | | | | | | | | | | | | Mostly copied from vf_lavfi. The parts that could be shared are minor, because most code is about setting up audio and video, which are too different. This won't work with Libav. I used ffplay.c as guide, and noticed too late that their setup methods are incompatible with Libav's. Trying to make it work with both would be too much effort. The configure test for av_opt_set_int_list() should disable af_lavfi gracefully when compiling with Libav. Due to option parser chaos, you currently can't have a "," as part of the filter graph string - not even with quoting or escaping. This will probably be fixed later. The audio filter chain is not PTS aware. So we have to do some hacks to make up a fake PTS, and we have to map the output PTS back to the filter chain's method of tracking PTS changes and buffering, by adjusting af->delay.
* af_lavrresample: fix inverted conditionwm42013-05-131-1/+1
| | | | | This was added with the previous commit. It likely broke some obscure special-cases, which (hopefully) do not happen with normal playback.
* audio: fix compilation with older libavresample versionswm42013-05-131-0/+13
| | | | | | | | | | | | | | The libavresample version of the current Libav stable release lacks the avresample_set_channel_mapping() function. (FFmpeg's libswresample seems to be fine, because they added swr_set_channel_mapping() first.) Add a cheap/slow workaround to do channel reordering on our own. We don't use the recently removed MPlayer code (see commit 586b75a), because that is not generic enough. The functionality should be the same as with full-featured libavresample, and any differences are bugs. It's probably slower, though.
* af: improve filter chain setup retry limitwm42013-05-121-1/+10
| | | | | | | | | | | | | | | | | af_reinit() is responsible for inserting automatic conversion filters for channel remixing, format conversion, and resampling. We don't require that a single filter can do all these (even though af_lavrresample does nearly all of this, sometimes af_format has to be used instead for format conversions). This makes setting up the chain more complicated, and a way is needed to prevent endless appending of conversion filters if a conversion is not possible. Until now, this used a stupidly simple yet robust static retry limit to detect failure. This is perfectly fine, and the limit (20) was good enough to handle about ~5 filters. But with more filters, and if each filter requires 3 additional conversion filters, this would fail. So raise the limit to 4 retries per filter. This is still stupidly simple and robust, but won't arbitrarily fail if the filter count is too large.
* af_lavrresample: avoid channel reordering with unknown layoutswm42013-05-121-8/+24
| | | | | | | If one of the input or output is an unknown layout, but the other is known, it can still happen that channels are remixed randomly. Avoid this by forcing default layouts in this case. (Doesn't work if the channel counts are different.)
* audio/filters: add af_forcewm42013-05-122-0/+148
| | | | | Its main purpose is for testing in case channel layout stuff breaks, in particular in connection with old audio filters.
* af_ladspa: code cleanupeng2013-05-121-15/+17
| | | | | | Cleanup based on results from cppcheck-1.59 Reduce the scope of several variables Fix memory leak
* audio: print channel map additionally to channel count on terminalwm42013-05-121-15/+8
|
* af: print filter chain info on errorwm42013-05-121-15/+16
| | | | | The filter chain was only visible with -v. Always print it if the filter chain could not be configured.
* reorder_ch: remove old channel reorder functionswm42013-05-121-9/+0
| | | | | | | This is done in af_lavrresample now, and as part of format negotiation. Also remove the remaining reorder_channel calls. They were redundant and did nothing.
* audio: let libavresample do channel reorderingwm42013-05-121-3/+49
|
* af_lavrresample: context is always allocated herewm42013-05-121-2/+1
|
* af_pan: set unknown channel layout for outputwm42013-05-121-2/+11
|
* af: use mp_chmap for mp_audio, include channel map in format negotiationwm42013-05-1210-54/+39
| | | | | Now af_lavrresample pretends to reorder the channels, although it doesn't yet, and nothing sets non-standard layou