1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 128b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#ifndef VP8_ENCODER_RDOPT_H_ 138b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#define VP8_ENCODER_RDOPT_H_ 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 15dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus 16dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.orgextern "C" { 17dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif 18dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#define RDCOST(RM,DM,R,D) ( ((128+(R)*(RM)) >> 8) + (DM)*(D) ) 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 21167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgstatic void insertsortmv(int arr[], int len) 22167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 23167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int i, j, k; 24167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 25167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for ( i = 1 ; i <= len-1 ; i++ ) 26167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 27167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for ( j = 0 ; j < i ; j++ ) 28167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 29167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if ( arr[j] > arr[i] ) 30167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 31167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int temp; 32167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 33167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org temp = arr[i]; 34167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 35167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for ( k = i; k >j; k--) 36167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org arr[k] = arr[k - 1] ; 37167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 38167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org arr[j] = temp ; 39167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 40167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 41167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 42167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 43167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 44167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgstatic void insertsortsad(int arr[],int idx[], int len) 45167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 46167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int i, j, k; 47167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 48167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for ( i = 1 ; i <= len-1 ; i++ ) 49167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 50167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for ( j = 0 ; j < i ; j++ ) 51167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 52167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org if ( arr[j] > arr[i] ) 53167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 54167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int temp, tempi; 55167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 56167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org temp = arr[i]; 57167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org tempi = idx[i]; 58167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 59167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for ( k = i; k >j; k--) 60167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org { 61167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org arr[k] = arr[k - 1] ; 62167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idx[k] = idx[k - 1]; 63167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 64167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 65167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org arr[j] = temp ; 66167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org idx[j] = tempi; 67167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 68167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 69167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org } 70167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 71167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 72d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.orgextern void vp8_initialize_rd_consts(VP8_COMP *cpi, MACROBLOCK *x, int Qvalue); 7388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgextern void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, 7488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org int recon_yoffset, int recon_uvoffset, 7588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org int *returnrate, int *returndistortion, 7688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org int *returnintra, int mb_row, int mb_col); 77d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.orgextern void vp8_rd_pick_intra_mode(MACROBLOCK *x, int *rate); 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 79167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 80167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgstatic void get_plane_pointers(const YV12_BUFFER_CONFIG *fb, 81167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *plane[3], 82167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int recon_yoffset, 83167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int recon_uvoffset) 84167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 85167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org plane[0] = fb->y_buffer + recon_yoffset; 86167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org plane[1] = fb->u_buffer + recon_uvoffset; 87167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org plane[2] = fb->v_buffer + recon_uvoffset; 88167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 89167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 90167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 91167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgstatic void get_predictor_pointers(const VP8_COMP *cpi, 92167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned char *plane[4][3], 93167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int recon_yoffset, 94167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org unsigned int recon_uvoffset) 95167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 96ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (cpi->ref_frame_flags & VP8_LAST_FRAME) 97167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org get_plane_pointers(&cpi->common.yv12_fb[cpi->common.lst_fb_idx], 98167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org plane[LAST_FRAME], recon_yoffset, recon_uvoffset); 99167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 100ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (cpi->ref_frame_flags & VP8_GOLD_FRAME) 101167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org get_plane_pointers(&cpi->common.yv12_fb[cpi->common.gld_fb_idx], 102167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org plane[GOLDEN_FRAME], recon_yoffset, recon_uvoffset); 103167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 104ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (cpi->ref_frame_flags & VP8_ALTR_FRAME) 105167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org get_plane_pointers(&cpi->common.yv12_fb[cpi->common.alt_fb_idx], 106167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org plane[ALTREF_FRAME], recon_yoffset, recon_uvoffset); 107167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 108167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 109167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 110167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.orgstatic void get_reference_search_order(const VP8_COMP *cpi, 111167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int ref_frame_map[4]) 112167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org{ 113167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org int i=0; 114167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 115167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ref_frame_map[i++] = INTRA_FRAME; 116ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (cpi->ref_frame_flags & VP8_LAST_FRAME) 117167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ref_frame_map[i++] = LAST_FRAME; 118ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (cpi->ref_frame_flags & VP8_GOLD_FRAME) 119167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ref_frame_map[i++] = GOLDEN_FRAME; 120ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org if (cpi->ref_frame_flags & VP8_ALTR_FRAME) 121167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ref_frame_map[i++] = ALTREF_FRAME; 122167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org for(; i<4; i++) 123167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org ref_frame_map[i] = -1; 124167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org} 125167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 126167514562bbce1eb0566271d6cb41d90d2b5ffa0hclam@chromium.org 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgextern void vp8_mv_pred 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org( 129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org VP8_COMP *cpi, 130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MACROBLOCKD *xd, 131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org const MODE_INFO *here, 132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int_mv *mvp, 133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int refframe, 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int *ref_frame_sign_bias, 135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int *sr, 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org int near_sadidx[] 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org); 138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid vp8_cal_sad(VP8_COMP *cpi, MACROBLOCKD *xd, MACROBLOCK *x, int recon_yoffset, int near_sadidx[]); 139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 140dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#ifdef __cplusplus 141dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org} // extern "C" 142dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org#endif 143dddee1ec7cedf276305b107429f684539b105276johannkoenig@chromium.org 1448b26fe55f3e4daa2311dbd2d95e8ac2b4e080685johannkoenig@chromium.org#endif // VP8_ENCODER_RDOPT_H_ 145