Commit 0a830b95 authored by Hendrik Leppkes's avatar Hendrik Leppkes

Merge commit '447b5b27'

* commit '447b5b27':
  mpegvideo_enc: Fix encoding videos with less frames than the delay of the encoder
Merged-by: 's avatarHendrik Leppkes <h.leppkes@gmail.com>
parents a4b5ada3 447b5b27
...@@ -1123,10 +1123,10 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg) ...@@ -1123,10 +1123,10 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
Picture *pic = NULL; Picture *pic = NULL;
int64_t pts; int64_t pts;
int i, display_picture_number = 0, ret; int i, display_picture_number = 0, ret;
int encoding_delay = s->max_b_frames ? s->max_b_frames : int encoding_delay = s->max_b_frames ? s->max_b_frames
(s->low_delay ? 0 : 1); : (s->low_delay ? 0 : 1);
int flush_offset = 1;
int direct = 1; int direct = 1;
int shift = 1;
if (pic_arg) { if (pic_arg) {
pts = pic_arg->pts; pts = pic_arg->pts;
...@@ -1249,15 +1249,19 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg) ...@@ -1249,15 +1249,19 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
} else { } else {
/* Flushing: When we have not received enough input frames, /* Flushing: When we have not received enough input frames,
* ensure s->input_picture[0] contains the first picture */ * ensure s->input_picture[0] contains the first picture */
for (shift = 0; shift < encoding_delay + 1; shift++) for (flush_offset = 0; flush_offset < encoding_delay + 1; flush_offset++)
if (s->input_picture[shift]) break; if (s->input_picture[flush_offset])
if (shift <= 1) shift = 1; break;
else encoding_delay = encoding_delay - shift + 1;
if (flush_offset <= 1)
flush_offset = 1;
else
encoding_delay = encoding_delay - flush_offset + 1;
} }
/* shift buffer entries */ /* shift buffer entries */
for (i = shift; i < MAX_PICTURE_COUNT /*s->encoding_delay + 1*/; i++) for (i = flush_offset; i < MAX_PICTURE_COUNT /*s->encoding_delay + 1*/; i++)
s->input_picture[i - shift] = s->input_picture[i]; s->input_picture[i - flush_offset] = s->input_picture[i];
s->input_picture[encoding_delay] = (Picture*) pic; s->input_picture[encoding_delay] = (Picture*) pic;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment