| 423 | */ |
| 424 | |
| 425 | static void categorize(COOKContext *q, COOKSubpacket *p, int* quant_index_table, |
| 426 | int* category, int* category_index){ |
| 427 | int exp_idx, bias, tmpbias1, tmpbias2, bits_left, num_bits, index, v, i, j; |
| 428 | int exp_index2[102]; |
| 429 | int exp_index1[102]; |
| 430 | |
| 431 | int tmp_categorize_array[128*2]; |
| 432 | int tmp_categorize_array1_idx=p->numvector_size; |
| 433 | int tmp_categorize_array2_idx=p->numvector_size; |
| 434 | |
| 435 | bits_left = p->bits_per_subpacket - get_bits_count(&q->gb); |
| 436 | |
| 437 | if(bits_left > q->samples_per_channel) { |
| 438 | bits_left = q->samples_per_channel + |
| 439 | ((bits_left - q->samples_per_channel)*5)/8; |
| 440 | //av_log(q->avctx, AV_LOG_ERROR, "bits_left = %d\n",bits_left); |
| 441 | } |
| 442 | |
| 443 | memset(&exp_index1,0,102*sizeof(int)); |
| 444 | memset(&exp_index2,0,102*sizeof(int)); |
| 445 | memset(&tmp_categorize_array,0,128*2*sizeof(int)); |
| 446 | |
| 447 | bias=-32; |
| 448 | |
| 449 | /* Estimate bias. */ |
| 450 | for (i=32 ; i>0 ; i=i/2){ |
| 451 | num_bits = 0; |
| 452 | index = 0; |
| 453 | for (j=p->total_subbands ; j>0 ; j--){ |
| 454 | exp_idx = av_clip((i - quant_index_table[index] + bias) / 2, 0, 7); |
| 455 | index++; |
| 456 | num_bits+=expbits_tab[exp_idx]; |
| 457 | } |
| 458 | if(num_bits >= bits_left - 32){ |
| 459 | bias+=i; |
| 460 | } |
| 461 | } |
| 462 | |
| 463 | /* Calculate total number of bits. */ |
| 464 | num_bits=0; |
| 465 | for (i=0 ; i<p->total_subbands ; i++) { |
| 466 | exp_idx = av_clip((bias - quant_index_table[i]) / 2, 0, 7); |
| 467 | num_bits += expbits_tab[exp_idx]; |
| 468 | exp_index1[i] = exp_idx; |
| 469 | exp_index2[i] = exp_idx; |
| 470 | } |
| 471 | tmpbias1 = tmpbias2 = num_bits; |
| 472 | |
| 473 | for (j = 1 ; j < p->numvector_size ; j++) { |
| 474 | if (tmpbias1 + tmpbias2 > 2*bits_left) { /* ---> */ |
| 475 | int max = -999999; |
| 476 | index=-1; |
| 477 | for (i=0 ; i<p->total_subbands ; i++){ |
| 478 | if (exp_index1[i] < 7) { |
| 479 | v = (-2*exp_index1[i]) - quant_index_table[i] + bias; |
| 480 | if ( v >= max) { |
| 481 | max = v; |
| 482 | index = i; |
no test coverage detected