[FFmpeg-devel] [PATCH] lavfi/af_aemphasis: remove unnecessary complex number usage
Ganesh Ajjanagadde
gajjanagadde at gmail.com
Wed Dec 23 18:24:40 CET 2015
On Wed, Dec 23, 2015 at 8:04 AM, Ganesh Ajjanagadde
<gajjanagadde at gmail.com> wrote:
> 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.
pushed.
More information about the ffmpeg-devel
mailing list