comparison dca.c @ 4876:384c95879d8b libavcodec

1000l to myself as used VLC indexes were totally wrong
author kostya
date Tue, 24 Apr 2007 17:31:39 +0000
parents 011fb289e3b0
children 9055ed00a295
comparison
equal deleted inserted replaced
4875:90d7898ff5d5 4876:384c95879d8b
393 393
394 return 0; 394 return 0;
395 } 395 }
396 396
397 397
398 static inline int get_scale(GetBitContext *gb, int level, int index, int value) 398 static inline int get_scale(GetBitContext *gb, int level, int value)
399 { 399 {
400 if (level < 5) { 400 if (level < 5) {
401 /* huffman encoded */ 401 /* huffman encoded */
402 value += get_bitalloc(gb, &dca_scalefactor, index); 402 value += get_bitalloc(gb, &dca_scalefactor, level);
403 } else if(level < 8) 403 } else if(level < 8)
404 value = get_bits(gb, level + 1); 404 value = get_bits(gb, level + 1);
405 return value; 405 return value;
406 } 406 }
407 407
434 s->bitalloc[j][k] = get_bits(&s->gb, 5); 434 s->bitalloc[j][k] = get_bits(&s->gb, 5);
435 else if (s->bitalloc_huffman[j] == 5) 435 else if (s->bitalloc_huffman[j] == 5)
436 s->bitalloc[j][k] = get_bits(&s->gb, 4); 436 s->bitalloc[j][k] = get_bits(&s->gb, 4);
437 else { 437 else {
438 s->bitalloc[j][k] = 438 s->bitalloc[j][k] =
439 get_bitalloc(&s->gb, &dca_bitalloc_index, j); 439 get_bitalloc(&s->gb, &dca_bitalloc_index, s->bitalloc_huffman[j]);
440 } 440 }
441 441
442 if (s->bitalloc[j][k] > 26) { 442 if (s->bitalloc[j][k] > 26) {
443 // av_log(s->avctx,AV_LOG_DEBUG,"bitalloc index [%i][%i] too big (%i)\n", 443 // av_log(s->avctx,AV_LOG_DEBUG,"bitalloc index [%i][%i] too big (%i)\n",
444 // j, k, s->bitalloc[j][k]); 444 // j, k, s->bitalloc[j][k]);
473 /* When huffman coded, only the difference is encoded */ 473 /* When huffman coded, only the difference is encoded */
474 scale_sum = 0; 474 scale_sum = 0;
475 475
476 for (k = 0; k < s->subband_activity[j]; k++) { 476 for (k = 0; k < s->subband_activity[j]; k++) {
477 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) { 477 if (k >= s->vq_start_subband[j] || s->bitalloc[j][k] > 0) {
478 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], j, scale_sum); 478 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
479 s->scale_factor[j][k][0] = scale_table[scale_sum]; 479 s->scale_factor[j][k][0] = scale_table[scale_sum];
480 } 480 }
481 481
482 if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) { 482 if (k < s->vq_start_subband[j] && s->transition_mode[j][k]) {
483 /* Get second scale factor */ 483 /* Get second scale factor */
484 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], j, scale_sum); 484 scale_sum = get_scale(&s->gb, s->scalefactor_huffman[j], scale_sum);
485 s->scale_factor[j][k][1] = scale_table[scale_sum]; 485 s->scale_factor[j][k][1] = scale_table[scale_sum];
486 } 486 }
487 } 487 }
488 } 488 }
489 489
505 505
506 /* When huffman coded, only the difference is encoded 506 /* When huffman coded, only the difference is encoded
507 * (is this valid as well for joint scales ???) */ 507 * (is this valid as well for joint scales ???) */
508 508
509 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) { 509 for (k = s->subband_activity[j]; k < s->subband_activity[source_channel]; k++) {
510 scale = get_scale(&s->gb, s->joint_huff[j], j, 0); 510 scale = get_scale(&s->gb, s->joint_huff[j], 0);
511 scale += 64; /* bias */ 511 scale += 64; /* bias */
512 s->joint_scale_factor[j][k] = scale; /*joint_scale_table[scale]; */ 512 s->joint_scale_factor[j][k] = scale; /*joint_scale_table[scale]; */
513 } 513 }
514 514
515 if (!s->debug_flag & 0x02) { 515 if (!s->debug_flag & 0x02) {