diff options
author | hkuang <hkuang@google.com> | 2013-07-25 11:11:39 -0700 |
---|---|---|
committer | hkuang <hkuang@google.com> | 2013-07-25 12:03:12 -0700 |
commit | 91037db265ecdd914a26e056cf69207b4f50924e (patch) | |
tree | c78c618cf6d0ffb187e2734d524bca19698b3c0d /libvpx/vp8 | |
parent | ba164dffc5a6795bce97fae02b51ccf3330e15e4 (diff) | |
download | android_external_libvpx-91037db265ecdd914a26e056cf69207b4f50924e.tar.gz android_external_libvpx-91037db265ecdd914a26e056cf69207b4f50924e.tar.bz2 android_external_libvpx-91037db265ecdd914a26e056cf69207b4f50924e.zip |
Roll latest libvpx into Android.
Make the VP9 decoding 2X faster than the old one.
Checkout is from master branch(hash:242157c756314827ad9244952c7253e8900b9626).
Change-Id: Ibe67b3ee19f82b87df2416826b63a67f7f79b63a
Diffstat (limited to 'libvpx/vp8')
-rw-r--r-- | libvpx/vp8/common/alloccommon.c | 1 | ||||
-rw-r--r-- | libvpx/vp8/common/onyxc_int.h | 7 | ||||
-rw-r--r-- | libvpx/vp8/common/postproc.c | 2 | ||||
-rw-r--r-- | libvpx/vp8/common/vp8_asm_com_offsets.c | 52 | ||||
-rw-r--r-- | libvpx/vp8/decoder/dboolhuff.c | 4 | ||||
-rw-r--r-- | libvpx/vp8/decoder/decodframe.c | 2 | ||||
-rw-r--r-- | libvpx/vp8/decoder/onyxd_if.c | 1 | ||||
-rw-r--r-- | libvpx/vp8/decoder/vp8_asm_dec_offsets.c | 26 | ||||
-rw-r--r-- | libvpx/vp8/encoder/bitstream.c | 2 | ||||
-rw-r--r-- | libvpx/vp8/encoder/firstpass.c | 16 | ||||
-rw-r--r-- | libvpx/vp8/encoder/onyx_if.c | 103 | ||||
-rw-r--r-- | libvpx/vp8/encoder/onyx_int.h | 10 | ||||
-rw-r--r-- | libvpx/vp8/encoder/ratectrl.c | 14 | ||||
-rw-r--r-- | libvpx/vp8/encoder/rdopt.c | 2 | ||||
-rw-r--r-- | libvpx/vp8/vp8_common.mk | 4 | ||||
-rw-r--r-- | libvpx/vp8/vp8_cx_iface.c | 7 | ||||
-rw-r--r-- | libvpx/vp8/vp8_dx_iface.c | 91 | ||||
-rw-r--r-- | libvpx/vp8/vp8dx.mk | 4 |
18 files changed, 88 insertions, 260 deletions
diff --git a/libvpx/vp8/common/alloccommon.c b/libvpx/vp8/common/alloccommon.c index 8af9e90..54afc13 100644 --- a/libvpx/vp8/common/alloccommon.c +++ b/libvpx/vp8/common/alloccommon.c @@ -173,7 +173,6 @@ void vp8_create_common(VP8_COMMON *oci) oci->use_bilinear_mc_filter = 0; oci->full_pixel = 0; oci->multi_token_partition = ONE_PARTITION; - oci->clr_type = REG_YUV; oci->clamp_type = RECON_CLAMP_REQUIRED; /* Initialize reference frame sign bias structure to defaults */ diff --git a/libvpx/vp8/common/onyxc_int.h b/libvpx/vp8/common/onyxc_int.h index 276dd72..e9bb7af 100644 --- a/libvpx/vp8/common/onyxc_int.h +++ b/libvpx/vp8/common/onyxc_int.h @@ -72,7 +72,6 @@ typedef struct VP8Common int horiz_scale; int vert_scale; - YUV_TYPE clr_type; CLAMP_TYPE clamp_type; YV12_BUFFER_CONFIG *frame_to_show; @@ -115,9 +114,6 @@ typedef struct VP8Common int uvdc_delta_q; int uvac_delta_q; - unsigned int frames_since_golden; - unsigned int frames_till_alt_ref_frame; - /* We allocate a MODE_INFO struct for each macroblock, together with an extra row on top and column on the left to simplify prediction. */ @@ -157,7 +153,6 @@ typedef struct VP8Common unsigned int current_video_frame; - int near_boffset[3]; int version; TOKEN_PARTITION multi_token_partition; @@ -165,8 +160,10 @@ typedef struct VP8Common #ifdef PACKET_TESTING VP8_HEADER oh; #endif +#if CONFIG_POSTPROC_VISUALIZER double bitrate; double framerate; +#endif #if CONFIG_MULTITHREAD int processor_core_count; diff --git a/libvpx/vp8/common/postproc.c b/libvpx/vp8/common/postproc.c index 0266f4c..dd998f1 100644 --- a/libvpx/vp8/common/postproc.c +++ b/libvpx/vp8/common/postproc.c @@ -923,7 +923,7 @@ int vp8_post_proc_frame(VP8_COMMON *oci, YV12_BUFFER_CONFIG *dest, vp8_ppflags_t if (flags & VP8D_DEBUG_TXT_RATE_INFO) { char message[512]; - sprintf(message, "Bitrate: %10.2f frame_rate: %10.2f ", oci->bitrate, oci->framerate); + sprintf(message, "Bitrate: %10.2f framerate: %10.2f ", oci->bitrate, oci->framerate); vp8_blit_text(message, oci->post_proc_buffer.y_buffer, oci->post_proc_buffer.y_stride); } diff --git a/libvpx/vp8/common/vp8_asm_com_offsets.c b/libvpx/vp8/common/vp8_asm_com_offsets.c deleted file mode 100644 index 7bab90f..0000000 --- a/libvpx/vp8/common/vp8_asm_com_offsets.c +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2011 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - - -#include "vpx_config.h" -#include "vpx/vpx_codec.h" -#include "vpx_ports/asm_offsets.h" -#include "vp8/common/blockd.h" - -#if CONFIG_POSTPROC -#include "postproc.h" -#endif /* CONFIG_POSTPROC */ - -BEGIN - -#if CONFIG_POSTPROC -/* mfqe.c / filter_by_weight */ -DEFINE(MFQE_PRECISION_VAL, MFQE_PRECISION); -#endif /* CONFIG_POSTPROC */ - -END - -/* add asserts for any offset that is not supported by assembly code */ -/* add asserts for any size that is not supported by assembly code */ - -#if HAVE_MEDIA -/* switch case in vp8_intra4x4_predict_armv6 is based on these enumerated values */ -ct_assert(B_DC_PRED, B_DC_PRED == 0); -ct_assert(B_TM_PRED, B_TM_PRED == 1); -ct_assert(B_VE_PRED, B_VE_PRED == 2); -ct_assert(B_HE_PRED, B_HE_PRED == 3); -ct_assert(B_LD_PRED, B_LD_PRED == 4); -ct_assert(B_RD_PRED, B_RD_PRED == 5); -ct_assert(B_VR_PRED, B_VR_PRED == 6); -ct_assert(B_VL_PRED, B_VL_PRED == 7); -ct_assert(B_HD_PRED, B_HD_PRED == 8); -ct_assert(B_HU_PRED, B_HU_PRED == 9); -#endif - -#if HAVE_SSE2 -#if CONFIG_POSTPROC -/* vp8_filter_by_weight16x16 and 8x8 */ -ct_assert(MFQE_PRECISION_VAL, MFQE_PRECISION == 4) -#endif /* CONFIG_POSTPROC */ -#endif /* HAVE_SSE2 */ diff --git a/libvpx/vp8/decoder/dboolhuff.c b/libvpx/vp8/decoder/dboolhuff.c index 546fb2d..0007d7a 100644 --- a/libvpx/vp8/decoder/dboolhuff.c +++ b/libvpx/vp8/decoder/dboolhuff.c @@ -47,8 +47,8 @@ void vp8dx_bool_decoder_fill(BOOL_DECODER *br) unsigned char decrypted[sizeof(VP8_BD_VALUE) + 1]; if (br->decrypt_cb) { - int n = bytes_left > sizeof(decrypted) ? sizeof(decrypted) : bytes_left; - br->decrypt_cb(br->decrypt_state, bufptr, decrypted, n); + size_t n = bytes_left > sizeof(decrypted) ? sizeof(decrypted) : bytes_left; + br->decrypt_cb(br->decrypt_state, bufptr, decrypted, (int)n); bufptr = decrypted; } diff --git a/libvpx/vp8/decoder/decodframe.c b/libvpx/vp8/decoder/decodframe.c index 44c35ef..51eeb02 100644 --- a/libvpx/vp8/decoder/decodframe.c +++ b/libvpx/vp8/decoder/decodframe.c @@ -1095,7 +1095,7 @@ int vp8_decode_frame(VP8D_COMP *pbi) vpx_internal_error(&pc->error, VPX_CODEC_MEM_ERROR, "Failed to allocate bool decoder 0"); if (pc->frame_type == KEY_FRAME) { - pc->clr_type = (YUV_TYPE)vp8_read_bit(bc); + (void)vp8_read_bit(bc); // colorspace pc->clamp_type = (CLAMP_TYPE)vp8_read_bit(bc); } diff --git a/libvpx/vp8/decoder/onyxd_if.c b/libvpx/vp8/decoder/onyxd_if.c index 2db3096..2d9e343 100644 --- a/libvpx/vp8/decoder/onyxd_if.c +++ b/libvpx/vp8/decoder/onyxd_if.c @@ -430,7 +430,6 @@ int vp8dx_get_raw_frame(VP8D_COMP *pbi, YV12_BUFFER_CONFIG *sd, int64_t *time_st *time_stamp = pbi->last_time_stamp; *time_end_stamp = 0; - sd->clrtype = pbi->common.clr_type; #if CONFIG_POSTPROC ret = vp8_post_proc_frame(&pbi->common, sd, flags); #else diff --git a/libvpx/vp8/decoder/vp8_asm_dec_offsets.c b/libvpx/vp8/decoder/vp8_asm_dec_offsets.c deleted file mode 100644 index 842a0d5..0000000 --- a/libvpx/vp8/decoder/vp8_asm_dec_offsets.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2011 The WebM project authors. All Rights Reserved. - * - * Use of this source code is governed by a BSD-style license - * that can be found in the LICENSE file in the root of the source - * tree. An additional intellectual property rights grant can be found - * in the file PATENTS. All contributing project authors may - * be found in the AUTHORS file in the root of the source tree. - */ - - -#include "vpx_ports/asm_offsets.h" -#include "onyxd_int.h" - -BEGIN - -DEFINE(bool_decoder_user_buffer_end, offsetof(BOOL_DECODER, user_buffer_end)); -DEFINE(bool_decoder_user_buffer, offsetof(BOOL_DECODER, user_buffer)); -DEFINE(bool_decoder_value, offsetof(BOOL_DECODER, value)); -DEFINE(bool_decoder_count, offsetof(BOOL_DECODER, count)); -DEFINE(bool_decoder_range, offsetof(BOOL_DECODER, range)); - -END - -/* add asserts for any offset that is not supported by assembly code */ -/* add asserts for any size that is not supported by assembly code */ diff --git a/libvpx/vp8/encoder/bitstream.c b/libvpx/vp8/encoder/bitstream.c index 4707ae5..5f0c1f7 100644 --- a/libvpx/vp8/encoder/bitstream.c +++ b/libvpx/vp8/encoder/bitstream.c @@ -1322,7 +1322,7 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned char * dest vp8_start_encode(bc, cx_data, cx_data_end); /* signal clr type */ - vp8_write_bit(bc, pc->clr_type); + vp8_write_bit(bc, 0); vp8_write_bit(bc, pc->clamp_type); } diff --git a/libvpx/vp8/encoder/firstpass.c b/libvpx/vp8/encoder/firstpass.c index 433726d..ded0c43 100644 --- a/libvpx/vp8/encoder/firstpass.c +++ b/libvpx/vp8/encoder/firstpass.c @@ -1325,7 +1325,7 @@ static int estimate_kf_group_q(VP8_COMP *cpi, double section_err, int section_ta return Q; } -extern void vp8_new_frame_rate(VP8_COMP *cpi, double framerate); +extern void vp8_new_framerate(VP8_COMP *cpi, double framerate); void vp8_init_second_pass(VP8_COMP *cpi) { @@ -1349,9 +1349,9 @@ void vp8_init_second_pass(VP8_COMP *cpi) * sum duration is not. Its calculated based on the actual durations of * all frames from the first pass. */ - vp8_new_frame_rate(cpi, 10000000.0 * cpi->twopass.total_stats.count / cpi->twopass.total_stats.duration); + vp8_new_framerate(cpi, 10000000.0 * cpi->twopass.total_stats.count / cpi->twopass.total_stats.duration); - cpi->output_frame_rate = cpi->frame_rate; + cpi->output_framerate = cpi->framerate; cpi->twopass.bits_left = (int64_t)(cpi->twopass.total_stats.duration * cpi->oxcf.target_bandwidth / 10000000.0) ; cpi->twopass.bits_left -= (int64_t)(cpi->twopass.total_stats.duration * two_pass_min_rate / 10000000.0); @@ -2398,7 +2398,7 @@ static void assign_std_frame_bits(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame) target_frame_size += cpi->min_frame_bandwidth; /* Every other frame gets a few extra bits */ - if ( (cpi->common.frames_since_golden & 0x01) && + if ( (cpi->frames_since_golden & 0x01) && (cpi->frames_till_gf_update_due > 0) ) { target_frame_size += cpi->twopass.alt_extra_bits; @@ -2529,7 +2529,7 @@ void vp8_second_pass(VP8_COMP *cpi) /* Set nominal per second bandwidth for this frame */ cpi->target_bandwidth = (int) - (cpi->per_frame_bandwidth * cpi->output_frame_rate); + (cpi->per_frame_bandwidth * cpi->output_framerate); if (cpi->target_bandwidth < 0) cpi->target_bandwidth = 0; @@ -3185,7 +3185,7 @@ static void find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame) /* Convert to a per second bitrate */ cpi->target_bandwidth = (int)(cpi->twopass.kf_bits * - cpi->output_frame_rate); + cpi->output_framerate); } /* Note the total error score of the kf group minus the key frame itself */ @@ -3224,7 +3224,7 @@ static void find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame) cpi->common.vert_scale = NORMAL; /* Calculate Average bits per frame. */ - av_bits_per_frame = cpi->oxcf.target_bandwidth / DOUBLE_DIVIDE_CHECK((double)cpi->frame_rate); + av_bits_per_frame = cpi->oxcf.target_bandwidth / DOUBLE_DIVIDE_CHECK((double)cpi->framerate); /* CBR... Use the clip average as the target for deciding resample */ if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) @@ -3299,7 +3299,7 @@ static void find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame) } else { - int64_t clip_bits = (int64_t)(cpi->twopass.total_stats.count * cpi->oxcf.target_bandwidth / DOUBLE_DIVIDE_CHECK((double)cpi->frame_rate)); + int64_t clip_bits = (int64_t)(cpi->twopass.total_stats.count * cpi->oxcf.target_bandwidth / DOUBLE_DIVIDE_CHECK((double)cpi->framerate)); int64_t over_spend = cpi->oxcf.starting_buffer_level - cpi->buffer_level; /* If triggered last time the threshold for triggering again is diff --git a/libvpx/vp8/encoder/onyx_if.c b/libvpx/vp8/encoder/onyx_if.c index 73f6583..7c07975 100644 --- a/libvpx/vp8/encoder/onyx_if.c +++ b/libvpx/vp8/encoder/onyx_if.c @@ -301,11 +301,11 @@ static int rescale(int val, int num, int denom) static void init_temporal_layer_context(VP8_COMP *cpi, VP8_CONFIG *oxcf, const int layer, - double prev_layer_frame_rate) + double prev_layer_framerate) { LAYER_CONTEXT *lc = &cpi->layer_context[layer]; - lc->frame_rate = cpi->output_frame_rate / cpi->oxcf.rate_decimator[layer]; + lc->framerate = cpi->output_framerate / cpi->oxcf.rate_decimator[layer]; lc->target_bandwidth = cpi->oxcf.target_bitrate[layer] * 1000; lc->starting_buffer_level_in_ms = oxcf->starting_buffer_level; @@ -335,7 +335,7 @@ static void init_temporal_layer_context(VP8_COMP *cpi, lc->avg_frame_size_for_layer = (int)((cpi->oxcf.target_bitrate[layer] - cpi->oxcf.target_bitrate[layer-1]) * 1000 / - (lc->frame_rate - prev_layer_frame_rate)); + (lc->framerate - prev_layer_framerate)); lc->active_worst_quality = cpi->oxcf.worst_allowed_q; lc->active_best_quality = cpi->oxcf.best_allowed_q; @@ -363,7 +363,7 @@ static void reset_temporal_layer_change(VP8_COMP *cpi, const int prev_num_layers) { int i; - double prev_layer_frame_rate = 0; + double prev_layer_framerate = 0; const int curr_num_layers = cpi->oxcf.number_of_layers; // If the previous state was 1 layer, get current layer context from cpi. // We need this to set the layer context for the new layers below. @@ -377,7 +377,7 @@ static void reset_temporal_layer_change(VP8_COMP *cpi, LAYER_CONTEXT *lc = &cpi->layer_context[i]; if (i >= prev_num_layers) { - init_temporal_layer_context(cpi, oxcf, i, prev_layer_frame_rate); + init_temporal_layer_context(cpi, oxcf, i, prev_layer_framerate); } // The initial buffer levels are set based on their starting levels. // We could set the buffer levels based on the previous state (normalized @@ -403,8 +403,8 @@ static void reset_temporal_layer_change(VP8_COMP *cpi, lc->bits_off_target = lc->buffer_level; restore_layer_context(cpi, 0); } - prev_layer_frame_rate = cpi->output_frame_rate / - cpi->oxcf.rate_decimator[i]; + prev_layer_framerate = cpi->output_framerate / + cpi->oxcf.rate_decimator[i]; } } @@ -1282,21 +1282,21 @@ int vp8_reverse_trans(int x) return 63; } -void vp8_new_frame_rate(VP8_COMP *cpi, double framerate) +void vp8_new_framerate(VP8_COMP *cpi, double framerate) { if(framerate < .1) framerate = 30; - cpi->frame_rate = framerate; - cpi->output_frame_rate = framerate; + cpi->framerate = framerate; + cpi->output_framerate = framerate; cpi->per_frame_bandwidth = (int)(cpi->oxcf.target_bandwidth / - cpi->output_frame_rate); + cpi->output_framerate); cpi->av_per_frame_bandwidth = cpi->per_frame_bandwidth; cpi->min_frame_bandwidth = (int)(cpi->av_per_frame_bandwidth * cpi->oxcf.two_pass_vbrmin_section / 100); /* Set Maximum gf/arf interval */ - cpi->max_gf_interval = ((int)(cpi->output_frame_rate / 2.0) + 2); + cpi->max_gf_interval = ((int)(cpi->output_framerate / 2.0) + 2); if(cpi->max_gf_interval < 12) cpi->max_gf_interval = 12; @@ -1337,13 +1337,13 @@ static void init_config(VP8_COMP *cpi, VP8_CONFIG *oxcf) * seems like a reasonable framerate, then use that as a guess, otherwise * use 30. */ - cpi->frame_rate = (double)(oxcf->timebase.den) / - (double)(oxcf->timebase.num); + cpi->framerate = (double)(oxcf->timebase.den) / + (double)(oxcf->timebase.num); - if (cpi->frame_rate > 180) - cpi->frame_rate = 30; + if (cpi->framerate > 180) + cpi->framerate = 30; - cpi->ref_frame_rate = cpi->frame_rate; + cpi->ref_framerate = cpi->framerate; /* change includes all joint functionality */ vp8_change_config(cpi, oxcf); @@ -1369,13 +1369,13 @@ static void init_config(VP8_COMP *cpi, VP8_CONFIG *oxcf) if (cpi->oxcf.number_of_layers > 1) { unsigned int i; - double prev_layer_frame_rate=0; + double prev_layer_framerate=0; for (i=0; i<cpi->oxcf.number_of_layers; i++) { - init_temporal_layer_context(cpi, oxcf, i, prev_layer_frame_rate); - prev_layer_frame_rate = cpi->output_frame_rate / - cpi->oxcf.rate_decimator[i]; + init_temporal_layer_context(cpi, oxcf, i, prev_layer_framerate); + prev_layer_framerate = cpi->output_framerate / + cpi->oxcf.rate_decimator[i]; } } @@ -1399,14 +1399,14 @@ static void update_layer_contexts (VP8_COMP *cpi) if (oxcf->number_of_layers > 1) { unsigned int i; - double prev_layer_frame_rate=0; + double prev_layer_framerate=0; for (i=0; i<oxcf->number_of_layers; i++) { LAYER_CONTEXT *lc = &cpi->layer_context[i]; - lc->frame_rate = - cpi->ref_frame_rate / oxcf->rate_decimator[i]; + lc->framerate = + cpi->ref_framerate / oxcf->rate_decimator[i]; lc->target_bandwidth = oxcf->target_bitrate[i] * 1000; lc->starting_buffer_level = rescale( @@ -1432,9 +1432,9 @@ static void update_layer_contexts (VP8_COMP *cpi) lc->avg_frame_size_for_layer = (int)((oxcf->target_bitrate[i] - oxcf->target_bitrate[i-1]) * 1000 / - (lc->frame_rate - prev_layer_frame_rate)); + (lc->framerate - prev_layer_framerate)); - prev_layer_frame_rate = lc->frame_rate; + prev_layer_framerate = lc->framerate; } } } @@ -1625,7 +1625,7 @@ void vp8_change_config(VP8_COMP *cpi, VP8_CONFIG *oxcf) cpi->oxcf.target_bandwidth, 1000); /* Set up frame rate and related parameters rate control values. */ - vp8_new_frame_rate(cpi, cpi->frame_rate); + vp8_new_framerate(cpi, cpi->framerate); /* Set absolute upper and lower quality limits */ cpi->worst_quality = cpi->oxcf.worst_allowed_q; @@ -1945,7 +1945,7 @@ struct VP8_COMP* vp8_create_compressor(VP8_CONFIG *oxcf) for (i = 0; i < KEY_FRAME_CONTEXT; i++) { - cpi->prior_key_frame_distance[i] = (int)cpi->output_frame_rate; + cpi->prior_key_frame_distance[i] = (int)cpi->output_framerate; } #ifdef OUTPUT_YUV_SRC @@ -2273,7 +2273,7 @@ void vp8_remove_compressor(VP8_COMP **ptr) { extern int count_mb_seg[4]; FILE *f = fopen("modes.stt", "a"); - double dr = (double)cpi->frame_rate * (double)bytes * (double)8 / (double)count / (double)1000 ; + double dr = (double)cpi->framerate * (double)bytes * (double)8 / (double)count / (double)1000 ; fprintf(f, "intra_mode in Intra Frames:\n"); fprintf(f, "Y: %8d, %8d, %8d, %8d, %8d\n", y_modes[0], y_modes[1], y_modes[2], y_modes[3], y_modes[4]); fprintf(f, "UV:%8d, %8d, %8d, %8d\n", uv_modes[0], uv_modes[1], uv_modes[2], uv_modes[3]); @@ -2750,7 +2750,7 @@ static void update_alt_ref_frame_stats(VP8_COMP *cpi) cpi->gf_active_count = cm->mb_rows * cm->mb_cols; /* this frame refreshes means next frames don't unless specified by user */ - cpi->common.frames_since_golden = 0; + cpi->frames_since_golden = 0; /* Clear the alternate reference update pending flag. */ cpi->source_alt_ref_pending = 0; @@ -2802,7 +2802,7 @@ static void update_golden_frame_stats(VP8_COMP *cpi) * user */ cm->refresh_golden_frame = 0; - cpi->common.frames_since_golden = 0; + cpi->frames_since_golden = 0; cpi->recent_ref_frame_usage[INTRA_FRAME] = 1; cpi->recent_ref_frame_usage[LAST_FRAME] = 1; @@ -2834,12 +2834,12 @@ static void update_golden_frame_stats(VP8_COMP *cpi) if (cpi->frames_till_gf_update_due > 0) cpi->frames_till_gf_update_due--; - if (cpi->common.frames_till_alt_ref_frame) - cpi->common.frames_till_alt_ref_frame --; + if (cpi->frames_till_alt_ref_frame) + cpi->frames_till_alt_ref_frame --; - cpi->common.frames_since_golden ++; + cpi->frames_since_golden ++; - if (cpi->common.frames_since_golden > 1) + if (cpi->frames_since_golden > 1) { cpi->recent_ref_frame_usage[INTRA_FRAME] += cpi->mb.count_mb_ref_frame_usage[INTRA_FRAME]; @@ -2890,11 +2890,11 @@ static void update_rd_ref_frame_probs(VP8_COMP *cpi) cpi->prob_last_coded = 200; cpi->prob_gf_coded = 1; } - else if (cpi->common.frames_since_golden == 0) + else if (cpi->frames_since_golden == 0) { cpi->prob_last_coded = 214; } - else if (cpi->common.frames_since_golden == 1) + else if (cpi->frames_since_golden == 1) { cpi->prob_last_coded = 192; cpi->prob_gf_coded = 220; @@ -3368,12 +3368,12 @@ static void encode_frame_to_data_rate cpi->per_frame_bandwidth = cpi->twopass.gf_bits; /* per second target bitrate */ cpi->target_bandwidth = (int)(cpi->twopass.gf_bits * - cpi->output_frame_rate); + cpi->output_framerate); } } else #endif - cpi->per_frame_bandwidth = (int)(cpi->target_bandwidth / cpi->output_frame_rate); + cpi->per_frame_bandwidth = (int)(cpi->target_bandwidth / cpi->output_framerate); /* Default turn off buffer to buffer copying */ cm->copy_buffer_to_gf = 0; @@ -4557,7 +4557,7 @@ static void encode_frame_to_data_rate { LAYER_CONTEXT *lc = &cpi->layer_context[i]; int bits_off_for_this_layer = - (int)(lc->target_bandwidth / lc->frame_rate - + (int)(lc->target_bandwidth / lc->framerate - cpi->projected_frame_size); lc->bits_off_target += bits_off_for_this_layer; @@ -4805,7 +4805,7 @@ static void Pass2Encode(VP8_COMP *cpi, unsigned long *size, unsigned char *dest, { double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth *cpi->oxcf.two_pass_vbrmin_section / 100); - cpi->twopass.bits_left += (int64_t)(two_pass_min_rate / cpi->frame_rate); + cpi->twopass.bits_left += (int64_t)(two_pass_min_rate / cpi->framerate); } } #endif @@ -4821,8 +4821,10 @@ int vp8_receive_raw_frame(VP8_COMP *cpi, unsigned int frame_flags, YV12_BUFFER_C { #if HAVE_NEON int64_t store_reg[8]; -#endif +#if CONFIG_RUNTIME_CPU_DETECT VP8_COMMON *cm = &cpi->common; +#endif +#endif struct vpx_usec_timer timer; int res = 0; @@ -4848,7 +4850,6 @@ int vp8_receive_raw_frame(VP8_COMP *cpi, unsigned int frame_flags, YV12_BUFFER_C if(vp8_lookahead_push(cpi->lookahead, sd, time_stamp, end_time, frame_flags, cpi->active_map_enabled ? cpi->active_map : NULL)) res = -1; - cm->clr_type = sd->clrtype; vpx_usec_timer_mark(&timer); cpi->time_receive_data += vpx_usec_timer_elapsed(&timer); @@ -4933,7 +4934,7 @@ int vp8_get_compressed_data(VP8_COMP *cpi, unsigned int *frame_flags, unsigned l cpi->frames_till_gf_update_due); force_src_buffer = &cpi->alt_ref_buffer; } - cm->frames_till_alt_ref_frame = cpi->frames_till_gf_update_due; + cpi->frames_till_alt_ref_frame = cpi->frames_till_gf_update_due; cm->refresh_alt_ref_frame = 1; cm->refresh_golden_frame = 0; cm->refresh_last_frame = 0; @@ -5038,7 +5039,7 @@ int vp8_get_compressed_data(VP8_COMP *cpi, unsigned int *frame_flags, unsigned l if (this_duration) { if (step) - cpi->ref_frame_rate = 10000000.0 / this_duration; + cpi->ref_framerate = 10000000.0 / this_duration; else { double avg_duration, interval; @@ -5052,11 +5053,11 @@ int vp8_get_compressed_data(VP8_COMP *cpi, unsigned int *frame_flags, unsigned l if(interval > 10000000.0) interval = 10000000; - avg_duration = 10000000.0 / cpi->ref_frame_rate; + avg_duration = 10000000.0 / cpi->ref_framerate; avg_duration *= (interval - avg_duration + this_duration); avg_duration /= interval; - cpi->ref_frame_rate = 10000000.0 / avg_duration; + cpi->ref_framerate = 10000000.0 / avg_duration; } if (cpi->oxcf.number_of_layers > 1) @@ -5067,12 +5068,12 @@ int vp8_get_compressed_data(VP8_COMP *cpi, unsigned int *frame_flags, unsigned l for (i=0; i<cpi->oxcf.number_of_layers; i++) { LAYER_CONTEXT *lc = &cpi->layer_context[i]; - lc->frame_rate = cpi->ref_frame_rate / - cpi->oxcf.rate_decimator[i]; + lc->framerate = cpi->ref_framerate / + cpi->oxcf.rate_decimator[i]; } } else - vp8_new_frame_rate(cpi, cpi->ref_frame_rate); + vp8_new_framerate(cpi, cpi->ref_framerate); } cpi->last_time_stamp_seen = cpi->source->ts_start; @@ -5089,7 +5090,7 @@ int vp8_get_compressed_data(VP8_COMP *cpi, unsigned int *frame_flags, unsigned l layer = cpi->oxcf.layer_id[ cpi->temporal_pattern_counter % cpi->oxcf.periodicity]; restore_layer_context (cpi, layer); - vp8_new_frame_rate (cpi, cpi->layer_context[layer].frame_rate); + vp8_new_framerate(cpi, cpi->layer_context[layer].framerate); } if (cpi->compressor_speed == 2) diff --git a/libvpx/vp8/encoder/onyx_int.h b/libvpx/vp8/encoder/onyx_int.h index 5120fcc..3ab0fe8 100644 --- a/libvpx/vp8/encoder/onyx_int.h +++ b/libvpx/vp8/encoder/onyx_int.h @@ -232,7 +232,7 @@ enum typedef struct { /* Layer configuration */ - double frame_rate; + double framerate; int target_bandwidth; /* Layer specific coding parameters */ @@ -320,6 +320,7 @@ typedef struct VP8_COMP YV12_BUFFER_CONFIG scaled_source; YV12_BUFFER_CONFIG *last_frame_unscaled_source; + unsigned int frames_till_alt_ref_frame; /* frame in src_buffers has been identified to be encoded as an alt ref */ int source_alt_ref_pending; /* an alt ref frame has been encoded and is usable */ @@ -369,6 +370,7 @@ typedef struct VP8_COMP double key_frame_rate_correction_factor; double gf_rate_correction_factor; + unsigned int frames_since_golden; /* Count down till next GF */ int frames_till_gf_update_due; @@ -401,7 +403,7 @@ typedef struct VP8_COMP /* Minimum allocation that should be used for any frame */ int min_frame_bandwidth; int inter_frame_target; - double output_frame_rate; + double output_framerate; int64_t last_time_stamp_seen; int64_t last_end_time_stamp_seen; int64_t first_time_stamp_ever; @@ -415,8 +417,8 @@ typedef struct VP8_COMP int buffered_mode; - double frame_rate; - double ref_frame_rate; + double framerate; + double ref_framerate; int64_t buffer_level; int64_t bits_off_target; diff --git a/libvpx/vp8/encoder/ratectrl.c b/libvpx/vp8/encoder/ratectrl.c index 8e3c01d..1e8259c 100644 --- a/libvpx/vp8/encoder/ratectrl.c +++ b/libvpx/vp8/encoder/ratectrl.c @@ -234,7 +234,7 @@ void vp8_save_coding_context(VP8_COMP *cpi) cc->frames_since_key = cpi->frames_since_key; cc->filter_level = cpi->common.filter_level; cc->frames_till_gf_update_due = cpi->frames_till_gf_update_due; - cc->frames_since_golden = cpi->common.frames_since_golden; + cc->frames_since_golden = cpi->frames_since_golden; vp8_copy(cc->mvc, cpi->common.fc.mvc); vp8_copy(cc->mvcosts, cpi->rd_costs.mvcosts); @@ -271,7 +271,7 @@ void vp8_restore_coding_context(VP8_COMP *cpi) cpi->frames_since_key = cc->frames_since_key; cpi->common.filter_level = cc->filter_level; cpi->frames_till_gf_update_due = cc->frames_till_gf_update_due; - cpi->common.frames_since_golden = cc->frames_since_golden; + cpi->frames_since_golden = cc->frames_since_golden; vp8_copy(cpi->common.fc.mvc, cc->mvc); @@ -388,7 +388,7 @@ static void calc_iframe_target_size(VP8_COMP *cpi) int initial_boost = 32; /* |3.0 * per_frame_bandwidth| */ /* Boost depends somewhat on frame rate: only used for 1 layer case. */ if (cpi->oxcf.number_of_layers == 1) { - kf_boost = MAX(initial_boost, (int)(2 * cpi->output_frame_rate - 16)); + kf_boost = MAX(initial_boost, (int)(2 * cpi->output_framerate - 16)); } else { /* Initial factor: set target size to: |3.0 * per_frame_bandwidth|. */ @@ -399,9 +399,9 @@ static void calc_iframe_target_size(VP8_COMP *cpi) kf_boost = kf_boost * kf_boost_qadjustment[Q] / 100; /* frame separation adjustment ( down) */ - if (cpi->frames_since_key < cpi->output_frame_rate / 2) + if (cpi->frames_since_key < cpi->output_framerate / 2) kf_boost = (int)(kf_boost - * cpi->frames_since_key / (cpi->output_frame_rate / 2)); + * cpi->frames_since_key / (cpi->output_framerate / 2)); /* Minimal target size is |2* per_frame_bandwidth|. */ if (kf_boost < 16) @@ -715,7 +715,7 @@ static void calc_pframe_target_size(VP8_COMP *cpi) if (Adjustment > (cpi->this_frame_target - min_frame_target)) Adjustment = (cpi->this_frame_target - min_frame_target); - if (cpi->common.frames_since_golden == (cpi->current_gf_interval >> 1)) + if (cpi->frames_since_golden == (cpi->current_gf_interval >> 1)) cpi->this_frame_target += ((cpi->current_gf_interval - 1) * Adjustment); else cpi->this_frame_target -= Adjustment; @@ -1360,7 +1360,7 @@ static int estimate_keyframe_frequency(VP8_COMP *cpi) * whichever is smaller. */ int key_freq = cpi->oxcf.key_freq>0 ? cpi->oxcf.key_freq : 1; - av_key_frame_frequency = 1 + (int)cpi->output_frame_rate * 2; + av_key_frame_frequency = 1 + (int)cpi->output_framerate * 2; if (cpi->oxcf.auto_key && av_key_frame_frequency > key_freq) av_key_frame_frequency = key_freq; diff --git a/libvpx/vp8/encoder/rdopt.c b/libvpx/vp8/encoder/rdopt.c index 8579614..521e84f 100644 --- a/libvpx/vp8/encoder/rdopt.c +++ b/libvpx/vp8/encoder/rdopt.c @@ -341,7 +341,7 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, MACROBLOCK *x, int Qvalue) void vp8_auto_select_speed(VP8_COMP *cpi) { - int milliseconds_for_compress = (int)(1000000 / cpi->frame_rate); + int milliseconds_for_compress = (int)(1000000 / cpi->framerate); milliseconds_for_compress = milliseconds_for_compress * (16 - cpi->oxcf.cpu_used) / 16; diff --git a/libvpx/vp8/vp8_common.mk b/libvpx/vp8/vp8_common.mk index cde2651..f98eb31 100644 --- a/libvpx/vp8/vp8_common.mk +++ b/libvpx/vp8/vp8_common.mk @@ -66,7 +66,6 @@ VP8_COMMON_SRCS-yes += common/setupintrarecon.c VP8_COMMON_SRCS-yes += common/swapyv12buffer.c VP8_COMMON_SRCS-yes += common/variance_c.c VP8_COMMON_SRCS-yes += common/variance.h -VP8_COMMON_SRCS-yes += common/vp8_asm_com_offsets.c VP8_COMMON_SRCS-yes += common/vp8_entropymodedata.h @@ -192,7 +191,4 @@ VP8_COMMON_SRCS-$(HAVE_NEON) += common/arm/neon/vp8_subpixelvariance8x8_neon$(A VP8_COMMON_SRCS-$(HAVE_NEON) += common/arm/neon/vp8_subpixelvariance16x16_neon$(ASM) VP8_COMMON_SRCS-$(HAVE_NEON) += common/arm/neon/vp8_subpixelvariance16x16s_neon$(ASM) -$(eval $(call asm_offsets_template,\ - vp8_asm_com_offsets.asm, $(VP8_PREFIX)common/vp8_asm_com_offsets.c)) - $(eval $(call rtcd_h_template,vp8_rtcd,vp8/common/rtcd_defs.sh)) diff --git a/libvpx/vp8/vp8_cx_iface.c b/libvpx/vp8/vp8_cx_iface.c index 4531d5a..9a7b9c5 100644 --- a/libvpx/vp8/vp8_cx_iface.c +++ b/libvpx/vp8/vp8_cx_iface.c @@ -695,7 +695,6 @@ static vpx_codec_err_t image2yuvconfig(const vpx_image_t *img, yv12->uv_stride = img->stride[VPX_PLANE_U]; yv12->border = (img->stride[VPX_PLANE_Y] - img->w) / 2; - yv12->clrtype = (img->fmt == VPX_IMG_FMT_VPXI420 || img->fmt == VPX_IMG_FMT_VPXYV12); return res; } @@ -1079,11 +1078,7 @@ static vpx_image_t *vp8e_get_preview(vpx_codec_alg_priv_t *ctx) ctx->preview_img.planes[VPX_PLANE_U] = sd.u_buffer; ctx->preview_img.planes[VPX_PLANE_V] = sd.v_buffer; - if (sd.clrtype == REG_YUV) - ctx->preview_img.fmt = VPX_IMG_FMT_I420; - else - ctx->preview_img.fmt = VPX_IMG_FMT_VPXI420; - + ctx->preview_img.fmt = VPX_IMG_FMT_I420; ctx->preview_img.x_chroma_shift = 1; ctx->preview_img.y_chroma_shift = 1; diff --git a/libvpx/vp8/vp8_dx_iface.c b/libvpx/vp8/vp8_dx_iface.c index c826f69..871b8d3 100644 --- a/libvpx/vp8/vp8_dx_iface.c +++ b/libvpx/vp8/vp8_dx_iface.c @@ -41,15 +41,6 @@ typedef enum static unsigned long vp8_priv_sz(const vpx_codec_dec_cfg_t *si, vpx_codec_flags_t); -typedef struct -{ - unsigned int id; - unsigned long sz; - unsigned int align; - unsigned int flags; - unsigned long(*calc_sz)(const vpx_codec_dec_cfg_t *, vpx_codec_flags_t); -} mem_req_t; - static const mem_req_t vp8_mem_req_segs[] = { {VP8_SEG_ALG_PRIV, 0, 8, VPX_CODEC_MEM_ZERO, vp8_priv_sz}, @@ -93,65 +84,6 @@ static unsigned long vp8_priv_sz(const vpx_codec_dec_cfg_t *si, vpx_codec_flags_ return sizeof(vpx_codec_alg_priv_t); } - -static void vp8_mmap_dtor(vpx_codec_mmap_t *mmap) -{ - free(mmap->priv); -} - -static vpx_codec_err_t vp8_mmap_alloc(vpx_codec_mmap_t *mmap) -{ - vpx_codec_err_t res; - unsigned int align; - - align = mmap->align ? mmap->align - 1 : 0; - - if (mmap->flags & VPX_CODEC_MEM_ZERO) - mmap->priv = calloc(1, mmap->sz + align); - else - mmap->priv = malloc(mmap->sz + align); - - res = (mmap->priv) ? VPX_CODEC_OK : VPX_CODEC_MEM_ERROR; - mmap->base = (void *)((((uintptr_t)mmap->priv) + align) & ~(uintptr_t)align); - mmap->dtor = vp8_mmap_dtor; - return res; -} - -static vpx_codec_err_t vp8_validate_mmaps(const vp8_stream_info_t *si, - const vpx_codec_mmap_t *mmaps, - vpx_codec_flags_t init_flags) -{ - int i; - vpx_codec_err_t res = VPX_CODEC_OK; - - for (i = 0; i < NELEMENTS(vp8_mem_req_segs) - 1; i++) - { - /* Ensure the segment has been allocated */ - if (!mmaps[i].base) - { - res = VPX_CODEC_MEM_ERROR; - break; - } - - /* Verify variable size segment is big enough for the current si. */ - if (vp8_mem_req_segs[i].calc_sz) - { - vpx_codec_dec_cfg_t cfg; - - cfg.w = si->w; - cfg.h = si->h; - - if (mmaps[i].sz < vp8_mem_req_segs[i].calc_sz(&cfg, init_flags)) - { - res = VPX_CODEC_MEM_ERROR; - break; - } - } - } - - return res; -} - static void vp8_init_ctx(vpx_codec_ctx_t *ctx, const vpx_codec_mmap_t *mmap) { int i; @@ -178,16 +110,6 @@ static void vp8_init_ctx(vpx_codec_ctx_t *ctx, const vpx_codec_mmap_t *mmap) } } -static void *mmap_lkup(vpx_codec_alg_priv_t *ctx, unsigned int id) -{ - int i; - - for (i = 0; i < NELEMENTS(ctx->mmaps); i++) - if (ctx->mmaps[i].id == id) - return ctx->mmaps[i].base; - - return NULL; -} static void vp8_finalize_mmaps(vpx_codec_alg_priv_t *ctx) { /* nothing to clean up */ @@ -214,7 +136,7 @@ static vpx_codec_err_t vp8_init(vpx_codec_ctx_t *ctx, mmap.align = vp8_mem_req_segs[0].align; mmap.flags = vp8_mem_req_segs[0].flags; - res = vp8_mmap_alloc(&mmap); + res = vpx_mmap_alloc(&mmap); if (res != VPX_CODEC_OK) return res; vp8_init_ctx(ctx, &mmap); @@ -366,8 +288,7 @@ static void yuvconfig2image(vpx_image_t *img, * the Y, U, and V planes, nor other alignment adjustments that * might be representable by a YV12_BUFFER_CONFIG, so we just * initialize all the fields.*/ - img->fmt = yv12->clrtype == REG_YUV ? - VPX_IMG_FMT_I420 : VPX_IMG_FMT_VPXI420; + img->fmt = VPX_IMG_FMT_I420; img->w = yv12->y_stride; img->h = (yv12->y_height + 2 * VP8BORDERINPIXELS + 15) & ~15; img->d_w = yv12->y_width; @@ -488,7 +409,7 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx, ctx->mmaps[i].sz = vp8_mem_req_segs[i].calc_sz(&cfg, ctx->base.init_flags); - res = vp8_mmap_alloc(&ctx->mmaps[i]); + res = vpx_mmap_alloc(&ctx->mmaps[i]); } if (!res) @@ -500,7 +421,9 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx, /* Initialize the decoder instance on the first frame*/ if (!res && !ctx->decoder_init) { - res = vp8_validate_mmaps(&ctx->si, ctx->mmaps, ctx->base.init_flags); + res = vpx_validate_mmaps(&ctx->si, ctx->mmaps, + vp8_mem_req_segs, NELEMENTS(vp8_mem_req_segs), + ctx->base.init_flags); if (!res) { @@ -797,8 +720,6 @@ static vpx_codec_err_t image2yuvconfig(const vpx_image_t *img, yv12->uv_stride = img->stride[VPX_PLANE_U]; yv12->border = (img->stride[VPX_PLANE_Y] - img->d_w) / 2; - yv12->clrtype = (img->fmt == VPX_IMG_FMT_VPXI420 || img->fmt == VPX_IMG_FMT_VPXYV12); - return res; } diff --git a/libvpx/vp8/vp8dx.mk b/libvpx/vp8/vp8dx.mk index c26f42d..4a8f467 100644 --- a/libvpx/vp8/vp8dx.mk +++ b/libvpx/vp8/vp8dx.mk @@ -35,9 +35,5 @@ VP8_DX_SRCS-yes += decoder/onyxd_int.h VP8_DX_SRCS-yes += decoder/treereader.h VP8_DX_SRCS-yes += decoder/onyxd_if.c VP8_DX_SRCS-$(CONFIG_MULTITHREAD) += decoder/threading.c -VP8_DX_SRCS-yes += decoder/vp8_asm_dec_offsets.c VP8_DX_SRCS-yes := $(filter-out $(VP8_DX_SRCS_REMOVE-yes),$(VP8_DX_SRCS-yes)) - -$(eval $(call asm_offsets_template,\ - vp8_asm_dec_offsets.asm, $(VP8_PREFIX)decoder/vp8_asm_dec_offsets.c)) |