| 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);
|
|
|