| 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 11 matching lines...) Expand all  Loading... | 
| 22 #include "dct.h" | 22 #include "dct.h" | 
| 23 #include "encodemb.h" | 23 #include "encodemb.h" | 
| 24 #include "quantize.h" | 24 #include "quantize.h" | 
| 25 #include "vp8/common/entropy.h" | 25 #include "vp8/common/entropy.h" | 
| 26 #include "vp8/common/threading.h" | 26 #include "vp8/common/threading.h" | 
| 27 #include "vpx_ports/mem.h" | 27 #include "vpx_ports/mem.h" | 
| 28 #include "vpx/internal/vpx_codec_internal.h" | 28 #include "vpx/internal/vpx_codec_internal.h" | 
| 29 #include "mcomp.h" | 29 #include "mcomp.h" | 
| 30 #include "temporal_filter.h" | 30 #include "temporal_filter.h" | 
| 31 #include "vp8/common/findnearmv.h" | 31 #include "vp8/common/findnearmv.h" | 
|  | 32 #include "lookahead.h" | 
| 32 | 33 | 
| 33 //#define SPEEDSTATS 1 | 34 //#define SPEEDSTATS 1 | 
| 34 #define MIN_GF_INTERVAL             4 | 35 #define MIN_GF_INTERVAL             4 | 
| 35 #define DEFAULT_GF_INTERVAL         7 | 36 #define DEFAULT_GF_INTERVAL         7 | 
| 36 | 37 | 
| 37 #define KEY_FRAME_CONTEXT 5 | 38 #define KEY_FRAME_CONTEXT 5 | 
| 38 | 39 | 
| 39 #define MAX_LAG_BUFFERS (CONFIG_REALTIME_ONLY? 1 : 25) | 40 #define MAX_LAG_BUFFERS (CONFIG_REALTIME_ONLY? 1 : 25) | 
| 40 | 41 | 
| 41 #define AF_THRESH   25 | 42 #define AF_THRESH   25 | 
| 42 #define AF_THRESH2  100 | 43 #define AF_THRESH2  100 | 
| 43 #define ARF_DECAY_THRESH 12 | 44 #define ARF_DECAY_THRESH 12 | 
| 44 #define MAX_MODES 20 | 45 #define MAX_MODES 20 | 
| 45 | 46 | 
| 46 #define MIN_THRESHMULT  32 | 47 #define MIN_THRESHMULT  32 | 
| 47 #define MAX_THRESHMULT  512 | 48 #define MAX_THRESHMULT  512 | 
| 48 | 49 | 
| 49 #define GF_ZEROMV_ZBIN_BOOST 24 | 50 #define GF_ZEROMV_ZBIN_BOOST 12 | 
| 50 #define LF_ZEROMV_ZBIN_BOOST 12 | 51 #define LF_ZEROMV_ZBIN_BOOST 6 | 
| 51 #define MV_ZBIN_BOOST        4 | 52 #define MV_ZBIN_BOOST        4 | 
| 52 #define ZBIN_OQ_MAX 192 | 53 #define ZBIN_OQ_MAX 192 | 
| 53 | 54 | 
| 54 #if !(CONFIG_REALTIME_ONLY) | 55 #if !(CONFIG_REALTIME_ONLY) | 
| 55 #define VP8_TEMPORAL_ALT_REF 1 | 56 #define VP8_TEMPORAL_ALT_REF 1 | 
| 56 #endif | 57 #endif | 
| 57 | 58 | 
| 58 typedef struct | 59 typedef struct | 
| 59 { | 60 { | 
| 60     int kf_indicated; | 61     int kf_indicated; | 
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 172     int RD; | 173     int RD; | 
| 173     SEARCH_METHODS search_method; | 174     SEARCH_METHODS search_method; | 
| 174     int improved_quant; | 175     int improved_quant; | 
| 175     int improved_dct; | 176     int improved_dct; | 
| 176     int auto_filter; | 177     int auto_filter; | 
| 177     int recode_loop; | 178     int recode_loop; | 
| 178     int iterative_sub_pixel; | 179     int iterative_sub_pixel; | 
| 179     int half_pixel_search; | 180     int half_pixel_search; | 
| 180     int quarter_pixel_search; | 181     int quarter_pixel_search; | 
| 181     int thresh_mult[MAX_MODES]; | 182     int thresh_mult[MAX_MODES]; | 
| 182     int full_freq[2]; |  | 
| 183     int min_fs_radius; |  | 
| 184     int max_fs_radius; |  | 
| 185     int max_step_search_steps; | 183     int max_step_search_steps; | 
| 186     int first_step; | 184     int first_step; | 
| 187     int optimize_coefficients; | 185     int optimize_coefficients; | 
| 188 | 186 | 
| 189     int use_fastquant_for_pick; | 187     int use_fastquant_for_pick; | 
| 190     int no_skip_block4x4_search; | 188     int no_skip_block4x4_search; | 
| 191     int improved_mv_pred; | 189     int improved_mv_pred; | 
| 192 | 190 | 
| 193 } SPEED_FEATURES; | 191 } SPEED_FEATURES; | 
| 194 | 192 | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 210     int ithread; | 208     int ithread; | 
| 211     void *ptr1; | 209     void *ptr1; | 
| 212     void *ptr2; | 210     void *ptr2; | 
| 213 } ENCODETHREAD_DATA; | 211 } ENCODETHREAD_DATA; | 
| 214 typedef struct | 212 typedef struct | 
| 215 { | 213 { | 
| 216     int ithread; | 214     int ithread; | 
| 217     void *ptr1; | 215     void *ptr1; | 
| 218 } LPFTHREAD_DATA; | 216 } LPFTHREAD_DATA; | 
| 219 | 217 | 
| 220 typedef struct |  | 
| 221 { |  | 
| 222     INT64  source_time_stamp; |  | 
| 223     INT64  source_end_time_stamp; |  | 
| 224 |  | 
| 225     DECLARE_ALIGNED(16, YV12_BUFFER_CONFIG, source_buffer); |  | 
| 226     unsigned int source_frame_flags; |  | 
| 227 } SOURCE_SAMPLE; |  | 
| 228 | 218 | 
| 229 typedef struct VP8_ENCODER_RTCD | 219 typedef struct VP8_ENCODER_RTCD | 
| 230 { | 220 { | 
| 231     VP8_COMMON_RTCD            *common; | 221     VP8_COMMON_RTCD            *common; | 
| 232     vp8_variance_rtcd_vtable_t  variance; | 222     vp8_variance_rtcd_vtable_t  variance; | 
| 233     vp8_fdct_rtcd_vtable_t      fdct; | 223     vp8_fdct_rtcd_vtable_t      fdct; | 
| 234     vp8_encodemb_rtcd_vtable_t  encodemb; | 224     vp8_encodemb_rtcd_vtable_t  encodemb; | 
| 235     vp8_quantize_rtcd_vtable_t  quantize; | 225     vp8_quantize_rtcd_vtable_t  quantize; | 
| 236     vp8_search_rtcd_vtable_t    search; | 226     vp8_search_rtcd_vtable_t    search; | 
| 237     vp8_temporal_rtcd_vtable_t  temporal; | 227     vp8_temporal_rtcd_vtable_t  temporal; | 
| 238 } VP8_ENCODER_RTCD; | 228 } VP8_ENCODER_RTCD; | 
| 239 | 229 | 
| 240 enum | 230 enum | 
| 241 { | 231 { | 
| 242     BLOCK_16X8, | 232     BLOCK_16X8, | 
| 243     BLOCK_8X16, | 233     BLOCK_8X16, | 
| 244     BLOCK_8X8, | 234     BLOCK_8X8, | 
| 245     BLOCK_4X4, | 235     BLOCK_4X4, | 
| 246     BLOCK_16X16, | 236     BLOCK_16X16, | 
| 247     BLOCK_MAX_SEGMENTS | 237     BLOCK_MAX_SEGMENTS | 
| 248 }; | 238 }; | 
| 249 | 239 | 
| 250 typedef struct | 240 typedef struct VP8_COMP | 
| 251 { | 241 { | 
| 252 | 242 | 
| 253     DECLARE_ALIGNED(16, short, Y1quant[QINDEX_RANGE][16]); | 243     DECLARE_ALIGNED(16, short, Y1quant[QINDEX_RANGE][16]); | 
| 254     DECLARE_ALIGNED(16, short, Y1quant_shift[QINDEX_RANGE][16]); | 244     DECLARE_ALIGNED(16, unsigned char, Y1quant_shift[QINDEX_RANGE][16]); | 
| 255     DECLARE_ALIGNED(16, short, Y1zbin[QINDEX_RANGE][16]); | 245     DECLARE_ALIGNED(16, short, Y1zbin[QINDEX_RANGE][16]); | 
| 256     DECLARE_ALIGNED(16, short, Y1round[QINDEX_RANGE][16]); | 246     DECLARE_ALIGNED(16, short, Y1round[QINDEX_RANGE][16]); | 
| 257 | 247 | 
| 258     DECLARE_ALIGNED(16, short, Y2quant[QINDEX_RANGE][16]); | 248     DECLARE_ALIGNED(16, short, Y2quant[QINDEX_RANGE][16]); | 
| 259     DECLARE_ALIGNED(16, short, Y2quant_shift[QINDEX_RANGE][16]); | 249     DECLARE_ALIGNED(16, unsigned char, Y2quant_shift[QINDEX_RANGE][16]); | 
| 260     DECLARE_ALIGNED(16, short, Y2zbin[QINDEX_RANGE][16]); | 250     DECLARE_ALIGNED(16, short, Y2zbin[QINDEX_RANGE][16]); | 
| 261     DECLARE_ALIGNED(16, short, Y2round[QINDEX_RANGE][16]); | 251     DECLARE_ALIGNED(16, short, Y2round[QINDEX_RANGE][16]); | 
| 262 | 252 | 
| 263     DECLARE_ALIGNED(16, short, UVquant[QINDEX_RANGE][16]); | 253     DECLARE_ALIGNED(16, short, UVquant[QINDEX_RANGE][16]); | 
| 264     DECLARE_ALIGNED(16, short, UVquant_shift[QINDEX_RANGE][16]); | 254     DECLARE_ALIGNED(16, unsigned char, UVquant_shift[QINDEX_RANGE][16]); | 
| 265     DECLARE_ALIGNED(16, short, UVzbin[QINDEX_RANGE][16]); | 255     DECLARE_ALIGNED(16, short, UVzbin[QINDEX_RANGE][16]); | 
| 266     DECLARE_ALIGNED(16, short, UVround[QINDEX_RANGE][16]); | 256     DECLARE_ALIGNED(16, short, UVround[QINDEX_RANGE][16]); | 
| 267 | 257 | 
| 268     DECLARE_ALIGNED(16, short, zrun_zbin_boost_y1[QINDEX_RANGE][16]); | 258     DECLARE_ALIGNED(16, short, zrun_zbin_boost_y1[QINDEX_RANGE][16]); | 
| 269     DECLARE_ALIGNED(16, short, zrun_zbin_boost_y2[QINDEX_RANGE][16]); | 259     DECLARE_ALIGNED(16, short, zrun_zbin_boost_y2[QINDEX_RANGE][16]); | 
| 270     DECLARE_ALIGNED(16, short, zrun_zbin_boost_uv[QINDEX_RANGE][16]); | 260     DECLARE_ALIGNED(16, short, zrun_zbin_boost_uv[QINDEX_RANGE][16]); | 
| 271     DECLARE_ALIGNED(16, short, Y1quant_fast[QINDEX_RANGE][16]); | 261     DECLARE_ALIGNED(16, short, Y1quant_fast[QINDEX_RANGE][16]); | 
| 272     DECLARE_ALIGNED(16, short, Y2quant_fast[QINDEX_RANGE][16]); | 262     DECLARE_ALIGNED(16, short, Y2quant_fast[QINDEX_RANGE][16]); | 
| 273     DECLARE_ALIGNED(16, short, UVquant_fast[QINDEX_RANGE][16]); | 263     DECLARE_ALIGNED(16, short, UVquant_fast[QINDEX_RANGE][16]); | 
| 274 | 264 | 
| 275 | 265 | 
| 276     MACROBLOCK mb; | 266     MACROBLOCK mb; | 
| 277     VP8_COMMON common; | 267     VP8_COMMON common; | 
| 278     vp8_writer bc, bc2; | 268     vp8_writer bc, bc2; | 
| 279     // bool_writer *bc2; | 269     // bool_writer *bc2; | 
| 280 | 270 | 
| 281     VP8_CONFIG oxcf; | 271     VP8_CONFIG oxcf; | 
| 282 | 272 | 
|  | 273     struct lookahead_ctx    *lookahead; | 
|  | 274     struct lookahead_entry  *source; | 
|  | 275     struct lookahead_entry  *alt_ref_source; | 
|  | 276 | 
| 283     YV12_BUFFER_CONFIG *Source; | 277     YV12_BUFFER_CONFIG *Source; | 
| 284     YV12_BUFFER_CONFIG *un_scaled_source; | 278     YV12_BUFFER_CONFIG *un_scaled_source; | 
| 285     INT64 source_time_stamp; |  | 
| 286     INT64 source_end_time_stamp; |  | 
| 287     unsigned int source_frame_flags; |  | 
| 288     YV12_BUFFER_CONFIG scaled_source; | 279     YV12_BUFFER_CONFIG scaled_source; | 
| 289 | 280 | 
| 290     int source_buffer_count;    // number of src_buffers in use for lagged encod
     ing |  | 
| 291     int source_encode_index;    // index of buffer in src_buffer to encode |  | 
| 292     int source_alt_ref_pending; // frame in src_buffers has been identified to b
     e encoded as an alt ref | 281     int source_alt_ref_pending; // frame in src_buffers has been identified to b
     e encoded as an alt ref | 
| 293     int source_alt_ref_active;  // an alt ref frame has been encoded and is usab
     le | 282     int source_alt_ref_active;  // an alt ref frame has been encoded and is usab
     le | 
| 294 | 283 | 
| 295     int last_alt_ref_sei;       // index into src_buffers of frame used as alt r
     eference |  | 
| 296     int is_src_frame_alt_ref;   // source of frame to encode is an exact copy of
      an alt ref frame | 284     int is_src_frame_alt_ref;   // source of frame to encode is an exact copy of
      an alt ref frame | 
| 297     int is_next_src_alt_ref;    // source of next frame to encode is an exact co
     py of an alt ref frame |  | 
| 298 | 285 | 
| 299     int gold_is_last; // golden frame same as last frame ( short circuit gold se
     arches) | 286     int gold_is_last; // golden frame same as last frame ( short circuit gold se
     arches) | 
