summaryrefslogtreecommitdiff
path: root/libavcodec/alacenc.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-02-03 17:27:31 -0500
committerJustin Ruggles <justin.ruggles@gmail.com>2012-02-11 12:49:22 -0500
commitb590f3a7bf9103ac7a7a61c48568676201d6824b (patch)
treef8b6cdf3b6f40899885ae3ad3698a7f4ff6e9313 /libavcodec/alacenc.c
parentba821b098b5748e46db0fea875679365b33110e3 (diff)
alacenc: only encode frame size in header for a final smaller frame
Otherwise it is not needed because it matches the frame size as encoded in the extradata.
Diffstat (limited to 'libavcodec/alacenc.c')
-rw-r--r--libavcodec/alacenc.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/libavcodec/alacenc.c b/libavcodec/alacenc.c
index 88b2f82669..d2a24b145c 100644
--- a/libavcodec/alacenc.c
+++ b/libavcodec/alacenc.c
@@ -120,12 +120,18 @@ static void encode_scalar(AlacEncodeContext *s, int x,
static void write_frame_header(AlacEncodeContext *s, int is_verbatim)
{
+ int encode_fs = 0;
+
+ if (s->frame_size < DEFAULT_FRAME_SIZE)
+ encode_fs = 1;
+
put_bits(&s->pbctx, 3, s->avctx->channels-1); // No. of channels -1
put_bits(&s->pbctx, 16, 0); // Seems to be zero
- put_bits(&s->pbctx, 1, 1); // Sample count is in the header
+ put_bits(&s->pbctx, 1, encode_fs); // Sample count is in the header
put_bits(&s->pbctx, 2, 0); // FIXME: Wasted bytes field
put_bits(&s->pbctx, 1, is_verbatim); // Audio block is verbatim
- put_bits32(&s->pbctx, s->frame_size); // No. of samples in the frame
+ if (encode_fs)
+ put_bits32(&s->pbctx, s->frame_size); // No. of samples in the frame
}
static void calc_predictor_params(AlacEncodeContext *s, int ch)
@@ -380,7 +386,8 @@ static void write_compressed_frame(AlacEncodeContext *s)
static av_always_inline int get_max_frame_size(int frame_size, int ch, int bps)
{
- return FFALIGN(55 + bps * ch * frame_size + 3, 8) / 8;
+ int header_bits = 23 + 32 * (frame_size < DEFAULT_FRAME_SIZE);
+ return FFALIGN(header_bits + bps * ch * frame_size + 3, 8) / 8;
}
static av_cold int alac_encode_close(AVCodecContext *avctx)