vp10: merge frame_parallel_decoding_mode and refresh_frame_context.
See issue 1030. The value of frame_parallel_decoding_mode was ignored in vp9 if refresh_frame_context was 0, so instead make it a 3-member enum where the dependency is obviously stated. Change-Id: I37f0177e5759f54e2e6cc6217023d5681de92438
This commit is contained in:
		@@ -176,7 +176,6 @@ typedef struct macroblockd {
 | 
				
			|||||||
  int mb_to_bottom_edge;
 | 
					  int mb_to_bottom_edge;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FRAME_CONTEXT *fc;
 | 
					  FRAME_CONTEXT *fc;
 | 
				
			||||||
  int frame_parallel_decoding_mode;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* pointers to reference frames */
 | 
					  /* pointers to reference frames */
 | 
				
			||||||
  RefBuffer *block_refs[2];
 | 
					  RefBuffer *block_refs[2];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -63,6 +63,23 @@ typedef enum {
 | 
				
			|||||||
  RESET_FRAME_CONTEXT_ALL = 2,
 | 
					  RESET_FRAME_CONTEXT_ALL = 2,
 | 
				
			||||||
} RESET_FRAME_CONTEXT_MODE;
 | 
					} RESET_FRAME_CONTEXT_MODE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					typedef enum {
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Don't update frame context
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  REFRESH_FRAME_CONTEXT_OFF,
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Update frame context to values resulting from forward probability
 | 
				
			||||||
 | 
					   * updates signaled in the frame header
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  REFRESH_FRAME_CONTEXT_FORWARD,
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Update frame context to values resulting from backward probability
 | 
				
			||||||
 | 
					   * updates based on entropy/counts in the decoded frame
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  REFRESH_FRAME_CONTEXT_BACKWARD,
 | 
				
			||||||
 | 
					} REFRESH_FRAME_CONTEXT_MODE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
  int_mv mv[2];
 | 
					  int_mv mv[2];
 | 
				
			||||||
  MV_REFERENCE_FRAME ref_frame[2];
 | 
					  MV_REFERENCE_FRAME ref_frame[2];
 | 
				
			||||||
