提交 ccfcddb3 编写于 作者: P Peter Ross 提交者: Ronald S. Bultje

Bink version 'b' audio decoder

Signed-off-by: NRonald S. Bultje <rsbultje@gmail.com>
上级 8a8c283e
...@@ -76,7 +76,7 @@ version <next>: ...@@ -76,7 +76,7 @@ version <next>:
- IVF muxer added - IVF muxer added
- Wing Commander IV movies decoder added - Wing Commander IV movies decoder added
- movie source added - movie source added
- Bink version 'b' video decoder - Bink version 'b' audio and video decoder
version 0.6: version 0.6:
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#define LIBAVCODEC_VERSION_MAJOR 52 #define LIBAVCODEC_VERSION_MAJOR 52
#define LIBAVCODEC_VERSION_MINOR 113 #define LIBAVCODEC_VERSION_MINOR 113
#define LIBAVCODEC_VERSION_MICRO 1 #define LIBAVCODEC_VERSION_MICRO 2
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
LIBAVCODEC_VERSION_MINOR, \ LIBAVCODEC_VERSION_MINOR, \
......
/* /*
* Bink Audio decoder * Bink Audio decoder
* Copyright (c) 2007-2010 Peter Ross (pross@xvid.org) * Copyright (c) 2007-2011 Peter Ross (pross@xvid.org)
* Copyright (c) 2009 Daniel Verkamp (daniel@drv.nu) * Copyright (c) 2009 Daniel Verkamp (daniel@drv.nu)
* *
* This file is part of FFmpeg. * This file is part of FFmpeg.
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "dsputil.h" #include "dsputil.h"
#include "fft.h" #include "fft.h"
#include "fmtconvert.h" #include "fmtconvert.h"
#include "libavutil/intfloat_readwrite.h"
extern const uint16_t ff_wma_critical_freqs[25]; extern const uint16_t ff_wma_critical_freqs[25];
...@@ -44,6 +45,7 @@ typedef struct { ...@@ -44,6 +45,7 @@ typedef struct {
GetBitContext gb; GetBitContext gb;
DSPContext dsp; DSPContext dsp;
FmtConvertContext fmt_conv; FmtConvertContext fmt_conv;
int version_b; ///< Bink version 'b'
int first; int first;
int channels; int channels;
int frame_len; ///< transform size (samples) int frame_len; ///< transform size (samples)
...@@ -87,11 +89,14 @@ static av_cold int decode_init(AVCodecContext *avctx) ...@@ -87,11 +89,14 @@ static av_cold int decode_init(AVCodecContext *avctx)
return -1; return -1;
} }
s->version_b = avctx->codec_tag == MKTAG('B','I','K','b');
if (avctx->codec->id == CODEC_ID_BINKAUDIO_RDFT) { if (avctx->codec->id == CODEC_ID_BINKAUDIO_RDFT) {
// audio is already interleaved for the RDFT format variant // audio is already interleaved for the RDFT format variant
sample_rate *= avctx->channels; sample_rate *= avctx->channels;
s->channels = 1; s->channels = 1;
frame_len_bits += av_log2(avctx->channels); if (!s->version_b)
frame_len_bits += av_log2(avctx->channels);
} else { } else {
s->channels = avctx->channels; s->channels = avctx->channels;
} }
...@@ -162,8 +167,13 @@ static void decode_block(BinkAudioContext *s, short *out, int use_dct) ...@@ -162,8 +167,13 @@ static void decode_block(BinkAudioContext *s, short *out, int use_dct)
for (ch = 0; ch < s->channels; ch++) { for (ch = 0; ch < s->channels; ch++) {
FFTSample *coeffs = s->coeffs_ptr[ch]; FFTSample *coeffs = s->coeffs_ptr[ch];
coeffs[0] = get_float(gb) * s->root; if (s->version_b) {
coeffs[1] = get_float(gb) * s->root; coeffs[0] = av_int2flt(get_bits(gb, 32)) * s->root;
coeffs[1] = av_int2flt(get_bits(gb, 32)) * s->root;
} else {
coeffs[0] = get_float(gb) * s->root;
coeffs[1] = get_float(gb) * s->root;
}
for (i = 0; i < s->num_bands; i++) { for (i = 0; i < s->num_bands; i++) {
/* constant is result of 0.066399999/log10(M_E) */ /* constant is result of 0.066399999/log10(M_E) */
...@@ -177,7 +187,9 @@ static void decode_block(BinkAudioContext *s, short *out, int use_dct) ...@@ -177,7 +187,9 @@ static void decode_block(BinkAudioContext *s, short *out, int use_dct)
// parse coefficients // parse coefficients
i = 2; i = 2;
while (i < s->frame_len) { while (i < s->frame_len) {
if (get_bits1(gb)) { if (s->version_b) {
j = i + 16;
} else if (get_bits1(gb)) {
j = i + rle_length_tab[get_bits(gb, 4)] * 8; j = i + rle_length_tab[get_bits(gb, 4)] * 8;
} else { } else {
j = i + 8; j = i + 8;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册