[FFmpeg-devel] [PATCH] lavfi/af_aemphasis: remove unnecessary complex number usage
Ganesh Ajjanagadde
gajjanagadde at gmail.com
Wed Dec 23 17:04:20 CET 2015
On Tue, Dec 22, 2015 at 11:32 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 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.
Fair enough. No worries, will only get rid of the dependencies in
configure, thanks.
More information about the ffmpeg-devel
mailing list