Commit f8d68822 authored by Paul B Mahol's avatar Paul B Mahol

takdec: use samplefmt.h from libavutil

Instead of having own code for calculating decoded buffer size
just use already provided functions from libavutil.
Signed-off-by: 's avatarPaul B Mahol <onemda@gmail.com>
parent 6a7fed19
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
* @author Paul B Mahol * @author Paul B Mahol
*/ */
#include "libavutil/samplefmt.h"
#include "tak.h" #include "tak.h"
#include "avcodec.h" #include "avcodec.h"
#include "internal.h" #include "internal.h"
...@@ -49,8 +50,8 @@ typedef struct TAKDecContext { ...@@ -49,8 +50,8 @@ typedef struct TAKDecContext {
GetBitContext gb; ///< bitstream reader initialized to start at the current frame GetBitContext gb; ///< bitstream reader initialized to start at the current frame
int nb_samples; ///< number of samples in the current frame int nb_samples; ///< number of samples in the current frame
int32_t *decode_buffer; uint8_t *decode_buffer;
int decode_buffer_size; unsigned int decode_buffer_size;
int32_t *decoded[TAK_MAX_CHANNELS]; ///< decoded samples for each channel int32_t *decoded[TAK_MAX_CHANNELS]; ///< decoded samples for each channel
int8_t lpc_mode[TAK_MAX_CHANNELS]; int8_t lpc_mode[TAK_MAX_CHANNELS];
...@@ -793,14 +794,17 @@ static int tak_decode_frame(AVCodecContext *avctx, void *data, ...@@ -793,14 +794,17 @@ static int tak_decode_frame(AVCodecContext *avctx, void *data,
return ret; return ret;
if (avctx->bits_per_raw_sample <= 16) { if (avctx->bits_per_raw_sample <= 16) {
av_fast_malloc(&s->decode_buffer, &s->decode_buffer_size, int buf_size = av_samples_get_buffer_size(NULL, avctx->channels,
sizeof(*s->decode_buffer) * FFALIGN(s->nb_samples, 8) * s->nb_samples,
avctx->channels + FF_INPUT_BUFFER_PADDING_SIZE); AV_SAMPLE_FMT_S32P, 0);
av_fast_malloc(&s->decode_buffer, &s->decode_buffer_size, buf_size);
if (!s->decode_buffer) if (!s->decode_buffer)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
for (chan = 0; chan < avctx->channels; chan++) ret = av_samples_fill_arrays((uint8_t **)s->decoded, NULL,
s->decoded[chan] = s->decode_buffer + s->decode_buffer, avctx->channels,
chan * FFALIGN(s->nb_samples, 8); s->nb_samples, AV_SAMPLE_FMT_S32P, 0);
if (ret < 0)
return ret;
} else { } else {
for (chan = 0; chan < avctx->channels; chan++) for (chan = 0; chan < avctx->channels; chan++)
s->decoded[chan] = (int32_t *)s->frame.data[chan]; s->decoded[chan] = (int32_t *)s->frame.data[chan];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment