From: Henrik Lundin Date: Mon, 23 May 2011 11:47:33 +0000 (+0200) Subject: Fixing bug in VP8_SET_REFERENCE decoder control command X-Git-Tag: v0.9.7~119^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a126cd176093beb7bb79f7f8d36e693fe49c8643;p=platform%2Fupstream%2Flibvpx.git Fixing bug in VP8_SET_REFERENCE decoder control command In vp8dx_set_reference, the new reference image is written to an unused reference frame buffer. Change-Id: I9e4f2cef5a011094bb7ce7b2719cbfe096a773e8 --- diff --git a/vp8/decoder/onyxd_if.c b/vp8/decoder/onyxd_if.c index 705fb334f..d10b2cb34 100644 --- a/vp8/decoder/onyxd_if.c +++ b/vp8/decoder/onyxd_if.c @@ -39,6 +39,8 @@ extern void vp8_init_loop_filter(VP8_COMMON *cm); extern void vp8cx_init_de_quantizer(VP8D_COMP *pbi); +static int get_free_fb (VP8_COMMON *cm); +static void ref_cnt_fb (int *buf, int *idx, int new_idx); void vp8dx_initialize() @@ -155,18 +157,24 @@ int vp8dx_set_reference(VP8D_PTR ptr, VP8_REFFRAME ref_frame_flag, YV12_BUFFER_C { VP8D_COMP *pbi = (VP8D_COMP *) ptr; VP8_COMMON *cm = &pbi->common; - int ref_fb_idx; + int *ref_fb_ptr = NULL; + int free_fb; if (ref_frame_flag == VP8_LAST_FLAG) - ref_fb_idx = cm->lst_fb_idx; + *ref_fb_ptr = cm->lst_fb_idx; else if (ref_frame_flag == VP8_GOLD_FLAG) - ref_fb_idx = cm->gld_fb_idx; + *ref_fb_ptr = cm->gld_fb_idx; else if (ref_frame_flag == VP8_ALT_FLAG) - ref_fb_idx = cm->alt_fb_idx; + *ref_fb_ptr = cm->alt_fb_idx; else return -1; - vp8_yv12_copy_frame_ptr(sd, &cm->yv12_fb[ref_fb_idx]); + /* Find an empty frame buffer. */ + free_fb = get_free_fb(cm); + + /* Manage the reference counters and copy image. */ + ref_cnt_fb (cm->fb_idx_ref_cnt, ref_fb_ptr, free_fb); + vp8_yv12_copy_frame_ptr(sd, &cm->yv12_fb[*ref_fb_ptr]); return 0; }