Mercurial > libavcodec.hg
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) { |