| 300     int alt_is_last;  // Alt reference frame same as last ( short circuit altref
      search) | 287     int alt_is_last;  // Alt reference frame same as last ( short circuit altref
      search) | 
| 301     int gold_is_alt;  // don't do both alt and gold search ( just do gold). | 288     int gold_is_alt;  // don't do both alt and gold search ( just do gold). | 
| 302 | 289 | 
| 303     //int refresh_alt_ref_frame; | 290     //int refresh_alt_ref_frame; | 
| 304     SOURCE_SAMPLE src_buffer[MAX_LAG_BUFFERS]; |  | 
| 305 |  | 
| 306     YV12_BUFFER_CONFIG last_frame_uf; | 291     YV12_BUFFER_CONFIG last_frame_uf; | 
| 307 | 292 | 
| 308     TOKENEXTRA *tok; | 293     TOKENEXTRA *tok; | 
| 309     unsigned int tok_count; | 294     unsigned int tok_count; | 
| 310 | 295 | 
| 311 | 296 | 
| 312     unsigned int frames_since_key; | 297     unsigned int frames_since_key; | 
| 313     unsigned int key_frame_frequency; | 298     unsigned int key_frame_frequency; | 
| 314     unsigned int this_key_frame_forced; | 299     unsigned int this_key_frame_forced; | 
| 315     unsigned int next_key_frame_forced; | 300     unsigned int next_key_frame_forced; | 
| 316 | 301 | 
| 317     // Ambient reconstruction err target for force key frames | 302     // Ambient reconstruction err target for force key frames | 
| 318     int ambient_err; | 303     int ambient_err; | 
| 319 | 304 | 
| 320     unsigned int mode_check_freq[MAX_MODES]; | 305     unsigned int mode_check_freq[MAX_MODES]; | 
| 321     unsigned int mode_test_hit_counts[MAX_MODES]; | 306     unsigned int mode_test_hit_counts[MAX_MODES]; | 
| 322     unsigned int mode_chosen_counts[MAX_MODES]; | 307     unsigned int mode_chosen_counts[MAX_MODES]; | 
| 323     unsigned int mbs_tested_so_far; | 308     unsigned int mbs_tested_so_far; | 
| 324 | 309 | 
| 325     unsigned int check_freq[2]; |  | 
| 326     unsigned int do_full[2]; |  | 
| 327 |  | 
| 328     int rd_thresh_mult[MAX_MODES]; | 310     int rd_thresh_mult[MAX_MODES]; | 
| 329     int rd_baseline_thresh[MAX_MODES]; | 311     int rd_baseline_thresh[MAX_MODES]; | 
| 330     int rd_threshes[MAX_MODES]; | 312     int rd_threshes[MAX_MODES]; | 
| 331     int mvcostbase; |  | 
| 332     int mvcostmultiplier; |  | 
| 333     int subseqblockweight; |  | 
| 334     int errthresh; |  | 
| 335     unsigned int activity_avg; |  | 
| 336 | 313 | 
| 337     int RDMULT; | 314     int RDMULT; | 
| 338     int RDDIV ; | 315     int RDDIV ; | 
| 339 | 316 | 
| 340     CODING_CONTEXT coding_context; | 317     CODING_CONTEXT coding_context; | 
| 341 | 318 | 
| 342     // Rate targetting variables | 319     // Rate targetting variables | 
| 343     long long prediction_error; | 320     int64_t prediction_error; | 
| 344     long long last_prediction_error; | 321     int64_t last_prediction_error; | 
| 345     long long intra_error; | 322     int64_t intra_error; | 
| 346     long long last_intra_error; | 323     int64_t last_intra_error; | 
| 347 |  | 
| 348 #if 0 |  | 
| 349     // Experimental RD code |  | 
| 350     long long frame_distortion; |  | 
| 351     long long last_frame_distortion; |  | 
| 352 #endif |  | 
| 353 |  | 
| 354     int last_mb_distortion; |  | 
| 355 |  | 
| 356     int frames_since_auto_filter; |  | 
| 357 | 324 | 
| 358     int this_frame_target; | 325     int this_frame_target; | 
| 359     int projected_frame_size; | 326     int projected_frame_size; | 
| 360     int last_q[2];                   // Separate values for Intra/Inter | 327     int last_q[2];                   // Separate values for Intra/Inter | 
| 361 | 328 | 
| 362     double rate_correction_factor; | 329     double rate_correction_factor; | 
| 363     double key_frame_rate_correction_factor; | 330     double key_frame_rate_correction_factor; | 
| 364     double gf_rate_correction_factor; | 331     double gf_rate_correction_factor; | 
| 365     double est_max_qcorrection_factor; |  | 
| 366 | 332 | 
| 367     int frames_till_gf_update_due;      // Count down till next GF | 333     int frames_till_gf_update_due;      // Count down till next GF | 
| 368     int current_gf_interval;          // GF interval chosen when we coded the la
     st GF | 334     int current_gf_interval;          // GF interval chosen when we coded the la
     st GF | 
