Fix the initial references to frame buffers.
The old code would start in a mixed state, where all the reference frames were pointing to frame buffer 0, but the reference counts were 0. This is why we needed special code for the first frame. Change-Id: I734961012917654ff8c0c8b317aac00ab75ded1a
This commit is contained in:
Родитель
da2da79012
Коммит
9ed616a56c
|
@ -238,8 +238,10 @@ static int get_free_fb(VP9_COMMON *cm) {
|
|||
}
|
||||
|
||||
static void ref_cnt_fb(int *buf, int *idx, int new_idx) {
|
||||
if (buf[*idx] > 0)
|
||||
buf[*idx]--;
|
||||
const int ref_index = *idx;
|
||||
|
||||
if (ref_index > 0 && buf[ref_index] > 0)
|
||||
buf[ref_index]--;
|
||||
|
||||
*idx = new_idx;
|
||||
|
||||
|
|
|
@ -687,12 +687,6 @@ static void apply_frame_size(VP9D_COMP *pbi, int width, int height) {
|
|||
|
||||
if (cm->width != width || cm->height != height) {
|
||||
// Change in frame size.
|
||||
if (cm->width == 0 || cm->height == 0) {
|
||||
// Assign new frame buffer on first call.
|
||||
cm->new_fb_idx = NUM_YV12_BUFFERS - 1;
|
||||
cm->fb_idx_ref_cnt[cm->new_fb_idx] = 1;
|
||||
}
|
||||
|
||||
// TODO(agrange) Don't test width/height, check overall size.
|
||||
if (width > cm->width || height > cm->height) {
|
||||
// Rescale frame buffers only if they're not big enough already.
|
||||
|
|
|
@ -125,6 +125,9 @@ VP9D_PTR vp9_create_decompressor(VP9D_CONFIG *oxcf) {
|
|||
|
||||
vp9_zero(*pbi);
|
||||
|
||||
// Initialize the references to not point to any frame buffers.
|
||||
memset(&cm->ref_frame_map, -1, sizeof(cm->ref_frame_map));
|
||||
|
||||
if (setjmp(cm->error.jmp)) {
|
||||
cm->error.setjmp = 0;
|
||||
vp9_remove_decompressor(pbi);
|
||||
|
|
Загрузка…
Ссылка в новой задаче