1 /*
2 * Windows Media Audio Lossless decoder
3 * Copyright (c) 2007 Baptiste Coudurier, Benjamin Larsson, Ulion
4 * Copyright (c) 2008 - 2011 Sascha Sommer, Benjamin Larsson
5 * Copyright (c) 2011 Andreas Öman
6 * Copyright (c) 2011 - 2012 Mashiat Sarker Shakkhar
7 *
8 * This file is part of FFmpeg.
9 *
10 * FFmpeg is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public
12 * License as published by the Free Software Foundation; either
13 * version 2.1 of the License, or (at your option) any later version.
14 *
15 * FFmpeg is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public
21 * License along with FFmpeg; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 */
24
25 #include <inttypes.h>
26
30
38
39 /** current decoder limitations */
40 #define WMALL_MAX_CHANNELS 8 ///< max number of handled channels
41 #define MAX_SUBFRAMES 32
///< max number of subframes per channel
42 #define MAX_BANDS 29
///< max number of scale factor bands
43 #define MAX_FRAMESIZE 32768
///< maximum compressed frame size
45
46 #define WMALL_BLOCK_MIN_BITS 6 ///< log2 of min block size
47 #define WMALL_BLOCK_MAX_BITS 14
///< log2 of max block size
48 #define WMALL_BLOCK_MAX_SIZE (1 << WMALL_BLOCK_MAX_BITS)
///< maximum block size
49 #define WMALL_BLOCK_SIZES (WMALL_BLOCK_MAX_BITS - WMALL_BLOCK_MIN_BITS + 1)
///< possible block sizes
50
51 #define WMALL_COEFF_PAD_SIZE 16 ///< pad coef buffers with 0 for use with SIMD
52
53 /**
54 * @brief frame-specific decoder context for a single channel
55 */
64 int quant_step;
///< quantization step for the current subframe
65 int transient_counter;
///< number of transient samples from the beginning of the transient zone
67
68 /**
69 * @brief main decoder context
70 */
72 /* generic decoder variables */
79
80 /* frame size dependent frame information (set during initialization) */
84 uint8_t
bits_per_sample;
///< integer audio sample size for the unscaled IMDCT output (used to scale to [-1.0, 1.0])
87 int8_t
num_channels;
///< number of channels in the stream (same as AVCodecContext.num_channels)
91 uint8_t
max_subframe_len_bit;
///< flag indicating that the subframe is of maximum size when the first subframe length bit is 1
93
94 /* packet decode state */
104
105 /* frame decode state */
106 uint32_t
frame_num;
///< current frame number (not used for decoding)
114
115 /* subframe/block decode state */
119
121
122 // WMA Lossless-specific
123
129
134
142
145
146 struct {
156
158
160
163
167
169
171
177
178 /** Get sign of integer (1 for positive, -1 for negative and 0 for zero) */
179 #define WMASIGN(x) (((x) > 0) - ((x) < 0))
180
182 {
185 unsigned int channel_mask;
186 int i, log2_max_num_subframes;
187
191 }
192
198 }
199
204
208
210 s->decode_flags =
AV_RL16(edata_ptr + 14);
211 channel_mask =
AV_RL32(edata_ptr + 2);
212 s->bits_per_sample =
AV_RL16(edata_ptr);
213 if (
s->bits_per_sample == 16)
215 else if (
s->bits_per_sample == 24) {
218 } else {
222 }
223 /* dump the extradata */
227
228 } else {
231 }
232
233 /* generic init */
235
236 /* frame info */
237 s->skip_frame = 1;
/* skip first frame */
239 s->len_prefix =
s->decode_flags & 0x40;
240
241 /* get frame len */
245
246 /* init previous block len */
248 s->channel[
i].prev_block_len =
s->samples_per_frame;
249
250 /* subframe info */
251 log2_max_num_subframes = (
s->decode_flags & 0x38) >> 3;
252 s->max_num_subframes = 1 << log2_max_num_subframes;
253 s->max_subframe_len_bit = 0;
254 s->subframe_len_bits =
av_log2(log2_max_num_subframes) + 1;
255
256 s->min_samples_per_subframe =
s->samples_per_frame /
s->max_num_subframes;
257 s->dynamic_range_compression =
s->decode_flags & 0x80;
258 s->bV3RTM =
s->decode_flags & 0x100;
259
262 s->max_num_subframes);
264 }
265
267
268 /* extract lfe channel position */
270
271 if (channel_mask & 8) {
274 if (channel_mask &
mask)
276 }
277
281
283 return 0;
284 }
285
286 /**
287 * @brief Decode the subframe length.
288 * @param s context
289 * @param offset sample offset in the frame
290 * @return decoded subframe length on success, < 0 in case of an error
291 */
293 {
294 int frame_len_ratio, subframe_len,
len;
295
296 /* no need to read from the bitstream when only one length is possible */
297 if (
offset ==
s->samples_per_frame -
s->min_samples_per_subframe)
298 return s->min_samples_per_subframe;
299
302 subframe_len =
s->min_samples_per_subframe * (frame_len_ratio + 1);
303
304 /* sanity check the length */
305 if (subframe_len < s->min_samples_per_subframe ||
306 subframe_len >
s->samples_per_frame) {
308 subframe_len);
310 }
311 return subframe_len;
312 }
313
314 /**
315 * @brief Decode how the data in the frame is split into subframes.
316 * Every WMA frame contains the encoded data for a fixed number of
317 * samples per channel. The data for every channel might be split
318 * into several subframes. This function will reconstruct the list of
319 * subframes for every channel.
320 *
321 * If the subframes are not evenly split, the algorithm estimates the
322 * channels with the lowest number of total samples.
323 * Afterwards, for each of these channels a bit is read from the
324 * bitstream that indicates if the channel contains a subframe with the
325 * next subframe size that is going to be read from the bitstream or not.
326 * If a channel contains such a subframe, the subframe size gets added to
327 * the channel's subframe list.
328 * The algorithm repeats these steps until the frame is properly divided
329 * between the individual channels.
330 *
331 * @param s context
332 * @return 0 on success, < 0 in case of an error
333 */
335 {
336 uint16_t num_samples[
WMALL_MAX_CHANNELS] = { 0 };
/* sum of samples for all currently known subframes of a channel */
337 uint8_t contains_subframe[
WMALL_MAX_CHANNELS];
/* flag indicating if a channel contains the current subframe */
338 int channels_for_cur_subframe =
s->num_channels;
/* number of channels that contain the current subframe */
339 int fixed_channel_layout = 0; /* flag indicating that all channels use the same subfra2me offsets and sizes */
340 int min_channel_len = 0; /* smallest sum of samples (channels with this length will be processed first) */
342
343 /* reset tiling information */
344 for (
c = 0;
c <
s->num_channels;
c++)
345 s->channel[
c].num_subframes = 0;
346
348 if (
s->max_num_subframes == 1 || tile_aligned)
349 fixed_channel_layout = 1;
350
351 /* loop until the frame data is split between the subframes */
352 do {
353 int subframe_len, in_use = 0;
354
355 /* check which channels contain the subframe */
356 for (
c = 0;
c <
s->num_channels;
c++) {
357 if (num_samples[
c] == min_channel_len) {
358 if (fixed_channel_layout || channels_for_cur_subframe == 1 ||
359 (min_channel_len ==
s->samples_per_frame -
s->min_samples_per_subframe)) {
360 contains_subframe[
c] = 1;
361 } else {
363 }
364 in_use |= contains_subframe[
c];
365 } else
366 contains_subframe[
c] = 0;
367 }
368
369 if (!in_use) {
371 "Found empty subframe\n");
373 }
374
375 /* get subframe length, subframe_len == 0 is not allowed */
378 /* add subframes to the individual channels and find new min_channel_len */
379 min_channel_len += subframe_len;
380 for (
c = 0;
c <
s->num_channels;
c++) {
382
383 if (contains_subframe[
c]) {
386 "broken frame: num subframes > 31\n");
388 }
390 num_samples[
c] += subframe_len;
392 if (num_samples[
c] >
s->samples_per_frame) {
394 "channel len(%"PRIu16") > samples_per_frame(%"PRIu16")\n",
395 num_samples[
c],
s->samples_per_frame);
397 }
398 }
else if (num_samples[
c] <= min_channel_len) {
399 if (num_samples[
c] < min_channel_len) {
400 channels_for_cur_subframe = 0;
401 min_channel_len = num_samples[
c];
402 }
403 ++channels_for_cur_subframe;
404 }
405 }
406 } while (min_channel_len < s->samples_per_frame);
407
408 for (
c = 0;
c <
s->num_channels;
c++) {
410 for (
i = 0;
i <
s->channel[
c].num_subframes;
i++) {
411 s->channel[
c].subframe_offsets[
i] =
offset;
413 }
414 }
415
416 return 0;
417 }
418
420 {
424
425 for (
i = 0;
i <
s->acfilter_order;
i++)
426 s->acfilter_coeffs[
i] =
get_bitsz(&
s->gb,
s->acfilter_scaling) + 1;
427 }
428
430 {
431 s->mclms_order = (
get_bits(&
s->gb, 4) + 1) * 2;
434 int i, send_coef_bits;
435 int cbits =
av_log2(
s->mclms_scaling + 1);
436 if (1 << cbits < s->mclms_scaling + 1)
437 cbits++;
438
439 send_coef_bits =
get_bitsz(&
s->gb, cbits) + 2;
440
441 for (
i = 0;
i <
s->mclms_order *
s->num_channels *
s->num_channels;
i++)
442 s->mclms_coeffs[
i] =
get_bits(&
s->gb, send_coef_bits);
443
444 for (
i = 0;
i <
s->num_channels;
i++) {
446 for (
c = 0;
c <
i;
c++)
447 s->mclms_coeffs_cur[
i *
s->num_channels +
c] =
get_bits(&
s->gb, send_coef_bits);
448 }
449 }
450 }
451
453 {
456
457 for (
c = 0;
c <
s->num_channels;
c++) {
459 for (
i = 0;
i <
s->cdlms_ttl[
c];
i++) {
463 "Order[%d][%d] %d > max (%d), not supported\n",
465 s->cdlms[0][0].order = 0;
467 }
468 if(
s->cdlms[
c][
i].order & 8 &&
s->bits_per_sample == 16) {
469 static int warned;
470 if(!warned)
472 s->cdlms[
c][
i].order);
473 warned = 1;
474 }
475 }
476
477 for (
i = 0;
i <
s->cdlms_ttl[
c];
i++)
479
480 if (cdlms_send_coef) {
481 for (
i = 0;
i <
s->cdlms_ttl[
c];
i++) {
482 int cbits, shift_l, shift_r, j;
484 if ((1 << cbits) <
s->cdlms[
c][
i].order)
485 cbits++;
487
489 if ((1 << cbits) <
s->cdlms[
c][
i].scaling + 1)
490 cbits++;
491
493 shift_l = 32 -
s->cdlms[
c][
i].bitsend;
494 shift_r = 32 -
s->cdlms[
c][
i].scaling - 2;
495 for (j = 0; j <
s->cdlms[
c][
i].coefsend; j++)
496 s->cdlms[
c][
i].coefs[j] =
497 (
get_bits(&
s->gb,
s->cdlms[
c][
i].bitsend) << shift_l) >> shift_r;
498 }
499 }
500
501 for (
i = 0;
i <
s->cdlms_ttl[
c];
i++)
502 memset(
s->cdlms[
c][
i].coefs +
s->cdlms[
c][
i].order,
504 }
505
506 return 0;
507 }
508
510 {
512 unsigned int ave_mean;
514 if (
s->transient[ch]) {
516 if (
s->transient_pos[ch])
517 s->transient[ch] = 0;
518 s->channel[ch].transient_counter =
519 FFMAX(
s->channel[ch].transient_counter,
s->samples_per_frame / 2);
520 }
else if (
s->channel[ch].transient_counter)
521 s->transient[ch] = 1;
522
523 if (
s->seekable_tile) {
524 ave_mean =
get_bits(&
s->gb,
s->bits_per_sample);
525 s->ave_sum[ch] = ave_mean << (
s->movave_scaling + 1);
526 }
527
528 if (
s->seekable_tile) {
529 if (
s->do_inter_ch_decorr)
531 else
534 }
535 for (;
i < tile_size;
i++) {
536 int rem, rem_bits;
537 unsigned quo = 0, residue;
539 quo++;
541 return -1;
542 }
543 if (quo >= 32)
545
546 ave_mean = (
s->ave_sum[ch] + (1 <<
s->movave_scaling)) >> (
s->movave_scaling + 1);
547 if (ave_mean <= 1)
548 residue = quo;
549 else {
552 residue = (quo << rem_bits) + rem;
553 }
554
555 s->ave_sum[ch] = residue +
s->ave_sum[ch] -
556 (
s->ave_sum[ch] >>
s->movave_scaling);
557
558 residue = (residue >> 1) ^ -(residue & 1);
559 s->channel_residues[ch][
i] = residue;
560 }
561
562 return 0;
563
564 }
565
567 {
572 cbits =
s->lpc_scaling +
s->lpc_intbits;
573 for (ch = 0; ch <
s->num_channels; ch++)
574 for (
i = 0;
i <
s->lpc_order;
i++)
576 }
577
579 {
580 int ich, ilms;
581
582 memset(
s->acfilter_coeffs, 0,
sizeof(
s->acfilter_coeffs));
583 memset(
s->acfilter_prevvalues, 0,
sizeof(
s->acfilter_prevvalues));
584 memset(
s->lpc_coefs, 0,
sizeof(
s->lpc_coefs));
585
586 memset(
s->mclms_coeffs, 0,
sizeof(
s->mclms_coeffs));
587 memset(
s->mclms_coeffs_cur, 0,
sizeof(
s->mclms_coeffs_cur));
588 memset(
s->mclms_prevvalues, 0,
sizeof(
s->mclms_prevvalues));
589 memset(
s->mclms_updates, 0,
sizeof(
s->mclms_updates));
590
591 for (ich = 0; ich <
s->num_channels; ich++) {
592 for (ilms = 0; ilms <
s->cdlms_ttl[ich]; ilms++) {
593 memset(
s->cdlms[ich][ilms].coefs, 0,
594 sizeof(
s->cdlms[ich][ilms].coefs));
595 memset(
s->cdlms[ich][ilms].lms_prevvalues, 0,
596 sizeof(
s->cdlms[ich][ilms].lms_prevvalues));
597 memset(
s->cdlms[ich][ilms].lms_updates, 0,
598 sizeof(
s->cdlms[ich][ilms].lms_updates));
599 }
601 }
602 }
603
604 /**
605 * @brief Reset filter parameters and transient area at new seekable tile.
606 */
608 {
609 int ich, ilms;
610 s->mclms_recent =
s->mclms_order *
s->num_channels;
611 for (ich = 0; ich <
s->num_channels; ich++) {
612 for (ilms = 0; ilms <
s->cdlms_ttl[ich]; ilms++)
613 s->cdlms[ich][ilms].recent =
s->cdlms[ich][ilms].order;
614 /* first sample of a seekable subframe is considered as the starting of
615 a transient area which is samples_per_frame samples long */
616 s->channel[ich].transient_counter =
s->samples_per_frame;
617 s->transient[ich] = 1;
618 s->transient_pos[ich] = 0;
619 }
620 }
621
623 {
624 int i, j, ich, pred_error;
625 int order =
s->mclms_order;
626 int num_channels =
s->num_channels;
627 int range = 1 << (
s->bits_per_sample - 1);
628
629 for (ich = 0; ich < num_channels; ich++) {
630 pred_error =
s->channel_residues[ich][icoef] - (unsigned)
pred[ich];
631 if (pred_error > 0) {
632 for (
i = 0;
i < order * num_channels;
i++)
633 s->mclms_coeffs[
i + ich * order * num_channels] +=
634 s->mclms_updates[
s->mclms_recent +
i];
635 for (j = 0; j < ich; j++)
636 s->mclms_coeffs_cur[ich * num_channels + j] +=
WMASIGN(
s->channel_residues[j][icoef]);
637 } else if (pred_error < 0) {
638 for (
i = 0;
i < order * num_channels;
i++)
639 s->mclms_coeffs[
i + ich * order * num_channels] -=
640 s->mclms_updates[
s->mclms_recent +
i];
641 for (j = 0; j < ich; j++)
642 s->mclms_coeffs_cur[ich * num_channels + j] -=
WMASIGN(
s->channel_residues[j][icoef]);
643 }
644 }
645
646 for (ich = num_channels - 1; ich >= 0; ich--) {
648 s->mclms_prevvalues[
s->mclms_recent] =
av_clip(
s->channel_residues[ich][icoef],
649 -range, range - 1);
650 s->mclms_updates[
s->mclms_recent] =
WMASIGN(
s->channel_residues[ich][icoef]);
651 }
652
653 if (
s->mclms_recent == 0) {
654 memcpy(&
s->mclms_prevvalues[order * num_channels],
656 sizeof(
int32_t) * order * num_channels);
657 memcpy(&
s->mclms_updates[order * num_channels],
659 sizeof(
int32_t) * order * num_channels);
660 s->mclms_recent = num_channels * order;
661 }
662 }
663
665 {
667 int order =
s->mclms_order;
668 int num_channels =
s->num_channels;
669
670 for (ich = 0; ich < num_channels; ich++) {
672 if (!
s->is_channel_coded[ich])
673 continue;
674 for (
i = 0;
i < order * num_channels;
i++)
675 pred[ich] += (uint32_t)
s->mclms_prevvalues[
i +
s->mclms_recent] *
676 s->mclms_coeffs[
i + order * num_channels * ich];
677 for (
i = 0;
i < ich;
i++)
678 pred[ich] += (uint32_t)
s->channel_residues[
i][icoef] *
679 s->mclms_coeffs_cur[
i + num_channels * ich];
680 pred[ich] += (1
U <<
s->mclms_scaling) >> 1;
681 pred[ich] >>=
s->mclms_scaling;
682 s->channel_residues[ich][icoef] += (unsigned)
pred[ich];
683 }
684 }
685
687 {
689 for (icoef = 0; icoef < tile_size; icoef++) {
692 }
693 }
694
696 {
697 int ilms, recent, icoef;
698 for (ilms =
s->cdlms_ttl[ich] - 1; ilms >= 0; ilms--) {
699 recent =
s->cdlms[ich][ilms].recent;
700 if (
s->update_speed[ich] == 16)
701 continue;
703 for (icoef = 0; icoef <
s->cdlms[ich][ilms].order; icoef++)
704 s->cdlms[ich][ilms].lms_updates[icoef + recent] *= 2;
705 } else {
706 for (icoef = 0; icoef <
s->cdlms[ich][ilms].order; icoef++)
707 s->cdlms[ich][ilms].lms_updates[icoef] *= 2;
708 }
709 }
710 s->update_speed[ich] = 16;
711 }
712
714 {
715 int ilms, recent, icoef;
716 for (ilms =
s->cdlms_ttl[ich] - 1; ilms >= 0; ilms--) {
717 recent =
s->cdlms[ich][ilms].recent;
718 if (
s->update_speed[ich] == 8)
719 continue;
721 for (icoef = 0; icoef <
s->cdlms[ich][ilms].order; icoef++)
722 s->cdlms[ich][ilms].lms_updates[icoef + recent] /= 2;
723 else
724 for (icoef = 0; icoef <
s->cdlms[ich][ilms].order; icoef++)
725 s->cdlms[ich][ilms].lms_updates[icoef] /= 2;
726 }
727 s->update_speed[ich] = 8;
728 }
729
730 #define CD_LMS(bits, ROUND) \
731 static void lms_update ## bits (WmallDecodeCtx *s, int ich, int ilms, int input) \
732 { \
733 int recent = s->cdlms[ich][ilms].recent; \
734 int range = 1 << s->bits_per_sample - 1; \
735 int order = s->cdlms[ich][ilms].order; \
736 int ##bits##_t *prev = (int##bits##_t *)s->cdlms[ich][ilms].lms_prevvalues; \
737 \
738 if (recent) \
739 recent--; \
740 else { \
741 memcpy(prev + order, prev, (bits/8) * order); \
742 memcpy(s->cdlms[ich][ilms].lms_updates + order, \
743 s->cdlms[ich][ilms].lms_updates, \
744 sizeof(*s->cdlms[ich][ilms].lms_updates) * order); \
745 recent = order - 1; \
746 } \
747 \
748 prev[recent] = av_clip(input, -range, range - 1); \
749 s->cdlms[ich][ilms].lms_updates[recent] = WMASIGN(input) * s->update_speed[ich]; \
750 \
751 s->cdlms[ich][ilms].lms_updates[recent + (order >> 4)] >>= 2; \
752 s->cdlms[ich][ilms].lms_updates[recent + (order >> 3)] >>= 1; \
753 s->cdlms[ich][ilms].recent = recent; \
754 memset(s->cdlms[ich][ilms].lms_updates + recent + order, 0, \
755 sizeof(s->cdlms[ich][ilms].lms_updates) - \
756 sizeof(*s->cdlms[ich][ilms].lms_updates)*(recent+order)); \
757 } \
758 \
759 static void revert_cdlms ## bits (WmallDecodeCtx *s, int ch, \
760 int coef_begin, int coef_end) \
761 { \
762 int icoef, ilms, num_lms, residue, input; \
763 unsigned pred;\
764 \
765 num_lms = s->cdlms_ttl[ch]; \
766 for (ilms = num_lms - 1; ilms >= 0; ilms--) { \
767 for (icoef = coef_begin; icoef < coef_end; icoef++) { \
768 int##bits##_t *prevvalues = (int##bits##_t *)s->cdlms[ch][ilms].lms_prevvalues; \
769 pred = (1 << s->cdlms[ch][ilms].scaling) >> 1; \
770 residue = s->channel_residues[ch][icoef]; \
771 pred += s->dsp.scalarproduct_and_madd_int## bits (s->cdlms[ch][ilms].coefs, \
772 prevvalues + s->cdlms[ch][ilms].recent, \
773 s->cdlms[ch][ilms].lms_updates + \
774 s->cdlms[ch][ilms].recent, \
775 FFALIGN(s->cdlms[ch][ilms].order, ROUND), \
776 WMASIGN(residue)); \
777 input = residue + (unsigned)((int)pred >> s->cdlms[ch][ilms].scaling); \
778 lms_update ## bits(s, ch, ilms, input); \
779 s->channel_residues[ch][icoef] = input; \
780 } \
781 } \
782 if (bits <= 16) emms_c(); \
783 }
784
787
789 {
790 if (
s->num_channels != 2)
791 return;
792 else if (
s->is_channel_coded[0] ||
s->is_channel_coded[1]) {
793 int icoef;
794 for (icoef = 0; icoef < tile_size; icoef++) {
795 s->channel_residues[0][icoef] -= (unsigned)(
s->channel_residues[1][icoef] >> 1);
796 s->channel_residues[1][icoef] += (unsigned)
s->channel_residues[0][icoef];
797 }
798 }
799 }
800
802 {
804 int16_t *filter_coeffs =
s->acfilter_coeffs;
805 int scaling =
s->acfilter_scaling;
806 int order =
s->acfilter_order;
807
808 for (ich = 0; ich <
s->num_channels; ich++) {
809 int *prevvalues =
s->acfilter_prevvalues[ich];
810 for (
i = 0;
i < order;
i++) {
812 for (j = 0; j < order; j++) {
814 pred += (uint32_t)filter_coeffs[j] * prevvalues[j -
i];
815 else
816 pred += (uint32_t)
s->channel_residues[ich][
i - j - 1] * filter_coeffs[j];
817 }
819 s->channel_residues[ich][
i] += (unsigned)
pred;
820 }
821 for (
i = order;
i < tile_size;
i++) {
823 for (j = 0; j < order; j++)
824 pred += (uint32_t)
s->channel_residues[ich][
i - j - 1] * filter_coeffs[j];
826 s->channel_residues[ich][
i] += (unsigned)
pred;
827 }
828 for (j = order - 1; j >= 0; j--)
829 if (tile_size <= j) {
830 prevvalues[j] = prevvalues[j - tile_size];
831 }else
832 prevvalues[j] =
s->channel_residues[ich][tile_size - j - 1];
833 }
834 }
835
837 {
838 int offset =
s->samples_per_frame;
839 int subframe_len =
s->samples_per_frame;
840 int total_samples =
s->samples_per_frame *
s->num_channels;
841 int i, j, rawpcm_tile, padding_zeroes, res;
842
844
845 /* reset channel context and find the next block offset and size
846 == the next block of the channel with the smallest number of
847 decoded samples */
848 for (
i = 0;
i <
s->num_channels;
i++) {
849 if (
offset >
s->channel[
i].decoded_samples) {
850 offset =
s->channel[
i].decoded_samples;
851 subframe_len =
852 s->channel[
i].subframe_len[
s->channel[
i].cur_subframe];
853 }
854 }
855
856 /* get a list of all channels that contain the estimated block */
857 s->channels_for_cur_subframe = 0;
858 for (
i = 0;
i <
s->num_channels;
i++) {
859 const int cur_subframe =
s->channel[
i].cur_subframe;
860 /* subtract already processed samples */
861 total_samples -=
s->channel[
i].decoded_samples;
862
863 /* and count if there are multiple subframes that match our profile */
864 if (
offset ==
s->channel[
i].decoded_samples &&
865 subframe_len ==
s->channel[
i].subframe_len[cur_subframe]) {
866 total_samples -=
s->channel[
i].subframe_len[cur_subframe];
867 s->channel[
i].decoded_samples +=
868 s->channel[
i].subframe_len[cur_subframe];
869 s->channel_indexes_for_cur_subframe[
s->channels_for_cur_subframe] =
i;
870 ++
s->channels_for_cur_subframe;
871 }
872 }
873
874 /* check if the frame will be complete after processing the
875 estimated block */
876 if (!total_samples)
877 s->parsed_all_subframes = 1;
878
879
881 if (
s->seekable_tile) {
883
885 if (
s->do_arith_coding) {
888 }
892
895
898
900 return res;
903
905 }
906
908
909 if (!rawpcm_tile && !
s->cdlms[0][0].order) {
911 "Waiting for seekable tile\n");
913 return -1;
914 }
915
916
917 for (
i = 0;
i <
s->num_channels;
i++)
918 s->is_channel_coded[
i] = 1;
919
921 for (
i = 0;
i <
s->num_channels;
i++)
923
925 // LPC
930 "inverse LPC filter");
931 }
932 } else
934 }
935
938
941 else
942 padding_zeroes = 0;
943
944 if (rawpcm_tile) {
945 int bits =
s->bits_per_sample - padding_zeroes;
948 "Invalid number of padding bits in raw PCM tile\n");
950 }
951 ff_dlog(
s->avctx,
"RAWPCM %d bits per sample. "
952 "total %d bits, remain=%d\n",
bits,
954 for (
i = 0;
i <
s->num_channels;
i++)
955 for (j = 0; j < subframe_len; j++)
957 } else {
958 if (
s->bits_per_sample < padding_zeroes)
960 for (
i = 0;
i <
s->num_channels;
i++) {
961 if (
s->is_channel_coded[
i]) {
963 if (
s->seekable_tile)
965 else
967 if (
s->bits_per_sample > 16)
968 revert_cdlms32(
s,
i, 0, subframe_len);
969 else
970 revert_cdlms16(
s,
i, 0, subframe_len);
971 } else {
972 memset(
s->channel_residues[
i], 0,
sizeof(**
s->channel_residues) * subframe_len);
973 }
974 }
975
978 if (
s->do_inter_ch_decorr)
982
983 /* Dequantize */
984 if (
s->quant_stepsize != 1)
985 for (
i = 0;
i <
s->num_channels;
i++)
986 for (j = 0; j < subframe_len; j++)
987 s->channel_residues[
i][j] *= (
unsigned)
s->quant_stepsize;
988 }
989
990 /* Write to proper output buffer depending on bit-depth */
991 for (
i = 0;
i <
s->channels_for_cur_subframe;
i++) {
992 int c =
s->channel_indexes_for_cur_subframe[
i];
993 int subframe_len =
s->channel[
c].subframe_len[
s->channel[
c].cur_subframe];
994
995 for (j = 0; j < subframe_len; j++) {
996 if (
s->bits_per_sample == 16) {
997 *
s->samples_16[
c]++ = (int16_t)
s->channel_residues[
c][j] * (1 << padding_zeroes);
998 } else {
999 *
s->samples_32[
c]++ =
s->channel_residues[
c][j] * (256
U << padding_zeroes);
1000 }
1001 }
1002 }
1003
1004 /* handled one subframe */
1005 for (
i = 0;
i <
s->channels_for_cur_subframe;
i++) {
1006 int c =
s->channel_indexes_for_cur_subframe[
i];
1007 if (
s->channel[
c].cur_subframe >=
s->channel[
c].num_subframes) {
1010 }
1011 ++
s->channel[
c].cur_subframe;
1012 }
1013 return 0;
1014 }
1015
1016 /**
1017 * @brief Decode one WMA frame.
1018 * @param s codec context
1019 * @return 0 if the trailer bit indicates that this is the last frame,
1020 * 1 if there are additional frames
1021 */
1023 {
1025 int more_frames = 0,
len = 0,
i,
ret;
1026
1027 s->frame->nb_samples =
s->samples_per_frame;
1029 /* return an error if no frame could be decoded at all */
1031 s->frame->nb_samples = 0;
1033 }
1034 for (
i = 0;
i <
s->num_channels;
i++) {
1035 s->samples_16[
i] = (int16_t *)
s->frame->extended_data[
i];
1036 s->samples_32[
i] = (
int32_t *)
s->frame->extended_data[
i];
1037 }
1038
1039 /* get frame length */
1042
1043 /* decode tile information */
1048 }
1049
1050 /* read drc info */
1051 if (
s->dynamic_range_compression)
1053
1054 /* no idea what these are for, might be the number of samples
1055 that need to be skipped at the beginning or end of a stream */
1058
1059 /* usually true for the first frame */
1062 ff_dlog(
s->avctx,
"start skip: %i\n", skip);
1063 }
1064
1065 /* sometimes true for the last frame */
1068 ff_dlog(
s->avctx,
"end skip: %i\n", skip);
1069 s->frame->nb_samples -= skip;
1070 if (
s->frame->nb_samples <= 0)
1072 }
1073
1074 }
1075
1076 /* reset subframe states */
1077 s->parsed_all_subframes = 0;
1078 for (
i = 0;
i <
s->num_channels;
i++) {
1079 s->channel[
i].decoded_samples = 0;
1080 s->channel[
i].cur_subframe = 0;
1081 }
1082
1083 /* decode all subframes */
1084 while (!
s->parsed_all_subframes) {
1085 int decoded_samples =
s->channel[0].decoded_samples;
1088 if (
s->frame->nb_samples)
1089 s->frame->nb_samples = decoded_samples;
1090 return 0;
1091 }
1092 }
1093
1095
1097
1098 if (
s->len_prefix) {
1100 /* FIXME: not sure if this is always an error */
1102 "frame[%"PRIu32"] would have to skip %i bits\n",
1106 return 0;
1107 }
1108
1109 /* skip the rest of the frame data */
1111 }
1112
1113 /* decode trailer bit */
1116 return more_frames;
1117 }
1118
1119 /**
1120 * @brief Calculate remaining input buffer length.
1121 * @param s codec context
1122 * @param gb bitstream reader context
1123 * @return remaining size in bits
1124 */
1126 {
1128 }
1129
1130 /**
1131 * @brief Fill the bit reservoir with a (partial) frame.
1132 * @param s codec context
1133 * @param gb bitstream reader context
1134 * @param len length of the partial frame
1135 * @param append decides whether to reset the buffer or not
1136 */
1139 {
1140 int buflen;
1142
1143 /* when the frame data does not need to be concatenated, the input buffer
1144 is reset and additional bits from the previous frame are copied
1145 and skipped later so that a fast byte copy is possible */
1146
1149 s->num_saved_bits =
s->frame_offset;
1151 }
1152
1153 buflen = (
s->num_saved_bits +
len + 8) >> 3;
1154
1155 if (len <= 0 || buflen >
s->max_frame_size) {
1158 s->num_saved_bits = 0;
1159 return;
1160 }
1161
1162 s->num_saved_bits +=
len;
1166 } else {
1172 }
1174
1177
1180 }
1181
1184 {
1187 const uint8_t* buf = avpkt->
data;
1188 int buf_size = avpkt->
size;
1189 int num_bits_prev_frame, packet_sequence_number, spliced_packet;
1190
1191 s->frame->nb_samples = 0;
1192
1196 s->num_saved_bits = 0;
1197 }
else if (
s->packet_done ||
s->packet_loss) {
1199
1200 if (!buf_size)
1201 return 0;
1202
1205 s->buf_bit_size = buf_size << 3;
1206
1207 /* parse packet header */
1209 packet_sequence_number =
get_bits(gb, 4);
1210 skip_bits(gb, 1);
// Skip seekable_frame_in_packet, currently unused
1212 if (spliced_packet)
1214
1215 /* get number of bits that need to be added to the previous frame */
1216 num_bits_prev_frame =
get_bits(gb,
s->log2_frame_size);
1217
1218 /* check for packet loss */
1219 if (!
s->packet_loss &&
1220 ((
s->packet_sequence_number + 1) & 0xF) != packet_sequence_number) {
1223 "Packet loss detected! seq %"PRIx8" vs %x\n",
1224 s->packet_sequence_number, packet_sequence_number);
1225 }
1226 s->packet_sequence_number = packet_sequence_number;
1227
1228 if (num_bits_prev_frame > 0) {
1230 if (num_bits_prev_frame >= remaining_packet_bits) {
1231 num_bits_prev_frame = remaining_packet_bits;
1233 }
1234
1235 /* Append the previous frame data to the remaining data from the
1236 * previous packet to create a full frame. */
1238
1239 /* decode the cross packet frame if it is valid */
1240 if (num_bits_prev_frame < remaining_packet_bits && !s->packet_loss)
1242 }
else if (
s->num_saved_bits -
s->frame_offset) {
1243 ff_dlog(avctx,
"ignoring %x previously saved bits\n",
1244 s->num_saved_bits -
s->frame_offset);
1245 }
1246
1247 if (
s->packet_loss) {
1248 /* Reset number of saved bits so that the decoder does not start
1249 * to decode incomplete frames in the s->len_prefix == 0 case. */
1250 s->num_saved_bits = 0;
1253 }
1254
1255 } else {
1257
1258 s->buf_bit_size = (avpkt->
size -
s->next_packet_start) << 3;
1261
1266
1267 if (!
s->packet_loss)
1269 }
else if (!
s->len_prefix
1271 /* when the frames do not have a length prefix, we don't know the
1272 * compressed length of the individual frames however, we know what
1273 * part of a new packet belongs to the previous frame therefore we
1274 * save the incoming packet first, then we append the "previous
1275 * frame" data from the next packet so that we get a buffer that
1276 * only contains full frames */
1278 } else {
1280 }
1281 }
1282
1286 }
1287
1288 if (
s->packet_done && !
s->packet_loss &&
1290 /* save the rest of the data so that it can be decoded
1291 * with the next packet */
1293 }
1294
1295 *got_frame_ptr =
s->frame->nb_samples > 0;
1297
1299
1301 }
1302
1304 {
1308 s->num_saved_bits = 0;
1309 s->frame_offset = 0;
1310 s->next_packet_start = 0;
1311 s->cdlms[0][0].order = 0;
1312 s->frame->nb_samples = 0;
1314 }
1315
1317 {
1319
1322
1323 return 0;
1324 }
1325
1327 .
name =
"wmalossless",
1341 };