repositories
/
deb_ffmpeg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Imported Debian version 2.5.0~trusty1.1
[deb_ffmpeg.git]
/
ffmpeg
/
libavcodec
/
wmaprodec.c
diff --git
a/ffmpeg/libavcodec/wmaprodec.c
b/ffmpeg/libavcodec/wmaprodec.c
index f45e1fcdbc962d0ac88841e153808ba179176beb..cc7ad0d4087476836beea90c3b4fa6b497fec5bd 100644
(file)
--- a/
ffmpeg/libavcodec/wmaprodec.c
+++ b/
ffmpeg/libavcodec/wmaprodec.c
@@
-171,7
+171,7
@@
typedef struct {
typedef struct WMAProDecodeCtx {
/* generic decoder variables */
AVCodecContext* avctx; ///< codec context for av_log
typedef struct WMAProDecodeCtx {
/* generic decoder variables */
AVCodecContext* avctx; ///< codec context for av_log
- AVFloatDSPContext fdsp;
+ AVFloatDSPContext
*
fdsp;
uint8_t frame_data[MAX_FRAMESIZE +
FF_INPUT_BUFFER_PADDING_SIZE];///< compressed frame data
PutBitContext pb; ///< context for filling the frame_data buffer
uint8_t frame_data[MAX_FRAMESIZE +
FF_INPUT_BUFFER_PADDING_SIZE];///< compressed frame data
PutBitContext pb; ///< context for filling the frame_data buffer
@@
-260,6
+260,8
@@
static av_cold int decode_end(AVCodecContext *avctx)
WMAProDecodeCtx *s = avctx->priv_data;
int i;
WMAProDecodeCtx *s = avctx->priv_data;
int i;
+ av_freep(&s->fdsp);
+
for (i = 0; i < WMAPRO_BLOCK_SIZES; i++)
ff_mdct_end(&s->mdct_ctx[i]);
for (i = 0; i < WMAPRO_BLOCK_SIZES; i++)
ff_mdct_end(&s->mdct_ctx[i]);
@@
-286,7
+288,9
@@
static av_cold int decode_init(AVCodecContext *avctx)
}
s->avctx = avctx;
}
s->avctx = avctx;
- avpriv_float_dsp_init(&s->fdsp, avctx->flags & CODEC_FLAG_BITEXACT);
+ s->fdsp = avpriv_float_dsp_alloc(avctx->flags & CODEC_FLAG_BITEXACT);
+ if (!s->fdsp)
+ return AVERROR(ENOMEM);
init_put_bits(&s->pb, s->frame_data, MAX_FRAMESIZE);
init_put_bits(&s->pb, s->frame_data, MAX_FRAMESIZE);
@@
-422,6
+426,9
@@
static av_cold int decode_init(AVCodecContext *avctx)
offset &= ~3;
if (offset > s->sfb_offsets[i][band - 1])
s->sfb_offsets[i][band++] = offset;
offset &= ~3;
if (offset > s->sfb_offsets[i][band - 1])
s->sfb_offsets[i][band++] = offset;
+
+ if (offset >= subframe_len)
+ break;
}
s->sfb_offsets[i][band - 1] = subframe_len;
s->num_sfb[i] = band - 1;
}
s->sfb_offsets[i][band - 1] = subframe_len;
s->num_sfb[i] = band - 1;
@@
-1034,10
+1041,10
@@
static void inverse_channel_transform(WMAProDecodeCtx *s)
}
} else if (s->avctx->channels == 2) {
int len = FFMIN(sfb[1], s->subframe_len) - sfb[0];
}
} else if (s->avctx->channels == 2) {
int len = FFMIN(sfb[1], s->subframe_len) - sfb[0];
- s->fdsp
.
vector_fmul_scalar(ch_data[0] + sfb[0],
+ s->fdsp
->
vector_fmul_scalar(ch_data[0] + sfb[0],
ch_data[0] + sfb[0],
181.0 / 128, len);
ch_data[0] + sfb[0],
181.0 / 128, len);
- s->fdsp
.
vector_fmul_scalar(ch_data[1] + sfb[0],
+ s->fdsp
->
vector_fmul_scalar(ch_data[1] + sfb[0],
ch_data[1] + sfb[0],
181.0 / 128, len);
}
ch_data[1] + sfb[0],
181.0 / 128, len);
}
@@
-1068,7
+1075,7
@@
static void wmapro_window(WMAProDecodeCtx *s)
winlen >>= 1;
winlen >>= 1;
- s->fdsp
.
vector_fmul_window(start, start, start + winlen,
+ s->fdsp
->
vector_fmul_window(start, start, start + winlen,
window, winlen);
s->channel[c].prev_block_len = s->subframe_len;
window, winlen);
s->channel[c].prev_block_len = s->subframe_len;
@@
-1288,7
+1295,7
@@
static int decode_subframe(WMAProDecodeCtx *s)
s->channel[c].scale_factor_step;
const float quant = pow(10.0, exp / 20.0);
int start = s->cur_sfb_offsets[b];
s->channel[c].scale_factor_step;
const float quant = pow(10.0, exp / 20.0);
int start = s->cur_sfb_offsets[b];
- s->fdsp
.
vector_fmul_scalar(s->tmp + start,
+ s->fdsp
->
vector_fmul_scalar(s->tmp + start,
s->channel[c].coeffs + start,
quant, end - start);
}
s->channel[c].coeffs + start,
quant, end - start);
}