summaryrefslogtreecommitdiff
path: root/libavcodec/flacenc.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2010-07-30 21:06:38 +0000
committerJustin Ruggles <justin.ruggles@gmail.com>2010-07-30 21:06:38 +0000
commit6d263f41ae46ff06d5730c3cb8c09c5eac82c262 (patch)
tree692795ab50317c1da421489d69451b4558f23c1e /libavcodec/flacenc.c
parent6266cfb4ce1cd4d57cb47e167163c978cd80c621 (diff)
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.c36
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);
}
}