| 369 | 335 | 
| 370     int gf_overspend_bits;            // Total bits overspent becasue of GF boos
     t (cumulative) | 336     int gf_overspend_bits;            // Total bits overspent becasue of GF boos
     t (cumulative) | 
| 371 | 337 | 
| 372     int gf_group_bits;                // Projected Bits available for a group of
      frames including 1 GF or ARF |  | 
| 373     int gf_bits;                     // Bits for the golden frame or ARF - 2 pas
     s only |  | 
| 374     int mid_gf_extra_bits;             // A few extra bits for the frame half wa
     y between two gfs. |  | 
| 375 |  | 
| 376     // Projected total bits available for a key frame group of frames |  | 
| 377     long long kf_group_bits; |  | 
| 378 |  | 
| 379     // Error score of frames still to be coded in kf group |  | 
| 380     long long kf_group_error_left; |  | 
| 381 |  | 
| 382     // Bits for the key frame in a key frame group - 2 pass only |  | 
| 383     int kf_bits; |  | 
| 384 |  | 
| 385     int non_gf_bitrate_adjustment;     // Used in the few frames following a GF 
     to recover the extra bits spent in that GF | 338     int non_gf_bitrate_adjustment;     // Used in the few frames following a GF 
     to recover the extra bits spent in that GF | 
