Skip to content

Commit

Permalink
avcodec/vp8: vp8_find_free_buffer
Browse files Browse the repository at this point in the history
Signed-off-by: Peter Ross <[email protected]>
Signed-off-by: Michael Niedermayer <[email protected]>
  • Loading branch information
rouseabout authored and michaelni committed Mar 25, 2014
1 parent a81ee26 commit 7d4c022
Showing 1 changed file with 25 additions and 15 deletions.
40 changes: 25 additions & 15 deletions libavcodec/vp8.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,30 @@ static void vp8_decode_flush(AVCodecContext *avctx)
vp8_decode_flush_impl(avctx, 0);
}

static VP8Frame * vp8_find_free_buffer(VP8Context *s)
{
VP8Frame *frame = NULL;
int i;

// find a free buffer
for (i = 0; i < 5; i++)
if (&s->frames[i] != s->framep[VP56_FRAME_CURRENT] &&
&s->frames[i] != s->framep[VP56_FRAME_PREVIOUS] &&
&s->frames[i] != s->framep[VP56_FRAME_GOLDEN] &&
&s->frames[i] != s->framep[VP56_FRAME_GOLDEN2]) {
frame = &s->frames[i];
break;
}
if (i == 5) {
av_log(s->avctx, AV_LOG_FATAL, "Ran out of free frames!\n");
abort();
}
if (frame->tf.f->data[0])
vp8_release_frame(s, frame);

return frame;
}

static int update_dimensions(VP8Context *s, int width, int height)
{
AVCodecContext *avctx = s->avctx;
Expand Down Expand Up @@ -1866,21 +1890,7 @@ int ff_vp8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
&s->frames[i] != s->framep[VP56_FRAME_GOLDEN2])
vp8_release_frame(s, &s->frames[i]);

// find a free buffer
for (i = 0; i < 5; i++)
if (&s->frames[i] != prev_frame &&
&s->frames[i] != s->framep[VP56_FRAME_PREVIOUS] &&
&s->frames[i] != s->framep[VP56_FRAME_GOLDEN] &&
&s->frames[i] != s->framep[VP56_FRAME_GOLDEN2]) {
curframe = s->framep[VP56_FRAME_CURRENT] = &s->frames[i];
break;
}
if (i == 5) {
av_log(avctx, AV_LOG_FATAL, "Ran out of free frames!\n");
abort();
}
if (curframe->tf.f->data[0])
vp8_release_frame(s, curframe);
curframe = s->framep[VP56_FRAME_CURRENT] = vp8_find_free_buffer(s);

// Given that arithmetic probabilities are updated every frame, it's quite likely
// that the values we have on a random interframe are complete junk if we didn't
Expand Down

0 comments on commit 7d4c022

Please sign in to comment.