diff options
Diffstat (limited to 'apps/codecs/libtremor/codebook.c')
-rw-r--r-- | apps/codecs/libtremor/codebook.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/apps/codecs/libtremor/codebook.c b/apps/codecs/libtremor/codebook.c index e00d648a59..9413257e2a 100644 --- a/apps/codecs/libtremor/codebook.c +++ b/apps/codecs/libtremor/codebook.c | |||
@@ -380,6 +380,7 @@ long vorbis_book_decode(codebook *book, oggpack_buffer *b){ | |||
380 | } | 380 | } |
381 | 381 | ||
382 | /* returns 0 on OK or -1 on eof *************************************/ | 382 | /* returns 0 on OK or -1 on eof *************************************/ |
383 | /* decode vector / dim granularity gaurding is done in the upper layer */ | ||
383 | long vorbis_book_decodevs_add(codebook *book,ogg_int32_t *a, | 384 | long vorbis_book_decodevs_add(codebook *book,ogg_int32_t *a, |
384 | oggpack_buffer *b,int n,int point){ | 385 | oggpack_buffer *b,int n,int point){ |
385 | if(book->used_entries>0){ | 386 | if(book->used_entries>0){ |
@@ -412,6 +413,7 @@ long vorbis_book_decodevs_add(codebook *book,ogg_int32_t *a, | |||
412 | return(0); | 413 | return(0); |
413 | } | 414 | } |
414 | 415 | ||
416 | /* decode vector / dim granularity gaurding is done in the upper layer */ | ||
415 | long vorbis_book_decodev_add(codebook *book,ogg_int32_t *a, | 417 | long vorbis_book_decodev_add(codebook *book,ogg_int32_t *a, |
416 | oggpack_buffer *b,int n,int point){ | 418 | oggpack_buffer *b,int n,int point){ |
417 | if(book->used_entries>0){ | 419 | if(book->used_entries>0){ |
@@ -441,6 +443,9 @@ long vorbis_book_decodev_add(codebook *book,ogg_int32_t *a, | |||
441 | return(0); | 443 | return(0); |
442 | } | 444 | } |
443 | 445 | ||
446 | /* unlike the others, we guard against n not being an integer number | ||
447 | of <dim> internally rather than in the upper layer (called only by | ||
448 | floor0) */ | ||
444 | long vorbis_book_decodev_set(codebook *book,ogg_int32_t *a, | 449 | long vorbis_book_decodev_set(codebook *book,ogg_int32_t *a, |
445 | oggpack_buffer *b,int n,int point){ | 450 | oggpack_buffer *b,int n,int point){ |
446 | if(book->used_entries>0){ | 451 | if(book->used_entries>0){ |
@@ -454,7 +459,7 @@ long vorbis_book_decodev_set(codebook *book,ogg_int32_t *a, | |||
454 | entry = decode_packed_entry_number(book,b); | 459 | entry = decode_packed_entry_number(book,b); |
455 | if(entry==-1)return(-1); | 460 | if(entry==-1)return(-1); |
456 | t = book->valuelist+entry*book->dim; | 461 | t = book->valuelist+entry*book->dim; |
457 | for (j=0;j<book->dim;){ | 462 | for (j=0;i<n && j<book->dim;){ |
458 | a[i++]=t[j++]>>shift; | 463 | a[i++]=t[j++]>>shift; |
459 | } | 464 | } |
460 | } | 465 | } |
@@ -464,23 +469,22 @@ long vorbis_book_decodev_set(codebook *book,ogg_int32_t *a, | |||
464 | entry = decode_packed_entry_number(book,b); | 469 | entry = decode_packed_entry_number(book,b); |
465 | if(entry==-1)return(-1); | 470 | if(entry==-1)return(-1); |
466 | t = book->valuelist+entry*book->dim; | 471 | t = book->valuelist+entry*book->dim; |
467 | for (j=0;j<book->dim;){ | 472 | for (j=0;i<n && j<book->dim;){ |
468 | a[i++]=t[j++]<<shift; | 473 | a[i++]=t[j++]<<shift; |
469 | } | 474 | } |
470 | } | 475 | } |
471 | } | 476 | } |
472 | }else{ | 477 | }else{ |
473 | 478 | ||
474 | int i,j; | 479 | int i; |
475 | for(i=0;i<n;){ | 480 | for(i=0;i<n;){ |
476 | for (j=0;j<book->dim;){ | 481 | a[i++]=0; |
477 | a[i++]=0; | ||
478 | } | ||
479 | } | 482 | } |
480 | } | 483 | } |
481 | return(0); | 484 | return(0); |
482 | } | 485 | } |
483 | 486 | ||
487 | /* decode vector / dim granularity gaurding is done in the upper layer */ | ||
484 | static long vorbis_book_decodevv_add_2ch_even(codebook *book,ogg_int32_t **a, | 488 | static long vorbis_book_decodevv_add_2ch_even(codebook *book,ogg_int32_t **a, |
485 | long offset,oggpack_buffer *b, | 489 | long offset,oggpack_buffer *b, |
486 | unsigned int n,int point){ | 490 | unsigned int n,int point){ |