[FFmpeg-devel] [PATCH 2/5] af_hdcd: hdcd_analyze_gen() using int instead of float

Michael Niedermayer michael at niedermayer.cc
Wed Sep 7 01:07:26 EEST 2016


On Mon, Sep 05, 2016 at 06:18:42AM -0500, Burt P wrote:
> Signed-off-by: Burt P <pburt0 at gmail.com>
> ---
>  libavfilter/af_hdcd.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/libavfilter/af_hdcd.c b/libavfilter/af_hdcd.c
> index cde2340..c8bda82 100644
> --- a/libavfilter/af_hdcd.c
> +++ b/libavfilter/af_hdcd.c
> @@ -1316,11 +1316,10 @@ static void hdcd_analyze_prepare(hdcd_state *state, int32_t *samples, int count,
>  /** encode a value in the given sample by adjusting the amplitude */
>  static int32_t hdcd_analyze_gen(int32_t sample, unsigned int v, unsigned int maxv)
>  {
> -    float sflt = sample, vv = v;
> -    vv /= maxv;
> -    if (vv > 1.0) vv = 1.0;
> -    sflt *= 1.0 + (vv * 18);
> -    return (int32_t)sflt;
> +    static const int r = 18, m = 1024;
> +    int64_t s64 = sample;
> +    v = m + (v * r * m / maxv);

maxv is always a constant (for each call) and division is slow, maybe
you want to replace it by multiplication by its inverse and adjust
the /m later (that is fast as m is a constant power of 2 in unsigned
context)

[...[
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Breaking DRM is a little like attempting to break through a door even
though the window is wide open and the only thing in the house is a bunch
of things you dont want and which you would get tomorrow for free anyway
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160907/7c9c0d2a/attachment.sig>


More information about the ffmpeg-devel mailing list