[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