summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-12-10 01:32:37 +0100
committerMichael Niedermayer <michaelni@gmx.at>2012-12-10 01:32:37 +0100
commitb7d8484f272b7a5a2ed9db76d5182dbd6e3e6992 (patch)
treebcccbc78b279cd208a485fac81998118a415926e /libavcodec
parent78ac7ee97040a2e9a69b81f82a89edd779e124bb (diff)
parentb8f3ab8e6a7ce3627764da53b809628c828d4047 (diff)
Merge commit 'b8f3ab8e6a7ce3627764da53b809628c828d4047'
* commit 'b8f3ab8e6a7ce3627764da53b809628c828d4047': ac3dec: output planar float only svq3: make slice type value unsigned to match svq3_get_ue_golomb return type configure: Have protocols select network code instead of depending on it Conflicts: libavcodec/svq3.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/ac3dec.c32
-rw-r--r--libavcodec/ac3dec.h1
-rw-r--r--libavcodec/svq3.c7
3 files changed, 10 insertions, 30 deletions
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 66f8a4d5d9..064e60d33e 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -172,14 +172,7 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx)
ff_fmt_convert_init(&s->fmt_conv, avctx);
av_lfg_init(&s->dith_state, 0);
- /* set scale value for float to int16 conversion */
- if (avctx->request_sample_fmt == AV_SAMPLE_FMT_FLT) {
- s->mul_bias = 1.0f;
- avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
- } else {
- s->mul_bias = 32767.0f;
- avctx->sample_fmt = AV_SAMPLE_FMT_S16;
- }
+ avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
/* allow downmixing to stereo or mono */
if (avctx->channels > 0 && avctx->request_channels > 0 &&
@@ -1206,7 +1199,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
/* apply scaling to coefficients (headroom, dynrng) */
for (ch = 1; ch <= s->channels; ch++) {
- float gain = s->mul_bias / 4194304.0f;
+ float gain = 1.0 / 4194304.0f;
if (s->channel_mode == AC3_CHMODE_DUALMONO) {
gain *= s->dynamic_range[2 - ch];
} else {
@@ -1268,8 +1261,6 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data,
const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size;
AC3DecodeContext *s = avctx->priv_data;
- float *out_samples_flt;
- int16_t *out_samples_s16;
int blk, ch, err, ret;
const uint8_t *channel_map;
const float *output[AC3_MAX_CHANNELS];
@@ -1383,8 +1374,6 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data,
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return ret;
}
- out_samples_flt = (float *)s->frame.data[0];
- out_samples_s16 = (int16_t *)s->frame.data[0];
/* decode the audio blocks */
channel_map = ff_ac3_dec_channel_map[s->output_mode & ~AC3_OUTPUT_LFEON][s->lfe_on];
@@ -1395,15 +1384,8 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data,
av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
err = 1;
}
- if (avctx->sample_fmt == AV_SAMPLE_FMT_FLT) {
- s->fmt_conv.float_interleave(out_samples_flt, output, 256,
- s->out_channels);
- out_samples_flt += 256 * s->out_channels;
- } else {
- s->fmt_conv.float_to_int16_interleave(out_samples_s16, output, 256,
- s->out_channels);
- out_samples_s16 += 256 * s->out_channels;
- }
+ for (ch = 0; ch < s->out_channels; ch++)
+ memcpy(s->frame.data[ch] + blk * 1024, output[ch], 1024);
}
s->frame.decode_error_flags = err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0;
@@ -1457,8 +1439,7 @@ AVCodec ff_ac3_decoder = {
.decode = ac3_decode_frame,
.capabilities = CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT,
- AV_SAMPLE_FMT_S16,
+ .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE },
.priv_class = &ac3_decoder_class,
};
@@ -1481,8 +1462,7 @@ AVCodec ff_eac3_decoder = {
.decode = ac3_decode_frame,
.capabilities = CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("ATSC A/52B (AC-3, E-AC-3)"),
- .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT,
- AV_SAMPLE_FMT_S16,
+ .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE },
.priv_class = &eac3_decoder_class,
};
diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h
index c3a43bf5cf..ee27727dce 100644
--- a/libavcodec/ac3dec.h
+++ b/libavcodec/ac3dec.h
@@ -201,7 +201,6 @@ typedef struct AC3DecodeContext {
DSPContext dsp; ///< for optimization
AC3DSPContext ac3dsp;
FmtConvertContext fmt_conv; ///< optimized conversion functions
- float mul_bias; ///< scaling for float_to_int16 conversion
///@}
///@name Aligned arrays
diff --git a/libavcodec/svq3.c b/libavcodec/svq3.c
index 45b96e4a30..5a2fcff808 100644
--- a/libavcodec/svq3.c
+++ b/libavcodec/svq3.c
@@ -756,6 +756,7 @@ static int svq3_decode_slice_header(AVCodecContext *avctx)
MpegEncContext *s = &h->s;
const int mb_xy = h->mb_xy;
int i, header;
+ unsigned slice_id;
header = get_bits(&s->gb, 8);
@@ -790,12 +791,12 @@ static int svq3_decode_slice_header(AVCodecContext *avctx)
skip_bits_long(&s->gb, 0);
}
- if ((i = svq3_get_ue_golomb(&s->gb)) >= 3U) {
- av_log(h->s.avctx, AV_LOG_ERROR, "illegal slice type %d \n", i);
+ if ((slice_id = svq3_get_ue_golomb(&s->gb)) >= 3) {
+ av_log(h->s.avctx, AV_LOG_ERROR, "illegal slice type %d \n", slice_id);
return -1;
}
- h->slice_type = golomb_to_pict_type[i];
+ h->slice_type = golomb_to_pict_type[slice_id];
if ((header & 0x9F) == 2) {
i = (s->mb_num < 64) ? 6 : (1 + av_log2(s->mb_num - 1));