| 386     int initial_gf_use;               // percentage use of gf 2 frames after gf |  | 
| 387 |  | 
| 388     int gf_group_error_left;           // Remaining error from uncoded frames in
      a gf group. Two pass use only |  | 
| 389 | 339 | 
| 390     int kf_overspend_bits;            // Extra bits spent on key frames that nee
     d to be recovered on inter frames | 340     int kf_overspend_bits;            // Extra bits spent on key frames that nee
     d to be recovered on inter frames | 
| 391     int kf_bitrate_adjustment;        // Current number of bit s to try and reco
     ver on each inter frame. | 341     int kf_bitrate_adjustment;        // Current number of bit s to try and reco
     ver on each inter frame. | 
| 392     int max_gf_interval; | 342     int max_gf_interval; | 
| 393     int static_scene_max_gf_interval; |  | 
| 394     int baseline_gf_interval; | 343     int baseline_gf_interval; | 
| 395     int gf_decay_rate; |  | 
| 396     int active_arnr_frames;           // <= cpi->oxcf.arnr_max_frames | 344     int active_arnr_frames;           // <= cpi->oxcf.arnr_max_frames | 
| 397 | 345 | 
| 398     INT64 key_frame_count; | 346     int64_t key_frame_count; | 
| 399     INT64 tot_key_frame_bits; |  | 
| 400     int prior_key_frame_size[KEY_FRAME_CONTEXT]; |  | 
| 401     int prior_key_frame_distance[KEY_FRAME_CONTEXT]; | 347     int prior_key_frame_distance[KEY_FRAME_CONTEXT]; | 
| 402     int per_frame_bandwidth;          // Current section per frame bandwidth tar
     get | 348     int per_frame_bandwidth;          // Current section per frame bandwidth tar
     get | 
| 403     int av_per_frame_bandwidth;        // Average frame size target for clip | 349     int av_per_frame_bandwidth;        // Average frame size target for clip | 
| 404     int min_frame_bandwidth;          // Minimum allocation that should be used 
     for any frame | 350     int min_frame_bandwidth;          // Minimum allocation that should be used 
     for any frame | 
