|
|
@@ -23,6 +23,8 @@ |
|
|
|
*/ |
|
|
|
|
|
|
|
#include "libavutil/attributes.h" |
|
|
|
#include "libavutil/avassert.h" |
|
|
|
|
|
|
|
#include "avcodec.h" |
|
|
|
#include "internal.h" |
|
|
|
#include "get_bits.h" |
|
|
@@ -38,7 +40,7 @@ |
|
|
|
#define MAX_ORDER 256 |
|
|
|
|
|
|
|
#define WMALL_BLOCK_MIN_BITS 6 ///< log2 of min block size |
|
|
|
#define WMALL_BLOCK_MAX_BITS 12 ///< log2 of max block size |
|
|
|
#define WMALL_BLOCK_MAX_BITS 14 ///< log2 of max block size |
|
|
|
#define WMALL_BLOCK_MAX_SIZE (1 << WMALL_BLOCK_MAX_BITS) ///< maximum block size |
|
|
|
#define WMALL_BLOCK_SIZES (WMALL_BLOCK_MAX_BITS - WMALL_BLOCK_MIN_BITS + 1) ///< possible block sizes |
|
|
|
|
|
|
@@ -213,12 +215,9 @@ static av_cold int decode_init(AVCodecContext *avctx) |
|
|
|
s->len_prefix = s->decode_flags & 0x40; |
|
|
|
|
|
|
|
/* get frame len */ |
|
|
|
bits = ff_wma_get_frame_len_bits(avctx->sample_rate, 3, s->decode_flags); |
|
|
|
if (bits > WMALL_BLOCK_MAX_BITS) { |
|
|
|
av_log_missing_feature(avctx, "big-bits block sizes", 1); |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
} |
|
|
|
s->samples_per_frame = 1 << bits; |
|
|
|
s->samples_per_frame = 1 << ff_wma_get_frame_len_bits(avctx->sample_rate, |
|
|
|
3, s->decode_flags); |
|
|
|
av_assert0(s->samples_per_frame <= WMALL_BLOCK_MAX_SIZE); |
|
|
|
|
|
|
|
/* init previous block len */ |
|
|
|
for (i = 0; i < avctx->channels; i++) |
|
|
|