22 #define BITSTREAM_READER_LE 
   37 #define WV_HEADER_SIZE    32 
   39 #define WV_MONO           0x00000004 
   40 #define WV_JOINT_STEREO   0x00000010 
   41 #define WV_FALSE_STEREO   0x40000000 
   43 #define WV_HYBRID_MODE    0x00000008 
   44 #define WV_HYBRID_SHAPE   0x00000008 
   45 #define WV_HYBRID_BITRATE 0x00000200 
   46 #define WV_HYBRID_BALANCE 0x00000400 
   47 #define WV_INITIAL_BLOCK  0x00000800 
   48 #define WV_FINAL_BLOCK    0x00001000 
   50 #define WV_SINGLE_BLOCK (WV_INITIAL_BLOCK | WV_FINAL_BLOCK) 
   52 #define WV_FLT_SHIFT_ONES 0x01 
   53 #define WV_FLT_SHIFT_SAME 0x02 
   54 #define WV_FLT_SHIFT_SENT 0x04 
   55 #define WV_FLT_ZERO_SENT  0x08 
   56 #define WV_FLT_ZERO_SIGN  0x10 
   58 #define WV_MAX_SAMPLES    131072 
  137 #define WV_MAX_FRAME_DECODERS 14 
  151      6000,  8000,  9600, 11025, 12000, 16000,  22050, 24000,
 
  152     32000, 44100, 48000, 64000, 88200, 96000, 192000,     0
 
  157     0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b,
 
  158     0x0b, 0x0c, 0x0d, 0x0e, 0x0e, 0x0f, 0x10, 0x10, 0x11, 0x12, 0x13, 0x13, 0x14, 0x15, 0x16, 0x16,
 
  159     0x17, 0x18, 0x19, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1d, 0x1e, 0x1f, 0x20, 0x20, 0x21, 0x22, 0x23,
 
  160     0x24, 0x24, 0x25, 0x26, 0x27, 0x28, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
 
  161     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c, 0x3d,
 
  162     0x3e, 0x3f, 0x40, 0x41, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x48, 0x49, 0x4a, 0x4b,
 
  163     0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a,
 
  164     0x5b, 0x5c, 0x5d, 0x5e, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
 
  165     0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
 
  166     0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x87, 0x88, 0x89, 0x8a,
 
  167     0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b,
 
  168     0x9c, 0x9d, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad,
 
  169     0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
 
  170     0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc8, 0xc9, 0xca, 0xcb, 0xcd, 0xce, 0xcf, 0xd0, 0xd2, 0xd3, 0xd4,
 
  171     0xd6, 0xd7, 0xd8, 0xd9, 0xdb, 0xdc, 0xdd, 0xde, 0xe0, 0xe1, 0xe2, 0xe4, 0xe5, 0xe6, 0xe8, 0xe9,
 
  172     0xea, 0xec, 0xed, 0xee, 0xf0, 0xf1, 0xf2, 0xf4, 0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xff
 
  176     0x00, 0x01, 0x03, 0x04, 0x06, 0x07, 0x09, 0x0a, 0x0b, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x15,
 
  177     0x16, 0x18, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x20, 0x21, 0x22, 0x24, 0x25, 0x26, 0x28, 0x29, 0x2a,
 
  178     0x2c, 0x2d, 0x2e, 0x2f, 0x31, 0x32, 0x33, 0x34, 0x36, 0x37, 0x38, 0x39, 0x3b, 0x3c, 0x3d, 0x3e,
 
  179     0x3f, 0x41, 0x42, 0x43, 0x44, 0x45, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
 
  180     0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63,
 
  181     0x64, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x74, 0x75,
 
  182     0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85,
 
  183     0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95,
 
  184     0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4,
 
  185     0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb2,
 
  186     0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc0,
 
  187     0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcb, 0xcc, 0xcd, 0xce,
 
  188     0xcf, 0xd0, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd8, 0xd9, 0xda, 0xdb,
 
  189     0xdc, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe4, 0xe5, 0xe6, 0xe7, 0xe7,
 
  190     0xe8, 0xe9, 0xea, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xee, 0xef, 0xf0, 0xf1, 0xf1, 0xf2, 0xf3, 0xf4,
 
  191     0xf4, 0xf5, 0xf6, 0xf7, 0xf7, 0xf8, 0xf9, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe, 0xff, 0xff
 
  205     res   = (val > 9) ? (res << (val - 9)) : (res >> (9 - val));
 
  206     return neg ? -res : 