| 405     int last_key_frame_size; |  | 
| 406     int intra_frame_target; |  | 
| 407     int inter_frame_target; | 351     int inter_frame_target; | 
| 408     double output_frame_rate; | 352     double output_frame_rate; | 
| 409     long long last_time_stamp_seen; | 353     int64_t last_time_stamp_seen; | 
| 410     long long last_end_time_stamp_seen; | 354     int64_t last_end_time_stamp_seen; | 
| 411     long long first_time_stamp_ever; | 355     int64_t first_time_stamp_ever; | 
| 412 | 356 | 
| 413     int ni_av_qi; | 357     int ni_av_qi; | 
| 414     int ni_tot_qi; | 358     int ni_tot_qi; | 
| 415     int ni_frames; | 359     int ni_frames; | 
| 416     int avg_frame_qindex; | 360     int avg_frame_qindex; | 
| 417 | 361 | 
| 418     int zbin_over_quant; | 362     int zbin_over_quant; | 
| 419     int zbin_mode_boost; | 363     int zbin_mode_boost; | 
| 420     int zbin_mode_boost_enabled; | 364     int zbin_mode_boost_enabled; | 
| 421 | 365 | 
| 422     INT64 total_byte_count; | 366     int64_t total_byte_count; | 
| 423 | 367 | 
| 424     int buffered_mode; | 368     int buffered_mode; | 
| 425 | 369 | 
| 426     int buffer_level; | 370     int buffer_level; | 
| 427     int bits_off_target; | 371     int bits_off_target; | 
| 428 | 372 | 
| 429     int rolling_target_bits; | 373     int rolling_target_bits; | 
| 430     int rolling_actual_bits; | 374     int rolling_actual_bits; | 
| 431 | 375 | 
| 432     int long_rolling_target_bits; | 376     int long_rolling_target_bits; | 
| 433     int long_rolling_actual_bits; | 377     int long_rolling_actual_bits; | 
| 434 | 378 | 
| 435     long long total_actual_bits; | 379     int64_t total_actual_bits; | 
| 436     int total_target_vs_actual;        // debug stats | 380     int total_target_vs_actual;        // debug stats | 
| 437 | 381 | 
| 438     int worst_quality; | 382     int worst_quality; | 
| 439     int active_worst_quality; | 383     int active_worst_quality; | 
| 440     int best_quality; | 384     int best_quality; | 
| 441     int active_best_quality; | 385     int active_best_quality; | 
| 442 | 386 | 
| 443     int cq_target_quality; | 387     int cq_target_quality; | 
| 444     int maxq_max_limit; |  | 
| 445     int maxq_min_limit; |  | 
| 446 | 388 | 
| 447     int drop_frames_allowed;          // Are we permitted to drop frames? | 389     int drop_frames_allowed;          // Are we permitted to drop frames? | 
| 448     int drop_frame;                  // Drop this frame? | 390     int drop_frame;                  // Drop this frame? | 
| 449     int drop_count;                  // How many frames have we dropped? | 391     int drop_count;                  // How many frames have we dropped? | 
| 450     int max_drop_count;               // How many frames should we drop? | 392     int max_drop_count;               // How many frames should we drop? | 
| 451     int max_consec_dropped_frames;     // Limit number of consecutive frames tha
     t can be dropped. | 393     int max_consec_dropped_frames;     // Limit number of consecutive frames tha
     t can be dropped. | 
| 452 | 394 | 
| 453 | 395 | 
| 454     int ymode_count [VP8_YMODES];        /* intra MB type cts this frame */ | 396     int ymode_count [VP8_YMODES];        /* intra MB type cts this frame */ | 
| 455     int uv_mode_count[VP8_UV_MODES];       /* intra MB type cts this frame */ | 397     int uv_mode_count[VP8_UV_MODES];       /* intra MB type cts this frame */ | 
| 456 | 398 | 
| 457     unsigned int MVcount [2] [MVvals];  /* (row,col) MV cts this frame */ | 399     unsigned int MVcount [2] [MVvals];  /* (row,col) MV cts this frame */ | 
| 458 | 400 | 
| 459     unsigned int coef_counts [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [vp
     8_coef_tokens];  /* for this frame */ | 401     unsigned int coef_counts [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [MA
     X_ENTROPY_TOKENS];  /* for this frame */ | 
| 460     //DECLARE_ALIGNED(16, int, coef_counts_backup [BLOCK_TYPES] [COEF_BANDS] [PR
     EV_COEF_CONTEXTS] [vp8_coef_tokens]);   //not used any more | 402     //DECLARE_ALIGNED(16, int, coef_counts_backup [BLOCK_TYPES] [COEF_BANDS] [PR
     EV_COEF_CONTEXTS] [MAX_ENTROPY_TOKENS]);   //not used any more | 
| 461     //save vp8_tree_probs_from_distribution result for each frame to avoid repea
     t calculation | 403     //save vp8_tree_probs_from_distribution result for each frame to avoid repea
     t calculation | 
| 462     vp8_prob frame_coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [v
     p8_coef_tokens-1]; | 404     vp8_prob frame_coef_probs [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS] [E
     NTROPY_NODES]; | 
| 463     unsigned int frame_branch_ct [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS]
      [vp8_coef_tokens-1][2]; | 405     unsigned int frame_branch_ct [BLOCK_TYPES] [COEF_BANDS] [PREV_COEF_CONTEXTS]
      [ENTROPY_NODES][2]; | 
