Mercurial > libavcodec.hg
comparison flac.c @ 3434:d42ab8824434 libavcodec
seems i forgot to commit this simplification ...
author | michael |
---|---|
date | Fri, 07 Jul 2006 22:41:43 +0000 |
parents | 42b85e03b408 |
children | 3ccec186532f |
comparison
equal
deleted
inserted
replaced
3433:e1906b2f1daf | 3434:d42ab8824434 |
---|---|
695 } | 695 } |
696 *data_size += s->blocksize; | 696 *data_size += s->blocksize; |
697 } | 697 } |
698 } | 698 } |
699 #else | 699 #else |
700 #define DECORRELATE(left, right)\ | |
701 assert(s->channels == 2);\ | |
702 for (i = 0; i < s->blocksize; i++)\ | |
703 {\ | |
704 int a= s->decoded[0][i];\ | |
705 int b= s->decoded[1][i];\ | |
706 *(samples++) = (left ) >> (16 - s->bps);\ | |
707 *(samples++) = (right) >> (16 - s->bps);\ | |
708 }\ | |
709 break; | |
710 | |
700 switch(s->decorrelation) | 711 switch(s->decorrelation) |
701 { | 712 { |
702 case INDEPENDENT: | 713 case INDEPENDENT: |
703 for (j = 0; j < s->blocksize; j++) | 714 for (j = 0; j < s->blocksize; j++) |
704 { | 715 { |
705 for (i = 0; i < s->channels; i++) | 716 for (i = 0; i < s->channels; i++) |
706 *(samples++) = shift_to_16_bits(s->decoded[i][j], s->bps); | 717 *(samples++) = shift_to_16_bits(s->decoded[i][j], s->bps); |
707 } | 718 } |
708 break; | 719 break; |
709 case LEFT_SIDE: | 720 case LEFT_SIDE: |
710 assert(s->channels == 2); | 721 DECORRELATE(a,a-b) |
711 for (i = 0; i < s->blocksize; i++) | |
712 { | |
713 *(samples++) = shift_to_16_bits(s->decoded[0][i], s->bps); | |
714 *(samples++) = shift_to_16_bits(s->decoded[0][i] | |
715 - s->decoded[1][i], s->bps); | |
716 } | |
717 break; | |
718 case RIGHT_SIDE: | 722 case RIGHT_SIDE: |
719 assert(s->channels == 2); | 723 DECORRELATE(a+b,b) |
720 for (i = 0; i < s->blocksize; i++) | |
721 { | |
722 *(samples++) = shift_to_16_bits(s->decoded[0][i] | |
723 + s->decoded[1][i], s->bps); | |
724 *(samples++) = shift_to_16_bits(s->decoded[1][i], s->bps); | |
725 } | |
726 break; | |
727 case MID_SIDE: | 724 case MID_SIDE: |
728 assert(s->channels == 2); | 725 DECORRELATE( (a-=b>>1) + b, a) |
729 for (i = 0; i < s->blocksize; i++) | |
730 { | |
731 int mid, side; | |
732 mid = s->decoded[0][i]; | |
733 side = s->decoded[1][i]; | |
734 | |
735 #if 1 //needs to be checked but IMHO it should be binary identical | |
736 mid -= side>>1; | |
737 *(samples++) = shift_to_16_bits(mid + side, s->bps); | |
738 *(samples++) = shift_to_16_bits(mid, s->bps); | |
739 #else | |
740 | |
741 mid <<= 1; | |
742 if (side & 1) | |
743 mid++; | |
744 *(samples++) = (mid + side) >> 1; | |
745 *(samples++) = (mid - side) >> 1; | |
746 #endif | |
747 } | |
748 break; | |
749 } | 726 } |
750 #endif | 727 #endif |
751 | 728 |
752 *data_size = (int8_t *)samples - (int8_t *)data; | 729 *data_size = (int8_t *)samples - (int8_t *)data; |
753 // av_log(s->avctx, AV_LOG_DEBUG, "data size: %d\n", *data_size); | 730 // av_log(s->avctx, AV_LOG_DEBUG, "data size: %d\n", *data_size); |