[FFmpeg-devel] [PATCH] lavfi/af_aemphasis: remove unnecessary complex number usage
Paul B Mahol
onemda at gmail.com
Wed Dec 23 08:32:02 CET 2015
On 12/22/15, Ganesh Ajjanagadde <gajjanagadde at gmail.com> wrote:
> On Tue, Dec 22, 2015 at 2:10 PM, Paul B Mahol <onemda at gmail.com> wrote:
>> On 12/22/15, Ganesh Ajjanagadde <gajjanagadde at gmail.com> wrote:
>>> On Tue, Dec 22, 2015 at 12:46 AM, Paul B Mahol <onemda at gmail.com> wrote:
>>>> On 12/22/15, Ganesh Ajjanagadde <gajjanagadde at gmail.com> wrote:
>>>>> complex is not available on all platforms. Furthermore, it is trivial
>>>>> to
>>>>> rewrite complex number expressions to real arithmetic, and in fact
>>>>> sometimes advantageous for performance reasons: by wrapping as a
>>>>> complex,
>>>>> one forces a particular Cartesian representation that is not
>>>>> necessarily
>>>>> optimal for the purpose.
>>>>>
>>>>> Configure tests are also removed, and aemphasis is now available
>>>>> across
>>>>> all platforms.
>>>>>
>>>>> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
>>>>> ---
>>>>> configure | 26 --------------------------
>>>>> libavfilter/af_aemphasis.c | 13 ++++++-------
>>>>> 2 files changed, 6 insertions(+), 33 deletions(-)
>>>>>
>>>>> diff --git a/configure b/configure
>>>>> index 0227540..46021c4 100755
>>>>> --- a/configure
>>>>> +++ b/configure
>>>>> @@ -1070,21 +1070,6 @@ int main(void){ $func(); }
>>>>> EOF
>>>>> }
>>>>>
>>>>> -check_complexfunc(){
>>>>> - log check_complexfunc "$@"
>>>>> - func=$1
>>>>> - narg=$2
>>>>> - shift 2
>>>>> - test $narg = 2 && args="f, g" || args="f * I"
>>>>> - disable $func
>>>>> - check_ld "cc" "$@" <<EOF && enable $func
>>>>> -#include <complex.h>
>>>>> -#include <math.h>
>>>>> -float foo(complex float f, complex float g) { return $func($args); }
>>>>> -int main(void){ return (int) foo; }
>>>>> -EOF
>>>>> -}
>>>>> -
>>>>> check_mathfunc(){
>>>>> log check_mathfunc "$@"
>>>>> func=$1
>>>>> @@ -1803,11 +1788,6 @@ INTRINSICS_LIST="
>>>>> intrinsics_neon
>>>>> "
>>>>>
>>>>> -COMPLEX_FUNCS="
>>>>> - cabs
>>>>> - cexp
>>>>> -"
>>>>> -
>>>>> MATH_FUNCS="
>>>>> atanf
>>>>> atan2f
>>>>> @@ -1944,7 +1924,6 @@ HAVE_LIST="
>>>>> $ARCH_FEATURES
>>>>> $ATOMICS_LIST
>>>>> $BUILTIN_LIST
>>>>> - $COMPLEX_FUNCS
>>>>> $HAVE_LIST_CMDLINE
>>>>> $HAVE_LIST_PUB
>>>>> $HEADERS_LIST
>>>>> @@ -2835,7 +2814,6 @@ unix_protocol_deps="sys_un_h"
>>>>> unix_protocol_select="network"
>>>>>
>>>>> # filters
>>>>> -aemphasis_filter_deps="cabs cexp"
>>>>> amovie_filter_deps="avcodec avformat"
>>>>> aresample_filter_deps="swresample"
>>>>> ass_filter_deps="libass"
>>>>> @@ -5379,10 +5357,6 @@ for func in $MATH_FUNCS; do
>>>>> eval check_mathfunc $func \${${func}_args:-1}
>>>>> done
>>>>>
>>>>> -for func in $COMPLEX_FUNCS; do
>>>>> - eval check_complexfunc $func \${${func}_args:-1}
>>>>> -done
>>>>> -
>>>>> # these are off by default, so fail if requested and not available
>>>>> enabled avfoundation_indev && { check_header_objcc
>>>>> AVFoundation/AVFoundation.h || disable avfoundation_indev; }
>>>>> enabled avfoundation_indev && { check_lib2
>>>>> CoreGraphics/CoreGraphics.h
>>>>> CGGetActiveDisplayList -framework CoreGraphics ||
>>>>> diff --git a/libavfilter/af_aemphasis.c b/libavfilter/af_aemphasis.c
>>>>> index 2966f77..a5b8e30 100644
>>>>> --- a/libavfilter/af_aemphasis.c
>>>>> +++ b/libavfilter/af_aemphasis.c
>>>>> @@ -18,8 +18,6 @@
>>>>> * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
>>>>> 02110-1301
>>>>> USA
>>>>> */
>>>>>
>>>>> -#include <complex.h>
>>>>> -
>>>>> #include "libavutil/opt.h"
>>>>> #include "avfilter.h"
>>>>> #include "internal.h"
>>>>> @@ -189,14 +187,15 @@ static inline void set_lp_rbj(BiquadD2 *bq,
>>>>> double
>>>>> fc,
>>>>> double q, double sr, doub
>>>>>
>>>>> static double freq_gain(BiquadCoeffs *c, double freq, double sr)
>>>>> {
>>>>> - double complex z, w;
>>>>> + double zr, zi;
>>>>>
>>>>> freq *= 2.0 * M_PI / sr;
>>>>> - w = 0 + I * freq;
>>>>> - z = 1.0 / cexp(w);
>>>>> + zr = cos(freq);
>>>>> + zi = -sin(freq);
>>>>>
>>>>> - return cabs(((double complex)c->a0 + c->a1 * z + c->a2 * z*z) /
>>>>> - ((double complex)1.0 + c->b1 * z + c->b2 * z*z));
>>>>> + /* |(a0 + a1*z + a2*z^2)/(1 + b1*z + b2*z^2)| */
>>>>> + return hypot(c->a0 + c->a1*zr + c->a2*(zr*zr-zi*zi), c->a1*zi +
>>>>> 2*c->a2*zr*zi) /
>>>>> + hypot(1 + c->b1*zr + c->b2*(zr*zr-zi*zi), c->b1*zi +
>>>>> 2*c->b2*zr*zi);
>>>>> }
>>>>>
>>>>> static int config_input(AVFilterLink *inlink)
>>>>> --
>>>>> 2.6.4
>>>>>
>>>>> _______________________________________________
>>>>> ffmpeg-devel mailing list
>>>>> ffmpeg-devel at ffmpeg.org
>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>>
>>>>
>>>> ok
>>>
>>> I assume by this you are ok with the configure change as well.
>>> Personally, I think the effort needed for writing the configure hacks
>>> is higher than using real arithmetic, and hence I removed it to help
>>> ensure it is not added back again.
>>>
>>> This filter was added during the next version work, so does not need a
>>> Changelog update. Thanks, will push later.
>>>
>>
>> Please leave configure check alone, I'm writting some code that uses
>> complex again.
>
> and how hard is it to use real numbers? It does not take > 5 min to
> come up real number expressions...
>
It's long expression.
More information about the ffmpeg-devel
mailing list