1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #include "segmentation.h" 12*fb1b10abSAndroid Build Coastguard Worker #include "vpx_mem/vpx_mem.h" 13*fb1b10abSAndroid Build Coastguard Worker vp8_update_gf_usage_maps(VP8_COMP * cpi,VP8_COMMON * cm,MACROBLOCK * x)14*fb1b10abSAndroid Build Coastguard Workervoid vp8_update_gf_usage_maps(VP8_COMP *cpi, VP8_COMMON *cm, MACROBLOCK *x) { 15*fb1b10abSAndroid Build Coastguard Worker int mb_row, mb_col; 16*fb1b10abSAndroid Build Coastguard Worker 17*fb1b10abSAndroid Build Coastguard Worker MODE_INFO *this_mb_mode_info = cm->mi; 18*fb1b10abSAndroid Build Coastguard Worker 19*fb1b10abSAndroid Build Coastguard Worker x->gf_active_ptr = (signed char *)cpi->gf_active_flags; 20*fb1b10abSAndroid Build Coastguard Worker 21*fb1b10abSAndroid Build Coastguard Worker if ((cm->frame_type == KEY_FRAME) || (cm->refresh_golden_frame)) { 22*fb1b10abSAndroid Build Coastguard Worker /* Reset Gf usage monitors */ 23*fb1b10abSAndroid Build Coastguard Worker memset(cpi->gf_active_flags, 1, (cm->mb_rows * cm->mb_cols)); 24*fb1b10abSAndroid Build Coastguard Worker cpi->gf_active_count = cm->mb_rows * cm->mb_cols; 25*fb1b10abSAndroid Build Coastguard Worker } else { 26*fb1b10abSAndroid Build Coastguard Worker /* for each macroblock row in image */ 27*fb1b10abSAndroid Build Coastguard Worker for (mb_row = 0; mb_row < cm->mb_rows; ++mb_row) { 28*fb1b10abSAndroid Build Coastguard Worker /* for each macroblock col in image */ 29*fb1b10abSAndroid Build Coastguard Worker for (mb_col = 0; mb_col < cm->mb_cols; ++mb_col) { 30*fb1b10abSAndroid Build Coastguard Worker /* If using golden then set GF active flag if not already set. 31*fb1b10abSAndroid Build Coastguard Worker * If using last frame 0,0 mode then leave flag as it is 32*fb1b10abSAndroid Build Coastguard Worker * else if using non 0,0 motion or intra modes then clear 33*fb1b10abSAndroid Build Coastguard Worker * flag if it is currently set 34*fb1b10abSAndroid Build Coastguard Worker */ 35*fb1b10abSAndroid Build Coastguard Worker if ((this_mb_mode_info->mbmi.ref_frame == GOLDEN_FRAME) || 36*fb1b10abSAndroid Build Coastguard Worker (this_mb_mode_info->mbmi.ref_frame == ALTREF_FRAME)) { 37*fb1b10abSAndroid Build Coastguard Worker if (*(x->gf_active_ptr) == 0) { 38*fb1b10abSAndroid Build Coastguard Worker *(x->gf_active_ptr) = 1; 39*fb1b10abSAndroid Build Coastguard Worker cpi->gf_active_count++; 40*fb1b10abSAndroid Build Coastguard Worker } 41*fb1b10abSAndroid Build Coastguard Worker } else if ((this_mb_mode_info->mbmi.mode != ZEROMV) && 42*fb1b10abSAndroid Build Coastguard Worker *(x->gf_active_ptr)) { 43*fb1b10abSAndroid Build Coastguard Worker *(x->gf_active_ptr) = 0; 44*fb1b10abSAndroid Build Coastguard Worker cpi->gf_active_count--; 45*fb1b10abSAndroid Build Coastguard Worker } 46*fb1b10abSAndroid Build Coastguard Worker 47*fb1b10abSAndroid Build Coastguard Worker x->gf_active_ptr++; /* Step onto next entry */ 48*fb1b10abSAndroid Build Coastguard Worker this_mb_mode_info++; /* skip to next mb */ 49*fb1b10abSAndroid Build Coastguard Worker } 50*fb1b10abSAndroid Build Coastguard Worker 51*fb1b10abSAndroid Build Coastguard Worker /* this is to account for the border */ 52*fb1b10abSAndroid Build Coastguard Worker this_mb_mode_info++; 53*fb1b10abSAndroid Build Coastguard Worker } 54*fb1b10abSAndroid Build Coastguard Worker } 55*fb1b10abSAndroid Build Coastguard Worker } 56