diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2010-07-31 20:46:32 +0400 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2010-07-31 20:46:32 +0400 |
commit | 0f5cc12c4f7282fa35a2bfd34519ac7b04eed7a3 (patch) | |
tree | c00ecd93282a30491d1354bfc1fd83c6568cf8c4 /libavcodec/flacenc.c | |
parent | 05236ed7359b8310eb614adcdda025e5ea1a2ed5 (diff) |
Remove duplicate code by adding a flag for encoding in verbatim mode.
Originally committed as revision 24621 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/flacenc.c')
-rw-r--r-- | libavcodec/flacenc.c | 40 |
1 files changed, 6 insertions, 34 deletions
diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c index 7eabd9c994..487d0234fb 100644 --- a/libavcodec/flacenc.c +++ b/libavcodec/flacenc.c @@ -77,6 +77,7 @@ typedef struct FlacFrame { int bs_code[2]; uint8_t crc8; int ch_mode; + int verbatim_only; } FlacFrame; typedef struct FlacEncodeContext { @@ -472,6 +473,8 @@ static void init_frame(FlacEncodeContext *s) for (ch = 0; ch < s->channels; ch++) frame->subframes[ch].obits = 16; + + frame->verbatim_only = 0; } @@ -819,7 +822,7 @@ static int encode_residual_ch(FlacEncodeContext *s, int ch) } /* VERBATIM */ - if (n < 5) { + if (frame->verbatim_only || n < 5) { sub->type = sub->type_code = FLAC_SUBFRAME_VERBATIM; encode_residual_verbatim(res, smp, n); return sub->obits * n; @@ -985,36 +988,6 @@ static int encode_frame(FlacEncodeContext *s) } -static int encode_residual_v(FlacEncodeContext *s, int ch) -{ - int i, n; - FlacFrame *frame; - FlacSubframe *sub; - int32_t *res, *smp; - - frame = &s->frame; - sub = &frame->subframes[ch]; - res = sub->residual; - smp = sub->samples; - n = frame->blocksize; - - /* CONSTANT */ - for (i = 1; i < n; i++) - if (smp[i] != smp[0]) - break; - if (i == n) { - sub->type = sub->type_code = FLAC_SUBFRAME_CONSTANT; - res[0] = smp[0]; - return sub->obits; - } - - /* VERBATIM */ - sub->type = sub->type_code = FLAC_SUBFRAME_VERBATIM; - encode_residual_verbatim(res, smp, n); - return sub->obits * n; -} - - static int estimate_stereo_mode(int32_t *left_ch, int32_t *right_ch, int n) { int i, best; @@ -1236,7 +1209,6 @@ static void update_md5_sum(FlacEncodeContext *s, const int16_t *samples) static int flac_encode_frame(AVCodecContext *avctx, uint8_t *frame, int buf_size, void *data) { - int ch; FlacEncodeContext *s; const int16_t *samples = data; int out_bytes; @@ -1280,8 +1252,8 @@ write_frame: } /* frame too large. use verbatim mode */ - for (ch = 0; ch < s->channels; ch++) - encode_residual_v(s, ch); + s->frame.verbatim_only = 1; + encode_frame(s); reencoded = 1; goto write_frame; } |