[FFmpeg-devel] [PATCH] lavfi/af_aemphasis: remove unnecessary complex number usage

Paul B Mahol onemda at gmail.com
Tue Dec 22 23:10:38 CET 2015


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.


More information about the ffmpeg-devel mailing list