Lines Matching refs:ctx
193 void (*entropy_decode_mono)(struct APEContext *ctx, int blockstodecode);
194 void (*entropy_decode_stereo)(struct APEContext *ctx, int blockstodecode);
195 void (*predictor_decode_mono)(struct APEContext *ctx, int count);
196 void (*predictor_decode_stereo)(struct APEContext *ctx, int count);
199 static void ape_apply_filters(APEContext *ctx, int32_t *decoded0,
202 static void entropy_decode_mono_0000(APEContext *ctx, int blockstodecode);
203 static void entropy_decode_stereo_0000(APEContext *ctx, int blockstodecode);
204 static void entropy_decode_mono_3860(APEContext *ctx, int blockstodecode);
205 static void entropy_decode_stereo_3860(APEContext *ctx, int blockstodecode);
206 static void entropy_decode_mono_3900(APEContext *ctx, int blockstodecode);
207 static void entropy_decode_stereo_3900(APEContext *ctx, int blockstodecode);
208 static void entropy_decode_stereo_3930(APEContext *ctx, int blockstodecode);
209 static void entropy_decode_mono_3990(APEContext *ctx, int blockstodecode);
210 static void entropy_decode_stereo_3990(APEContext *ctx, int blockstodecode);
212 static void predictor_decode_mono_3800(APEContext *ctx, int count);
213 static void predictor_decode_stereo_3800(APEContext *ctx, int count);
214 static void predictor_decode_mono_3930(APEContext *ctx, int count);
215 static void predictor_decode_stereo_3930(APEContext *ctx, int count);
216 static void predictor_decode_mono_3950(APEContext *ctx, int count);
217 static void predictor_decode_stereo_3950(APEContext *ctx, int count);
337 static inline void range_start_decoding(APEContext *ctx)
339 ctx->rc.buffer = bytestream_get_byte(&ctx->ptr);
340 ctx->rc.low = ctx->rc.buffer >> (8 - EXTRA_BITS);
341 ctx->rc.range = (uint32_t) 1 << EXTRA_BITS;
345 static inline void range_dec_normalize(APEContext *ctx)
347 while (ctx->rc.range <= BOTTOM_VALUE) {
348 ctx->rc.buffer <<= 8;
349 if(ctx->ptr < ctx->data_end) {
350 ctx->rc.buffer += *ctx->ptr;
351 ctx->ptr++;
353 ctx->error = 1;
355 ctx->rc.low = (ctx->rc.low << 8) | ((ctx->rc.buffer >> 1) & 0xFF);
356 ctx->rc.range <<= 8;
362 * @param ctx decoder context
366 static inline int range_decode_culfreq(APEContext *ctx, int tot_f)
368 range_dec_normalize(ctx);
369 ctx->rc.help = ctx->rc.range / tot_f;
370 return ctx->rc.low / ctx->rc.help;
375 * @param ctx decoder context
378 static inline int range_decode_culshift(APEContext *ctx, int shift)
380 range_dec_normalize(ctx);
381 ctx->rc.help = ctx->rc.range >> shift;
382 return ctx->rc.low / ctx->rc.help;
388 * @param ctx decoder context
392 static inline void range_decode_update(APEContext *ctx, int sy_f, int lt_f)
394 ctx->rc.low -= ctx->rc.help * lt_f;
395 ctx->rc.range = ctx->rc.help * sy_f;
399 static inline int range_decode_bits(APEContext *ctx, int n)
401 int sym = range_decode_culshift(ctx, n);
402 range_decode_update(ctx, 1, sym);
447 * @param ctx decoder context
451 static inline int range_get_symbol(APEContext *ctx,
457 cf = range_decode_culshift(ctx, 16);
461 range_decode_update(ctx, 1, cf);
463 ctx->error=1;
469 range_decode_update(ctx, counts_diff[symbol], counts[symbol]);
498 static inline int ape_decode_value_3860(APEContext *ctx, GetBitContext *gb,
505 if (ctx->fileversion > 3880) {
517 av_log(ctx->avctx, AV_LOG_ERROR, "Too many bits: %"PRIu32"\n", rice->k);
518 ctx->error = 1;
531 static inline int ape_decode_value_3900(APEContext *ctx, APERice *rice)
536 overflow = range_get_symbol(ctx, counts_3970, counts_diff_3970);
539 tmpk = range_decode_bits(ctx, 5);
544 if (tmpk <= 16 || ctx->fileversion < 3910) {
546 av_log(ctx->avctx, AV_LOG_ERROR, "Too many bits: %d\n", tmpk);
549 x = range_decode_bits(ctx, tmpk);
551 x = range_decode_bits(ctx, 16);
552 x |= (range_decode_bits(ctx, tmpk - 16) << 16);
554 av_log(ctx->avctx, AV_LOG_ERROR, "Too many bits: %d\n", tmpk);
565 static inline int ape_decode_value_3990(APEContext *ctx, APERice *rice)
572 overflow = range_get_symbol(ctx, counts_3980, counts_diff_3980);
575 overflow = (unsigned)range_decode_bits(ctx, 16) << 16;
576 overflow |= range_decode_bits(ctx, 16);
580 base = range_decode_culfreq(ctx, pivot);
581 range_decode_update(ctx, 1, base);
590 base_hi = range_decode_culfreq(ctx, base_hi + 1);
591 range_decode_update(ctx, 1, base_hi);
592 base_lo = range_decode_culfreq(ctx, 1 << bbits);
593 range_decode_update(ctx, 1, base_lo);
611 static void decode_array_0000(APEContext *ctx, GetBitContext *gb,
619 out[i] = get_rice_ook(&ctx->gb, 10);
630 out[i] = get_rice_ook(&ctx->gb, rice->k);
644 if (get_bits_left(&ctx->gb) < 1) {
645 ctx->error = 1;
648 out[i] = get_rice_ook(&ctx->gb, rice->k);
669 static void entropy_decode_mono_0000(APEContext *ctx, int blockstodecode)
671 decode_array_0000(ctx, &ctx->gb, ctx->decoded[0], &ctx->riceY,
675 static void entropy_decode_stereo_0000(APEContext *ctx, int blockstodecode)
677 decode_array_0000(ctx, &ctx->gb, ctx->decoded[0], &ctx->riceY,
679 decode_array_0000(ctx, &ctx->gb, ctx->decoded[1], &ctx->riceX,
683 static void entropy_decode_mono_3860(APEContext *ctx, int blockstodecode)
685 int32_t *decoded0 = ctx->decoded[0];
688 *decoded0++ = ape_decode_value_3860(ctx, &ctx->gb, &ctx->riceY);
691 static void entropy_decode_stereo_3860(APEContext *ctx, int blockstodecode)
693 int32_t *decoded0 = ctx->decoded[0];
694 int32_t *decoded1 = ctx->decoded[1];
698 *decoded0++ = ape_decode_value_3860(ctx, &ctx->gb, &ctx->riceY);
700 *decoded1++ = ape_decode_value_3860(ctx, &ctx->gb, &ctx->riceX);
703 static void entropy_decode_mono_3900(APEContext *ctx, int blockstodecode)
705 int32_t *decoded0 = ctx->decoded[0];
708 *decoded0++ = ape_decode_value_3900(ctx, &ctx->riceY);
711 static void entropy_decode_stereo_3900(APEContext *ctx, int blockstodecode)
713 int32_t *decoded0 = ctx->decoded[0];
714 int32_t *decoded1 = ctx->decoded[1];
718 *decoded0++ = ape_decode_value_3900(ctx, &ctx->riceY);
719 range_dec_normalize(ctx);
721 ctx->ptr -= 1;
722 range_start_decoding(ctx);
724 *decoded1++ = ape_decode_value_3900(ctx, &ctx->riceX);
727 static void entropy_decode_stereo_3930(APEContext *ctx, int blockstodecode)
729 int32_t *decoded0 = ctx->decoded[0];
730 int32_t *decoded1 = ctx->decoded[1];
733 *decoded0++ = ape_decode_value_3900(ctx, &ctx->riceY);
734 *decoded1++ = ape_decode_value_3900(ctx, &ctx->riceX);
738 static void entropy_decode_mono_3990(APEContext *ctx, int blockstodecode)
740 int32_t *decoded0 = ctx->decoded[0];
743 *decoded0++ = ape_decode_value_3990(ctx, &ctx->riceY);
746 static void entropy_decode_stereo_3990(APEContext *ctx, int blockstodecode)
748 int32_t *decoded0 = ctx->decoded[0];
749 int32_t *decoded1 = ctx->decoded[1];
752 *decoded0++ = ape_decode_value_3990(ctx, &ctx->riceY);
753 *decoded1++ = ape_decode_value_3990(ctx, &ctx->riceX);
757 static int init_entropy_decoder(APEContext *ctx)
760 if (ctx->fileversion >= 3900) {
761 if (ctx->data_end - ctx->ptr < 6)
763 ctx->CRC = bytestream_get_be32(&ctx->ptr);
765 ctx->CRC = get_bits_long(&ctx->gb, 32);
769 ctx->frameflags = 0;
770 ctx->CRC_state = UINT32_MAX;
771 if ((ctx->fileversion > 3820) && (ctx->CRC & 0x80000000)) {
772 ctx->CRC &= ~0x80000000;
774 if (ctx->data_end - ctx->ptr < 6)
776 ctx->frameflags = bytestream_get_be32(&ctx->ptr);
780 ctx->riceX.k = 10;
781 ctx->riceX.ksum = (1 << ctx->riceX.k) * 16;
782 ctx->riceY.k = 10;
783 ctx->riceY.ksum = (1 << ctx->riceY.k) * 16;
785 if (ctx->fileversion >= 3900) {
787 ctx->ptr++;
789 range_start_decoding(ctx);
815 static void init_predictor_decoder(APEContext *ctx)
817 APEPredictor *p = &ctx->predictor;
818 APEPredictor64 *p64 = &ctx->predictor64;
827 if (ctx->fileversion < 3930) {
828 if (ctx->compression_level == COMPRESSION_LEVEL_FAST) {
847 if (ctx->fileversion < 3930) {
990 static void predictor_decode_stereo_3800(APEContext *ctx, int count)
992 APEPredictor *p = &ctx->predictor;
993 int32_t *decoded0 = ctx->decoded[0];
994 int32_t *decoded1 = ctx->decoded[1];
997 if (ctx->compression_level == COMPRESSION_LEVEL_HIGH) {
1001 } else if (ctx->compression_level == COMPRESSION_LEVEL_EXTRA_HIGH) {
1004 if (ctx->fileversion >= 3830) {
1018 if (ctx->compression_level == COMPRESSION_LEVEL_FAST) {
1045 static void predictor_decode_mono_3800(APEContext *ctx, int count)
1047 APEPredictor *p = &ctx->predictor;
1048 int32_t *decoded0 = ctx->decoded[0];
1051 if (ctx->compression_level == COMPRESSION_LEVEL_HIGH) {
1054 } else if (ctx->compression_level == COMPRESSION_LEVEL_EXTRA_HIGH) {
1057 if (ctx->fileversion >= 3830) {
1068 if (ctx->compression_level == COMPRESSION_LEVEL_FAST) {
1120 static void predictor_decode_stereo_3930(APEContext *ctx, int count)
1122 APEPredictor *p = &ctx->predictor;
1123 int32_t *decoded0 = ctx->decoded[0];
1124 int32_t *decoded1 = ctx->decoded[1];
1126 ape_apply_filters(ctx, ctx->decoded[0], ctx->decoded[1], count);
1148 static void predictor_decode_mono_3930(APEContext *ctx, int count)
1150 APEPredictor *p = &ctx->predictor;
1151 int32_t *decoded0 = ctx->decoded[0];
1153 ape_apply_filters(ctx, ctx->decoded[0], NULL, count);
1225 static void predictor_decode_stereo_3950(APEContext *ctx, int count)
1227 APEPredictor64 *p = &ctx->predictor64;
1228 int32_t *decoded0 = ctx->decoded[0];
1229 int32_t *decoded1 = ctx->decoded[1];
1231 ape_apply_filters(ctx, ctx->decoded[0], ctx->decoded[1], count);
1237 ctx->compression_level);
1241 ctx->compression_level);
1256 static void predictor_decode_mono_3950(APEContext *ctx, int count)
1258 APEPredictor64 *p = &ctx->predictor64;
1259 int32_t *decoded0 = ctx->decoded[0];
1262 ape_apply_filters(ctx, ctx->decoded[0], NULL, count);
1316 static void init_filter(APEContext *ctx, APEFilter *f, int16_t *buf, int order)
1322 static void do_apply_filter(APEContext *ctx, int version, APEFilter *f,
1330 res = ctx->adsp.scalarproduct_and_madd_int16(f->coeffs,
1384 static void apply_filter(APEContext *ctx, APEFilter *f,
1388 do_apply_filter(ctx, ctx->fileversion, &f[0], data0, count, order, fracbits);
1390 do_apply_filter(ctx, ctx->fileversion, &f[1], data1, count, order, fracbits);
1393 static void ape_apply_filters(APEContext *ctx, int32_t *decoded0,
1399 if (!ape_filter_orders[ctx->fset][i])
1401 apply_filter(ctx, ctx->filters[i], decoded0, decoded1, count,
1402 ape_filter_orders[ctx->fset][i],
1403 ape_filter_fracbits[ctx->fset][i]);
1407 static int init_frame_decoder(APEContext *ctx)
1410 if ((ret = init_entropy_decoder(ctx)) < 0)
1412 init_predictor_decoder(ctx);
1415 if (!ape_filter_orders[ctx->fset][i])
1417 init_filter(ctx, ctx->filters[i], ctx->filterbuf[i],
1418 ape_filter_orders[ctx->fset][i]);
1423 static void ape_unpack_mono(APEContext *ctx, int count)
1425 if (ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) {
1427 av_log(ctx->avctx, AV_LOG_DEBUG, "pure silence mono\n");
1431 ctx->entropy_decode_mono(ctx, count);
1432 if (ctx->error)
1436 ctx->predictor_decode_mono(ctx, count);
1439 if (ctx->channels == 2) {
1440 memcpy(ctx->decoded[1], ctx->decoded[0], count * sizeof(*ctx->decoded[1]));
1444 static void ape_unpack_stereo(APEContext *ctx, int count)
1447 int32_t *decoded0 = ctx->decoded[0];
1448 int32_t *decoded1 = ctx->decoded[1];
1450 if ((ctx->frameflags & APE_FRAMECODE_STEREO_SILENCE) == APE_FRAMECODE_STEREO_SILENCE) {
1452 av_log(ctx->avctx, AV_LOG_DEBUG, "pure silence stereo\n");
1456 ctx->entropy_decode_stereo(ctx, count);
1457 if (ctx->error)
1461 ctx->predictor_decode_stereo(ctx, count);