21 #define BITSTREAM_WRITER_LE
32 #define UPDATE_WEIGHT(weight, delta, source, result) \
33 if (source && result) { \
34 int32_t s = (int32_t) (source ^ result) >> 31; \
35 weight = (delta ^ s) + (weight - s); \
38 #define APPLY_WEIGHT_F(weight, sample) (((((sample & 0xffff) * weight) >> 9) + \
39 (((sample & ~0xffff) >> 9) * weight) + 1) >> 1)
41 #define APPLY_WEIGHT_I(weight, sample) ((weight * sample + 512) >> 10)
43 #define APPLY_WEIGHT(weight, sample) (sample != (short) sample ? \
44 APPLY_WEIGHT_F(weight, sample) : APPLY_WEIGHT_I (weight, sample))
46 #define CLEAR(destin) memset(&destin, 0, sizeof(destin));
49 #define SHIFT_MASK (0x1FU << SHIFT_LSB)
52 #define MAG_MASK (0x1FU << MAG_LSB)
55 #define SRATE_MASK (0xFU << SRATE_LSB)
57 #define EXTRA_TRY_DELTAS 1
58 #define EXTRA_ADJUST_DELTAS 2
59 #define EXTRA_SORT_FIRST 4
60 #define EXTRA_BRANCHES 8
61 #define EXTRA_SORT_LAST 16
138 while (block_samples * avctx->
channels > 150000)
141 while (block_samples * avctx->
channels < 40000)
193 for (i = 0; i < nb_samples; i++)
194 samples[i] >>= shift;
198 int nb_samples,
int shift)
201 for (i = 0; i < nb_samples; i++) {
207 #define FLOAT_SHIFT_ONES 1
208 #define FLOAT_SHIFT_SAME 2
209 #define FLOAT_SHIFT_SENT 4
210 #define FLOAT_ZEROS_SENT 8
211 #define FLOAT_NEG_ZEROS 0x10
212 #define FLOAT_EXCEPTIONS 0x20
214 #define get_mantissa(f) ((f) & 0x7fffff)
215 #define get_exponent(f) (((f) >> 23) & 0xff)
216 #define get_sign(f) (((f) >> 31) & 0x1)
234 if (shift_count < 25)
235 value >>= shift_count;
244 }
else if (shift_count) {
263 uint32_t crc = 0xffffffff
u;
272 for (i = 0; i < nb_samples; i++) {
280 for (i = 0; i < nb_samples; i++) {
299 for (i = 0; i < nb_samples; i++)
302 for (i = 0; i < nb_samples; i++) {
320 }
while (!(s->
ordata & 1));
349 uint32_t magdata = 0, ordata = 0, xordata = 0, anddata = ~0;
350 int i, total_shift = 0;
355 for (i = 0; i < nb_samples; i++) {
358 magdata |= (M < 0) ? ~M : M;
359 xordata |= M ^ -(M & 1);
363 if ((ordata & 1) && !(anddata & 1) && (xordata & 2))
367 for (i = 0; i < nb_samples; i++) {
371 magdata |= (L < 0) ? ~L : L;
372 magdata |= (R < 0) ? ~R : R;
373 xordata |= L ^ -(L & 1);
374 xordata |= R ^ -(R & 1);
378 if ((ordata & 1) && !(anddata & 1) && (xordata & 2))
399 }
while (!(ordata & 1));
400 }
else if (anddata & 1) {
406 }
while (anddata & 1);
407 }
else if (!(xordata & 2)) {
413 }
while (!(xordata & 2));
420 shift_mono(samples_l, nb_samples, total_shift);
422 shift_stereo(samples_l, samples_r, nb_samples, total_shift);
430 uint32_t magdata = 0, ordata = 0, xordata = 0, anddata = ~0;
431 uint32_t crc = 0xffffffff
u;
432 int i, total_shift = 0;
437 for (i = 0; i < nb_samples; i++) {
440 crc = crc * 9 + (M & 0xffff) * 3 + ((M >> 16) & 0xffff);
441 magdata |= (M < 0) ? ~M : M;
442 xordata |= M ^ -(M & 1);
447 for (i = 0; i < nb_samples; i++) {
451 crc = crc * 9 + (L & 0xffff) * 3 + ((L >> 16) & 0xffff);
452 crc = crc * 9 + (R & 0xffff) * 3 + ((R >> 16) & 0xffff);
453 magdata |= (L < 0) ? ~L : L;
454 magdata |= (R < 0) ? ~R : R;
455 xordata |= L ^ -(L & 1);
456 xordata |= R ^ -(R & 1);
481 }
while (!(ordata & 1));
482 else if (anddata & 1)
488 }
while (anddata & 1);
489 else if (!(xordata & 2))
495 }
while (!(xordata & 2));
508 shift_mono(samples_l, nb_samples, total_shift);
510 shift_stereo(samples_l, samples_r, nb_samples, total_shift);
518 weight = av_clip(weight, -1024, 1024);
520 weight -= (weight + 64) >> 7;
522 return (weight + 4) >> 3;
529 if ((result = (
int) weight << 3) > 0)
530 result += (result + 64) >> 7;
541 int nb_samples,
struct Decorr *dpp,
int dir)
548 out_samples += (nb_samples - 1);
549 in_samples += (nb_samples - 1);
557 if (dpp->
value > MAX_TERM) {
558 while (nb_samples--) {
564 dpp->
samplesA[0] = left = in_samples[0];
569 out_samples[0] = left;
573 }
else if (dpp->
value > 0) {
574 while (nb_samples--) {
575 int k = (m + dpp->
value) & (MAX_TERM - 1);
579 dpp->
samplesA[k] = left = in_samples[0];
580 m = (m + 1) & (MAX_TERM - 1);
585 out_samples[0] = left;
591 if (m && dpp->
value > 0 && dpp->
value <= MAX_TERM) {
598 m = (m + 1) & (MAX_TERM - 1);
622 }
else if (dpp->
value > 1) {
625 for (i = 0, j = dpp->
value - 1, k = 0; k < dpp->
value / 2; i++, j--, k++) {
635 static uint32_t
log2sample(uint32_t
v,
int limit, uint32_t *result)
639 if ((v += v >> 9) < (1 << 8)) {
641 result += (dbits << 8) +
wp_log2_table[(v << (9 - dbits)) & 0xff];
645 else if (v < (1
L << 24))
650 result += dbits = (dbits << 8) + wp_log2_table[(v >> (dbits - 9)) & 0xff];
652 if (limit && dbits >= limit)
662 while (nb_samples--) {
663 if (
log2sample(abs(*samples++), limit, &result))
670 int nb_samples,
int limit)
673 while (nb_samples--) {
674 if (
log2sample(abs(*samples_l++), limit, &result) ||
675 log2sample(abs(*samples_r++), limit, &result))
682 int nb_samples,
struct Decorr *dpp,
685 struct Decorr dp, *dppi = dpp + tindex;
693 pre_delta = delta + 1;
697 dp.
delta = pre_delta;
711 decorr_mono(samples, outsamples, nb_samples, &dp, 1);
717 decorr_mono(samples, outsamples, nb_samples, &dp, 1);
725 uint32_t term_bits[22],
bits;
727 if (branches < 1 || depth + 1 == info->nterms)
734 for (term = 1; term <= 18; term++) {
735 if (term == 17 && branches == 1 && depth + 1 < info->
nterms)
738 if (term > 8 && term < 17)
749 if (bits < info->best_bits) {
757 term_bits[term + 3] =
bits;
760 while (depth + 1 < info->
nterms && branches--) {
761 uint32_t local_best_bits = input_bits;
762 int best_term = 0, i;
764 for (i = 0; i < 22; i++)
765 if (term_bits[i] && term_bits[i] < local_best_bits) {
766 local_best_bits = term_bits[i];
773 term_bits[best_term + 3] = 0;
779 recurse_mono(s, info, depth + 1, delta, local_best_bits);
813 if (bits < info->best_bits) {
832 int lower = 0,
delta, d;
839 for (d =
delta - 1; d >= 0; d--) {
861 for (d =
delta + 1; !lower && d <= 7; d++) {
887 for (i = 0; i < nterms + 2; i++) {
907 for (i = 0; i < 2; i++) {
978 for (i = 0; i < info.
nterms; i++)
986 int32_t *samples,
int nb_samples,
int dir)
989 samples += nb_samples - 1;
991 while (nb_samples--) {
992 uint32_t low,
value = labs(samples[0]);
1000 if (value - low <
GET_MED(1)) {
1006 if (value - low <
GET_MED(2)) {
1018 int no_history,
int do_samples)
1020 struct Decorr temp_decorr_pass, save_decorr_passes[MAX_TERMS] = {{0}};
1022 int buf_size =
sizeof(
int32_t) * nb_samples;
1023 uint32_t best_size = UINT32_MAX,
size;
1024 int log_limit, pi, i,
ret;
1026 for (i = 0; i < nb_samples; i++)
1030 if (i == nb_samples) {
1038 log_limit =
FFMIN(6912, log_limit);
1069 CLEAR(save_decorr_passes);
1071 for (j = 0; j < nterms; j++) {
1072 CLEAR(temp_decorr_pass);
1076 if (temp_decorr_pass.
value < 0)
1077 temp_decorr_pass.
value = 1;
1080 FFMIN(nb_samples, 2048), &temp_decorr_pass, -1);
1088 memcpy(save_decorr_passes + j, &temp_decorr_pass,
sizeof(
struct Decorr));
1090 nb_samples, &temp_decorr_pass, 1);
1094 if (size != UINT32_MAX || !nterms)
1099 if (size < best_size) {
1113 else if (do_samples)
1125 int nb_samples,
struct Decorr *dpp,
int dir)
1132 out_left += nb_samples - 1;
1133 out_right += nb_samples - 1;
1134 in_left += nb_samples - 1;
1135 in_right += nb_samples - 1;
1146 switch (dpp->
value) {
1148 while (nb_samples--) {
1170 while (nb_samples--) {
1192 while (nb_samples--) {
1214 int k = dpp->
value & (MAX_TERM - 1);
1216 while (nb_samples--) {
1233 m = (m + 1) & (MAX_TERM - 1);
1234 k = (k + 1) & (MAX_TERM - 1);
1247 m = (m + 1) & (MAX_TERM - 1);
1253 while (nb_samples--) {
1272 while (nb_samples--) {
1291 while (nb_samples--) {
1297 dpp->
samplesA[0] = tmp = in_right[0];
1302 dpp->
samplesB[0] = tmp = in_left[0];
1321 if (dpp->
value & 1) {
1334 if (dpp->
value & 1) {
1344 }
else if (dpp->
value > 1) {
1347 for (i = 0, j = dpp->
value - 1, k = 0; k < dpp->
value / 2; i++, j--, k++) {
1362 int nb_samples,
struct Decorr *dpp)
1374 switch (dpp->
value) {
1376 for (i = 0; i < nb_samples; i++) {
1391 for (i = 0; i < nb_samples; i++) {
1406 for (i = 0; i < nb_samples; i++) {
1421 int k = dpp->
value & (MAX_TERM - 1);
1423 for (i = 0; i < nb_samples; i++) {
1434 m = (m + 1) & (MAX_TERM - 1);
1435 k = (k + 1) & (MAX_TERM - 1);
1448 m = (m + 1) & (MAX_TERM - 1);
1454 for (i = 0; i < nb_samples; i++) {
1466 for (i = 0; i < nb_samples; i++) {
1478 for (i = 0; i < nb_samples; i++) {
1484 dpp->
samplesA[0] = tmp = in_right[i];
1488 dpp->
samplesB[0] = tmp = in_left[i];
1499 int nb_samples,
int tindex)
1501 struct Decorr dp = {0}, *dppi = info->
dps + tindex;
1502 int delta = dppi->delta, pre_delta;
1503 int term = dppi->value;
1510 pre_delta = delta + 1;
1513 dp.
delta = pre_delta;
1515 FFMIN(2048, nb_samples), &dp, -1);
1532 decorr_stereo(in_left, in_right, out_left, out_right, nb_samples, &dp, 1);
1536 dppi->weightA = dp.
weightA = dp.
sumA / nb_samples;
1537 dppi->weightB = dp.
weightB = dp.
sumB / nb_samples;
1542 nb_samples, &dp, 1);
1584 if (bits < info->best_bits) {
1607 int lower = 0,
delta, d, i;
1614 for (d =
delta - 1; d >= 0; d--) {
1638 for (d =
delta + 1; !lower && d <= 7; d++) {
1651 if (bits < info->best_bits) {
1669 int32_t *in_left, *in_right, *out_left, *out_right;
1670 uint32_t term_bits[22],
bits;
1672 if (branches < 1 || depth + 1 == info->nterms)
1681 for (term = -3; term <= 18; term++) {
1682 if (!term || (term > 8 && term < 17))
1685 if (term == 17 && branches == 1 && depth + 1 < info->
nterms)
1688 if (term == -1 || term == -2)
1701 if (bits < info->best_bits) {
1711 term_bits[term + 3] =
bits;
1714 while (depth + 1 < info->
nterms && branches--) {
1715 uint32_t local_best_bits = input_bits;
1716 int best_term = 0, i;
1718 for (i = 0; i < 22; i++)
1719 if (term_bits[i] && term_bits[i] < local_best_bits) {
1720 local_best_bits = term_bits[i];
1727 term_bits[best_term + 3] = 0;
1800 for (i = 0; i < info.
nterms; i++)
1809 int no_history,
int do_samples)
1811 struct Decorr temp_decorr_pass, save_decorr_passes[MAX_TERMS] = {{0}};
1813 int buf_size =
sizeof(
int32_t) * nb_samples;
1814 int log_limit, force_js = 0, force_ts = 0, got_js = 0, pi, i;
1815 uint32_t best_size = UINT32_MAX,
size;
1817 for (i = 0; i < nb_samples; i++)
1818 if (samples_l[i] || samples_r[i])
1821 if (i == nb_samples) {
1830 log_limit =
FFMIN(6912, log_limit);
1833 force_js = s->
joint > 0;
1834 force_ts = s->
joint < 0;
1869 memcpy(s->
js_left, samples_l, buf_size);
1870 memcpy(s->
js_right, samples_r, buf_size);
1872 for (i = 0; i < nb_samples; i++)
1880 memcpy(s->
temp_buffer[0][0], samples_l, buf_size);
1881 memcpy(s->
temp_buffer[0][1], samples_r, buf_size);
1884 CLEAR(save_decorr_passes);
1886 for (j = 0; j < nterms; j++) {
1887 CLEAR(temp_decorr_pass);
1892 temp_decorr_pass.
value = -3;
1896 FFMIN(2048, nb_samples), &temp_decorr_pass, -1);
1905 memcpy(save_decorr_passes + j, &temp_decorr_pass,
sizeof(
struct Decorr));
1910 nb_samples, &temp_decorr_pass, 1);
1914 nb_samples, &temp_decorr_pass);
1918 nb_samples, log_limit);
1919 if (size != UINT32_MAX || !nterms)
1924 if (size < best_size) {
1947 memcpy(samples_l, s->
js_left, buf_size);
1948 memcpy(samples_r, s->
js_right, buf_size);
1952 }
else if (do_samples) {
1967 #define count_bits(av) ( \
1968 (av) < (1 << 8) ? nbits_table[av] : \
1970 (av) < (1L << 16) ? nbits_table[(av) >> 8] + 8 : \
1971 ((av) < (1L << 24) ? nbits_table[(av) >> 16] + 16 : nbits_table[(av) >> 24] + 24) \
1988 put_bits(pb, cbits, (1 << cbits) - 1);
2017 put_bits(pb, cbits, (1 << cbits) - 1);
2051 uint32_t ones_count, low, high;
2052 int sign = sample < 0;
2062 }
else if (sample) {
2076 ones_count = low = 0;
2083 if (sample - low <
GET_MED(1)) {
2091 if (sample - low <
GET_MED(2)) {
2096 ones_count = 2 + (sample - low) /
GET_MED(2);
2097 low += (ones_count - 2) *
GET_MED(2);
2121 uint32_t maxcode = high - low, code = sample - low;
2123 uint32_t extras = (1 << bitcount) - maxcode - 1;
2125 if (code < extras) {
2156 for (i = 0; i < nb_samples; i++) {
2157 value = (samples_l[i] >> pre_shift) & mask;
2161 for (i = 0; i < nb_samples; i++) {
2162 value = (samples_l[i] >> pre_shift) & mask;
2164 value = (samples_r[i] >> pre_shift) & mask;
2190 shift_count = max_exp ? max_exp - 1 : 0;
2194 if (shift_count < 25)
2195 value >>= shift_count;
2216 }
else if (shift_count) {
2233 for (i = 0; i < nb_samples; i++)
2236 for (i = 0; i < nb_samples; i++) {
2249 switch (dpp->
value) {
2251 for (i = 0; i < nb_samples; i++) {
2266 for (i = 0; i < nb_samples; i++) {
2281 for (m = 0, k = dpp->
value & (
MAX_TERM - 1), i = 0; i < nb_samples; i++) {
2304 m = (m + 1) & (MAX_TERM - 1);
2309 for (i = 0; i < nb_samples; i++) {
2321 for (i = 0; i < nb_samples; i++) {
2333 for (i = 0; i < nb_samples; i++) {
2339 dpp->
samplesA[0] = tmp = samples_r[i];
2343 dpp->
samplesB[0] = tmp = samples_l[i];
2351 #define update_weight_d2(weight, delta, source, result) \
2352 if (source && result) \
2353 weight -= (((source ^ result) >> 29) & 4) - 2;
2355 #define update_weight_clip_d2(weight, delta, source, result) \
2356 if (source && result) { \
2357 const int32_t s = (source ^ result) >> 31; \
2358 if ((weight = (weight ^ s) + (2 - s)) > 1024) weight = 1024; \
2359 weight = (weight ^ s) - s; \
2368 switch (dpp->
value) {
2370 for (i = 0; i < nb_samples; i++) {
2385 for (i = 0; i < nb_samples; i++) {
2400 for (m = 0, k = dpp->
value & (
MAX_TERM - 1), i = 0; i < nb_samples; i++) {
2424 m = (m + 1) & (MAX_TERM - 1);
2429 for (i = 0; i < nb_samples; i++) {
2441 for (i = 0; i < nb_samples; i++) {
2453 for (i = 0; i < nb_samples; i++) {
2459 dpp->
samplesA[0] = tmp = samples_r[i];
2463 dpp->
samplesB[0] = tmp = samples_l[i];
2476 bytestream2_put_byte(pb, flags);
2477 bytestream2_put_byte(pb, (size + 1) >> 1);
2486 uint32_t crc = 0xffffffff
u;
2493 for (i = 0; i < nb_samples; i++) {
2494 lor |= samples_l[i] | samples_r[i];
2495 diff |= samples_l[i] - samples_r[i];
2501 if (i == nb_samples && lor && !diff) {
2526 if ((mag -= shift) < 0)
2541 got_extra =
scan_float(s, samples_l, samples_r, nb_samples);
2543 got_extra =
scan_int32(s, samples_l, samples_r, nb_samples);
2546 scan_int23(s, samples_l, samples_r, nb_samples);
2557 ret =
wv_mono(s, samples_l, 1, 0);
2559 ret =
wv_stereo(s, samples_l, samples_r, 1, 0);
2564 for (i = 0; i < nb_samples; i++)
2565 crc += (crc << 1) + samples_l[i];
2570 for (i = 0; i < nb_samples; i++)
2571 crc += (crc << 3) + (samples_l[i] << 1) + samples_l[i] + samples_r[i];
2588 bytestream2_put_le32(&pb,
MKTAG(
'w',
'v',
'p',
'k'));
2589 bytestream2_put_le32(&pb, 0);
2590 bytestream2_put_le16(&pb, 0x410);
2591 bytestream2_put_le16(&pb, 0);
2592 bytestream2_put_le32(&pb, 0);
2594 bytestream2_put_le32(&pb, nb_samples);
2595 bytestream2_put_le32(&pb, s->
flags);
2596 bytestream2_put_le32(&pb, crc);
2604 bytestream2_put_byte(&pb, 0);
2610 bytestream2_put_byte(&pb, 0);
2616 bytestream2_put_byte(&pb, ((dpp->
value + 5) & 0x1f) | ((dpp->
delta << 5) & 0xe0));
2619 bytestream2_put_byte(&pb, 0);
2621 #define WRITE_DECWEIGHT(type) do { \
2622 temp = store_weight(type); \
2623 bytestream2_put_byte(&pb, temp); \
2624 type = restore_weight(temp); \
2628 bytestream2_put_byte(&pb, 0);
2630 for (i = s->
num_terms - 1; i >= 0; --i) {
2650 out[start - 1] = (end - start + 1) >> 1;
2651 if ((end - start) & 1)
2652 bytestream2_put_byte(&pb, 0);
2654 #define WRITE_DECSAMPLE(type) do { \
2655 temp = log2s(type); \
2656 type = wp_exp2(temp); \
2657 bytestream2_put_le16(&pb, temp); \
2661 bytestream2_put_byte(&pb, 0);
2673 }
else if (dpp->
value < 0) {
2677 for (j = 0; j < dpp->
value; j++) {
2689 out[start - 1] = (end -
start) >> 1;
2691 #define WRITE_CHAN_ENTROPY(chan) do { \
2692 for (i = 0; i < 3; i++) { \
2693 temp = wp_log2(s->w.c[chan].median[i]); \
2694 bytestream2_put_le16(&pb, temp); \
2695 s->w.c[chan].median[i] = wp_exp2(temp); \
2709 bytestream2_put_byte(&pb, 127);
2721 for (i = 0; i < nb_samples; i++) {
2745 samples_l[i] = code;
2759 m = (m + 1) & (MAX_TERM - 1);
2765 for (i = 0; i < nb_samples; i++)
2766 samples_r[i] += ((samples_l[i] -= samples_r[i]) >> 1);
2781 for (i = 0; i < nb_samples; i++)
2784 for (i = 0; i < nb_samples; i++) {
2792 bytestream2_put_le24(&pb, (data_size + 1) >> 1);
2795 bytestream2_put_byte(&pb, 0);
2806 bytestream2_put_le24(&pb, (data_size + 5) >> 1);
2807 bytestream2_put_le32(&pb, s->
crc_x);
2810 bytestream2_put_byte(&pb, 0);
2814 AV_WL32(out + 4, block_size - 8);
2825 #define COPY_SAMPLES(type, offset, shift) do { \
2826 const type *sptr = (const type *)src; \
2827 for (i = 0; i < nb_samples; i++) \
2828 dst[i] = (sptr[i] - offset) >> shift; \
2844 memcpy(dst, src, nb_samples * 4);
2852 for (i = 0; i < 15; i++) {
2882 buf_size = avpkt->
size;
2904 buf, buf_size)) < 0)
2915 *got_packet_ptr = 1;
2930 for (i = 0; i < 2; i++) {
2953 #define OFFSET(x) offsetof(WavPackEncodeContext, x)
2954 #define FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
2979 .priv_class = &wavpack_encoder_class,