| 464 | 406 | 
| 465     /* Second compressed data partition contains coefficient data. */ |  | 
| 466 |  | 
| 467     unsigned char *output_partition2; |  | 
| 468     size_t output_partition2size; |  | 
| 469 |  | 
| 470     int frames_to_key; |  | 
| 471     int gfu_boost; | 407     int gfu_boost; | 
| 472     int kf_boost; | 408     int kf_boost; | 
| 473     int last_boost; | 409     int last_boost; | 
| 474     double total_error_left; |  | 
| 475     double total_intra_error_left; |  | 
| 476     double total_coded_error_left; |  | 
| 477     double start_tot_err_left; |  | 
| 478     double min_error; |  | 
| 479     double kf_intra_err_min; |  | 
| 480     double gf_intra_err_min; |  | 
| 481 |  | 
| 482     double modified_error_total; |  | 
| 483     double modified_error_used; |  | 
| 484     double modified_error_left; |  | 
| 485     double clip_bpe; |  | 
| 486     double observed_bpe; |  | 
| 487 |  | 
| 488     double avg_iiratio; |  | 
| 489 | 410 | 
| 490     int target_bandwidth; | 411     int target_bandwidth; | 
| 491     long long bits_left; |  | 
| 492     long long clip_bits_total; |  | 
| 493     FIRSTPASS_STATS *total_stats; |  | 
| 494     FIRSTPASS_STATS *this_frame_stats; |  | 
| 495     FIRSTPASS_STATS *stats_in, *stats_in_end; |  | 
| 496     struct vpx_codec_pkt_list  *output_pkt_list; | 412     struct vpx_codec_pkt_list  *output_pkt_list; | 
| 497     int                          first_pass_done; |  | 
| 498 | 413 | 
| 499 #if 0 | 414 #if 0 | 
| 500     // Experimental code for lagged and one pass | 415     // Experimental code for lagged and one pass | 
| 501     ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS]; | 416     ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS]; | 
| 502     int one_pass_frame_index; | 417     int one_pass_frame_index; | 
| 503 #endif | 418 #endif | 
| 504 | 419 | 
| 505     int decimation_factor; | 420     int decimation_factor; | 
| 506     int decimation_count; | 421     int decimation_count; | 
| 507 | 422 | 
| 508     // for real time encoding | 423     // for real time encoding | 
| 509     int avg_encode_time;              //microsecond | 424     int avg_encode_time;              //microsecond | 
| 510     int avg_pick_mode_time;            //microsecond | 425     int avg_pick_mode_time;            //microsecond | 
| 511     int Speed; | 426     int Speed; | 
| 512     unsigned int cpu_freq;           //Mhz | 427     unsigned int cpu_freq;           //Mhz | 
| 513     int compressor_speed; | 428     int compressor_speed; | 
| 514 | 429 | 
| 515     int interquantizer; | 430     int interquantizer; | 
| 516     int auto_gold; | 431     int auto_gold; | 
| 517     int auto_adjust_gold_quantizer; | 432     int auto_adjust_gold_quantizer; | 
| 518     int goldquantizer; |  | 
| 519     int goldfreq; | 433     int goldfreq; | 
| 520     int auto_adjust_key_quantizer; |  | 
| 521     int keyquantizer; |  | 
| 522     int auto_worst_q; | 434     int auto_worst_q; | 
| 523     int filter_type; |  | 
| 524     int cpu_used; | 435     int cpu_used; | 
| 525     int chroma_boost; |  | 
| 526     int horiz_scale; | 436     int horiz_scale; | 
| 527     int vert_scale; | 437     int vert_scale; | 
| 528     int pass; | 438     int pass; | 
| 529 | 439 | 
| 530 | 440 | 
| 531     int prob_intra_coded; | 441     int prob_intra_coded; | 
| 532     int prob_last_coded; | 442     int prob_last_coded; | 
| 533     int prob_gf_coded; | 443     int prob_gf_coded; | 
| 534     int prob_skip_false; | 444     int prob_skip_false; | 
| 535     int last_skip_false_probs[3]; | 445     int last_skip_false_probs[3]; | 
| 536     int last_skip_probs_q[3]; | 446     int last_skip_probs_q[3]; | 
| 537     int recent_ref_frame_usage[MAX_REF_FRAMES]; | 447     int recent_ref_frame_usage[MAX_REF_FRAMES]; | 
| 538 | 448 | 
| 539     int count_mb_ref_frame_usage[MAX_REF_FRAMES]; | 449     int count_mb_ref_frame_usage[MAX_REF_FRAMES]; | 
| 540     int this_frame_percent_intra; | 450     int this_frame_percent_intra; | 
| 541     int last_frame_percent_intra; | 451     int last_frame_percent_intra; | 
| 542 | 452 | 
| 543     int last_key_frame_q; |  | 
| 544     int last_kffilt_lvl; |  | 
| 545 |  | 
| 546     int ref_frame_flags; | 453     int ref_frame_flags; | 
| 547 | 454 | 
| 548     SPEED_FEATURES sf; | 455     SPEED_FEATURES sf; | 
| 549     int error_bins[1024]; | 456     int error_bins[1024]; | 
| 550 | 457 | 
| 551     int inter_lvl; |  | 
| 552     int intra_lvl; |  | 
| 553     int motion_lvl; |  | 
| 554     int motion_speed; |  | 
| 555     int motion_var; |  | 
| 556     unsigned int next_iiratio; |  | 
| 557     unsigned int this_iiratio; |  | 
| 558     int this_frame_modified_error; |  | 
| 559 |  | 
| 560     double norm_intra_err_per_mb; |  | 
| 561     double norm_inter_err_per_mb; |  | 
| 562     double norm_iidiff_per_mb; |  | 
| 563 |  | 
| 564     int last_best_mode_index;          // Record of mode index chosen for previo
     us macro block. |  | 
| 565     int last_auto_filt_val; |  | 
| 566     int last_auto_filt_q; |  | 
| 567 |  | 
| 568     // Data used for real time conferencing mode to help determine if it would b
     e good to update the gf | 458     // Data used for real time conferencing mode to help determine if it would b
     e good to update the gf | 
| 569     int inter_zz_count; | 459     int inter_zz_count; | 
| 570     int gf_bad_count; | 460     int gf_bad_count; | 
| 571     int gf_update_recommended; | 461     int gf_update_recommended; | 
| 572     int skip_true_count; | 462     int skip_true_count; | 
| 573     int skip_false_count; | 463     int skip_false_count; | 
| 574 | 464 | 
| 575     int alt_qcount; |  | 
| 576 |  | 
| 577     int ready_for_new_frame; |  | 
| 578 |  | 
| 579     unsigned char *segmentation_map; | 465     unsigned char *segmentation_map; | 
| 580     signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS];            //
      Segment data (can be deltas or absolute values) | 466     signed char segment_feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS];            //
      Segment data (can be deltas or absolute values) | 
| 581     int  segment_encode_breakout[MAX_MB_SEGMENTS];                    // segment
      threashold for encode breakout | 467     int  segment_encode_breakout[MAX_MB_SEGMENTS];                    // segment
      threashold for encode breakout | 
| 582 | 468 | 
| 583     unsigned char *active_map; | 469     unsigned char *active_map; | 
| 584     unsigned int active_map_enabled; | 470     unsigned int active_map_enabled; | 
| 585     // Video conferencing cyclic refresh mode flags etc | 471     // Video conferencing cyclic refresh mode flags etc | 
| 586     // This is a mode designed to clean up the background over time in live enco
     ding scenarious. It uses segmentation | 472     // This is a mode designed to clean up the background over time in live enco
     ding scenarious. It uses segmentation | 
