Commit 0fd1ddf1 authored by Justin Ruggles's avatar Justin Ruggles

dpcm: use AVCodecContext.channels instead of keeping a private copy

parent 1c7a0161
...@@ -44,7 +44,6 @@ ...@@ -44,7 +44,6 @@
typedef struct DPCMContext { typedef struct DPCMContext {
AVFrame frame; AVFrame frame;
int channels;
int16_t roq_square_array[256]; int16_t roq_square_array[256];
int sample[2]; ///< previous sample (for SOL_DPCM) int sample[2]; ///< previous sample (for SOL_DPCM)
const int8_t *sol_table; ///< delta table for SOL_DPCM const int8_t *sol_table; ///< delta table for SOL_DPCM
...@@ -123,7 +122,6 @@ static av_cold int dpcm_decode_init(AVCodecContext *avctx) ...@@ -123,7 +122,6 @@ static av_cold int dpcm_decode_init(AVCodecContext *avctx)
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
s->channels = avctx->channels;
s->sample[0] = s->sample[1] = 0; s->sample[0] = s->sample[1] = 0;
switch(avctx->codec->id) { switch(avctx->codec->id) {
...@@ -179,7 +177,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data, ...@@ -179,7 +177,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data,
int out = 0, ret; int out = 0, ret;
int predictor[2]; int predictor[2];
int ch = 0; int ch = 0;
int stereo = s->channels - 1; int stereo = avctx->channels - 1;
int16_t *output_samples, *samples_end; int16_t *output_samples, *samples_end;
GetByteContext gb; GetByteContext gb;
...@@ -193,10 +191,10 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data, ...@@ -193,10 +191,10 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data,
out = buf_size - 8; out = buf_size - 8;
break; break;
case AV_CODEC_ID_INTERPLAY_DPCM: case AV_CODEC_ID_INTERPLAY_DPCM:
out = buf_size - 6 - s->channels; out = buf_size - 6 - avctx->channels;
break; break;
case AV_CODEC_ID_XAN_DPCM: case AV_CODEC_ID_XAN_DPCM:
out = buf_size - 2 * s->channels; out = buf_size - 2 * avctx->channels;
break; break;
case AV_CODEC_ID_SOL_DPCM: case AV_CODEC_ID_SOL_DPCM:
if (avctx->codec_tag != 3) if (avctx->codec_tag != 3)
...@@ -211,7 +209,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data, ...@@ -211,7 +209,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data,
} }
/* get output buffer */ /* get output buffer */
s->frame.nb_samples = out / s->channels; s->frame.nb_samples = out / avctx->channels;
if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) { if ((ret = avctx->get_buffer(avctx, &s->frame)) < 0) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return ret; return ret;
...@@ -245,7 +243,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data, ...@@ -245,7 +243,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data,
case AV_CODEC_ID_INTERPLAY_DPCM: case AV_CODEC_ID_INTERPLAY_DPCM:
bytestream2_skipu(&gb, 6); /* skip over the stream mask and stream length */ bytestream2_skipu(&gb, 6); /* skip over the stream mask and stream length */
for (ch = 0; ch < s->channels; ch++) { for (ch = 0; ch < avctx->channels; ch++) {
predictor[ch] = sign_extend(bytestream2_get_le16u(&gb), 16); predictor[ch] = sign_extend(bytestream2_get_le16u(&gb), 16);
*output_samples++ = predictor[ch]; *output_samples++ = predictor[ch];
} }
...@@ -265,7 +263,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data, ...@@ -265,7 +263,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx, void *data,
{ {
int shift[2] = { 4, 4 }; int shift[2] = { 4, 4 };
for (ch = 0; ch < s->channels; ch++) for (ch = 0; ch < avctx->channels; ch++)
predictor[ch] = sign_extend(bytestream2_get_le16u(&gb), 16); predictor[ch] = sign_extend(bytestream2_get_le16u(&gb), 16);
ch = 0; ch = 0;
......
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