[FFmpeg-cvslog] lavc/lpc: exploit even symmetry of window function

Reimar Döffinger Reimar.Doeffinger at gmx.de
Fri Mar 11 21:17:08 CET 2016

On 11.03.2016, at 19:09, Lou Logan <lou at lrcd.com> wrote:
> On Thu, Mar 10, 2016, at 05:42 PM, Ganesh Ajjanagadde wrote:
>> ffmpeg | branch: master | Ganesh Ajjanagadde <gajjanag at gmail.com> | Tue
>> Mar  8 22:08:29 2016 -0500| [66edd8656b851a0c85ba25ec293cc66192c363ae] |
>> committer: Ganesh Ajjanagadde
>> lavc/lpc: exploit even symmetry of window function
> kamedo2 has a comment about this on Twitter, although I can't quite
> understand the translation:
> <https://twitter.com/kamedo2/status/708313239482806272>

Not sure, but if I guess:
i <= len / 2 loop condition does one step too many if len is even.

It is also possible to build a cos table with only one sin and cos.
Depending on precision requirements only using
cos[n] = cos[n/2]*cos[(n+1)/2]-sin[n/2]*sin[(n+1)/2]
sin[n] = sin[n/2]*cos[(n+1)/2]+cos[n/2]*sin[(n+1)/2]

I don't know what the speed or the maximum error of that would be though. The number of operations and thus rounding errors that go into a single value is limited by O(log2(len)) though, so it's likely if you use double precision everywhere the result would not be (much) worse off than cosf.
The cos formula can for even n possibly optimize precision by doing 2*cos[n/2]*cos[n/2]-1.
No guarentee I made no mistakes, but I think the idea is sound.
If it's worth the effort is a separate question though.

More information about the ffmpeg-cvslog mailing list