1 /*
2 * WavPack lossless audio decoder
3 * Copyright (c) 2006,2011 Konstantin Shishkov
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 #define BITSTREAM_READER_LE
23
31
32 /**
33 * @file
34 * WavPack lossless audio decoder
35 */
36
37 #define WV_HEADER_SIZE 32
38
39 #define WV_MONO 0x00000004
40 #define WV_JOINT_STEREO 0x00000010
41 #define WV_FALSE_STEREO 0x40000000
42
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
49
50 #define WV_SINGLE_BLOCK (WV_INITIAL_BLOCK | WV_FINAL_BLOCK)
51
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
57
58 #define WV_MAX_SAMPLES 131072
59
65 };
66
83 };
84
91
93
102
108
136
137 #define WV_MAX_FRAME_DECODERS 14
138
141
144
149
151 6000, 8000, 9600, 11025, 12000, 16000, 22050, 24000,
152 32000, 44100, 48000, 64000, 88200, 96000, 192000, 0
153 };
154
155 // exponent table copied from WavPack source
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
173 };
174
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
192 };
193
195 {
197
198 if (val < 0) {
200 neg = 1;
201 }
202
204 val >>= 8;
205 res = (val > 9) ? (res << (val - 9)) : (res >> (9 - val));
206 return neg ? -res :
res;
207 }
208
210 {
212
213 if (!val)
214 return 0;
215 if (val == 1)
216 return 256;
217 val += val >> 9;
219 if (bits < 9)
221 else
222 return (bits << 8) +
wp_log2_table[(val >> (bits - 9)) & 0xFF];
223 }
224
225 #define LEVEL_DECAY(a) ((a + 0x80) >> 8)
226
227 // macros for manipulating median values
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
231
232 // macros for applying weight
233 #define UPDATE_WEIGHT_CLIP(weight, delta, samples, in) \
234 if (samples && in) { \
235 if ((samples ^ in) < 0) { \
236 weight -= delta; \
237 if (weight < -1024) \
238 weight = -1024; \
239 } else { \
240 weight += delta; \
241 if (weight > 1024) \
242 weight = 1024; \
243 } \
244 }
245
247 {
249
250 if (k < 1)
251 return 0;
253 e = (1 << (p + 1)) - k - 1;
255 if (res >= e)
258 }
259
261 {
262 int i, br[2], sl[2];
263
268 }
270 int balance = (sl[1] - sl[0] + br[1] + 1) >> 1;
271 if (balance > br[0]) {
272 br[1] = br[0] << 1;
273 br[0] = 0;
274 } else if (-balance > br[0]) {
275 br[0] <<= 1;
276 br[1] = 0;
277 } else {
278 br[1] = br[0] + balance;
279 br[0] = br[0] - balance;
280 }
281 }
284 if (sl[i] - br[i] > -0x100)
286 else
288 } else {
290 }
291 }
292 }
293
295 int channel, int *last)
296 {
298 int sign, base, add,
ret;
300
301 *last = 0;
302
309 return 0;
310 }
311 } else {
313 if (t >= 2) {
315 goto error;
316 t =
get_bits(gb, t - 1) | (1 << (t - 1));
317 } else {
319 goto error;
320 }
326 return 0;
327 }
328 }
329 }
330
332 t = 0;
334 } else {
337 goto error;
338 if (t == 16) {
340 if (t2 < 2) {
342 goto error;
344 } else {
346 goto error;
347 t +=
get_bits(gb, t2 - 1) | (1 << (t2 - 1));
348 }
349 }
350
353 t = (t >> 1) + 1;
354 } else {
356 t >>= 1;
357 }
359 }
360
361 if (ctx->
hybrid && !channel)
363
364 if (!t) {
365 base = 0;
368 } else if (t == 1) {
373 } else if (t == 2) {
379 } else {
385 }
387 if (add >= 0x2000000U) {
389 goto error;
390 }
393 goto error;
394 } else {
395 int mid = (base * 2 + add + 1) >> 1;
398 goto error;
400 add -= (mid - base);
401 base = mid;
402 } else
403 add = mid - base - 1;
404 mid = (base * 2 + add + 1) >> 1;
405 }
406 ret = mid;
407 }
411 return sign ? ~ret :
ret;
412
413 error:
414 *last = 1;
415 return 0;
416 }
417
420 {
421 int bit;
422
425
429 *crc = *crc * 9 + (S & 0xffff) * 3 + ((unsigned)S >> 16);
430 }
431 }
432
433 bit = (S & s->
and) | s->
or;
434 bit = ((S + bit) << s->
shift) - bit;
435
438
440 }
441
443 {
444 union {
445 float f;
448
449 unsigned int sign;
451
453 const int max_bits = 1 + 23 + 8 + 1;
455
457 return 0.0;
458 }
459
460 if (S) {
462 sign = S < 0;
463 if (sign)
465 if (S >= 0x1000000) {
468 else
469 S = 0;
470 exp = 255;
471 } else if (exp) {
474 if (exp <= shift)
475 shift = --exp;
477
478 if (shift) {
484 S |= (1 <<
shift) - 1;
488 }
489 }
490 } else {
492 }
493 S &= 0x7fffff;
494 } else {
495 sign = 0;
496 exp = 0;
503 } else {
506 }
507 }
508 }
509
510 *crc = *crc * 27 + S * 9 + exp * 3 + sign;
511
512 value.u = (sign << 31) | (exp << 23) |
S;
514 }
515
517 {
520 }
521
523 uint32_t crc_extra_bits)
524 {
528 }
532 }
533
534 return 0;
535 }
536
538 void *dst_l, void *dst_r, const int type)
539 {
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;
552
554 do {
556 if (last)
557 break;
559 if (last)
560 break;
561 for (i = 0; i < s->
terms; i++) {
563 if (t > 0) {
564 if (t > 8) {
565 if (t & 1) {
568 } else {
571 }
574 j = 0;
575 } else {
579 }
583 } else {
586 }
587 if (A && L)
589 if (B && R)
593 } else if (t == -1) {
596 else
599 L = L2;
602 else
607 } else {
610 else
614
615 if (t == -3) {
618 }
619
622 else
625 L = L2;
627 }
628 }
629 pos = (pos + 1) & 7;
631 L += (R -= (L >> 1));
632 crc = (crc * 3 +
L) * 3 + R;
633
640 } else {
643 }
644 count++;
645 } while (!last && count < s->samples);
646
651
652 return 0;
653 }
654
656 void *dst, const int type)
657 {
662 uint32_t crc = s->
sc.
crc;
664 int16_t *dst16 = dst;
666 float *dstfl = dst;
667
669 do {
671 S = 0;
672 if (last)
673 break;
674 for (i = 0; i < s->
terms; i++) {
676 if (t > 8) {
677 if (t & 1)
679 else
682 j = 0;
683 } else {
686 }
689 else
691 if (A && T)
694 }
695 pos = (pos + 1) & 7;
697
702 } else {
704 }
705 count++;
706 } while (!last && count < s->samples);
707
712
713 return 0;
714 }
715
717 {
719 return -1;
720
723 return -1;
727
728 return 0;
729 }
730
732 {
735 return 0;
736 }
737
739 {
741
743
745
746 return 0;
747 }
748
750 {
752 int i;
753
757
758 return 0;
759 }
760
763 {
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;
774 int multiblock;
775
779 }
780
781 s = wc->
fdec[block_no];
782 if (!s) {
784 block_no);
786 }
787
789 memset(s->
ch, 0,
sizeof(s->
ch));
793
795
796 s->
samples = bytestream2_get_le32(&gb);
801 }
806
815 s->
CRC = bytestream2_get_le32(&gb);
816
817 // parse metadata blocks
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;
824 }
825 size <<= 1; // size is specified in words
828 size--;
829 if (size < 0) {
831 "Got incorrect block %02X with size %i\n", id, size);
832 break;
833 }
836 "Block size %i is out of bounds\n", size);
837 break;
838 }
845 continue;
846 }
848 for (i = 0; i < s->
terms; i++) {
852 }
853 got_terms = 1;
854 break;
856 if (!got_terms) {
858 continue;
859 }
864 continue;
865 }
866 for (i = 0; i < weights; i++) {
867 t = (int8_t)bytestream2_get_byte(&gb);
873 t = (int8_t)bytestream2_get_byte(&gb);
878 }
879 }
880 got_weights = 1;
881 break;
883 if (!got_terms) {
885 continue;
886 }
887 t = 0;
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));
894
897 wp_exp2(bytestream2_get_le16(&gb));
899 wp_exp2(bytestream2_get_le16(&gb));
900 t += 4;
901 }
902 t += 4;
905 wp_exp2(bytestream2_get_le16(&gb));
907 wp_exp2(bytestream2_get_le16(&gb));
908 t += 4;
909 } else {
912 wp_exp2(bytestream2_get_le16(&gb));
915 wp_exp2(bytestream2_get_le16(&gb));
916 }
917 }
919 }
920 }
921 got_samples = 1;
922 break;
926 "Entropy vars size should be %i, got %i.\n",
929 continue;
930 }
932 for (i = 0; i < 3; i++) {
934 }
935 got_entropy = 1;
936 break;
941 size -= 2;
942 }
943 }
944 for (i = 0; i < (s->
stereo_in + 1); i++) {
946 size -= 2;
947 }
948 if (size > 0) {
949 for (i = 0; i < (s->
stereo_in + 1); i++) {
951 wp_exp2((int16_t)bytestream2_get_le16(&gb));
952 }
953 } else {
956 }
957 got_hybrid = 1;
958 break;
961 if (size != 4) {
963 "Invalid INT32INFO, size = %i\n",
964 size);
966 continue;
967 }
969 if (val[0]) {
971 } else if (val[1]) {
973 } else if (val[2]) {
976 } else if (val[3]) {
979 }
980 /* original WavPack decoder forces 32-bit lossy sound to be treated
981 * as 24-bit one in order to have proper clipping */
987 }
988 break;
989 }
991 if (size != 4) {
993 "Invalid FLOATINFO, size = %i\n", size);
995 continue;
996 }
1000 got_float = 1;
1002 break;
1009 got_bs = 1;
1010 break;
1012 if (size <= 4) {
1014 size);
1016 continue;
1017 }
1024 break;
1026 if (size <= 1) {
1028 "Insufficient channel information\n");
1030 }
1031 chan = bytestream2_get_byte(&gb);
1032 switch (size - 2) {
1033 case 0:
1034 chmask = bytestream2_get_byte(&gb);
1035 break;
1036 case 1:
1037 chmask = bytestream2_get_le16(&gb);
1038 break;
1039 case 2:
1040 chmask = bytestream2_get_le24(&gb);
1041 break;
1042 case 3:
1043 chmask = bytestream2_get_le32(&gb);
1044 break;
1045 case 5:
1047 chan |= (bytestream2_get_byte(&gb) & 0xF) << 8;
1048 chmask = bytestream2_get_le16(&gb);
1049 break;
1050 default:
1052 size);
1055 }
1056 break;
1058 if (size != 3) {
1061 }
1062 sample_rate = bytestream2_get_le24(&gb);
1063 break;
1064 default:
1066 }
1067 if (id & WP_IDF_ODD)
1069 }
1070
1071 if (!got_terms) {
1074 }
1075 if (!got_weights) {
1078 }
1079 if (!got_samples) {
1082 }
1083 if (!got_entropy) {
1086 }
1087 if (s->
hybrid && !got_hybrid) {
1090 }
1091 if (!got_bs) {
1094 }
1098 }
1102 if (size < wanted) {
1105 }
1106 }
1107
1110 if (sr == 0xf) {
1111 if (!sample_rate) {
1114 }
1116 } else
1118
1119 if (multiblock) {
1120 if (chan)
1122 if (chmask)
1124 } else {
1128 }
1129
1130 /* get output buffer */
1135 }
1136
1140 }
1141
1145
1147
1150 if (ret < 0)
1152 } else {
1154 if (ret < 0)
1156
1158 memcpy(samples_r, samples_l, bpp * s->
samples);
1159 }
1160
1161 return 0;
1162 }
1163
1165 {
1167 int i;
1168
1171 }
1172
1174 int *got_frame_ptr,
AVPacket *avpkt)
1175 {
1178 int buf_size = avpkt->
size;
1181
1184
1187
1188 /* determine number of samples */
1190 frame_flags =
AV_RL32(buf + 24);
1195 }
1196
1197 if (frame_flags & 0x80) {
1199 } else if ((frame_flags & 0x03) <= 1) {
1201 } else {
1204 }
1205
1206 while (buf_size > 0) {
1208 break;
1209 frame_size =
AV_RL32(buf + 4) - 12;
1210 buf += 20;
1211 buf_size -= 20;
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);
1218 }
1220 frame, buf, frame_size)) < 0) {
1223 }
1227 }
1228
1232 }
1233
1234 *got_frame_ptr = 1;
1235
1237 }
1238
1251 };