Index: source/libvpx/vp9/encoder/vp9_encoder.c |
=================================================================== |
--- source/libvpx/vp9/encoder/vp9_encoder.c (revision 271012) |
+++ source/libvpx/vp9/encoder/vp9_encoder.c (working copy) |
@@ -115,22 +115,6 @@ |
} |
} |
-static void setup_key_frame(VP9_COMP *cpi) { |
- vp9_setup_past_independence(&cpi->common); |
- |
- // All buffers are implicitly updated on key frames. |
- cpi->refresh_golden_frame = 1; |
- cpi->refresh_alt_ref_frame = 1; |
-} |
- |
-static void setup_inter_frame(VP9_COMMON *cm) { |
- if (cm->error_resilient_mode || cm->intra_only) |
- vp9_setup_past_independence(cm); |
- |
- assert(cm->frame_context_idx < FRAME_CONTEXTS); |
- cm->fc = cm->frame_contexts[cm->frame_context_idx]; |
-} |
- |
static void setup_frame(VP9_COMP *cpi) { |
VP9_COMMON *const cm = &cpi->common; |
// Set up entropy context depending on frame type. The decoder mandates |
@@ -138,17 +122,21 @@ |
// frames where the error_resilient_mode or intra_only flag is set. For |
// other inter-frames the encoder currently uses only two contexts; |
// context 1 for ALTREF frames and context 0 for the others. |
+ if (frame_is_intra_only(cm) || cm->error_resilient_mode) { |
+ vp9_setup_past_independence(cm); |
+ } else { |
+ if (!cpi->use_svc) |
+ cm->frame_context_idx = cpi->refresh_alt_ref_frame; |
+ } |
+ |
if (cm->frame_type == KEY_FRAME) { |
- setup_key_frame(cpi); |
+ cpi->refresh_golden_frame = 1; |
+ cpi->refresh_alt_ref_frame = 1; |
} else { |
- if (!cm->intra_only && !cm->error_resilient_mode && !cpi->use_svc) |
- cm->frame_context_idx = cpi->refresh_alt_ref_frame; |
- setup_inter_frame(cm); |
+ cm->fc = cm->frame_contexts[cm->frame_context_idx]; |
} |
} |
- |
- |
void vp9_initialize_enc() { |
static int init_done = 0; |
@@ -761,7 +749,7 @@ |
VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) { |
- int i, j; |
+ unsigned int i, j; |
VP9_COMP *const cpi = vpx_memalign(32, sizeof(VP9_COMP)); |
VP9_COMMON *const cm = cpi != NULL ? &cpi->common : NULL; |
@@ -1054,7 +1042,7 @@ |
} |
void vp9_remove_compressor(VP9_COMP *cpi) { |
- int i; |
+ unsigned int i; |
if (!cpi) |
return; |
@@ -1617,7 +1605,7 @@ |
} |
if (lf->filter_level > 0) { |
- vp9_loop_filter_frame(cm, xd, lf->filter_level, 0, 0); |
+ vp9_loop_filter_frame(cm->frame_to_show, cm, xd, lf->filter_level, 0, 0); |
} |
vp9_extend_frame_inner_borders(cm->frame_to_show); |
@@ -1737,8 +1725,6 @@ |
#endif |
static void encode_without_recode_loop(VP9_COMP *cpi, |
- size_t *size, |
- uint8_t *dest, |
int q) { |
VP9_COMMON *const cm = &cpi->common; |
vp9_clear_system_state(); |
@@ -2174,7 +2160,7 @@ |
} |
if (cpi->sf.recode_loop == DISALLOW_RECODE) { |
- encode_without_recode_loop(cpi, size, dest, q); |
+ encode_without_recode_loop(cpi, q); |
} else { |
encode_with_recode_loop(cpi, size, dest, q, bottom_index, top_index); |
} |
@@ -2236,9 +2222,6 @@ |
} |
} |
-#if 0 |
- output_frame_level_debug_stats(cpi); |
-#endif |
if (cpi->refresh_golden_frame == 1) |
cpi->frame_flags |= FRAMEFLAGS_GOLDEN; |
else |
@@ -2254,6 +2237,10 @@ |
cm->last_frame_type = cm->frame_type; |
vp9_rc_postencode_update(cpi, *size); |
+#if 0 |
+ output_frame_level_debug_stats(cpi); |
+#endif |
+ |
if (cm->frame_type == KEY_FRAME) { |
// Tell the caller that the frame was coded as a key frame |
*frame_flags = cpi->frame_flags | FRAMEFLAGS_KEY; |
@@ -2790,6 +2777,9 @@ |
int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest, |
vp9_ppflags_t *flags) { |
VP9_COMMON *cm = &cpi->common; |
+#if !CONFIG_VP9_POSTPROC |
+ (void)flags; |
+#endif |
if (!cm->show_frame) { |
return -1; |
@@ -2798,7 +2788,6 @@ |
#if CONFIG_VP9_POSTPROC |
ret = vp9_post_proc_frame(cm, dest, flags); |
#else |
- |
if (cm->frame_to_show) { |
*dest = *cm->frame_to_show; |
dest->y_width = cm->width; |
@@ -2809,64 +2798,13 @@ |
} else { |
ret = -1; |
} |
- |
#endif // !CONFIG_VP9_POSTPROC |
vp9_clear_system_state(); |
return ret; |
} |
} |
-int vp9_set_roimap(VP9_COMP *cpi, unsigned char *map, unsigned int rows, |
- unsigned int cols, int delta_q[MAX_SEGMENTS], |
- int delta_lf[MAX_SEGMENTS], |
- unsigned int threshold[MAX_SEGMENTS]) { |
- signed char feature_data[SEG_LVL_MAX][MAX_SEGMENTS]; |
- struct segmentation *seg = &cpi->common.seg; |
- const VP9_COMMON *const cm = &cpi->common; |
- int i; |
- |
- if (cm->mb_rows != rows || cm->mb_cols != cols) |
- return -1; |
- |
- if (!map) { |
- vp9_disable_segmentation(seg); |
- return 0; |
- } |
- |
- vpx_memcpy(cpi->segmentation_map, map, cm->mi_rows * cm->mi_cols); |
- |
- // Activate segmentation. |
- vp9_enable_segmentation(seg); |
- |
- // Set up the quant, LF and breakout threshold segment data |
- for (i = 0; i < MAX_SEGMENTS; i++) { |
- feature_data[SEG_LVL_ALT_Q][i] = delta_q[i]; |
- feature_data[SEG_LVL_ALT_LF][i] = delta_lf[i]; |
- cpi->segment_encode_breakout[i] = threshold[i]; |
- } |
- |
- // Enable the loop and quant changes in the feature mask |
- for (i = 0; i < MAX_SEGMENTS; i++) { |
- if (delta_q[i]) |
- vp9_enable_segfeature(seg, i, SEG_LVL_ALT_Q); |
- else |
- vp9_disable_segfeature(seg, i, SEG_LVL_ALT_Q); |
- |
- if (delta_lf[i]) |
- vp9_enable_segfeature(seg, i, SEG_LVL_ALT_LF); |
- else |
- vp9_disable_segfeature(seg, i, SEG_LVL_ALT_LF); |
- } |
- |
- // Initialize the feature data structure |
- // SEGMENT_DELTADATA 0, SEGMENT_ABSDATA 1 |
- vp9_set_segment_data(seg, &feature_data[0][0], SEGMENT_DELTADATA); |
- |
- return 0; |
-} |
- |
-int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map, |
- unsigned int rows, unsigned int cols) { |
+int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map, int rows, int cols) { |
if (rows == cpi->common.mb_rows && cols == cpi->common.mb_cols) { |
if (map) { |
vpx_memcpy(cpi->active_map, map, rows * cols); |