| 587     int cyclic_refresh_mode_enabled; | 473     int cyclic_refresh_mode_enabled; | 
| 588     int cyclic_refresh_mode_max_mbs_perframe; | 474     int cyclic_refresh_mode_max_mbs_perframe; | 
| 589     int cyclic_refresh_mode_index; | 475     int cyclic_refresh_mode_index; | 
| 590     int cyclic_refresh_q; | 476     int cyclic_refresh_q; | 
| 591     signed char *cyclic_refresh_map; | 477     signed char *cyclic_refresh_map; | 
| 592 | 478 | 
| 593 #if CONFIG_MULTITHREAD | 479 #if CONFIG_MULTITHREAD | 
| 594     // multithread data | 480     // multithread data | 
| 595     int * mt_current_mb_col; | 481     int * mt_current_mb_col; | 
| 596     int mt_sync_range; | 482     int mt_sync_range; | 
| 597     int processor_core_count; |  | 
| 598     int b_multi_threaded; | 483     int b_multi_threaded; | 
| 599     int encoding_thread_count; | 484     int encoding_thread_count; | 
| 600 | 485 | 
| 601     pthread_t *h_encoding_thread; | 486     pthread_t *h_encoding_thread; | 
| 602     pthread_t h_filter_thread; | 487     pthread_t h_filter_thread; | 
| 603 | 488 | 
| 604     MB_ROW_COMP *mb_row_ei; | 489     MB_ROW_COMP *mb_row_ei; | 
| 605     ENCODETHREAD_DATA *en_thread_data; | 490     ENCODETHREAD_DATA *en_thread_data; | 
| 606     LPFTHREAD_DATA lpf_thread_data; | 491     LPFTHREAD_DATA lpf_thread_data; | 
| 607 | 492 | 
| 608     //events | 493     //events | 
| 609     sem_t *h_event_start_encoding; | 494     sem_t *h_event_start_encoding; | 
| 610     sem_t h_event_end_encoding; | 495     sem_t h_event_end_encoding; | 
| 611     sem_t h_event_start_lpf; | 496     sem_t h_event_start_lpf; | 
| 612     sem_t h_event_end_lpf; | 497     sem_t h_event_end_lpf; | 
| 613 #endif | 498 #endif | 
| 614 | 499 | 
| 615     TOKENLIST *tplist; | 500     TOKENLIST *tplist; | 
|  | 501     unsigned int partition_sz[MAX_PARTITIONS]; | 
| 616     // end of multithread data | 502     // end of multithread data | 
| 617 | 503 | 
| 618 | 504 | 
| 619     fractional_mv_step_fp *find_fractional_mv_step; | 505     fractional_mv_step_fp *find_fractional_mv_step; | 
| 620     vp8_full_search_fn_t full_search_sad; | 506     vp8_full_search_fn_t full_search_sad; | 
|  | 507     vp8_refining_search_fn_t refining_search_sad; | 
| 621     vp8_diamond_search_fn_t diamond_search_sad; | 508     vp8_diamond_search_fn_t diamond_search_sad; | 
| 622     vp8_variance_fn_ptr_t fn_ptr[BLOCK_MAX_SEGMENTS]; | 509     vp8_variance_fn_ptr_t fn_ptr[BLOCK_MAX_SEGMENTS]; | 
| 623     unsigned int time_receive_data; | 510     unsigned int time_receive_data; | 
| 624     unsigned int time_compress_data; | 511     unsigned int time_compress_data; | 
| 625     unsigned int time_pick_lpf; | 512     unsigned int time_pick_lpf; | 
| 626     unsigned int time_encode_mb_row; | 513     unsigned int time_encode_mb_row; | 
| 627 | 514 | 
| 628     unsigned int tempdata1; | 515     int base_skip_false_prob[128]; | 
| 629     unsigned int tempdata2; |  | 
| 630 | 516 | 
| 631     int base_skip_false_prob[128]; | 517     struct twopass_rc | 
| 632     unsigned int section_intra_rating; | 518     { | 
|  | 519         unsigned int section_intra_rating; | 
|  | 520         double section_max_qfactor; | 
|  | 521         unsigned int next_iiratio; | 
|  | 522         unsigned int this_iiratio; | 
|  | 523         FIRSTPASS_STATS *total_stats; | 
|  | 524         FIRSTPASS_STATS *this_frame_stats; | 
|  | 525         FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start; | 
|  | 526         int first_pass_done; | 
|  | 527         int64_t bits_left; | 
|  | 528         int64_t clip_bits_total; | 
|  | 529         double avg_iiratio; | 
|  | 530         double modified_error_total; | 
|  | 531         double modified_error_used; | 
|  | 532         double modified_error_left; | 
|  | 533         double total_error_left; | 
|  | 534         double total_intra_error_left; | 
|  | 535         double total_coded_error_left; | 
|  | 536         double start_tot_err_left; | 
|  | 537         double kf_intra_err_min; | 
|  | 538         double gf_intra_err_min; | 
|  | 539         int frames_to_key; | 
|  | 540         int maxq_max_limit; | 
|  | 541         int maxq_min_limit; | 
|  | 542         int gf_decay_rate; | 
|  | 543         int static_scene_max_gf_interval; | 
|  | 544         int kf_bits; | 
|  | 545         int gf_group_error_left;           // Remaining error from uncoded frame
     s in a gf group. Two pass use only | 
| 633 | 546 | 
| 634     double section_max_qfactor; | 547         // Projected total bits available for a key frame group of frames | 
|  | 548         int64_t kf_group_bits; | 
| 635 | 549 | 
|  | 550         // Error score of frames still to be coded in kf group | 
|  | 551         int64_t kf_group_error_left; | 
|  | 552 | 
|  | 553         int gf_group_bits;                // Projected Bits available for a grou
     p of frames including 1 GF or ARF | 
|  | 554         int gf_bits;                     // Bits for the golden frame or ARF - 2
      pass only | 
|  | 555         int mid_gf_extra_bits;             // A few extra bits for the frame hal
     f way between two gfs. | 
|  | 556         double est_max_qcorrection_factor; | 
|  | 557     } twopass; | 
| 636 | 558 | 
| 637 #if CONFIG_RUNTIME_CPU_DETECT | 559 #if CONFIG_RUNTIME_CPU_DETECT | 
| 638     VP8_ENCODER_RTCD            rtcd; | 560     VP8_ENCODER_RTCD            rtcd; | 
| 639 #endif | 561 #endif | 
| 640 #if VP8_TEMPORAL_ALT_REF | 562 #if VP8_TEMPORAL_ALT_REF | 
| 641     SOURCE_SAMPLE alt_ref_buffer; | 563     YV12_BUFFER_CONFIG alt_ref_buffer; | 
| 642     YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; | 564     YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; | 
| 643     int fixed_divide[512]; | 565     int fixed_divide[512]; | 
| 644 #endif | 566 #endif | 
| 645 | 567 | 
| 646 #if CONFIG_PSNR | 568 #if CONFIG_INTERNAL_STATS | 
| 647     int    count; | 569     int    count; | 
| 648     double total_y; | 570     double total_y; | 
| 649     double total_u; | 571     double total_u; | 
| 650     double total_v; | 572     double total_v; | 
| 651     double total ; | 573     double total ; | 
| 652     double total_sq_error; | 574     double total_sq_error; | 
| 653     double totalp_y; | 575     double totalp_y; | 
| 654     double totalp_u; | 576     double totalp_u; | 
| 655     double totalp_v; | 577     double totalp_v; | 
| 656     double totalp; | 578     double totalp; | 
| 657     double total_sq_error2; | 579     double total_sq_error2; | 
| 658     int    bytes; | 580     int    bytes; | 
| 659     double summed_quality; | 581     double summed_quality; | 
| 660     double summed_weights; | 582     double summed_weights; | 
| 661     unsigned int tot_recode_hits; | 583     unsigned int tot_recode_hits; | 
| 662 | 584 | 
| 663 | 585 | 
| 664     double total_ssimg_y; | 586     double total_ssimg_y; | 
| 665     double total_ssimg_u; | 587     double total_ssimg_u; | 
| 666     double total_ssimg_v; | 588     double total_ssimg_v; | 
| 667     double total_ssimg_all; | 589     double total_ssimg_all; | 
| 668 | 590 | 
| 669     int b_calculate_ssimg; | 591     int b_calculate_ssimg; | 
| 670 #endif | 592 #endif | 
| 671     int b_calculate_psnr; | 593     int b_calculate_psnr; | 
| 672 | 594 | 
|  | 595     // Per MB activity measurement | 
|  | 596     unsigned int activity_avg; | 
|  | 597     unsigned int * mb_activity_map; | 
|  | 598     int * mb_norm_activity_map; | 
| 673 | 599 | 
| 674     unsigned char *gf_active_flags;   // Record of which MBs still refer to last
      golden frame either directly or through 0,0 | 600     // Record of which MBs still refer to last golden frame either | 
