summaryrefslogtreecommitdiff
path: root/libavcodec/alacenc.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-08-21 09:21:56 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2012-08-22 16:41:41 -0400
commitf24cc1b2f1b5d9a1fd91340cc9f7b97dda9dc3b1 (patch)
treecac8032865688d3ae07f8a4f5d065deef650e8ae /libavcodec/alacenc.c
parent358078d9bb89d6266e274720eba8582ec7b1c6b7 (diff)
alacenc: use s16p sample format as input
Diffstat (limited to 'libavcodec/alacenc.c')
-rw-r--r--libavcodec/alacenc.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/libavcodec/alacenc.c b/libavcodec/alacenc.c
index d337e4023d..6b5c4f0069 100644
--- a/libavcodec/alacenc.c
+++ b/libavcodec/alacenc.c
@@ -78,17 +78,15 @@ typedef struct AlacEncodeContext {
} AlacEncodeContext;
-static void init_sample_buffers(AlacEncodeContext *s,
- const int16_t *input_samples)
+static void init_sample_buffers(AlacEncodeContext *s, int16_t **input_samples)
{
int ch, i;
for (ch = 0; ch < s->avctx->channels; ch++) {
- const int16_t *sptr = input_samples + ch;
- for (i = 0; i < s->frame_size; i++) {
- s->sample_buf[ch][i] = *sptr;
- sptr += s->avctx->channels;
- }
+ int32_t *bptr = s->sample_buf[ch];
+ const int16_t *sptr = input_samples[ch];
+ for (i = 0; i < s->frame_size; i++)
+ bptr[i] = sptr[i];
}
}
@@ -347,8 +345,7 @@ static void alac_entropy_coder(AlacEncodeContext *s)
}
}
-static int write_frame(AlacEncodeContext *s, AVPacket *avpkt,
- const int16_t *samples)
+static int write_frame(AlacEncodeContext *s, AVPacket *avpkt, int16_t **samples)
{
int i, j;
int prediction_type = 0;
@@ -358,8 +355,10 @@ static int write_frame(AlacEncodeContext *s, AVPacket *avpkt,
if (s->verbatim) {
write_frame_header(s);
- for (i = 0; i < s->frame_size * s->avctx->channels; i++)
- put_sbits(pb, 16, *samples++);
+ /* samples are channel-interleaved in verbatim mode */
+ for (i = 0; i < s->frame_size; i++)
+ for (j = 0; j < s->avctx->channels; j++)
+ put_sbits(pb, 16, samples[j][i]);
} else {
init_sample_buffers(s, samples);
write_frame_header(s);
@@ -537,7 +536,7 @@ static int alac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
{
AlacEncodeContext *s = avctx->priv_data;
int out_bytes, max_frame_size, ret;
- const int16_t *samples = (const int16_t *)frame->data[0];
+ int16_t **samples = (int16_t **)frame->extended_data;
s->frame_size = frame->nb_samples;
@@ -577,7 +576,7 @@ AVCodec ff_alac_encoder = {
.encode2 = alac_encode_frame,
.close = alac_encode_close,
.capabilities = CODEC_CAP_SMALL_LAST_FRAME,
- .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
+ .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"),
};