res;
 
  222         return (bits << 8) + 
wp_log2_table[(val >> (bits - 9)) & 0xFF];
 
  225 #define LEVEL_DECAY(a)  ((a + 0x80) >> 8) 
  228 #define GET_MED(n) ((c->median[n] >> 4) + 1) 
  229 #define DEC_MED(n) c->median[n] -= ((c->median[n] + (128 >> n) - 2) / (128 >> n)) * 2 
  230 #define INC_MED(n) c->median[n] += ((c->median[n] + (128 >> n)    ) / (128 >> n)) * 5 
  233 #define UPDATE_WEIGHT_CLIP(weight, delta, samples, in) \ 
  234     if (samples && in) { \ 
  235         if ((samples ^ in) < 0) { \ 
  237             if (weight < -1024) \ 
  253     e   = (1 << (p + 1)) - k - 1;
 
  270         int balance = (sl[1] - sl[0] + br[1] + 1) >> 1;
 
  271         if (balance > br[0]) {
 
  274         } 
else if (-balance > br[0]) {
 
  278             br[1] = br[0] + balance;
 
  279             br[0] = br[0] - balance;
 
  284             if (sl[i] - br[i] > -0x100)
 
  295                         int channel, 
int *last)
 
  298     int sign, base, add, 
ret;
 
  316                 t = 
get_bits(gb, t - 1) | (1 << (t - 1));
 
  347                 t += 
get_bits(gb, t2 - 1) | (1 << (t2 - 1));
 
  361     if (ctx->
hybrid && !channel)
 
  387         if (add >= 0x2000000U) {
 
  395         int mid = (base * 2 + add + 1) >> 1;
 
  403                 add = mid - base - 1;
 
  404             mid = (base * 2 + add + 1) >> 1;
 
  411     return sign ? ~ret : 
ret;
 
  429             *crc = *crc * 9 + (S & 0xffff) * 3 + ((
unsigned)S >> 16);
 
  433     bit = (S & s->
and) | s->
or;
 
  434     bit = ((S + bit) << s->
shift) - bit;
 
  453         const int max_bits  = 1 + 23 + 8 + 1;
 
  465         if (S >= 0x1000000) {
 
  484                     S |= (1 << 
shift) - 1;
 
  510     *crc = *crc * 27 + S * 9 + exp * 3 + sign;
 
  512     value.u = (sign << 31) | (exp << 23) | 
S;
 
  523                                uint32_t crc_extra_bits)
 
  538                                    void *dst_l, 
void *dst_r, 
const int type)
 
  544     uint32_t crc            = s->
sc.
crc;
 
  546     int16_t *dst16_l        = dst_l;
 
  547     int16_t *dst16_r        = dst_r;
 
  550     float *dstfl_l          = dst_l;
 
  551     float *dstfl_r          = dst_r;
 
  561         for (i = 0; i < s->
terms; i++) {
 
  593             } 
else if (t == -1) {
 
  631             L += (R -= (L >> 1));
 
  632         crc = (crc * 3 + 
L) * 3 + R;
 
  645     } 
while (!last && count < s->samples);
 
  656                                  void *dst, 
const int type)
 
  662     uint32_t crc             = s->
sc.
crc;
 
  664     int16_t *dst16           = dst;
 
  674         for (i = 0; i < s->
terms; i++) {
 
  706     } 
while (!last && count < s->samples);
 
  768     void *samples_l, *samples_r;
 
  770     int got_terms   = 0, got_weights = 0, got_samples = 0,
 
  771         got_entropy = 0, got_bs      = 0, got_float   = 0, got_hybrid = 0;
 
  772     int i, j, 
id, 
size, ssize, weights, 
t;
 
  773     int bpp, chan = 0, chmask = 0, orig_bpp, 
sample_rate = 0;
 
  781     s = wc->
fdec[block_no];
 
  789     memset(s->
ch, 0, 
sizeof(s->
ch));
 
  796     s->
samples = bytestream2_get_le32(&gb);
 
  815     s->
CRC            = bytestream2_get_le32(&gb);
 
  819         id   = bytestream2_get_byte(&gb);
 
  820         size = bytestream2_get_byte(&gb);
 
  822             size |= (bytestream2_get_byte(&gb)) << 8;
 
  823             size |= (bytestream2_get_byte(&gb)) << 16;
 
  831                    "Got incorrect block %02X with size %i\n", 
id, size);
 
  836                    "Block size %i is out of bounds\n", size);
 
  848             for (i = 0; i < s->
terms; i++) {
 
  866             for (i = 0; i < weights; i++) {
 
  867                 t = (int8_t)bytestream2_get_byte(&gb);
 
  873                     t = (int8_t)bytestream2_get_byte(&gb);
 
  888             for (i = s->
terms - 1; (i >= 0) && (t < size); i--) {
 
  891                         wp_exp2(bytestream2_get_le16(&gb));
 
  893                         wp_exp2(bytestream2_get_le16(&gb));
 
  897                             wp_exp2(bytestream2_get_le16(&gb));
 
  899                             wp_exp2(bytestream2_get_le16(&gb));
 
  905                         wp_exp2(bytestream2_get_le16(&gb));
 
  907                         wp_exp2(bytestream2_get_le16(&gb));
 
  912                             wp_exp2(bytestream2_get_le16(&gb));
 
  915                                 wp_exp2(bytestream2_get_le16(&gb));
 
  926                        "Entropy vars size should be %i, got %i.\n",
 
  932                 for (i = 0; i < 3; i++) {
 
  944             for (i = 0; i < (s->
stereo_in + 1); i++) {
 
  949                 for (i = 0; i < (s->
stereo_in + 1); i++) {
 
  951                         wp_exp2((int16_t)bytestream2_get_le16(&gb));
 
  963                        "Invalid INT32INFO, size = %i\n",
 
  993                        "Invalid FLOATINFO, size = %i\n", size);
 
 1028                        "Insufficient channel information\n");
 
 1031             chan = bytestream2_get_byte(&gb);
 
 1034                 chmask = bytestream2_get_byte(&gb);
 
 1037                 chmask = bytestream2_get_le16(&gb);
 
 1040                 chmask = bytestream2_get_le24(&gb);
 
 1043                 chmask = bytestream2_get_le32(&gb);
 
 1047                 chan  |= (bytestream2_get_byte(&gb) & 0xF) << 8;
 
 1048                 chmask = bytestream2_get_le16(&gb);
 
 1062             sample_rate = bytestream2_get_le24(&gb);
 
 1067         if (
id & WP_IDF_ODD)
 
 1087     if (s->
hybrid && !got_hybrid) {
 
 1102         if (size < wanted) {
 
 1158             memcpy(samples_r, samples_l, bpp * s->
samples);
 
 1174                                 int *got_frame_ptr, 
AVPacket *avpkt)
 
 1178     int buf_size       = avpkt->
size;
 
 1190     frame_flags = 
AV_RL32(buf + 24);
 
 1197     if (frame_flags & 0x80) {
 
 1199     } 
else if ((frame_flags & 0x03) <= 1) {
 
 1206     while (buf_size > 0) {
 
 1209         frame_size = 
AV_RL32(buf + 4) - 12;
 
 1212         if (frame_size <= 0 || frame_size > buf_size) {
 
 1214                    "Block %d has invalid size (size %d vs. %d bytes left)\n",
 
 1215                    s->
block, frame_size, buf_size);
 
 1220                                         frame, buf, frame_size)) < 0) {