Mercurial > libavcodec.hg
comparison aaccoder.c @ 12257:ad42f9293ec6 libavcodec
aacenc: Factorize some scalefactor utilities.
author | alexc |
---|---|
date | Fri, 23 Jul 2010 22:37:42 +0000 |
parents | 0a63bed2a00e |
children | 86d6c00756cc |
comparison
equal
deleted
inserted
replaced
12256:6e6c92d36c4b | 12257:ad42f9293ec6 |
---|---|
513 } | 513 } |
514 put_bits(&s->pb, run_bits, count); | 514 put_bits(&s->pb, run_bits, count); |
515 } | 515 } |
516 } | 516 } |
517 | 517 |
518 /** Return the minimum scalefactor where the quantized coef does not clip. */ | |
519 static av_always_inline uint8_t coef2minsf(float coef) { | |
520 return av_clip_uint8(log2(coef)*4 - 69 + SCALE_ONE_POS - SCALE_DIV_512); | |
521 } | |
522 | |
523 /** Return the maximum scalefactor where the quantized coef is not zero. */ | |
524 static av_always_inline uint8_t coef2maxsf(float coef) { | |
525 return av_clip_uint8(log2(coef)*4 + 6 + SCALE_ONE_POS - SCALE_DIV_512); | |
526 } | |
527 | |
518 typedef struct TrellisPath { | 528 typedef struct TrellisPath { |
519 float cost; | 529 float cost; |
520 int prev; | 530 int prev; |
521 } TrellisPath; | 531 } TrellisPath; |
522 | 532 |
552 memset(sce->zeroes, 1, sizeof(sce->zeroes)); | 562 memset(sce->zeroes, 1, sizeof(sce->zeroes)); |
553 return; | 563 return; |
554 } | 564 } |
555 | 565 |
556 //minimum scalefactor index is when minimum nonzero coefficient after quantizing is not clipped | 566 //minimum scalefactor index is when minimum nonzero coefficient after quantizing is not clipped |
557 q0 = av_clip_uint8(log2(q0f)*4 - 69 + SCALE_ONE_POS - SCALE_DIV_512); | 567 q0 = coef2minsf(q0f); |
558 //maximum scalefactor index is when maximum coefficient after quantizing is still not zero | 568 //maximum scalefactor index is when maximum coefficient after quantizing is still not zero |
559 q1 = av_clip_uint8(log2(q1f)*4 + 6 + SCALE_ONE_POS - SCALE_DIV_512); | 569 q1 = coef2maxsf(q1f); |
560 //av_log(NULL, AV_LOG_ERROR, "q0 %d, q1 %d\n", q0, q1); | 570 //av_log(NULL, AV_LOG_ERROR, "q0 %d, q1 %d\n", q0, q1); |
561 if (q1 - q0 > 60) { | 571 if (q1 - q0 > 60) { |
562 int q0low = q0; | 572 int q0low = q0; |
563 int q1high = q1; | 573 int q1high = q1; |
564 //minimum scalefactor index is when maximum nonzero coefficient after quantizing is not clipped | 574 //minimum scalefactor index is when maximum nonzero coefficient after quantizing is not clipped |
616 if (nz) { | 626 if (nz) { |
617 int minscale, maxscale; | 627 int minscale, maxscale; |
618 float minrd = INFINITY; | 628 float minrd = INFINITY; |
619 float maxval; | 629 float maxval; |
620 //minimum scalefactor index is when minimum nonzero coefficient after quantizing is not clipped | 630 //minimum scalefactor index is when minimum nonzero coefficient after quantizing is not clipped |
621 minscale = av_clip_uint8(log2(qmin)*4 - 69 + SCALE_ONE_POS - SCALE_DIV_512); | 631 minscale = coef2minsf(qmin); |
622 //maximum scalefactor index is when maximum coefficient after quantizing is still not zero | 632 //maximum scalefactor index is when maximum coefficient after quantizing is still not zero |
623 maxscale = av_clip_uint8(log2(qmax)*4 + 6 + SCALE_ONE_POS - SCALE_DIV_512); | 633 maxscale = coef2maxsf(qmax); |
624 minscale = av_clip(minscale - q0, 0, TRELLIS_STATES - 1); | 634 minscale = av_clip(minscale - q0, 0, TRELLIS_STATES - 1); |
625 maxscale = av_clip(maxscale - q0, 0, TRELLIS_STATES); | 635 maxscale = av_clip(maxscale - q0, 0, TRELLIS_STATES); |
626 maxval = find_max_val(sce->ics.group_len[w], sce->ics.swb_sizes[g], s->scoefs+start); | 636 maxval = find_max_val(sce->ics.group_len[w], sce->ics.swb_sizes[g], s->scoefs+start); |
627 for (q = minscale; q < maxscale; q++) { | 637 for (q = minscale; q < maxscale; q++) { |
628 float dist = 0; | 638 float dist = 0; |