diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2010-07-30 21:06:38 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2010-07-30 21:06:38 +0000 |
commit | 6d263f41ae46ff06d5730c3cb8c09c5eac82c262 (patch) | |
tree | 692795ab50317c1da421489d69451b4558f23c1e /libavcodec/flacenc.c | |
parent | 6266cfb4ce1cd4d57cb47e167163c978cd80c621 (diff) | |
download | ffmpeg-6d263f41ae46ff06d5730c3cb8c09c5eac82c262.tar.gz |
Combine output_subframe_verbatim() and output_subframe_lpc().
Originally committed as revision 24608 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/flacenc.c')
-rw-r--r-- | libavcodec/flacenc.c | 36 |
1 files changed, 13 insertions, 23 deletions
diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c index dd39bc0d83..da182f3a5a 100644 --- a/libavcodec/flacenc.c +++ b/libavcodec/flacenc.c @@ -1101,25 +1101,20 @@ static void output_frame_header(FlacEncodeContext *s) } -static void output_subframe_verbatim(FlacEncodeContext *s, FlacSubframe *sub) -{ - put_sbits(&s->pb, sub->obits, sub->residual[0]); - - if (sub->type == FLAC_SUBFRAME_VERBATIM) { - int i; - for (i = 0; i < s->frame.blocksize; i++) - put_sbits(&s->pb, sub->obits, sub->residual[i]); - } -} - - -static void output_subframe_lpc(FlacEncodeContext *s, FlacSubframe *sub) +static void output_subframe(FlacEncodeContext *s, FlacSubframe *sub) { int i, p, porder, psize; - int32_t *res, *part_end, *frame_end; - + int32_t *part_end; + int32_t *res = sub->residual; + int32_t *frame_end = &sub->residual[s->frame.blocksize]; + + if (sub->type == FLAC_SUBFRAME_CONSTANT) { + put_sbits(&s->pb, sub->obits, res[0]); + } else if (sub->type == FLAC_SUBFRAME_VERBATIM) { + while (res < frame_end) + put_sbits(&s->pb, sub->obits, *res++); + } else { /* warm-up samples */ - res = sub->residual; for (i = 0; i < sub->order; i++) put_sbits(&s->pb, sub->obits, *res++); @@ -1142,7 +1137,6 @@ static void output_subframe_lpc(FlacEncodeContext *s, FlacSubframe *sub) /* residual */ part_end = &sub->residual[psize ]; - frame_end = &sub->residual[s->frame.blocksize]; for (p = 0; p < 1 << porder; p++) { int k = sub->rc.params[p]; put_bits(&s->pb, 4, k); @@ -1150,6 +1144,7 @@ static void output_subframe_lpc(FlacEncodeContext *s, FlacSubframe *sub) set_sr_golomb_flac(&s->pb, *res++, k, INT32_MAX, 0); part_end = FFMIN(frame_end, part_end + psize); } + } } @@ -1170,12 +1165,7 @@ static void output_subframes(FlacEncodeContext *s) put_bits(&s->pb, 1, 0); /* no wasted bits */ /* subframe */ - switch (sub->type) { - case FLAC_SUBFRAME_CONSTANT: - case FLAC_SUBFRAME_VERBATIM: output_subframe_verbatim(s, sub); break; - case FLAC_SUBFRAME_FIXED: - case FLAC_SUBFRAME_LPC: output_subframe_lpc( s, sub); break; - } + output_subframe(s, sub); } } |