media/libtremor/lib/tremor_window.c

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /********************************************************************
     2  *                                                                  *
     3  * THIS FILE IS PART OF THE OggVorbis 'TREMOR' CODEC SOURCE CODE.   *
     4  *                                                                  *
     5  * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS     *
     6  * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
     7  * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING.       *
     8  *                                                                  *
     9  * THE OggVorbis 'TREMOR' SOURCE CODE IS (C) COPYRIGHT 1994-2002    *
    10  * BY THE Xiph.Org FOUNDATION http://www.xiph.org/                  *
    11  *                                                                  *
    12  ********************************************************************
    14  function: window functions
    16  ********************************************************************/
    18 #include <stdlib.h>
    19 #include <math.h>
    20 #include "misc.h"
    21 #include "window.h"
    22 #include "window_lookup.h"
    24 const void *_vorbis_window(int type, int left){
    26   switch(type){
    27   case 0:
    29     switch(left){
    30     case 32:
    31       return vwin64;
    32     case 64:
    33       return vwin128;
    34     case 128:
    35       return vwin256;
    36     case 256:
    37       return vwin512;
    38     case 512:
    39       return vwin1024;
    40     case 1024:
    41       return vwin2048;
    42     case 2048:
    43       return vwin4096;
    44     case 4096:
    45       return vwin8192;
    46     default:
    47       return(0);
    48     }
    49     break;
    50   default:
    51     return(0);
    52   }
    53 }
    55 void _vorbis_apply_window(ogg_int32_t *d,const void *window_p[2],
    56 			  long *blocksizes,
    57 			  int lW,int W,int nW){
    59   LOOKUP_T *window[2]={window_p[0],window_p[1]};
    60   long n=blocksizes[W];
    61   long ln=blocksizes[lW];
    62   long rn=blocksizes[nW];
    64   long leftbegin=n/4-ln/4;
    65   long leftend=leftbegin+ln/2;
    67   long rightbegin=n/2+n/4-rn/4;
    68   long rightend=rightbegin+rn/2;
    70   int i,p;
    72   for(i=0;i<leftbegin;i++)
    73     d[i]=0;
    75   for(p=0;i<leftend;i++,p++)
    76     d[i]=MULT31(d[i],window[lW][p]);
    78   for(i=rightbegin,p=rn/2-1;i<rightend;i++,p--)
    79     d[i]=MULT31(d[i],window[nW][p]);
    81   for(;i<n;i++)
    82     d[i]=0;
    83 }

mercurial