|  | 601     // directly or through 0,0 | 
|  | 602     unsigned char *gf_active_flags; | 
| 675     int gf_active_count; | 603     int gf_active_count; | 
| 676 | 604 | 
|  | 605     int output_partition; | 
|  | 606 | 
| 677     //Store last frame's MV info for next frame MV prediction | 607     //Store last frame's MV info for next frame MV prediction | 
| 678     int_mv *lfmv; | 608     int_mv *lfmv; | 
| 679     int *lf_ref_frame_sign_bias; | 609     int *lf_ref_frame_sign_bias; | 
| 680     int *lf_ref_frame; | 610     int *lf_ref_frame; | 
| 681 | 611 | 
| 682 #if CONFIG_REALTIME_ONLY | 612 #if CONFIG_REALTIME_ONLY | 
| 683     int force_next_frame_intra; /* force next frame to intra when kf_auto says s
     o */ | 613     int force_next_frame_intra; /* force next frame to intra when kf_auto says s
     o */ | 
| 684 #endif | 614 #endif | 
|  | 615     int droppable; | 
| 685 } VP8_COMP; | 616 } VP8_COMP; | 
| 686 | 617 | 
| 687 void control_data_rate(VP8_COMP *cpi); | 618 void control_data_rate(VP8_COMP *cpi); | 
| 688 | 619 | 
| 689 void vp8_encode_frame(VP8_COMP *cpi); | 620 void vp8_encode_frame(VP8_COMP *cpi); | 
| 690 | 621 | 
| 691 void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned long *size)
     ; | 622 void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned long *size)
     ; | 
| 692 | 623 | 
| 693 unsigned int vp8_activity_masking(VP8_COMP *cpi, MACROBLOCK *x); | 624 void vp8_activity_masking(VP8_COMP *cpi, MACROBLOCK *x); | 
| 694 | 625 | 
| 695 int rd_cost_intra_mb(MACROBLOCKD *x); | 626 int rd_cost_intra_mb(MACROBLOCKD *x); | 
| 696 | 627 | 
| 697 void vp8_tokenize_mb(VP8_COMP *, MACROBLOCKD *, TOKENEXTRA **); | 628 void vp8_tokenize_mb(VP8_COMP *, MACROBLOCKD *, TOKENEXTRA **); | 
| 698 | 629 | 
| 699 void vp8_set_speed_features(VP8_COMP *cpi); | 630 void vp8_set_speed_features(VP8_COMP *cpi); | 
| 700 | 631 | 
| 701 #if CONFIG_DEBUG | 632 #if CONFIG_DEBUG | 
| 702 #define CHECK_MEM_ERROR(lval,expr) do {\ | 633 #define CHECK_MEM_ERROR(lval,expr) do {\ | 
| 703         lval = (expr); \ | 634         lval = (expr); \ | 
| 704         if(!lval) \ | 635         if(!lval) \ | 
| 705             vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ | 636             vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ | 
| 706                                "Failed to allocate "#lval" at %s:%d", \ | 637                                "Failed to allocate "#lval" at %s:%d", \ | 
| 707                                __FILE__,__LINE__);\ | 638                                __FILE__,__LINE__);\ | 
| 708     } while(0) | 639     } while(0) | 
| 709 #else | 640 #else | 
| 710 #define CHECK_MEM_ERROR(lval,expr) do {\ | 641 #define CHECK_MEM_ERROR(lval,expr) do {\ | 
| 711         lval = (expr); \ | 642         lval = (expr); \ | 
| 712         if(!lval) \ | 643         if(!lval) \ | 
| 713             vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ | 644             vpx_internal_error(&cpi->common.error, VPX_CODEC_MEM_ERROR,\ | 
| 714                                "Failed to allocate "#lval);\ | 645                                "Failed to allocate "#lval);\ | 
| 715     } while(0) | 646     } while(0) | 
| 716 #endif | 647 #endif | 
| 717 #endif | 648 #endif | 
| OLD | NEW | 
|---|