OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 cpi->common.allow_high_precision_mv = allow_high_precision_mv; | 108 cpi->common.allow_high_precision_mv = allow_high_precision_mv; |
109 if (cpi->common.allow_high_precision_mv) { | 109 if (cpi->common.allow_high_precision_mv) { |
110 mb->mvcost = mb->nmvcost_hp; | 110 mb->mvcost = mb->nmvcost_hp; |
111 mb->mvsadcost = mb->nmvsadcost_hp; | 111 mb->mvsadcost = mb->nmvsadcost_hp; |
112 } else { | 112 } else { |
113 mb->mvcost = mb->nmvcost; | 113 mb->mvcost = mb->nmvcost; |
114 mb->mvsadcost = mb->nmvsadcost; | 114 mb->mvsadcost = mb->nmvsadcost; |
115 } | 115 } |
116 } | 116 } |
117 | 117 |
118 static void setup_key_frame(VP9_COMP *cpi) { | |
119 vp9_setup_past_independence(&cpi->common); | |
120 | |
121 // All buffers are implicitly updated on key frames. | |
122 cpi->refresh_golden_frame = 1; | |
123 cpi->refresh_alt_ref_frame = 1; | |
124 } | |
125 | |
126 static void setup_inter_frame(VP9_COMMON *cm) { | |
127 if (cm->error_resilient_mode || cm->intra_only) | |
128 vp9_setup_past_independence(cm); | |
129 | |
130 assert(cm->frame_context_idx < FRAME_CONTEXTS); | |
131 cm->fc = cm->frame_contexts[cm->frame_context_idx]; | |
132 } | |
133 | |
134 static void setup_frame(VP9_COMP *cpi) { | 118 static void setup_frame(VP9_COMP *cpi) { |
135 VP9_COMMON *const cm = &cpi->common; | 119 VP9_COMMON *const cm = &cpi->common; |
136 // Set up entropy context depending on frame type. The decoder mandates | 120 // Set up entropy context depending on frame type. The decoder mandates |
137 // the use of the default context, index 0, for keyframes and inter | 121 // the use of the default context, index 0, for keyframes and inter |
138 // frames where the error_resilient_mode or intra_only flag is set. For | 122 // frames where the error_resilient_mode or intra_only flag is set. For |
139 // other inter-frames the encoder currently uses only two contexts; | 123 // other inter-frames the encoder currently uses only two contexts; |
140 // context 1 for ALTREF frames and context 0 for the others. | 124 // context 1 for ALTREF frames and context 0 for the others. |
| 125 if (frame_is_intra_only(cm) || cm->error_resilient_mode) { |
| 126 vp9_setup_past_independence(cm); |
| 127 } else { |
| 128 if (!cpi->use_svc) |
| 129 cm->frame_context_idx = cpi->refresh_alt_ref_frame; |
| 130 } |
| 131 |
141 if (cm->frame_type == KEY_FRAME) { | 132 if (cm->frame_type == KEY_FRAME) { |
142 setup_key_frame(cpi); | 133 cpi->refresh_golden_frame = 1; |
| 134 cpi->refresh_alt_ref_frame = 1; |
143 } else { | 135 } else { |
144 if (!cm->intra_only && !cm->error_resilient_mode && !cpi->use_svc) | 136 cm->fc = cm->frame_contexts[cm->frame_context_idx]; |
145 cm->frame_context_idx = cpi->refresh_alt_ref_frame; | |
146 setup_inter_frame(cm); | |
147 } | 137 } |
148 } | 138 } |
149 | 139 |
150 | |
151 | |
152 void vp9_initialize_enc() { | 140 void vp9_initialize_enc() { |
153 static int init_done = 0; | 141 static int init_done = 0; |
154 | 142 |
155 if (!init_done) { | 143 if (!init_done) { |
156 vp9_init_neighbors(); | 144 vp9_init_neighbors(); |
157 vp9_init_quant_tables(); | 145 vp9_init_quant_tables(); |
158 | 146 |
159 vp9_coef_tree_initialize(); | 147 vp9_coef_tree_initialize(); |
160 vp9_tokenize_initialize(); | 148 vp9_tokenize_initialize(); |
161 vp9_init_me_luts(); | 149 vp9_init_me_luts(); |
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
754 double z = 256 * (2 * (log2f(8 * i) + .6)); | 742 double z = 256 * (2 * (log2f(8 * i) + .6)); |
755 mvsadcost[0][i] = (int)z; | 743 mvsadcost[0][i] = (int)z; |
756 mvsadcost[1][i] = (int)z; | 744 mvsadcost[1][i] = (int)z; |
757 mvsadcost[0][-i] = (int)z; | 745 mvsadcost[0][-i] = (int)z; |
758 mvsadcost[1][-i] = (int)z; | 746 mvsadcost[1][-i] = (int)z; |
759 } while (++i <= MV_MAX); | 747 } while (++i <= MV_MAX); |
760 } | 748 } |
761 | 749 |
762 | 750 |
763 VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) { | 751 VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) { |
764 int i, j; | 752 unsigned int i, j; |
765 VP9_COMP *const cpi = vpx_memalign(32, sizeof(VP9_COMP)); | 753 VP9_COMP *const cpi = vpx_memalign(32, sizeof(VP9_COMP)); |
766 VP9_COMMON *const cm = cpi != NULL ? &cpi->common : NULL; | 754 VP9_COMMON *const cm = cpi != NULL ? &cpi->common : NULL; |
767 | 755 |
768 if (!cm) | 756 if (!cm) |
769 return NULL; | 757 return NULL; |
770 | 758 |
771 vp9_zero(*cpi); | 759 vp9_zero(*cpi); |
772 | 760 |
773 if (setjmp(cm->error.jmp)) { | 761 if (setjmp(cm->error.jmp)) { |
774 cm->error.setjmp = 0; | 762 cm->error.setjmp = 0; |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1047 vp9_init_quantizer(cpi); | 1035 vp9_init_quantizer(cpi); |
1048 | 1036 |
1049 vp9_loop_filter_init(cm); | 1037 vp9_loop_filter_init(cm); |
1050 | 1038 |
1051 cm->error.setjmp = 0; | 1039 cm->error.setjmp = 0; |
1052 | 1040 |
1053 return cpi; | 1041 return cpi; |
1054 } | 1042 } |
1055 | 1043 |
1056 void vp9_remove_compressor(VP9_COMP *cpi) { | 1044 void vp9_remove_compressor(VP9_COMP *cpi) { |
1057 int i; | 1045 unsigned int i; |
1058 | 1046 |
1059 if (!cpi) | 1047 if (!cpi) |
1060 return; | 1048 return; |
1061 | 1049 |
1062 if (cpi && (cpi->common.current_video_frame > 0)) { | 1050 if (cpi && (cpi->common.current_video_frame > 0)) { |
1063 #if CONFIG_INTERNAL_STATS | 1051 #if CONFIG_INTERNAL_STATS |
1064 | 1052 |
1065 vp9_clear_system_state(); | 1053 vp9_clear_system_state(); |
1066 | 1054 |
1067 // printf("\n8x8-4x4:%d-%d\n", cpi->t8x8_count, cpi->t4x4_count); | 1055 // printf("\n8x8-4x4:%d-%d\n", cpi->t8x8_count, cpi->t4x4_count); |
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1610 | 1598 |
1611 vpx_usec_timer_start(&timer); | 1599 vpx_usec_timer_start(&timer); |
1612 | 1600 |
1613 vp9_pick_filter_level(cpi->Source, cpi, cpi->sf.lpf_pick); | 1601 vp9_pick_filter_level(cpi->Source, cpi, cpi->sf.lpf_pick); |
1614 | 1602 |
1615 vpx_usec_timer_mark(&timer); | 1603 vpx_usec_timer_mark(&timer); |
1616 cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer); | 1604 cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer); |
1617 } | 1605 } |
1618 | 1606 |
1619 if (lf->filter_level > 0) { | 1607 if (lf->filter_level > 0) { |
1620 vp9_loop_filter_frame(cm, xd, lf->filter_level, 0, 0); | 1608 vp9_loop_filter_frame(cm->frame_to_show, cm, xd, lf->filter_level, 0, 0); |
1621 } | 1609 } |
1622 | 1610 |
1623 vp9_extend_frame_inner_borders(cm->frame_to_show); | 1611 vp9_extend_frame_inner_borders(cm->frame_to_show); |
1624 } | 1612 } |
1625 | 1613 |
1626 void vp9_scale_references(VP9_COMP *cpi) { | 1614 void vp9_scale_references(VP9_COMP *cpi) { |
1627 VP9_COMMON *cm = &cpi->common; | 1615 VP9_COMMON *cm = &cpi->common; |
1628 MV_REFERENCE_FRAME ref_frame; | 1616 MV_REFERENCE_FRAME ref_frame; |
1629 | 1617 |
1630 for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { | 1618 for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1730 fprintf(fmodes, "%5d ", cpi->mode_chosen_counts[i]); | 1718 fprintf(fmodes, "%5d ", cpi->mode_chosen_counts[i]); |
1731 | 1719 |
1732 fprintf(fmodes, "\n"); | 1720 fprintf(fmodes, "\n"); |
1733 | 1721 |
1734 fclose(fmodes); | 1722 fclose(fmodes); |
1735 } | 1723 } |
1736 } | 1724 } |
1737 #endif | 1725 #endif |
1738 | 1726 |
1739 static void encode_without_recode_loop(VP9_COMP *cpi, | 1727 static void encode_without_recode_loop(VP9_COMP *cpi, |
1740 size_t *size, | |
1741 uint8_t *dest, | |
1742 int q) { | 1728 int q) { |
1743 VP9_COMMON *const cm = &cpi->common; | 1729 VP9_COMMON *const cm = &cpi->common; |
1744 vp9_clear_system_state(); | 1730 vp9_clear_system_state(); |
1745 vp9_set_quantizer(cm, q); | 1731 vp9_set_quantizer(cm, q); |
1746 setup_frame(cpi); | 1732 setup_frame(cpi); |
1747 // Variance adaptive and in frame q adjustment experiments are mutually | 1733 // Variance adaptive and in frame q adjustment experiments are mutually |
1748 // exclusive. | 1734 // exclusive. |
1749 if (cpi->oxcf.aq_mode == VARIANCE_AQ) { | 1735 if (cpi->oxcf.aq_mode == VARIANCE_AQ) { |
1750 vp9_vaq_frame_setup(cpi); | 1736 vp9_vaq_frame_setup(cpi); |
1751 } else if (cpi->oxcf.aq_mode == COMPLEXITY_AQ) { | 1737 } else if (cpi->oxcf.aq_mode == COMPLEXITY_AQ) { |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2167 // Decide q and q bounds. | 2153 // Decide q and q bounds. |
2168 q = vp9_rc_pick_q_and_bounds(cpi, &bottom_index, &top_index); | 2154 q = vp9_rc_pick_q_and_bounds(cpi, &bottom_index, &top_index); |
2169 | 2155 |
2170 if (!frame_is_intra_only(cm)) { | 2156 if (!frame_is_intra_only(cm)) { |
2171 cm->interp_filter = DEFAULT_INTERP_FILTER; | 2157 cm->interp_filter = DEFAULT_INTERP_FILTER; |
2172 /* TODO: Decide this more intelligently */ | 2158 /* TODO: Decide this more intelligently */ |
2173 set_high_precision_mv(cpi, q < HIGH_PRECISION_MV_QTHRESH); | 2159 set_high_precision_mv(cpi, q < HIGH_PRECISION_MV_QTHRESH); |
2174 } | 2160 } |
2175 | 2161 |
2176 if (cpi->sf.recode_loop == DISALLOW_RECODE) { | 2162 if (cpi->sf.recode_loop == DISALLOW_RECODE) { |
2177 encode_without_recode_loop(cpi, size, dest, q); | 2163 encode_without_recode_loop(cpi, q); |
2178 } else { | 2164 } else { |
2179 encode_with_recode_loop(cpi, size, dest, q, bottom_index, top_index); | 2165 encode_with_recode_loop(cpi, size, dest, q, bottom_index, top_index); |
2180 } | 2166 } |
2181 | 2167 |
2182 // Special case code to reduce pulsing when key frames are forced at a | 2168 // Special case code to reduce pulsing when key frames are forced at a |
2183 // fixed interval. Note the reconstruction error if it is the frame before | 2169 // fixed interval. Note the reconstruction error if it is the frame before |
2184 // the force key frame | 2170 // the force key frame |
2185 if (cpi->rc.next_key_frame_forced && cpi->rc.frames_to_key == 1) { | 2171 if (cpi->rc.next_key_frame_forced && cpi->rc.frames_to_key == 1) { |
2186 cpi->ambient_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); | 2172 cpi->ambient_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); |
2187 } | 2173 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2229 if (!cm->error_resilient_mode && !cm->frame_parallel_decoding_mode) | 2215 if (!cm->error_resilient_mode && !cm->frame_parallel_decoding_mode) |
2230 vp9_adapt_coef_probs(cm); | 2216 vp9_adapt_coef_probs(cm); |
2231 | 2217 |
2232 if (!frame_is_intra_only(cm)) { | 2218 if (!frame_is_intra_only(cm)) { |
2233 if (!cm->error_resilient_mode && !cm->frame_parallel_decoding_mode) { | 2219 if (!cm->error_resilient_mode && !cm->frame_parallel_decoding_mode) { |
2234 vp9_adapt_mode_probs(cm); | 2220 vp9_adapt_mode_probs(cm); |
2235 vp9_adapt_mv_probs(cm, cm->allow_high_precision_mv); | 2221 vp9_adapt_mv_probs(cm, cm->allow_high_precision_mv); |
2236 } | 2222 } |
2237 } | 2223 } |
2238 | 2224 |
2239 #if 0 | |
2240 output_frame_level_debug_stats(cpi); | |
2241 #endif | |
2242 if (cpi->refresh_golden_frame == 1) | 2225 if (cpi->refresh_golden_frame == 1) |
2243 cpi->frame_flags |= FRAMEFLAGS_GOLDEN; | 2226 cpi->frame_flags |= FRAMEFLAGS_GOLDEN; |
2244 else | 2227 else |
2245 cpi->frame_flags &= ~FRAMEFLAGS_GOLDEN; | 2228 cpi->frame_flags &= ~FRAMEFLAGS_GOLDEN; |
2246 | 2229 |
2247 if (cpi->refresh_alt_ref_frame == 1) | 2230 if (cpi->refresh_alt_ref_frame == 1) |
2248 cpi->frame_flags |= FRAMEFLAGS_ALTREF; | 2231 cpi->frame_flags |= FRAMEFLAGS_ALTREF; |
2249 else | 2232 else |
2250 cpi->frame_flags &= ~FRAMEFLAGS_ALTREF; | 2233 cpi->frame_flags &= ~FRAMEFLAGS_ALTREF; |
2251 | 2234 |
2252 get_ref_frame_flags(cpi); | 2235 get_ref_frame_flags(cpi); |
2253 | 2236 |
2254 cm->last_frame_type = cm->frame_type; | 2237 cm->last_frame_type = cm->frame_type; |
2255 vp9_rc_postencode_update(cpi, *size); | 2238 vp9_rc_postencode_update(cpi, *size); |
2256 | 2239 |
| 2240 #if 0 |
| 2241 output_frame_level_debug_stats(cpi); |
| 2242 #endif |
| 2243 |
2257 if (cm->frame_type == KEY_FRAME) { | 2244 if (cm->frame_type == KEY_FRAME) { |
2258 // Tell the caller that the frame was coded as a key frame | 2245 // Tell the caller that the frame was coded as a key frame |
2259 *frame_flags = cpi->frame_flags | FRAMEFLAGS_KEY; | 2246 *frame_flags = cpi->frame_flags | FRAMEFLAGS_KEY; |
2260 | 2247 |
2261 #if CONFIG_MULTIPLE_ARF | 2248 #if CONFIG_MULTIPLE_ARF |
2262 // Reset the sequence number. | 2249 // Reset the sequence number. |
2263 if (cpi->multi_arf_enabled) { | 2250 if (cpi->multi_arf_enabled) { |
2264 cpi->sequence_number = 0; | 2251 cpi->sequence_number = 0; |
2265 cpi->frame_coding_order_period = cpi->new_frame_coding_order_period; | 2252 cpi->frame_coding_order_period = cpi->new_frame_coding_order_period; |
2266 cpi->new_frame_coding_order_period = -1; | 2253 cpi->new_frame_coding_order_period = -1; |
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2783 } | 2770 } |
2784 } | 2771 } |
2785 | 2772 |
2786 #endif | 2773 #endif |
2787 return 0; | 2774 return 0; |
2788 } | 2775 } |
2789 | 2776 |
2790 int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest, | 2777 int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest, |
2791 vp9_ppflags_t *flags) { | 2778 vp9_ppflags_t *flags) { |
2792 VP9_COMMON *cm = &cpi->common; | 2779 VP9_COMMON *cm = &cpi->common; |
| 2780 #if !CONFIG_VP9_POSTPROC |
| 2781 (void)flags; |
| 2782 #endif |
2793 | 2783 |
2794 if (!cm->show_frame) { | 2784 if (!cm->show_frame) { |
2795 return -1; | 2785 return -1; |
2796 } else { | 2786 } else { |
2797 int ret; | 2787 int ret; |
2798 #if CONFIG_VP9_POSTPROC | 2788 #if CONFIG_VP9_POSTPROC |
2799 ret = vp9_post_proc_frame(cm, dest, flags); | 2789 ret = vp9_post_proc_frame(cm, dest, flags); |
2800 #else | 2790 #else |
2801 | |
2802 if (cm->frame_to_show) { | 2791 if (cm->frame_to_show) { |
2803 *dest = *cm->frame_to_show; | 2792 *dest = *cm->frame_to_show; |
2804 dest->y_width = cm->width; | 2793 dest->y_width = cm->width; |
2805 dest->y_height = cm->height; | 2794 dest->y_height = cm->height; |
2806 dest->uv_width = cm->width >> cm->subsampling_x; | 2795 dest->uv_width = cm->width >> cm->subsampling_x; |
2807 dest->uv_height = cm->height >> cm->subsampling_y; | 2796 dest->uv_height = cm->height >> cm->subsampling_y; |
2808 ret = 0; | 2797 ret = 0; |
2809 } else { | 2798 } else { |
2810 ret = -1; | 2799 ret = -1; |
2811 } | 2800 } |
2812 | |
2813 #endif // !CONFIG_VP9_POSTPROC | 2801 #endif // !CONFIG_VP9_POSTPROC |
2814 vp9_clear_system_state(); | 2802 vp9_clear_system_state(); |
2815 return ret; | 2803 return ret; |
2816 } | 2804 } |
2817 } | 2805 } |
2818 | 2806 |
2819 int vp9_set_roimap(VP9_COMP *cpi, unsigned char *map, unsigned int rows, | 2807 int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map, int rows, int cols) { |
2820 unsigned int cols, int delta_q[MAX_SEGMENTS], | |
2821 int delta_lf[MAX_SEGMENTS], | |
2822 unsigned int threshold[MAX_SEGMENTS]) { | |
2823 signed char feature_data[SEG_LVL_MAX][MAX_SEGMENTS]; | |
2824 struct segmentation *seg = &cpi->common.seg; | |
2825 const VP9_COMMON *const cm = &cpi->common; | |
2826 int i; | |
2827 | |
2828 if (cm->mb_rows != rows || cm->mb_cols != cols) | |
2829 return -1; | |
2830 | |
2831 if (!map) { | |
2832 vp9_disable_segmentation(seg); | |
2833 return 0; | |
2834 } | |
2835 | |
2836 vpx_memcpy(cpi->segmentation_map, map, cm->mi_rows * cm->mi_cols); | |
2837 | |
2838 // Activate segmentation. | |
2839 vp9_enable_segmentation(seg); | |
2840 | |
2841 // Set up the quant, LF and breakout threshold segment data | |
2842 for (i = 0; i < MAX_SEGMENTS; i++) { | |
2843 feature_data[SEG_LVL_ALT_Q][i] = delta_q[i]; | |
2844 feature_data[SEG_LVL_ALT_LF][i] = delta_lf[i]; | |
2845 cpi->segment_encode_breakout[i] = threshold[i]; | |
2846 } | |
2847 | |
2848 // Enable the loop and quant changes in the feature mask | |
2849 for (i = 0; i < MAX_SEGMENTS; i++) { | |
2850 if (delta_q[i]) | |
2851 vp9_enable_segfeature(seg, i, SEG_LVL_ALT_Q); | |
2852 else | |
2853 vp9_disable_segfeature(seg, i, SEG_LVL_ALT_Q); | |
2854 | |
2855 if (delta_lf[i]) | |
2856 vp9_enable_segfeature(seg, i, SEG_LVL_ALT_LF); | |
2857 else | |
2858 vp9_disable_segfeature(seg, i, SEG_LVL_ALT_LF); | |
2859 } | |
2860 | |
2861 // Initialize the feature data structure | |
2862 // SEGMENT_DELTADATA 0, SEGMENT_ABSDATA 1 | |
2863 vp9_set_segment_data(seg, &feature_data[0][0], SEGMENT_DELTADATA); | |
2864 | |
2865 return 0; | |
2866 } | |
2867 | |
2868 int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map, | |
2869 unsigned int rows, unsigned int cols) { | |
2870 if (rows == cpi->common.mb_rows && cols == cpi->common.mb_cols) { | 2808 if (rows == cpi->common.mb_rows && cols == cpi->common.mb_cols) { |
2871 if (map) { | 2809 if (map) { |
2872 vpx_memcpy(cpi->active_map, map, rows * cols); | 2810 vpx_memcpy(cpi->active_map, map, rows * cols); |
2873 cpi->active_map_enabled = 1; | 2811 cpi->active_map_enabled = 1; |
2874 } else { | 2812 } else { |
2875 cpi->active_map_enabled = 0; | 2813 cpi->active_map_enabled = 0; |
2876 } | 2814 } |
2877 | 2815 |
2878 return 0; | 2816 return 0; |
2879 } else { | 2817 } else { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2949 assert(a->y_crop_height == b->y_crop_height); | 2887 assert(a->y_crop_height == b->y_crop_height); |
2950 | 2888 |
2951 return (int)get_sse(a->y_buffer, a->y_stride, b->y_buffer, b->y_stride, | 2889 return (int)get_sse(a->y_buffer, a->y_stride, b->y_buffer, b->y_stride, |
2952 a->y_crop_width, a->y_crop_height); | 2890 a->y_crop_width, a->y_crop_height); |
2953 } | 2891 } |
2954 | 2892 |
2955 | 2893 |
2956 int vp9_get_quantizer(VP9_COMP *cpi) { | 2894 int vp9_get_quantizer(VP9_COMP *cpi) { |
2957 return cpi->common.base_qindex; | 2895 return cpi->common.base_qindex; |
2958 } | 2896 } |
OLD | NEW |