mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-06-19 19:03:00 +02:00
Simplify fallback to verbatim mode encoding.
Originally committed as revision 24626 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
+14
-16
@@ -1177,6 +1177,16 @@ static void output_frame_footer(FlacEncodeContext *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int write_frame(FlacEncodeContext *s, uint8_t *frame, int buf_size)
|
||||||
|
{
|
||||||
|
init_put_bits(&s->pb, frame, buf_size);
|
||||||
|
output_frame_header(s);
|
||||||
|
output_subframes(s);
|
||||||
|
output_frame_footer(s);
|
||||||
|
return put_bits_count(&s->pb) >> 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void update_md5_sum(FlacEncodeContext *s, const int16_t *samples)
|
static void update_md5_sum(FlacEncodeContext *s, const int16_t *samples)
|
||||||
{
|
{
|
||||||
#if HAVE_BIGENDIAN
|
#if HAVE_BIGENDIAN
|
||||||
@@ -1197,7 +1207,6 @@ static int flac_encode_frame(AVCodecContext *avctx, uint8_t *frame,
|
|||||||
FlacEncodeContext *s;
|
FlacEncodeContext *s;
|
||||||
const int16_t *samples = data;
|
const int16_t *samples = data;
|
||||||
int out_bytes;
|
int out_bytes;
|
||||||
int reencoded=0;
|
|
||||||
|
|
||||||
s = avctx->priv_data;
|
s = avctx->priv_data;
|
||||||
|
|
||||||
@@ -1222,25 +1231,14 @@ static int flac_encode_frame(AVCodecContext *avctx, uint8_t *frame,
|
|||||||
|
|
||||||
encode_frame(s);
|
encode_frame(s);
|
||||||
|
|
||||||
write_frame:
|
out_bytes = write_frame(s, frame, buf_size);
|
||||||
init_put_bits(&s->pb, frame, buf_size);
|
|
||||||
output_frame_header(s);
|
|
||||||
output_subframes(s);
|
|
||||||
output_frame_footer(s);
|
|
||||||
out_bytes = put_bits_count(&s->pb) >> 3;
|
|
||||||
|
|
||||||
|
/* fallback to verbatim mode if the compressed frame is larger than it
|
||||||
|
would be if encoded uncompressed. */
|
||||||
if (out_bytes > s->max_framesize) {
|
if (out_bytes > s->max_framesize) {
|
||||||
if (reencoded) {
|
|
||||||
/* still too large. must be an error. */
|
|
||||||
av_log(avctx, AV_LOG_ERROR, "error encoding frame\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* frame too large. use verbatim mode */
|
|
||||||
s->frame.verbatim_only = 1;
|
s->frame.verbatim_only = 1;
|
||||||
encode_frame(s);
|
encode_frame(s);
|
||||||
reencoded = 1;
|
out_bytes = write_frame(s, frame, buf_size);
|
||||||
goto write_frame;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
s->frame_count++;
|
s->frame_count++;
|
||||||
|
|||||||
Reference in New Issue
Block a user