mirror of https://git.ffmpeg.org/ffmpeg.git
Remove duplicate code by adding a flag for encoding in verbatim mode.
Originally committed as revision 24621 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
05236ed735
commit
0f5cc12c4f
|
@ -77,6 +77,7 @@ typedef struct FlacFrame {
|
||||||
int bs_code[2];
|
int bs_code[2];
|
||||||
uint8_t crc8;
|
uint8_t crc8;
|
||||||
int ch_mode;
|
int ch_mode;
|
||||||
|
int verbatim_only;
|
||||||
} FlacFrame;
|
} FlacFrame;
|
||||||
|
|
||||||
typedef struct FlacEncodeContext {
|
typedef struct FlacEncodeContext {
|
||||||
|
@ -472,6 +473,8 @@ static void init_frame(FlacEncodeContext *s)
|
||||||
|
|
||||||
for (ch = 0; ch < s->channels; ch++)
|
for (ch = 0; ch < s->channels; ch++)
|
||||||
frame->subframes[ch].obits = 16;
|
frame->subframes[ch].obits = 16;
|
||||||
|
|
||||||
|
frame->verbatim_only = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -819,7 +822,7 @@ static int encode_residual_ch(FlacEncodeContext *s, int ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* VERBATIM */
|
/* VERBATIM */
|
||||||
if (n < 5) {
|
if (frame->verbatim_only || n < 5) {
|
||||||
sub->type = sub->type_code = FLAC_SUBFRAME_VERBATIM;
|
sub->type = sub->type_code = FLAC_SUBFRAME_VERBATIM;
|
||||||
encode_residual_verbatim(res, smp, n);
|
encode_residual_verbatim(res, smp, n);
|
||||||
return sub->obits * 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)
|
static int estimate_stereo_mode(int32_t *left_ch, int32_t *right_ch, int n)
|
||||||
{
|
{
|
||||||
int i, best;
|
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,
|
static int flac_encode_frame(AVCodecContext *avctx, uint8_t *frame,
|
||||||
int buf_size, void *data)
|
int buf_size, void *data)
|
||||||
{
|
{
|
||||||
int ch;
|
|
||||||
FlacEncodeContext *s;
|
FlacEncodeContext *s;
|
||||||
const int16_t *samples = data;
|
const int16_t *samples = data;
|
||||||
int out_bytes;
|
int out_bytes;
|
||||||
|
@ -1280,8 +1252,8 @@ write_frame:
|
||||||
}
|
}
|
||||||
|
|
||||||
/* frame too large. use verbatim mode */
|
/* frame too large. use verbatim mode */
|
||||||
for (ch = 0; ch < s->channels; ch++)
|
s->frame.verbatim_only = 1;
|
||||||
encode_residual_v(s, ch);
|
encode_frame(s);
|
||||||
reencoded = 1;
|
reencoded = 1;
|
||||||
goto write_frame;
|
goto write_frame;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue