Index: source/libvpx/vp9/common/vp9_alloccommon.c |
=================================================================== |
--- source/libvpx/vp9/common/vp9_alloccommon.c (revision 251189) |
+++ source/libvpx/vp9/common/vp9_alloccommon.c (working copy) |
@@ -33,9 +33,16 @@ |
void vp9_free_frame_buffers(VP9_COMMON *cm) { |
int i; |
- for (i = 0; i < FRAME_BUFFERS; i++) |
- vp9_free_frame_buffer(&cm->yv12_fb[i]); |
+ for (i = 0; i < FRAME_BUFFERS; i++) { |
+ vp9_free_frame_buffer(&cm->frame_bufs[i].buf); |
+ if (cm->frame_bufs[i].ref_count > 0 && |
+ cm->frame_bufs[i].raw_frame_buffer.data != NULL) { |
+ cm->release_fb_cb(cm->cb_priv, &cm->frame_bufs[i].raw_frame_buffer); |
+ cm->frame_bufs[i].ref_count = 0; |
+ } |
+ } |
+ |
vp9_free_frame_buffer(&cm->post_proc_buffer); |
vpx_free(cm->mip); |
@@ -85,7 +92,7 @@ |
int mi_size; |
if (vp9_realloc_frame_buffer(&cm->post_proc_buffer, width, height, ss_x, ss_y, |
- VP9_DEC_BORDER_IN_PIXELS) < 0) |
+ VP9_DEC_BORDER_IN_PIXELS, NULL, NULL, NULL) < 0) |
goto fail; |
set_mb_mi(cm, aligned_width, aligned_height); |
@@ -140,18 +147,18 @@ |
vp9_free_frame_buffers(cm); |
for (i = 0; i < FRAME_BUFFERS; i++) { |
- cm->fb_idx_ref_cnt[i] = 0; |
- if (vp9_alloc_frame_buffer(&cm->yv12_fb[i], width, height, ss_x, ss_y, |
- VP9_ENC_BORDER_IN_PIXELS) < 0) |
+ cm->frame_bufs[i].ref_count = 0; |
+ if (vp9_alloc_frame_buffer(&cm->frame_bufs[i].buf, width, height, |
+ ss_x, ss_y, VP9_ENC_BORDER_IN_PIXELS) < 0) |
goto fail; |
} |
cm->new_fb_idx = FRAME_BUFFERS - 1; |
- cm->fb_idx_ref_cnt[cm->new_fb_idx] = 1; |
+ cm->frame_bufs[cm->new_fb_idx].ref_count = 1; |
for (i = 0; i < REF_FRAMES; i++) { |
cm->ref_frame_map[i] = i; |
- cm->fb_idx_ref_cnt[i] = 1; |
+ cm->frame_bufs[i].ref_count = 1; |
} |
if (vp9_alloc_frame_buffer(&cm->post_proc_buffer, width, height, ss_x, ss_y, |
@@ -199,6 +206,7 @@ |
void vp9_remove_common(VP9_COMMON *cm) { |
vp9_free_frame_buffers(cm); |
+ vp9_free_internal_frame_buffers(&cm->int_frame_buffers); |
} |
void vp9_initialize_common() { |