mozilla-bmo1446062.patch
branchfirefox59
changeset 1041 516dd1ea89e8
parent 1040 246b98b59979
child 1042 98918ef16ab5
equal deleted inserted replaced
1040:246b98b59979 1041:516dd1ea89e8
     1 
       
     2 # HG changeset patch
       
     3 # User Thomas Daede <daede003@umn.edu>
       
     4 # Date 1521175629 25200
       
     5 # Node ID 5cd5586a2f48424a9031a3fa4c782954a9df9a52
       
     6 # Parent  494e5d5278ba6f5fdda9a2bb9ac7ca772653ee4a
       
     7 Bug 1446062: libtremor Vorbis fix.  r=jmspeex  a=dveditz
       
     8 
       
     9 diff --git a/media/libtremor/lib/tremor_codebook.c b/media/libtremor/lib/tremor_codebook.c
       
    10 --- a/media/libtremor/lib/tremor_codebook.c
       
    11 +++ b/media/libtremor/lib/tremor_codebook.c
       
    12 @@ -253,26 +253,26 @@ long vorbis_book_decodevs_add(codebook *
       
    13      
       
    14      if(shift>=0){
       
    15        for (i = 0; i < step; i++) {
       
    16  	entry[i]=decode_packed_entry_number(book,b);
       
    17  	if(entry[i]==-1)return(-1);
       
    18  	t[i] = book->valuelist+entry[i]*book->dim;
       
    19        }
       
    20        for(i=0,o=0;i<book->dim;i++,o+=step)
       
    21 -	for (j=0;j<step;j++)
       
    22 +	for (j=0;o+j<n && j<step;j++)
       
    23  	  a[o+j]+=t[j][i]>>shift;
       
    24      }else{
       
    25        for (i = 0; i < step; i++) {
       
    26  	entry[i]=decode_packed_entry_number(book,b);
       
    27  	if(entry[i]==-1)return(-1);
       
    28  	t[i] = book->valuelist+entry[i]*book->dim;
       
    29        }
       
    30        for(i=0,o=0;i<book->dim;i++,o+=step)
       
    31 -	for (j=0;j<step;j++)
       
    32 +	for (j=0;o+j<n && j<step;j++)
       
    33  	  a[o+j]+=t[j][i]<<-shift;
       
    34      }
       
    35    }
       
    36    return(0);
       
    37  }
       
    38  
       
    39  /* decode vector / dim granularity gaurding is done in the upper layer */
       
    40  long vorbis_book_decodev_add(codebook *book,ogg_int32_t *a,
       
    41 @@ -282,25 +282,25 @@ long vorbis_book_decodev_add(codebook *b
       
    42      ogg_int32_t *t;
       
    43      int shift=point-book->binarypoint;
       
    44      
       
    45      if(shift>=0){
       
    46        for(i=0;i<n;){
       
    47  	entry = decode_packed_entry_number(book,b);
       
    48  	if(entry==-1)return(-1);
       
    49  	t     = book->valuelist+entry*book->dim;
       
    50 -	for (j=0;j<book->dim;)
       
    51 +	for (j=0;i<n && j<book->dim;)
       
    52  	  a[i++]+=t[j++]>>shift;
       
    53        }
       
    54      }else{
       
    55        for(i=0;i<n;){
       
    56  	entry = decode_packed_entry_number(book,b);
       
    57  	if(entry==-1)return(-1);
       
    58  	t     = book->valuelist+entry*book->dim;
       
    59 -	for (j=0;j<book->dim;)
       
    60 +	for (j=0;i<n && j<book->dim;)
       
    61  	  a[i++]+=t[j++]<<-shift;
       
    62        }
       
    63      }
       
    64    }
       
    65    return(0);
       
    66  }
       
    67  
       
    68  /* unlike the others, we guard against n not being an integer number
       
    69 @@ -347,41 +347,41 @@ long vorbis_book_decodev_set(codebook *b
       
    70  /* decode vector / dim granularity gaurding is done in the upper layer */
       
    71  long vorbis_book_decodevv_add(codebook *book,ogg_int32_t **a,\
       
    72  			      long offset,int ch,
       
    73  			      oggpack_buffer *b,int n,int point){
       
    74    if(book->used_entries>0){
       
    75      long i,j,entry;
       
    76      int chptr=0;
       
    77      int shift=point-book->binarypoint;
       
    78 -    
       
    79 +    int m=offset+n;
       
    80      if(shift>=0){
       
    81        
       
    82 -      for(i=offset;i<offset+n;){
       
    83 +      for(i=offset;i<m;){
       
    84  	entry = decode_packed_entry_number(book,b);
       
    85  	if(entry==-1)return(-1);
       
    86  	{
       
    87  	  const ogg_int32_t *t = book->valuelist+entry*book->dim;
       
    88 -	  for (j=0;j<book->dim;j++){
       
    89 +	  for (j=0;i<m && j<book->dim;j++){
       
    90  	    a[chptr++][i]+=t[j]>>shift;
       
    91  	    if(chptr==ch){
       
    92  	      chptr=0;
       
    93  	      i++;
       
    94  	    }
       
    95  	  }
       
    96  	}
       
    97        }
       
    98      }else{
       
    99        
       
   100 -      for(i=offset;i<offset+n;){
       
   101 +      for(i=offset;i<m;){
       
   102  	entry = decode_packed_entry_number(book,b);
       
   103  	if(entry==-1)return(-1);
       
   104  	{
       
   105  	  const ogg_int32_t *t = book->valuelist+entry*book->dim;
       
   106 -	  for (j=0;j<book->dim;j++){
       
   107 +	  for (j=0;i<m && j<book->dim;j++){
       
   108  	    a[chptr++][i]+=t[j]<<-shift;
       
   109  	    if(chptr==ch){
       
   110  	      chptr=0;
       
   111  	      i++;
       
   112  	    }
       
   113  	  }
       
   114  	}
       
   115        }
       
   116