Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(371)

Unified Diff: source/libvpx/vp8/encoder/onyx_if.c

Issue 756673003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/libvpx/vp8/encoder/ethreading.c ('k') | source/libvpx/vp8/encoder/quantize.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/libvpx/vp8/encoder/onyx_if.c
===================================================================
--- source/libvpx/vp8/encoder/onyx_if.c (revision 293081)
+++ source/libvpx/vp8/encoder/onyx_if.c (working copy)
@@ -1083,12 +1083,10 @@
if (cpi->sf.improved_quant)
{
cpi->mb.quantize_b = vp8_regular_quantize_b;
- cpi->mb.quantize_b_pair = vp8_regular_quantize_b_pair;
}
else
{
cpi->mb.quantize_b = vp8_fast_quantize_b;
- cpi->mb.quantize_b_pair = vp8_fast_quantize_b_pair;
}
if (cpi->sf.improved_quant != last_improved_quant)
vp8cx_init_quantizer(cpi);
@@ -1363,15 +1361,20 @@
cm->version = oxcf->Version;
vp8_setup_version(cm);
- /* frame rate is not available on the first frame, as it's derived from
+ /* Frame rate is not available on the first frame, as it's derived from
* the observed timestamps. The actual value used here doesn't matter
- * too much, as it will adapt quickly. If the reciprocal of the timebase
- * seems like a reasonable framerate, then use that as a guess, otherwise
- * use 30.
+ * too much, as it will adapt quickly.
*/
- cpi->framerate = (double)(oxcf->timebase.den) /
- (double)(oxcf->timebase.num);
+ if (oxcf->timebase.num > 0) {
+ cpi->framerate = (double)(oxcf->timebase.den) /
+ (double)(oxcf->timebase.num);
+ } else {
+ cpi->framerate = 30;
+ }
+ /* If the reciprocal of the timebase seems like a reasonable framerate,
+ * then use that as a guess, otherwise use 30.
+ */
if (cpi->framerate > 180)
cpi->framerate = 30;
@@ -3305,12 +3308,12 @@
// Only select blocks for computing nmse that have been encoded
// as ZERO LAST min_consec_zero_last frames in a row.
// Scale with number of temporal layers.
- int min_consec_zero_last = 8 / cpi->oxcf.number_of_layers;
+ int min_consec_zero_last = 12 / cpi->oxcf.number_of_layers;
// Decision is tested for changing the denoising mode every
// num_mode_change times this function is called. Note that this
// function called every 8 frames, so (8 * num_mode_change) is number
// of frames where denoising mode change is tested for switch.
- int num_mode_change = 15;
+ int num_mode_change = 20;
// Framerate factor, to compensate for larger mse at lower framerates.
// Use ref_framerate, which is full source framerate for temporal layers.
// TODO(marpan): Adjust this factor.
@@ -3322,7 +3325,12 @@
static const unsigned char const_source[16] = {
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128};
-
+ int bandwidth = (int)(cpi->target_bandwidth);
+ // For temporal layers, use full bandwidth (top layer).
+ if (cpi->oxcf.number_of_layers > 1) {
+ LAYER_CONTEXT *lc = &cpi->layer_context[cpi->oxcf.number_of_layers - 1];
+ bandwidth = (int)(lc->target_bandwidth);
+ }
// Loop through the Y plane, every skip blocks along rows and columns,
// summing the normalized mean square error, only for blocks that have
// been encoded as ZEROMV LAST at least min_consec_zero_last least frames in
@@ -3334,11 +3342,6 @@
int index = block_index_row + (j >> 4);
if (cpi->consec_zero_last[index] >= min_consec_zero_last) {
unsigned int sse;
- const unsigned int mse = vp8_mse16x16(src + j,
- ystride,
- dst + j,
- ystride,
- &sse);
const unsigned int var = vp8_variance16x16(src + j,
ystride,
dst + j,
@@ -3347,14 +3350,15 @@
// Only consider this block as valid for noise measurement
// if the sum_diff average of the current and previous frame
// is small (to avoid effects from lighting change).
- if ((mse - var) < 256) {
+ if ((sse - var) < 256) {
+ unsigned int sse2;
const unsigned int act = vp8_variance16x16(src + j,
ystride,
const_source,
0,
- &sse);
+ &sse2);
if (act > 0)
- total += mse / act;
+ total += sse / act;
num_blocks++;
}
}
@@ -3370,6 +3374,7 @@
if (total > 0 &&
(num_blocks > (tot_num_blocks >> 4))) {
// Update the recursive mean square source_diff.
+ total = (total << 8) / num_blocks;
if (cpi->denoiser.nmse_source_diff_count == 0) {
// First sample in new interval.
cpi->denoiser.nmse_source_diff = total;
@@ -3376,10 +3381,10 @@
cpi->denoiser.qp_avg = cm->base_qindex;
} else {
// For subsequent samples, use average with weight ~1/4 for new sample.
- cpi->denoiser.nmse_source_diff = (int)((total >> 2) +
- 3 * (cpi->denoiser.nmse_source_diff >> 2));
- cpi->denoiser.qp_avg = (int)((cm->base_qindex >> 2) +
- 3 * (cpi->denoiser.qp_avg >> 2));
+ cpi->denoiser.nmse_source_diff = (int)((total +
+ 3 * cpi->denoiser.nmse_source_diff) >> 2);
+ cpi->denoiser.qp_avg = (int)((cm->base_qindex +
+ 3 * cpi->denoiser.qp_avg) >> 2);
}
cpi->denoiser.nmse_source_diff_count++;
}
@@ -3391,7 +3396,7 @@
(cpi->denoiser.nmse_source_diff >
cpi->denoiser.threshold_aggressive_mode) &&
(cpi->denoiser.qp_avg < cpi->denoiser.qp_threshold_up &&
- cpi->target_bandwidth > cpi->denoiser.bitrate_threshold)) {
+ bandwidth > cpi->denoiser.bitrate_threshold)) {
vp8_denoiser_set_parameters(&cpi->denoiser, kDenoiserOnYUVAggressive);
} else {
// Check for going down: from aggressive to normal mode.
@@ -3400,7 +3405,7 @@
cpi->denoiser.threshold_aggressive_mode)) ||
((cpi->denoiser.denoiser_mode == kDenoiserOnYUVAggressive) &&
(cpi->denoiser.qp_avg > cpi->denoiser.qp_threshold_down ||
- cpi->target_bandwidth < cpi->denoiser.bitrate_threshold))) {
+ bandwidth < cpi->denoiser.bitrate_threshold))) {
vp8_denoiser_set_parameters(&cpi->denoiser, kDenoiserOnYUV);
}
}
« no previous file with comments | « source/libvpx/vp8/encoder/ethreading.c ('k') | source/libvpx/vp8/encoder/quantize.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698