@@ -226,7 +243,9 @@ typedef struct VP10Common {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  loop_filter_info_n lf_info;
 | 
					  loop_filter_info_n lf_info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int refresh_frame_context;    /* Two state 0 = NO, 1 = YES */
 | 
					  // Flag signaling how frame contexts should be updated at the end of
 | 
				
			||||||
 | 
					  // a frame decode
 | 
				
			||||||
 | 
					  REFRESH_FRAME_CONTEXT_MODE refresh_frame_context;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int ref_frame_sign_bias[MAX_REF_FRAMES];    /* Two state 0, 1 */
 | 
					  int ref_frame_sign_bias[MAX_REF_FRAMES];    /* Two state 0, 1 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -257,7 +276,6 @@ typedef struct VP10Common {
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int error_resilient_mode;
 | 
					  int error_resilient_mode;
 | 
				
			||||||
  int frame_parallel_decoding_mode;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  int log2_tile_cols, log2_tile_rows;
 | 
					  int log2_tile_cols, log2_tile_rows;
 | 
				
			||||||
  int byte_alignment;
 | 
					  int byte_alignment;
 | 
				
			||||||
@@ -372,7 +390,6 @@ static INLINE void vp10_init_macroblockd(VP10_COMMON *cm, MACROBLOCKD *xd,
 | 
				
			|||||||
      memcpy(xd->plane[i].seg_dequant, cm->uv_dequant, sizeof(cm->uv_dequant));
 | 
					      memcpy(xd->plane[i].seg_dequant, cm->uv_dequant, sizeof(cm->uv_dequant));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    xd->fc = cm->fc;
 | 
					    xd->fc = cm->fc;
 | 
				
			||||||
    xd->frame_parallel_decoding_mode = cm->frame_parallel_decoding_mode;
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  xd->above_seg_context = cm->above_seg_context;
 | 
					  xd->above_seg_context = cm->above_seg_context;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1454,8 +1454,9 @@ static const uint8_t *decode_tiles(VP10Decoder *pbi,
 | 
				
			|||||||
      tile_data->cm = cm;
 | 
					      tile_data->cm = cm;
 | 
				
			||||||
      tile_data->xd = pbi->mb;
 | 
					      tile_data->xd = pbi->mb;
 | 
				
			||||||
      tile_data->xd.corrupted = 0;
 | 
					      tile_data->xd.corrupted = 0;
 | 
				
			||||||
      tile_data->xd.counts = cm->frame_parallel_decoding_mode ?
 | 
					      tile_data->xd.counts =
 | 
				
			||||||
                             NULL : &cm->counts;
 | 
					          cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD ?
 | 
				
			||||||
 | 
					              &cm->counts : NULL;
 | 
				
			||||||
      vp10_zero(tile_data->dqcoeff);
 | 
					      vp10_zero(tile_data->dqcoeff);
 | 
				
			||||||
      vp10_tile_init(&tile_data->xd.tile, tile_data->cm, tile_row, tile_col);
 | 
					      vp10_tile_init(&tile_data->xd.tile, tile_data->cm, tile_row, tile_col);
 | 
				
			||||||
      setup_token_decoder(buf->data, data_end, buf->size, &cm->error,
 | 
					      setup_token_decoder(buf->data, data_end, buf->size, &cm->error,
 | 
				
			||||||
@@ -1652,7 +1653,7 @@ static const uint8_t *decode_tiles_mt(VP10Decoder *pbi,
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Initialize thread frame counts.
 | 
					  // Initialize thread frame counts.
 | 
				
			||||||
  if (!cm->frame_parallel_decoding_mode) {
 | 
					  if (cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD) {
 | 
				
			||||||
    int i;
 | 
					    int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i = 0; i < num_workers; ++i) {
 | 
					    for (i = 0; i < num_workers; ++i) {
 | 
				
			||||||
@@ -1674,8 +1675,9 @@ static const uint8_t *decode_tiles_mt(VP10Decoder *pbi,
 | 
				
			|||||||
      tile_data->pbi = pbi;
 | 
					      tile_data->pbi = pbi;
 | 
				
			||||||
      tile_data->xd = pbi->mb;
 | 
					      tile_data->xd = pbi->mb;
 | 
				
			||||||
      tile_data->xd.corrupted = 0;
 | 
					      tile_data->xd.corrupted = 0;
 | 
				
			||||||
      tile_data->xd.counts = cm->frame_parallel_decoding_mode ?
 | 
					      tile_data->xd.counts =
 | 
				
			||||||
                             0 : &tile_data->counts;
 | 
					          cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD ?
 | 
				
			||||||
 | 
					              &tile_data->counts : NULL;
 | 
				
			||||||
      vp10_zero(tile_data->dqcoeff);
 | 
					      vp10_zero(tile_data->dqcoeff);
 | 
				
			||||||
      vp10_tile_init(tile, cm, 0, buf->col);
 | 
					      vp10_tile_init(tile, cm, 0, buf->col);
 | 
				
			||||||
      vp10_tile_init(&tile_data->xd.tile, cm, 0, buf->col);
 | 
					      vp10_tile_init(&tile_data->xd.tile, cm, 0, buf->col);
 | 
				
			||||||
@@ -1714,7 +1716,8 @@ static const uint8_t *decode_tiles_mt(VP10Decoder *pbi,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Accumulate thread frame counts.
 | 
					    // Accumulate thread frame counts.
 | 
				
			||||||
    if (n >= tile_cols && !cm->frame_parallel_decoding_mode) {
 | 
					    if (n >= tile_cols &&
 | 
				
			||||||
 | 
					        cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD) {
 | 
				
			||||||
      for (i = 0; i < num_workers; ++i) {
 | 
					      for (i = 0; i < num_workers; ++i) {
 | 
				
			||||||
        TileWorkerData *const tile_data =
 | 
					        TileWorkerData *const tile_data =
 | 
				
			||||||
            (TileWorkerData*)pbi->tile_workers[i].data1;
 | 
					            (TileWorkerData*)pbi->tile_workers[i].data1;
 | 
				
			||||||
@@ -1948,11 +1951,20 @@ static size_t read_uncompressed_header(VP10Decoder *pbi,
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!cm->error_resilient_mode) {
 | 
					  if (!cm->error_resilient_mode) {
 | 
				
			||||||
    cm->refresh_frame_context = vpx_rb_read_bit(rb);
 | 
					    cm->refresh_frame_context =
 | 
				
			||||||
    cm->frame_parallel_decoding_mode = vpx_rb_read_bit(rb);
 | 
					        vpx_rb_read_bit(rb) ? REFRESH_FRAME_CONTEXT_FORWARD
 | 
				
			||||||
 | 
					                            : REFRESH_FRAME_CONTEXT_OFF;
 | 
				
			||||||
 | 
					    if (cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_FORWARD) {
 | 
				
			||||||
 | 
					        cm->refresh_frame_context =
 | 
				
			||||||
 | 
					            vpx_rb_read_bit(rb) ? REFRESH_FRAME_CONTEXT_FORWARD
 | 
				
			||||||
 | 
					                                : REFRESH_FRAME_CONTEXT_BACKWARD;
 | 
				
			||||||
 | 
					#if !CONFIG_MISC_FIXES
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      vpx_rb_read_bit(rb);  // parallel decoding mode flag
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    cm->refresh_frame_context = 0;
 | 
					    cm->refresh_frame_context = REFRESH_FRAME_CONTEXT_OFF;
 | 
				
			||||||
    cm->frame_parallel_decoding_mode = 1;
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // This flag will be overridden by the call to vp10_setup_past_independence
 | 
					  // This flag will be overridden by the call to vp10_setup_past_independence
 | 
				
			||||||
@@ -2187,10 +2199,11 @@ void vp10_decode_frame(VP10Decoder *pbi,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // If encoded in frame parallel mode, frame context is ready after decoding
 | 
					  // If encoded in frame parallel mode, frame context is ready after decoding
 | 
				
			||||||
  // the frame header.
 | 
					  // the frame header.
 | 
				
			||||||
  if (cm->frame_parallel_decode && cm->frame_parallel_decoding_mode) {
 | 
					  if (cm->frame_parallel_decode &&
 | 
				
			||||||
 | 
					      cm->refresh_frame_context != REFRESH_FRAME_CONTEXT_BACKWARD) {
 | 
				
			||||||
    VPxWorker *const worker = pbi->frame_worker_owner;
 | 
					    VPxWorker *const worker = pbi->frame_worker_owner;
 | 
				
			||||||
    FrameWorkerData *const frame_worker_data = worker->data1;
 | 
					    FrameWorkerData *const frame_worker_data = worker->data1;
 | 
				
			||||||
    if (cm->refresh_frame_context) {
 | 
					    if (cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_FORWARD) {
 | 
				
			||||||
      context_updated = 1;
 | 
					      context_updated = 1;
 | 
				
			||||||
      cm->frame_contexts[cm->frame_context_idx] = *cm->fc;
 | 
					      cm->frame_contexts[cm->frame_context_idx] = *cm->fc;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -2224,7 +2237,7 @@ void vp10_decode_frame(VP10Decoder *pbi,
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!xd->corrupted) {
 | 
					  if (!xd->corrupted) {
 | 
				
			||||||
    if (!cm->error_resilient_mode && !cm->frame_parallel_decoding_mode) {
 | 
					    if (cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD) {
 | 
				
			||||||
      vp10_adapt_coef_probs(cm);
 | 
					      vp10_adapt_coef_probs(cm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (!frame_is_intra_only(cm)) {
 | 
					      if (!frame_is_intra_only(cm)) {
 | 
				
			||||||
@@ -2240,6 +2253,7 @@ void vp10_decode_frame(VP10Decoder *pbi,
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Non frame parallel update frame context here.
 | 
					  // Non frame parallel update frame context here.
 | 
				
			||||||
  if (cm->refresh_frame_context && !context_updated)
 | 
					  if (cm->refresh_frame_context != REFRESH_FRAME_CONTEXT_OFF &&
 | 
				
			||||||
 | 
					      !context_updated)
 | 
				
			||||||
    cm->frame_contexts[cm->frame_context_idx] = *cm->fc;
 | 
					    cm->frame_contexts[cm->frame_context_idx] = *cm->fc;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1142,8 +1142,13 @@ static void write_uncompressed_header(VP10_COMP *cpi,
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!cm->error_resilient_mode) {
 | 
					  if (!cm->error_resilient_mode) {
 | 
				
			||||||
    vpx_wb_write_bit(wb, cm->refresh_frame_context);
 | 
					    vpx_wb_write_bit(wb,
 | 
				
			||||||
    vpx_wb_write_bit(wb, cm->frame_parallel_decoding_mode);
 | 
					                     cm->refresh_frame_context != REFRESH_FRAME_CONTEXT_OFF);
 | 
				
			||||||
 | 
					#if CONFIG_MISC_FIXES
 | 
				
			||||||
 | 
					    if (cm->refresh_frame_context != REFRESH_FRAME_CONTEXT_OFF)
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					      vpx_wb_write_bit(wb, cm->refresh_frame_context !=
 | 
				
			||||||
 | 
					                               REFRESH_FRAME_CONTEXT_BACKWARD);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  vpx_wb_write_literal(wb, cm->frame_context_idx, FRAME_CONTEXTS_LOG2);
 | 
					  vpx_wb_write_literal(wb, cm->frame_context_idx, FRAME_CONTEXTS_LOG2);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1421,7 +1421,10 @@ void vp10_change_config(struct VP10_COMP *cpi, const VP10EncoderConfig *oxcf) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  cpi->refresh_golden_frame = 0;
 | 
					  cpi->refresh_golden_frame = 0;
 | 
				
			||||||
  cpi->refresh_last_frame = 1;
 | 
					  cpi->refresh_last_frame = 1;
 | 
				
			||||||
  cm->refresh_frame_context = 1;
 | 
					  cm->refresh_frame_context =
 | 
				
			||||||
 | 
					      oxcf->error_resilient_mode ? REFRESH_FRAME_CONTEXT_OFF :
 | 
				
			||||||
 | 
					          oxcf->frame_parallel_decoding_mode ? REFRESH_FRAME_CONTEXT_FORWARD
 | 
				
			||||||
 | 
					                                             : REFRESH_FRAME_CONTEXT_BACKWARD;
 | 
				
			||||||
  cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
 | 
					  cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  vp10_reset_segment_features(&cm->seg);
 | 
					  vp10_reset_segment_features(&cm->seg);
 | 
				
			||||||
@@ -3549,13 +3552,11 @@ static void encode_frame_to_data_rate(VP10_COMP *cpi,
 | 
				
			|||||||
    cpi->rc.source_alt_ref_active = 0;
 | 
					    cpi->rc.source_alt_ref_active = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    cm->error_resilient_mode = oxcf->error_resilient_mode;
 | 
					    cm->error_resilient_mode = oxcf->error_resilient_mode;
 | 
				
			||||||
    cm->frame_parallel_decoding_mode = oxcf->frame_parallel_decoding_mode;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // By default, encoder assumes decoder can use prev_mi.
 | 
					    // By default, encoder assumes decoder can use prev_mi.
 | 
				
			||||||
    if (cm->error_resilient_mode) {
 | 
					    if (cm->error_resilient_mode) {
 | 
				
			||||||
      cm->frame_parallel_decoding_mode = 1;
 | 
					 | 
				
			||||||
      cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
 | 
					      cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
 | 
				
			||||||
      cm->refresh_frame_context = 0;
 | 
					      cm->refresh_frame_context = REFRESH_FRAME_CONTEXT_OFF;
 | 
				
			||||||
    } else if (cm->intra_only) {
 | 
					    } else if (cm->intra_only) {
 | 
				
			||||||
      // Only reset the current context.
 | 
					      // Only reset the current context.
 | 
				
			||||||
      cm->reset_frame_context = RESET_FRAME_CONTEXT_CURRENT;
 | 
					      cm->reset_frame_context = RESET_FRAME_CONTEXT_CURRENT;
 | 
				
			||||||
@@ -3641,11 +3642,11 @@ static void encode_frame_to_data_rate(VP10_COMP *cpi,
 | 
				
			|||||||
    full_to_model_counts(cpi->td.counts->coef[t],
 | 
					    full_to_model_counts(cpi->td.counts->coef[t],
 | 
				
			||||||
                         cpi->td.rd_counts.coef_counts[t]);
 | 
					                         cpi->td.rd_counts.coef_counts[t]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!cm->error_resilient_mode && !cm->frame_parallel_decoding_mode)
 | 
					  if (cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD)
 | 
				
			||||||
    vp10_adapt_coef_probs(cm);
 | 
					    vp10_adapt_coef_probs(cm);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!frame_is_intra_only(cm)) {
 | 
					  if (!frame_is_intra_only(cm)) {
 | 
				
			||||||
    if (!cm->error_resilient_mode && !cm->frame_parallel_decoding_mode) {
 | 
					    if (cm->refresh_frame_context == REFRESH_FRAME_CONTEXT_BACKWARD) {
 | 
				
			||||||
      vp10_adapt_mode_probs(cm);
 | 
					      vp10_adapt_mode_probs(cm);
 | 
				
			||||||
      vp10_adapt_mv_probs(cm, cm->allow_high_precision_mv);
 | 
					      vp10_adapt_mv_probs(cm, cm->allow_high_precision_mv);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -3828,7 +3829,7 @@ static int frame_is_reference(const VP10_COMP *cpi) {
 | 
				
			|||||||
         cpi->refresh_last_frame ||
 | 
					         cpi->refresh_last_frame ||
 | 
				
			||||||
         cpi->refresh_golden_frame ||
 | 
					         cpi->refresh_golden_frame ||
 | 
				
			||||||
         cpi->refresh_alt_ref_frame ||
 | 
					         cpi->refresh_alt_ref_frame ||
 | 
				
			||||||
         cm->refresh_frame_context ||
 | 
					         cm->refresh_frame_context != REFRESH_FRAME_CONTEXT_OFF ||
 | 
				
			||||||
         cm->lf.mode_ref_delta_update ||
 | 
					         cm->lf.mode_ref_delta_update ||
 | 
				
			||||||
         cm->seg.update_map ||
 | 
					         cm->seg.update_map ||
 | 
				
			||||||
         cm->seg.update_data;
 | 
					         cm->seg.update_data;
 | 
				
			||||||
@@ -3956,7 +3957,10 @@ int vp10_get_compressed_data(VP10_COMP *cpi, unsigned int *frame_flags,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  // Normal defaults
 | 
					  // Normal defaults
 | 
				
			||||||
  cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
 | 
					  cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
 | 
				
			||||||
  cm->refresh_frame_context = 1;
 | 
					  cm->refresh_frame_context =
 | 
				
			||||||
 | 
					      oxcf->error_resilient_mode ? REFRESH_FRAME_CONTEXT_OFF :
 | 
				
			||||||
 | 
					          oxcf->frame_parallel_decoding_mode ? REFRESH_FRAME_CONTEXT_FORWARD
 | 
				
			||||||
 | 
					                                             : REFRESH_FRAME_CONTEXT_BACKWARD;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cpi->refresh_last_frame = 1;
 | 
					  cpi->refresh_last_frame = 1;
 | 
				
			||||||
  cpi->refresh_golden_frame = 0;
 | 
					  cpi->refresh_golden_frame = 0;
 | 
				
			||||||
@@ -4100,7 +4104,7 @@ int vp10_get_compressed_data(VP10_COMP *cpi, unsigned int *frame_flags,
 | 
				
			|||||||
    Pass0Encode(cpi, size, dest, frame_flags);
 | 
					    Pass0Encode(cpi, size, dest, frame_flags);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (cm->refresh_frame_context)
 | 
					  if (cm->refresh_frame_context != REFRESH_FRAME_CONTEXT_OFF)
 | 
				
			||||||
    cm->frame_contexts[cm->frame_context_idx] = *cm->fc;
 | 
					    cm->frame_contexts[cm->frame_context_idx] = *cm->fc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // No frame encoded, or frame was dropped, release scaled references.
 | 
					  // No frame encoded, or frame was dropped, release scaled references.
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user