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

Side by Side Diff: source/libvpx/vp9/encoder/vp9_encoder.c

Issue 1302353004: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: Created 5 years, 3 months 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 unified diff | Download patch
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_encoder.h ('k') | source/libvpx/vp9/encoder/vp9_ethread.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
11 #include <math.h> 11 #include <math.h>
12 #include <stdio.h> 12 #include <stdio.h>
13 #include <limits.h> 13 #include <limits.h>
14 14
15 #include "./vp9_rtcd.h" 15 #include "./vp9_rtcd.h"
16 #include "./vpx_config.h" 16 #include "./vpx_config.h"
17 #include "./vpx_dsp_rtcd.h" 17 #include "./vpx_dsp_rtcd.h"
18 #include "./vpx_scale_rtcd.h" 18 #include "./vpx_scale_rtcd.h"
19 #include "vpx/internal/vpx_psnr.h" 19 #include "vpx/internal/vpx_psnr.h"
20 #include "vpx_dsp/vpx_filter.h" 20 #include "vpx_dsp/vpx_filter.h"
21 #if CONFIG_INTERNAL_STATS
22 #include "vpx_dsp/ssim.h"
23 #endif
21 #include "vpx_ports/mem.h" 24 #include "vpx_ports/mem.h"
25 #include "vpx_ports/system_state.h"
22 #include "vpx_ports/vpx_timer.h" 26 #include "vpx_ports/vpx_timer.h"
23 #include "vpx_scale/vpx_scale.h"
24 27
25 #include "vp9/common/vp9_alloccommon.h" 28 #include "vp9/common/vp9_alloccommon.h"
26 #include "vp9/common/vp9_filter.h" 29 #include "vp9/common/vp9_filter.h"
27 #include "vp9/common/vp9_idct.h" 30 #include "vp9/common/vp9_idct.h"
28 #if CONFIG_VP9_POSTPROC 31 #if CONFIG_VP9_POSTPROC
29 #include "vp9/common/vp9_postproc.h" 32 #include "vp9/common/vp9_postproc.h"
30 #endif 33 #endif
31 #include "vp9/common/vp9_reconinter.h" 34 #include "vp9/common/vp9_reconinter.h"
32 #include "vp9/common/vp9_reconintra.h" 35 #include "vp9/common/vp9_reconintra.h"
33 #include "vp9/common/vp9_systemdependent.h"
34 #include "vp9/common/vp9_tile_common.h" 36 #include "vp9/common/vp9_tile_common.h"
35 37
36 #include "vp9/encoder/vp9_aq_complexity.h" 38 #include "vp9/encoder/vp9_aq_complexity.h"
37 #include "vp9/encoder/vp9_aq_cyclicrefresh.h" 39 #include "vp9/encoder/vp9_aq_cyclicrefresh.h"
38 #include "vp9/encoder/vp9_aq_variance.h" 40 #include "vp9/encoder/vp9_aq_variance.h"
39 #include "vp9/encoder/vp9_bitstream.h" 41 #include "vp9/encoder/vp9_bitstream.h"
40 #include "vp9/encoder/vp9_context_tree.h" 42 #include "vp9/encoder/vp9_context_tree.h"
41 #include "vp9/encoder/vp9_encodeframe.h" 43 #include "vp9/encoder/vp9_encodeframe.h"
42 #include "vp9/encoder/vp9_encodemv.h" 44 #include "vp9/encoder/vp9_encodemv.h"
43 #include "vp9/encoder/vp9_encoder.h" 45 #include "vp9/encoder/vp9_encoder.h"
44 #include "vp9/encoder/vp9_ethread.h" 46 #include "vp9/encoder/vp9_ethread.h"
45 #include "vp9/encoder/vp9_firstpass.h" 47 #include "vp9/encoder/vp9_firstpass.h"
46 #include "vp9/encoder/vp9_mbgraph.h" 48 #include "vp9/encoder/vp9_mbgraph.h"
47 #include "vp9/encoder/vp9_picklpf.h" 49 #include "vp9/encoder/vp9_picklpf.h"
48 #include "vp9/encoder/vp9_ratectrl.h" 50 #include "vp9/encoder/vp9_ratectrl.h"
49 #include "vp9/encoder/vp9_rd.h" 51 #include "vp9/encoder/vp9_rd.h"
50 #include "vp9/encoder/vp9_resize.h" 52 #include "vp9/encoder/vp9_resize.h"
51 #include "vp9/encoder/vp9_segmentation.h" 53 #include "vp9/encoder/vp9_segmentation.h"
52 #include "vp9/encoder/vp9_skin_detection.h" 54 #include "vp9/encoder/vp9_skin_detection.h"
53 #include "vp9/encoder/vp9_speed_features.h" 55 #include "vp9/encoder/vp9_speed_features.h"
54 #if CONFIG_INTERNAL_STATS
55 #include "vp9/encoder/vp9_ssim.h"
56 #endif
57 #include "vp9/encoder/vp9_svc_layercontext.h" 56 #include "vp9/encoder/vp9_svc_layercontext.h"
58 #include "vp9/encoder/vp9_temporal_filter.h" 57 #include "vp9/encoder/vp9_temporal_filter.h"
59 58
60 #define AM_SEGMENT_ID_INACTIVE 7 59 #define AM_SEGMENT_ID_INACTIVE 7
61 #define AM_SEGMENT_ID_ACTIVE 0 60 #define AM_SEGMENT_ID_ACTIVE 0
62 61
63 #define SHARP_FILTER_QTHRESH 0 /* Q threshold for 8-tap sharp filter */ 62 #define SHARP_FILTER_QTHRESH 0 /* Q threshold for 8-tap sharp filter */
64 63
65 #define ALTREF_HIGH_PRECISION_MV 1 // Whether to use high precision mv 64 #define ALTREF_HIGH_PRECISION_MV 1 // Whether to use high precision mv
66 // for altref computation. 65 // for altref computation.
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 373
375 vpx_free(cpi->active_map.map); 374 vpx_free(cpi->active_map.map);
376 cpi->active_map.map = NULL; 375 cpi->active_map.map = NULL;
377 376
378 vp9_free_ref_frame_buffers(cm->buffer_pool); 377 vp9_free_ref_frame_buffers(cm->buffer_pool);
379 #if CONFIG_VP9_POSTPROC 378 #if CONFIG_VP9_POSTPROC
380 vp9_free_postproc_buffers(cm); 379 vp9_free_postproc_buffers(cm);
381 #endif 380 #endif
382 vp9_free_context_buffers(cm); 381 vp9_free_context_buffers(cm);
383 382
384 vp9_free_frame_buffer(&cpi->last_frame_uf); 383 vpx_free_frame_buffer(&cpi->last_frame_uf);
385 vp9_free_frame_buffer(&cpi->scaled_source); 384 vpx_free_frame_buffer(&cpi->scaled_source);
386 vp9_free_frame_buffer(&cpi->scaled_last_source); 385 vpx_free_frame_buffer(&cpi->scaled_last_source);
387 vp9_free_frame_buffer(&cpi->alt_ref_buffer); 386 vpx_free_frame_buffer(&cpi->alt_ref_buffer);
388 vp9_lookahead_destroy(cpi->lookahead); 387 vp9_lookahead_destroy(cpi->lookahead);
389 388
390 vpx_free(cpi->tile_tok[0][0]); 389 vpx_free(cpi->tile_tok[0][0]);
391 cpi->tile_tok[0][0] = 0; 390 cpi->tile_tok[0][0] = 0;
392 391
393 vp9_free_pc_tree(&cpi->td); 392 vp9_free_pc_tree(&cpi->td);
394 393
395 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) { 394 for (i = 0; i < cpi->svc.number_spatial_layers; ++i) {
396 LAYER_CONTEXT *const lc = &cpi->svc.layer_context[i]; 395 LAYER_CONTEXT *const lc = &cpi->svc.layer_context[i];
397 vpx_free(lc->rc_twopass_stats_in.buf); 396 vpx_free(lc->rc_twopass_stats_in.buf);
398 lc->rc_twopass_stats_in.buf = NULL; 397 lc->rc_twopass_stats_in.buf = NULL;
399 lc->rc_twopass_stats_in.sz = 0; 398 lc->rc_twopass_stats_in.sz = 0;
400 } 399 }
401 400
402 if (cpi->source_diff_var != NULL) { 401 if (cpi->source_diff_var != NULL) {
403 vpx_free(cpi->source_diff_var); 402 vpx_free(cpi->source_diff_var);
404 cpi->source_diff_var = NULL; 403 cpi->source_diff_var = NULL;
405 } 404 }
406 405
407 for (i = 0; i < MAX_LAG_BUFFERS; ++i) { 406 for (i = 0; i < MAX_LAG_BUFFERS; ++i) {
408 vp9_free_frame_buffer(&cpi->svc.scaled_frames[i]); 407 vpx_free_frame_buffer(&cpi->svc.scaled_frames[i]);
409 } 408 }
410 memset(&cpi->svc.scaled_frames[0], 0, 409 memset(&cpi->svc.scaled_frames[0], 0,
411 MAX_LAG_BUFFERS * sizeof(cpi->svc.scaled_frames[0])); 410 MAX_LAG_BUFFERS * sizeof(cpi->svc.scaled_frames[0]));
412 411
413 vp9_free_frame_buffer(&cpi->svc.empty_frame.img); 412 vpx_free_frame_buffer(&cpi->svc.empty_frame.img);
414 memset(&cpi->svc.empty_frame, 0, sizeof(cpi->svc.empty_frame)); 413 memset(&cpi->svc.empty_frame, 0, sizeof(cpi->svc.empty_frame));
415 } 414 }
416 415
417 static void save_coding_context(VP9_COMP *cpi) { 416 static void save_coding_context(VP9_COMP *cpi) {
418 CODING_CONTEXT *const cc = &cpi->coding_context; 417 CODING_CONTEXT *const cc = &cpi->coding_context;
419 VP9_COMMON *cm = &cpi->common; 418 VP9_COMMON *cm = &cpi->common;
420 419
421 // Stores a snapshot of key state variables which can subsequently be 420 // Stores a snapshot of key state variables which can subsequently be
422 // restored with a call to vp9_restore_coding_context. These functions are 421 // restored with a call to vp9_restore_coding_context. These functions are
423 // intended for use in a re-code loop in vp9_compress_frame where the 422 // intended for use in a re-code loop in vp9_compress_frame where the
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 cm->subsampling_x, cm->subsampling_y, 619 cm->subsampling_x, cm->subsampling_y,
621 #if CONFIG_VP9_HIGHBITDEPTH 620 #if CONFIG_VP9_HIGHBITDEPTH
622 cm->use_highbitdepth, 621 cm->use_highbitdepth,
623 #endif 622 #endif
624 oxcf->lag_in_frames); 623 oxcf->lag_in_frames);
625 if (!cpi->lookahead) 624 if (!cpi->lookahead)
626 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, 625 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
627 "Failed to allocate lag buffers"); 626 "Failed to allocate lag buffers");
628 627
629 // TODO(agrange) Check if ARF is enabled and skip allocation if not. 628 // TODO(agrange) Check if ARF is enabled and skip allocation if not.
630 if (vp9_realloc_frame_buffer(&cpi->alt_ref_buffer, 629 if (vpx_realloc_frame_buffer(&cpi->alt_ref_buffer,
631 oxcf->width, oxcf->height, 630 oxcf->width, oxcf->height,
632 cm->subsampling_x, cm->subsampling_y, 631 cm->subsampling_x, cm->subsampling_y,
633 #if CONFIG_VP9_HIGHBITDEPTH 632 #if CONFIG_VP9_HIGHBITDEPTH
634 cm->use_highbitdepth, 633 cm->use_highbitdepth,
635 #endif 634 #endif
636 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, 635 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
637 NULL, NULL, NULL)) 636 NULL, NULL, NULL))
638 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, 637 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
639 "Failed to allocate altref buffer"); 638 "Failed to allocate altref buffer");
640 } 639 }
641 640
642 static void alloc_util_frame_buffers(VP9_COMP *cpi) { 641 static void alloc_util_frame_buffers(VP9_COMP *cpi) {
643 VP9_COMMON *const cm = &cpi->common; 642 VP9_COMMON *const cm = &cpi->common;
644 if (vp9_realloc_frame_buffer(&cpi->last_frame_uf, 643 if (vpx_realloc_frame_buffer(&cpi->last_frame_uf,
645 cm->width, cm->height, 644 cm->width, cm->height,
646 cm->subsampling_x, cm->subsampling_y, 645 cm->subsampling_x, cm->subsampling_y,
647 #if CONFIG_VP9_HIGHBITDEPTH 646 #if CONFIG_VP9_HIGHBITDEPTH
648 cm->use_highbitdepth, 647 cm->use_highbitdepth,
649 #endif 648 #endif
650 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, 649 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
651 NULL, NULL, NULL)) 650 NULL, NULL, NULL))
652 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, 651 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
653 "Failed to allocate last frame buffer"); 652 "Failed to allocate last frame buffer");
654 653
655 if (vp9_realloc_frame_buffer(&cpi->scaled_source, 654 if (vpx_realloc_frame_buffer(&cpi->scaled_source,
656 cm->width, cm->height, 655 cm->width, cm->height,
657 cm->subsampling_x, cm->subsampling_y, 656 cm->subsampling_x, cm->subsampling_y,
658 #if CONFIG_VP9_HIGHBITDEPTH 657 #if CONFIG_VP9_HIGHBITDEPTH
659 cm->use_highbitdepth, 658 cm->use_highbitdepth,
660 #endif 659 #endif
661 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, 660 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
662 NULL, NULL, NULL)) 661 NULL, NULL, NULL))
663 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, 662 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
664 "Failed to allocate scaled source buffer"); 663 "Failed to allocate scaled source buffer");
665 664
666 if (vp9_realloc_frame_buffer(&cpi->scaled_last_source, 665 if (vpx_realloc_frame_buffer(&cpi->scaled_last_source,
667 cm->width, cm->height, 666 cm->width, cm->height,
668 cm->subsampling_x, cm->subsampling_y, 667 cm->subsampling_x, cm->subsampling_y,
669 #if CONFIG_VP9_HIGHBITDEPTH 668 #if CONFIG_VP9_HIGHBITDEPTH
670 cm->use_highbitdepth, 669 cm->use_highbitdepth,
671 #endif 670 #endif
672 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, 671 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
673 NULL, NULL, NULL)) 672 NULL, NULL, NULL))
674 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, 673 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
675 "Failed to allocate scaled last source buffer"); 674 "Failed to allocate scaled last source buffer");
676 } 675 }
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 vp9_set_mb_mi(cm, cm->width, cm->height); 734 vp9_set_mb_mi(cm, cm->width, cm->height);
736 vp9_init_context_buffers(cm); 735 vp9_init_context_buffers(cm);
737 vp9_init_macroblockd(cm, xd, NULL); 736 vp9_init_macroblockd(cm, xd, NULL);
738 cpi->td.mb.mbmi_ext_base = cpi->mbmi_ext_base; 737 cpi->td.mb.mbmi_ext_base = cpi->mbmi_ext_base;
739 memset(cpi->mbmi_ext_base, 0, 738 memset(cpi->mbmi_ext_base, 0,
740 cm->mi_rows * cm->mi_cols * sizeof(*cpi->mbmi_ext_base)); 739 cm->mi_rows * cm->mi_cols * sizeof(*cpi->mbmi_ext_base));
741 740
742 set_tile_limits(cpi); 741 set_tile_limits(cpi);
743 742
744 if (is_two_pass_svc(cpi)) { 743 if (is_two_pass_svc(cpi)) {
745 if (vp9_realloc_frame_buffer(&cpi->alt_ref_buffer, 744 if (vpx_realloc_frame_buffer(&cpi->alt_ref_buffer,
746 cm->width, cm->height, 745 cm->width, cm->height,
747 cm->subsampling_x, cm->subsampling_y, 746 cm->subsampling_x, cm->subsampling_y,
748 #if CONFIG_VP9_HIGHBITDEPTH 747 #if CONFIG_VP9_HIGHBITDEPTH
749 cm->use_highbitdepth, 748 cm->use_highbitdepth,
750 #endif 749 #endif
751 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, 750 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
752 NULL, NULL, NULL)) 751 NULL, NULL, NULL))
753 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, 752 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
754 "Failed to reallocate alt_ref_buffer"); 753 "Failed to reallocate alt_ref_buffer");
755 } 754 }
(...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after
1484 1483
1485 for (i = 0; i < MAX_SEGMENTS; i++) 1484 for (i = 0; i < MAX_SEGMENTS; i++)
1486 cpi->segment_encode_breakout[i] = cpi->oxcf.encode_breakout; 1485 cpi->segment_encode_breakout[i] = cpi->oxcf.encode_breakout;
1487 } 1486 }
1488 cpi->encode_breakout = cpi->oxcf.encode_breakout; 1487 cpi->encode_breakout = cpi->oxcf.encode_breakout;
1489 1488
1490 set_rc_buffer_sizes(rc, &cpi->oxcf); 1489 set_rc_buffer_sizes(rc, &cpi->oxcf);
1491 1490
1492 // Under a configuration change, where maximum_buffer_size may change, 1491 // Under a configuration change, where maximum_buffer_size may change,
1493 // keep buffer level clipped to the maximum allowed buffer size. 1492 // keep buffer level clipped to the maximum allowed buffer size.
1494 rc->bits_off_target = MIN(rc->bits_off_target, rc->maximum_buffer_size); 1493 rc->bits_off_target = VPXMIN(rc->bits_off_target, rc->maximum_buffer_size);
1495 rc->buffer_level = MIN(rc->buffer_level, rc->maximum_buffer_size); 1494 rc->buffer_level = VPXMIN(rc->buffer_level, rc->maximum_buffer_size);
1496 1495
1497 // Set up frame rate and related parameters rate control values. 1496 // Set up frame rate and related parameters rate control values.
1498 vp9_new_framerate(cpi, cpi->framerate); 1497 vp9_new_framerate(cpi, cpi->framerate);
1499 1498
1500 // Set absolute upper and lower quality limits 1499 // Set absolute upper and lower quality limits
1501 rc->worst_quality = cpi->oxcf.worst_allowed_q; 1500 rc->worst_quality = cpi->oxcf.worst_allowed_q;
1502 rc->best_quality = cpi->oxcf.best_allowed_q; 1501 rc->best_quality = cpi->oxcf.best_allowed_q;
1503 1502
1504 cm->interp_filter = cpi->sf.default_interp_filter; 1503 cm->interp_filter = cpi->sf.default_interp_filter;
1505 1504
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 CHECK_MEM_ERROR(cm, cm->frame_contexts, 1615 CHECK_MEM_ERROR(cm, cm->frame_contexts,
1617 (FRAME_CONTEXT *)vpx_calloc(FRAME_CONTEXTS, 1616 (FRAME_CONTEXT *)vpx_calloc(FRAME_CONTEXTS,
1618 sizeof(*cm->frame_contexts))); 1617 sizeof(*cm->frame_contexts)));
1619 1618
1620 cpi->use_svc = 0; 1619 cpi->use_svc = 0;
1621 cpi->resize_state = 0; 1620 cpi->resize_state = 0;
1622 cpi->resize_avg_qp = 0; 1621 cpi->resize_avg_qp = 0;
1623 cpi->resize_buffer_underflow = 0; 1622 cpi->resize_buffer_underflow = 0;
1624 cpi->common.buffer_pool = pool; 1623 cpi->common.buffer_pool = pool;
1625 1624
1625 cpi->rc.high_source_sad = 0;
1626
1626 init_config(cpi, oxcf); 1627 init_config(cpi, oxcf);
1627 vp9_rc_init(&cpi->oxcf, oxcf->pass, &cpi->rc); 1628 vp9_rc_init(&cpi->oxcf, oxcf->pass, &cpi->rc);
1628 1629
1629 cm->current_video_frame = 0; 1630 cm->current_video_frame = 0;
1630 cpi->partition_search_skippable_frame = 0; 1631 cpi->partition_search_skippable_frame = 0;
1631 cpi->tile_data = NULL; 1632 cpi->tile_data = NULL;
1632 1633
1633 realloc_segmentation_maps(cpi); 1634 realloc_segmentation_maps(cpi);
1634 1635
1635 CHECK_MEM_ERROR(cm, cpi->nmvcosts[0], 1636 CHECK_MEM_ERROR(cm, cpi->nmvcosts[0],
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
1702 cpi->fastssim.worst = 100.0; 1703 cpi->fastssim.worst = 100.0;
1703 1704
1704 cpi->psnrhvs.worst = 100.0; 1705 cpi->psnrhvs.worst = 100.0;
1705 1706
1706 if (cpi->b_calculate_blockiness) { 1707 if (cpi->b_calculate_blockiness) {
1707 cpi->total_blockiness = 0; 1708 cpi->total_blockiness = 0;
1708 cpi->worst_blockiness = 0.0; 1709 cpi->worst_blockiness = 0.0;
1709 } 1710 }
1710 1711
1711 if (cpi->b_calculate_consistency) { 1712 if (cpi->b_calculate_consistency) {
1712 cpi->ssim_vars = vpx_malloc(sizeof(*cpi->ssim_vars)*720*480); 1713 cpi->ssim_vars = vpx_malloc(sizeof(*cpi->ssim_vars) *
1714 4 * cpi->common.mi_rows * cpi->common.mi_cols);
1713 cpi->worst_consistency = 100.0; 1715 cpi->worst_consistency = 100.0;
1714 } 1716 }
1715 1717
1716 #endif 1718 #endif
1717 1719
1718 cpi->first_time_stamp_ever = INT64_MAX; 1720 cpi->first_time_stamp_ever = INT64_MAX;
1719 1721
1720 cal_nmvjointsadcost(cpi->td.mb.nmvjointsadcost); 1722 cal_nmvjointsadcost(cpi->td.mb.nmvjointsadcost);
1721 cpi->td.mb.nmvcost[0] = &cpi->nmvcosts[0][MV_MAX]; 1723 cpi->td.mb.nmvcost[0] = &cpi->nmvcosts[0][MV_MAX];
1722 cpi->td.mb.nmvcost[1] = &cpi->nmvcosts[1][MV_MAX]; 1724 cpi->td.mb.nmvcost[1] = &cpi->nmvcosts[1][MV_MAX];
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1918 void vp9_remove_compressor(VP9_COMP *cpi) { 1920 void vp9_remove_compressor(VP9_COMP *cpi) {
1919 VP9_COMMON *const cm = &cpi->common; 1921 VP9_COMMON *const cm = &cpi->common;
1920 unsigned int i; 1922 unsigned int i;
1921 int t; 1923 int t;
1922 1924
1923 if (!cpi) 1925 if (!cpi)
1924 return; 1926 return;
1925 1927
1926 if (cpi && (cm->current_video_frame > 0)) { 1928 if (cpi && (cm->current_video_frame > 0)) {
1927 #if CONFIG_INTERNAL_STATS 1929 #if CONFIG_INTERNAL_STATS
1928 vp9_clear_system_state(); 1930 vpx_clear_system_state();
1929 1931
1930 if (cpi->oxcf.pass != 1) { 1932 if (cpi->oxcf.pass != 1) {
1931 char headings[512] = {0}; 1933 char headings[512] = {0};
1932 char results[512] = {0}; 1934 char results[512] = {0};
1933 FILE *f = fopen("opsnr.stt", "a"); 1935 FILE *f = fopen("opsnr.stt", "a");
1934 double time_encoded = (cpi->last_end_time_stamp_seen 1936 double time_encoded = (cpi->last_end_time_stamp_seen
1935 - cpi->first_time_stamp_ever) / 10000000.000; 1937 - cpi->first_time_stamp_ever) / 10000000.000;
1936 double total_encode_time = (cpi->time_receive_data + 1938 double total_encode_time = (cpi->time_receive_data +
1937 cpi->time_compress_data) / 1000.000; 1939 cpi->time_compress_data) / 1000.000;
1938 const double dr = 1940 const double dr =
(...skipping 11 matching lines...) Expand all
1950 cpi->summed_weights, 8.0); 1952 cpi->summed_weights, 8.0);
1951 const double totalp_ssim = 100 * pow(cpi->summedp_quality / 1953 const double totalp_ssim = 100 * pow(cpi->summedp_quality /
1952 cpi->summedp_weights, 8.0); 1954 cpi->summedp_weights, 8.0);
1953 1955
1954 snprintf(headings, sizeof(headings), 1956 snprintf(headings, sizeof(headings),
1955 "Bitrate\tAVGPsnr\tGLBPsnr\tAVPsnrP\tGLPsnrP\t" 1957 "Bitrate\tAVGPsnr\tGLBPsnr\tAVPsnrP\tGLPsnrP\t"
1956 "VPXSSIM\tVPSSIMP\tFASTSIM\tPSNRHVS\t" 1958 "VPXSSIM\tVPSSIMP\tFASTSIM\tPSNRHVS\t"
1957 "WstPsnr\tWstSsim\tWstFast\tWstHVS"); 1959 "WstPsnr\tWstSsim\tWstFast\tWstHVS");
1958 snprintf(results, sizeof(results), 1960 snprintf(results, sizeof(results),
1959 "%7.2f\t%7.3f\t%7.3f\t%7.3f\t%7.3f\t" 1961 "%7.2f\t%7.3f\t%7.3f\t%7.3f\t%7.3f\t"
1960 "%7.3f\t%7.3f\t%7.3f\t%7.3f" 1962 "%7.3f\t%7.3f\t%7.3f\t%7.3f\t"
1961 "%7.3f\t%7.3f\t%7.3f\t%7.3f", 1963 "%7.3f\t%7.3f\t%7.3f\t%7.3f",
1962 dr, cpi->psnr.stat[ALL] / cpi->count, total_psnr, 1964 dr, cpi->psnr.stat[ALL] / cpi->count, total_psnr,
1963 cpi->psnrp.stat[ALL] / cpi->count, totalp_psnr, 1965 cpi->psnrp.stat[ALL] / cpi->count, totalp_psnr,
1964 total_ssim, totalp_ssim, 1966 total_ssim, totalp_ssim,
1965 cpi->fastssim.stat[ALL] / cpi->count, 1967 cpi->fastssim.stat[ALL] / cpi->count,
1966 cpi->psnrhvs.stat[ALL] / cpi->count, 1968 cpi->psnrhvs.stat[ALL] / cpi->count,
1967 cpi->psnr.worst, cpi->worst_ssim, cpi->fastssim.worst, 1969 cpi->psnr.worst, cpi->worst_ssim, cpi->fastssim.worst,
1968 cpi->psnrhvs.worst); 1970 cpi->psnrhvs.worst);
1969 1971
1970 if (cpi->b_calculate_blockiness) { 1972 if (cpi->b_calculate_blockiness) {
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
2539 dst_widths[i], dst_strides[i], bd); 2541 dst_widths[i], dst_strides[i], bd);
2540 } else { 2542 } else {
2541 vp9_resize_plane(srcs[i], src_heights[i], src_widths[i], src_strides[i], 2543 vp9_resize_plane(srcs[i], src_heights[i], src_widths[i], src_strides[i],
2542 dsts[i], dst_heights[i], dst_widths[i], dst_strides[i]); 2544 dsts[i], dst_heights[i], dst_widths[i], dst_strides[i]);
2543 } 2545 }
2544 #else 2546 #else
2545 vp9_resize_plane(srcs[i], src_heights[i], src_widths[i], src_strides[i], 2547 vp9_resize_plane(srcs[i], src_heights[i], src_widths[i], src_strides[i],
2546 dsts[i], dst_heights[i], dst_widths[i], dst_strides[i]); 2548 dsts[i], dst_heights[i], dst_widths[i], dst_strides[i]);
2547 #endif // CONFIG_VP9_HIGHBITDEPTH 2549 #endif // CONFIG_VP9_HIGHBITDEPTH
2548 } 2550 }
2549 vp9_extend_frame_borders(dst); 2551 vpx_extend_frame_borders(dst);
2550 } 2552 }
2551 2553
2552 #if CONFIG_VP9_HIGHBITDEPTH 2554 #if CONFIG_VP9_HIGHBITDEPTH
2553 static void scale_and_extend_frame(const YV12_BUFFER_CONFIG *src, 2555 static void scale_and_extend_frame(const YV12_BUFFER_CONFIG *src,
2554 YV12_BUFFER_CONFIG *dst, int bd) { 2556 YV12_BUFFER_CONFIG *dst, int bd) {
2555 #else 2557 #else
2556 static void scale_and_extend_frame(const YV12_BUFFER_CONFIG *src, 2558 static void scale_and_extend_frame(const YV12_BUFFER_CONFIG *src,
2557 YV12_BUFFER_CONFIG *dst) { 2559 YV12_BUFFER_CONFIG *dst) {
2558 #endif // CONFIG_VP9_HIGHBITDEPTH 2560 #endif // CONFIG_VP9_HIGHBITDEPTH
2559 const int src_w = src->y_crop_width; 2561 const int src_w = src->y_crop_width;
(...skipping 19 matching lines...) Expand all
2579 src_stride + (x / factor) * src_w / dst_w; 2581 src_stride + (x / factor) * src_w / dst_w;
2580 uint8_t *dst_ptr = dsts[i] + (y / factor) * dst_stride + (x / factor); 2582 uint8_t *dst_ptr = dsts[i] + (y / factor) * dst_stride + (x / factor);
2581 2583
2582 #if CONFIG_VP9_HIGHBITDEPTH 2584 #if CONFIG_VP9_HIGHBITDEPTH
2583 if (src->flags & YV12_FLAG_HIGHBITDEPTH) { 2585 if (src->flags & YV12_FLAG_HIGHBITDEPTH) {
2584 vpx_highbd_convolve8(src_ptr, src_stride, dst_ptr, dst_stride, 2586 vpx_highbd_convolve8(src_ptr, src_stride, dst_ptr, dst_stride,
2585 kernel[x_q4 & 0xf], 16 * src_w / dst_w, 2587 kernel[x_q4 & 0xf], 16 * src_w / dst_w,
2586 kernel[y_q4 & 0xf], 16 * src_h / dst_h, 2588 kernel[y_q4 & 0xf], 16 * src_h / dst_h,
2587 16 / factor, 16 / factor, bd); 2589 16 / factor, 16 / factor, bd);
2588 } else { 2590 } else {
2589 vpx_convolve8(src_ptr, src_stride, dst_ptr, dst_stride, 2591 vpx_scaled_2d(src_ptr, src_stride, dst_ptr, dst_stride,
2590 kernel[x_q4 & 0xf], 16 * src_w / dst_w, 2592 kernel[x_q4 & 0xf], 16 * src_w / dst_w,
2591 kernel[y_q4 & 0xf], 16 * src_h / dst_h, 2593 kernel[y_q4 & 0xf], 16 * src_h / dst_h,
2592 16 / factor, 16 / factor); 2594 16 / factor, 16 / factor);
2593 } 2595 }
2594 #else 2596 #else
2595 vpx_convolve8(src_ptr, src_stride, dst_ptr, dst_stride, 2597 vpx_scaled_2d(src_ptr, src_stride, dst_ptr, dst_stride,
2596 kernel[x_q4 & 0xf], 16 * src_w / dst_w, 2598 kernel[x_q4 & 0xf], 16 * src_w / dst_w,
2597 kernel[y_q4 & 0xf], 16 * src_h / dst_h, 2599 kernel[y_q4 & 0xf], 16 * src_h / dst_h,
2598 16 / factor, 16 / factor); 2600 16 / factor, 16 / factor);
2599 #endif // CONFIG_VP9_HIGHBITDEPTH 2601 #endif // CONFIG_VP9_HIGHBITDEPTH
2600 } 2602 }
2601 } 2603 }
2602 } 2604 }
2603 2605
2604 vp9_extend_frame_borders(dst); 2606 vpx_extend_frame_borders(dst);
2605 } 2607 }
2606 2608
2607 static int scale_down(VP9_COMP *cpi, int q) { 2609 static int scale_down(VP9_COMP *cpi, int q) {
2608 RATE_CONTROL *const rc = &cpi->rc; 2610 RATE_CONTROL *const rc = &cpi->rc;
2609 GF_GROUP *const gf_group = &cpi->twopass.gf_group; 2611 GF_GROUP *const gf_group = &cpi->twopass.gf_group;
2610 int scale = 0; 2612 int scale = 0;
2611 assert(frame_is_kf_gf_arf(cpi)); 2613 assert(frame_is_kf_gf_arf(cpi));
2612 2614
2613 if (rc->frame_size_selector == UNSCALED && 2615 if (rc->frame_size_selector == UNSCALED &&
2614 q >= rc->rf_level_maxq[gf_group->rf_level[gf_group->index]]) { 2616 q >= rc->rf_level_maxq[gf_group->rf_level[gf_group->index]]) {
2615 const int max_size_thresh = (int)(rate_thresh_mult[SCALE_STEP1] 2617 const int max_size_thresh = (int)(rate_thresh_mult[SCALE_STEP1]
2616 * MAX(rc->this_frame_target, rc->avg_frame_bandwidth)); 2618 * VPXMAX(rc->this_frame_target, rc->avg_frame_bandwidth));
2617 scale = rc->projected_frame_size > max_size_thresh ? 1 : 0; 2619 scale = rc->projected_frame_size > max_size_thresh ? 1 : 0;
2618 } 2620 }
2619 return scale; 2621 return scale;
2620 } 2622 }
2621 2623
2622 // Function to test for conditions that indicate we should loop 2624 // Function to test for conditions that indicate we should loop
2623 // back and recode a frame. 2625 // back and recode a frame.
2624 static int recode_loop_test(VP9_COMP *cpi, 2626 static int recode_loop_test(VP9_COMP *cpi,
2625 int high_limit, int low_limit, 2627 int high_limit, int low_limit,
2626 int q, int maxq, int minq) { 2628 int q, int maxq, int minq) {
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2740 } 2742 }
2741 2743
2742 static void loopfilter_frame(VP9_COMP *cpi, VP9_COMMON *cm) { 2744 static void loopfilter_frame(VP9_COMP *cpi, VP9_COMMON *cm) {
2743 MACROBLOCKD *xd = &cpi->td.mb.e_mbd; 2745 MACROBLOCKD *xd = &cpi->td.mb.e_mbd;
2744 struct loopfilter *lf = &cm->lf; 2746 struct loopfilter *lf = &cm->lf;
2745 if (xd->lossless) { 2747 if (xd->lossless) {
2746 lf->filter_level = 0; 2748 lf->filter_level = 0;
2747 } else { 2749 } else {
2748 struct vpx_usec_timer timer; 2750 struct vpx_usec_timer timer;
2749 2751
2750 vp9_clear_system_state(); 2752 vpx_clear_system_state();
2751 2753
2752 vpx_usec_timer_start(&timer); 2754 vpx_usec_timer_start(&timer);
2753 2755
2754 vp9_pick_filter_level(cpi->Source, cpi, cpi->sf.lpf_pick); 2756 vp9_pick_filter_level(cpi->Source, cpi, cpi->sf.lpf_pick);
2755 2757
2756 vpx_usec_timer_mark(&timer); 2758 vpx_usec_timer_mark(&timer);
2757 cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer); 2759 cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer);
2758 } 2760 }
2759 2761
2760 if (lf->filter_level > 0) { 2762 if (lf->filter_level > 0) {
2761 if (cpi->num_workers > 1) 2763 if (cpi->num_workers > 1)
2762 vp9_loop_filter_frame_mt(cm->frame_to_show, cm, xd->plane, 2764 vp9_loop_filter_frame_mt(cm->frame_to_show, cm, xd->plane,
2763 lf->filter_level, 0, 0, 2765 lf->filter_level, 0, 0,
2764 cpi->workers, cpi->num_workers, 2766 cpi->workers, cpi->num_workers,
2765 &cpi->lf_row_sync); 2767 &cpi->lf_row_sync);
2766 else 2768 else
2767 vp9_loop_filter_frame(cm->frame_to_show, cm, xd, lf->filter_level, 0, 0); 2769 vp9_loop_filter_frame(cm->frame_to_show, cm, xd, lf->filter_level, 0, 0);
2768 } 2770 }
2769 2771
2770 vp9_extend_frame_inner_borders(cm->frame_to_show); 2772 vpx_extend_frame_inner_borders(cm->frame_to_show);
2771 } 2773 }
2772 2774
2773 static INLINE void alloc_frame_mvs(const VP9_COMMON *cm, 2775 static INLINE void alloc_frame_mvs(const VP9_COMMON *cm,
2774 int buffer_idx) { 2776 int buffer_idx) {
2775 RefCntBuffer *const new_fb_ptr = &cm->buffer_pool->frame_bufs[buffer_idx]; 2777 RefCntBuffer *const new_fb_ptr = &cm->buffer_pool->frame_bufs[buffer_idx];
2776 if (new_fb_ptr->mvs == NULL || 2778 if (new_fb_ptr->mvs == NULL ||
2777 new_fb_ptr->mi_rows < cm->mi_rows || 2779 new_fb_ptr->mi_rows < cm->mi_rows ||
2778 new_fb_ptr->mi_cols < cm->mi_cols) { 2780 new_fb_ptr->mi_cols < cm->mi_cols) {
2779 vpx_free(new_fb_ptr->mvs); 2781 vpx_free(new_fb_ptr->mvs);
2780 new_fb_ptr->mvs = 2782 new_fb_ptr->mvs =
(...skipping 29 matching lines...) Expand all
2810 if (new_fb == INVALID_IDX) { 2812 if (new_fb == INVALID_IDX) {
2811 new_fb = get_free_fb(cm); 2813 new_fb = get_free_fb(cm);
2812 force_scaling = 1; 2814 force_scaling = 1;
2813 } 2815 }
2814 if (new_fb == INVALID_IDX) 2816 if (new_fb == INVALID_IDX)
2815 return; 2817 return;
2816 new_fb_ptr = &pool->frame_bufs[new_fb]; 2818 new_fb_ptr = &pool->frame_bufs[new_fb];
2817 if (force_scaling || 2819 if (force_scaling ||
2818 new_fb_ptr->buf.y_crop_width != cm->width || 2820 new_fb_ptr->buf.y_crop_width != cm->width ||
2819 new_fb_ptr->buf.y_crop_height != cm->height) { 2821 new_fb_ptr->buf.y_crop_height != cm->height) {
2820 vp9_realloc_frame_buffer(&new_fb_ptr->buf, 2822 vpx_realloc_frame_buffer(&new_fb_ptr->buf,
2821 cm->width, cm->height, 2823 cm->width, cm->height,
2822 cm->subsampling_x, cm->subsampling_y, 2824 cm->subsampling_x, cm->subsampling_y,
2823 cm->use_highbitdepth, 2825 cm->use_highbitdepth,
2824 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, 2826 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
2825 NULL, NULL, NULL); 2827 NULL, NULL, NULL);
2826 scale_and_extend_frame(ref, &new_fb_ptr->buf, (int)cm->bit_depth); 2828 scale_and_extend_frame(ref, &new_fb_ptr->buf, (int)cm->bit_depth);
2827 cpi->scaled_ref_idx[ref_frame - 1] = new_fb; 2829 cpi->scaled_ref_idx[ref_frame - 1] = new_fb;
2828 alloc_frame_mvs(cm, new_fb); 2830 alloc_frame_mvs(cm, new_fb);
2829 } 2831 }
2830 #else 2832 #else
2831 if (ref->y_crop_width != cm->width || ref->y_crop_height != cm->height) { 2833 if (ref->y_crop_width != cm->width || ref->y_crop_height != cm->height) {
2832 RefCntBuffer *new_fb_ptr = NULL; 2834 RefCntBuffer *new_fb_ptr = NULL;
2833 int force_scaling = 0; 2835 int force_scaling = 0;
2834 int new_fb = cpi->scaled_ref_idx[ref_frame - 1]; 2836 int new_fb = cpi->scaled_ref_idx[ref_frame - 1];
2835 if (new_fb == INVALID_IDX) { 2837 if (new_fb == INVALID_IDX) {
2836 new_fb = get_free_fb(cm); 2838 new_fb = get_free_fb(cm);
2837 force_scaling = 1; 2839 force_scaling = 1;
2838 } 2840 }
2839 if (new_fb == INVALID_IDX) 2841 if (new_fb == INVALID_IDX)
2840 return; 2842 return;
2841 new_fb_ptr = &pool->frame_bufs[new_fb]; 2843 new_fb_ptr = &pool->frame_bufs[new_fb];
2842 if (force_scaling || 2844 if (force_scaling ||
2843 new_fb_ptr->buf.y_crop_width != cm->width || 2845 new_fb_ptr->buf.y_crop_width != cm->width ||
2844 new_fb_ptr->buf.y_crop_height != cm->height) { 2846 new_fb_ptr->buf.y_crop_height != cm->height) {
2845 vp9_realloc_frame_buffer(&new_fb_ptr->buf, 2847 vpx_realloc_frame_buffer(&new_fb_ptr->buf,
2846 cm->width, cm->height, 2848 cm->width, cm->height,
2847 cm->subsampling_x, cm->subsampling_y, 2849 cm->subsampling_x, cm->subsampling_y,
2848 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, 2850 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
2849 NULL, NULL, NULL); 2851 NULL, NULL, NULL);
2850 scale_and_extend_frame(ref, &new_fb_ptr->buf); 2852 scale_and_extend_frame(ref, &new_fb_ptr->buf);
2851 cpi->scaled_ref_idx[ref_frame - 1] = new_fb; 2853 cpi->scaled_ref_idx[ref_frame - 1] = new_fb;
2852 alloc_frame_mvs(cm, new_fb); 2854 alloc_frame_mvs(cm, new_fb);
2853 } 2855 }
2854 #endif // CONFIG_VP9_HIGHBITDEPTH 2856 #endif // CONFIG_VP9_HIGHBITDEPTH
2855 } else { 2857 } else {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
2924 for (l = 0; l < BAND_COEFF_CONTEXTS(k); ++l) 2926 for (l = 0; l < BAND_COEFF_CONTEXTS(k); ++l)
2925 full_to_model_count(model_count[i][j][k][l], full_count[i][j][k][l]); 2927 full_to_model_count(model_count[i][j][k][l], full_count[i][j][k][l]);
2926 } 2928 }
2927 2929
2928 #if 0 && CONFIG_INTERNAL_STATS 2930 #if 0 && CONFIG_INTERNAL_STATS
2929 static void output_frame_level_debug_stats(VP9_COMP *cpi) { 2931 static void output_frame_level_debug_stats(VP9_COMP *cpi) {
2930 VP9_COMMON *const cm = &cpi->common; 2932 VP9_COMMON *const cm = &cpi->common;
2931 FILE *const f = fopen("tmp.stt", cm->current_video_frame ? "a" : "w"); 2933 FILE *const f = fopen("tmp.stt", cm->current_video_frame ? "a" : "w");
2932 int64_t recon_err; 2934 int64_t recon_err;
2933 2935
2934 vp9_clear_system_state(); 2936 vpx_clear_system_state();
2935 2937
2936 recon_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm)); 2938 recon_err = vp9_get_y_sse(cpi->Source, get_frame_new_buffer(cm));
2937 2939
2938 if (cpi->twopass.total_left_stats.coded_error != 0.0) 2940 if (cpi->twopass.total_left_stats.coded_error != 0.0)
2939 fprintf(f, "%10u %dx%d %d %d %10d %10d %10d %10d" 2941 fprintf(f, "%10u %dx%d %d %d %10d %10d %10d %10d"
2940 "%10"PRId64" %10"PRId64" %5d %5d %10"PRId64" " 2942 "%10"PRId64" %10"PRId64" %5d %5d %10"PRId64" "
2941 "%10"PRId64" %10"PRId64" %10d " 2943 "%10"PRId64" %10"PRId64" %10d "
2942 "%7.2lf %7.2lf %7.2lf %7.2lf %7.2lf" 2944 "%7.2lf %7.2lf %7.2lf %7.2lf %7.2lf"
2943 "%6d %6d %5d %5d %5d " 2945 "%6d %6d %5d %5d %5d "
2944 "%10"PRId64" %10.3lf" 2946 "%10"PRId64" %10.3lf"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2989 2991
2990 fprintf(fmodes, "\n"); 2992 fprintf(fmodes, "\n");
2991 2993
2992 fclose(fmodes); 2994 fclose(fmodes);
2993 } 2995 }
2994 } 2996 }
2995 #endif 2997 #endif
2996 2998
2997 static void set_mv_search_params(VP9_COMP *cpi) { 2999 static void set_mv_search_params(VP9_COMP *cpi) {
2998 const VP9_COMMON *const cm = &cpi->common; 3000 const VP9_COMMON *const cm = &cpi->common;
2999 const unsigned int max_mv_def = MIN(cm->width, cm->height); 3001 const unsigned int max_mv_def = VPXMIN(cm->width, cm->height);
3000 3002
3001 // Default based on max resolution. 3003 // Default based on max resolution.
3002 cpi->mv_step_param = vp9_init_search_range(max_mv_def); 3004 cpi->mv_step_param = vp9_init_search_range(max_mv_def);
3003 3005
3004 if (cpi->sf.mv.auto_mv_step_size) { 3006 if (cpi->sf.mv.auto_mv_step_size) {
3005 if (frame_is_intra_only(cm)) { 3007 if (frame_is_intra_only(cm)) {
3006 // Initialize max_mv_magnitude for use in the first INTER frame 3008 // Initialize max_mv_magnitude for use in the first INTER frame
3007 // after a key/intra-only frame. 3009 // after a key/intra-only frame.
3008 cpi->max_mv_magnitude = max_mv_def; 3010 cpi->max_mv_magnitude = max_mv_def;
3009 } else { 3011 } else {
3010 if (cm->show_frame) { 3012 if (cm->show_frame) {
3011 // Allow mv_steps to correspond to twice the max mv magnitude found 3013 // Allow mv_steps to correspond to twice the max mv magnitude found
3012 // in the previous frame, capped by the default max_mv_magnitude based 3014 // in the previous frame, capped by the default max_mv_magnitude based
3013 // on resolution. 3015 // on resolution.
3014 cpi->mv_step_param = 3016 cpi->mv_step_param = vp9_init_search_range(
3015 vp9_init_search_range(MIN(max_mv_def, 2 * cpi->max_mv_magnitude)); 3017 VPXMIN(max_mv_def, 2 * cpi->max_mv_magnitude));
3016 } 3018 }
3017 cpi->max_mv_magnitude = 0; 3019 cpi->max_mv_magnitude = 0;
3018 } 3020 }
3019 } 3021 }
3020 } 3022 }
3021 3023
3022 static void set_size_independent_vars(VP9_COMP *cpi) { 3024 static void set_size_independent_vars(VP9_COMP *cpi) {
3023 vp9_set_speed_features_framesize_independent(cpi); 3025 vp9_set_speed_features_framesize_independent(cpi);
3024 vp9_set_rd_speed_thresholds(cpi); 3026 vp9_set_rd_speed_thresholds(cpi);
3025 vp9_set_rd_speed_thresholds_sub8x8(cpi); 3027 vp9_set_rd_speed_thresholds_sub8x8(cpi);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
3130 if ((oxcf->pass == 2) && 3132 if ((oxcf->pass == 2) &&
3131 (!cpi->use_svc || 3133 (!cpi->use_svc ||
3132 (is_two_pass_svc(cpi) && 3134 (is_two_pass_svc(cpi) &&
3133 cpi->svc.encode_empty_frame_state != ENCODING))) { 3135 cpi->svc.encode_empty_frame_state != ENCODING))) {
3134 vp9_set_target_rate(cpi); 3136 vp9_set_target_rate(cpi);
3135 } 3137 }
3136 3138
3137 alloc_frame_mvs(cm, cm->new_fb_idx); 3139 alloc_frame_mvs(cm, cm->new_fb_idx);
3138 3140
3139 // Reset the frame pointers to the current frame size. 3141 // Reset the frame pointers to the current frame size.
3140 vp9_realloc_frame_buffer(get_frame_new_buffer(cm), 3142 vpx_realloc_frame_buffer(get_frame_new_buffer(cm),
3141 cm->width, cm->height, 3143 cm->width, cm->height,
3142 cm->subsampling_x, cm->subsampling_y, 3144 cm->subsampling_x, cm->subsampling_y,
3143 #if CONFIG_VP9_HIGHBITDEPTH 3145 #if CONFIG_VP9_HIGHBITDEPTH
3144 cm->use_highbitdepth, 3146 cm->use_highbitdepth,
3145 #endif 3147 #endif
3146 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment, 3148 VP9_ENC_BORDER_IN_PIXELS, cm->byte_alignment,
3147 NULL, NULL, NULL); 3149 NULL, NULL, NULL);
3148 3150
3149 alloc_util_frame_buffers(cpi); 3151 alloc_util_frame_buffers(cpi);
3150 init_motion_estimation(cpi); 3152 init_motion_estimation(cpi);
(...skipping 12 matching lines...) Expand all
3163 buf->y_crop_width, buf->y_crop_height, 3165 buf->y_crop_width, buf->y_crop_height,
3164 cm->width, cm->height, 3166 cm->width, cm->height,
3165 (buf->flags & YV12_FLAG_HIGHBITDEPTH) ? 3167 (buf->flags & YV12_FLAG_HIGHBITDEPTH) ?
3166 1 : 0); 3168 1 : 0);
3167 #else 3169 #else
3168 vp9_setup_scale_factors_for_frame(&ref_buf->sf, 3170 vp9_setup_scale_factors_for_frame(&ref_buf->sf,
3169 buf->y_crop_width, buf->y_crop_height, 3171 buf->y_crop_width, buf->y_crop_height,
3170 cm->width, cm->height); 3172 cm->width, cm->height);
3171 #endif // CONFIG_VP9_HIGHBITDEPTH 3173 #endif // CONFIG_VP9_HIGHBITDEPTH
3172 if (vp9_is_scaled(&ref_buf->sf)) 3174 if (vp9_is_scaled(&ref_buf->sf))
3173 vp9_extend_frame_borders(buf); 3175 vpx_extend_frame_borders(buf);
3174 } else { 3176 } else {
3175 ref_buf->buf = NULL; 3177 ref_buf->buf = NULL;
3176 } 3178 }
3177 } 3179 }
3178 3180
3179 set_ref_ptrs(cm, xd, LAST_FRAME, LAST_FRAME); 3181 set_ref_ptrs(cm, xd, LAST_FRAME, LAST_FRAME);
3180 } 3182 }
3181 3183
3182 static void encode_without_recode_loop(VP9_COMP *cpi) { 3184 static void encode_without_recode_loop(VP9_COMP *cpi,
3185 size_t *size,
3186 uint8_t *dest) {
3183 VP9_COMMON *const cm = &cpi->common; 3187 VP9_COMMON *const cm = &cpi->common;
3184 int q = 0, bottom_index = 0, top_index = 0; // Dummy variables. 3188 int q = 0, bottom_index = 0, top_index = 0; // Dummy variables.
3185 3189
3186 vp9_clear_system_state(); 3190 vpx_clear_system_state();
3187 3191
3188 set_frame_size(cpi); 3192 set_frame_size(cpi);
3189 3193
3190 // For 1 pass CBR under dynamic resize mode: use faster scaling for source. 3194 cpi->Source = vp9_scale_if_required(cm,
3191 // Only for 2x2 scaling for now. 3195 cpi->un_scaled_source,
3196 &cpi->scaled_source);
3197 if (cpi->unscaled_last_source != NULL)
3198 cpi->Last_Source = vp9_scale_if_required(cm,
3199 cpi->unscaled_last_source,
3200 &cpi->scaled_last_source);
3201
3192 if (cpi->oxcf.pass == 0 && 3202 if (cpi->oxcf.pass == 0 &&
3193 cpi->oxcf.rc_mode == VPX_CBR && 3203 cpi->oxcf.rc_mode == VPX_CBR &&
3194 cpi->oxcf.resize_mode == RESIZE_DYNAMIC && 3204 cpi->resize_state == 0 &&
3195 cpi->un_scaled_source->y_width == (cm->width << 1) && 3205 cm->frame_type != KEY_FRAME &&
3196 cpi->un_scaled_source->y_height == (cm->height << 1)) { 3206 cpi->oxcf.content == VP9E_CONTENT_SCREEN)
3197 cpi->Source = vp9_scale_if_required_fast(cm, 3207 vp9_avg_source_sad(cpi);
3198 cpi->un_scaled_source,
3199 &cpi->scaled_source);
3200 if (cpi->unscaled_last_source != NULL)
3201 cpi->Last_Source = vp9_scale_if_required_fast(cm,
3202 cpi->unscaled_last_source,
3203 &cpi->scaled_last_source);
3204 } else {
3205 cpi->Source = vp9_scale_if_required(cm, cpi->un_scaled_source,
3206 &cpi->scaled_source);
3207 if (cpi->unscaled_last_source != NULL)
3208 cpi->Last_Source = vp9_scale_if_required(cm, cpi->unscaled_last_source,
3209 &cpi->scaled_last_source);
3210 }
3211 3208
3212 if (frame_is_intra_only(cm) == 0) { 3209 if (frame_is_intra_only(cm) == 0) {
3213 vp9_scale_references(cpi); 3210 vp9_scale_references(cpi);
3214 } 3211 }
3215 3212
3216 set_size_independent_vars(cpi); 3213 set_size_independent_vars(cpi);
3217 set_size_dependent_vars(cpi, &q, &bottom_index, &top_index); 3214 set_size_dependent_vars(cpi, &q, &bottom_index, &top_index);
3218 3215
3219 vp9_set_quantizer(cm, q); 3216 vp9_set_quantizer(cm, q);
3220 vp9_set_variance_partition_thresholds(cpi, q); 3217 vp9_set_variance_partition_thresholds(cpi, q);
3221 3218
3222 setup_frame(cpi); 3219 setup_frame(cpi);
3223 3220
3224 suppress_active_map(cpi); 3221 suppress_active_map(cpi);
3225 // Variance adaptive and in frame q adjustment experiments are mutually 3222 // Variance adaptive and in frame q adjustment experiments are mutually
3226 // exclusive. 3223 // exclusive.
3227 if (cpi->oxcf.aq_mode == VARIANCE_AQ) { 3224 if (cpi->oxcf.aq_mode == VARIANCE_AQ) {
3228 vp9_vaq_frame_setup(cpi); 3225 vp9_vaq_frame_setup(cpi);
3229 } else if (cpi->oxcf.aq_mode == COMPLEXITY_AQ) { 3226 } else if (cpi->oxcf.aq_mode == COMPLEXITY_AQ) {
3230 vp9_setup_in_frame_q_adj(cpi); 3227 vp9_setup_in_frame_q_adj(cpi);
3231 } else if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ) { 3228 } else if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ) {
3232 vp9_cyclic_refresh_setup(cpi); 3229 vp9_cyclic_refresh_setup(cpi);
3233 } 3230 }
3234 apply_active_map(cpi); 3231 apply_active_map(cpi);
3235 3232
3236 // transform / motion compensation build reconstruction frame 3233 // transform / motion compensation build reconstruction frame
3237 vp9_encode_frame(cpi); 3234 vp9_encode_frame(cpi);
3238 3235
3236 // Check if we should drop this frame because of high overshoot.
3237 // Only for frames where high temporal-source sad is detected.
3238 if (cpi->oxcf.pass == 0 &&
3239 cpi->oxcf.rc_mode == VPX_CBR &&
3240 cpi->resize_state == 0 &&
3241 cm->frame_type != KEY_FRAME &&
3242 cpi->oxcf.content == VP9E_CONTENT_SCREEN &&
3243 cpi->rc.high_source_sad == 1) {
3244 int frame_size = 0;
3245 // Get an estimate of the encoded frame size.
3246 save_coding_context(cpi);
3247 vp9_pack_bitstream(cpi, dest, size);
3248 restore_coding_context(cpi);
3249 frame_size = (int)(*size) << 3;
3250 // Check if encoded frame will overshoot too much, and if so, set the q and
3251 // adjust some rate control parameters, and return to re-encode the frame.
3252 if (vp9_encodedframe_overshoot(cpi, frame_size, &q)) {
3253 vpx_clear_system_state();
3254 vp9_set_quantizer(cm, q);
3255 vp9_set_variance_partition_thresholds(cpi, q);
3256 suppress_active_map(cpi);
3257 // Turn-off cyclic refresh for re-encoded frame.
3258 if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ) {
3259 unsigned char *const seg_map = cpi->segmentation_map;
3260 memset(seg_map, 0, cm->mi_rows * cm->mi_cols);
3261 vp9_disable_segmentation(&cm->seg);
3262 }
3263 apply_active_map(cpi);
3264 vp9_encode_frame(cpi);
3265 }
3266 }
3267
3239 // Update some stats from cyclic refresh, and check if we should not update 3268 // Update some stats from cyclic refresh, and check if we should not update
3240 // golden reference, for non-SVC 1 pass CBR. 3269 // golden reference, for non-SVC 1 pass CBR.
3241 if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ && 3270 if (cpi->oxcf.aq_mode == CYCLIC_REFRESH_AQ &&
3242 cm->frame_type != KEY_FRAME && 3271 cm->frame_type != KEY_FRAME &&
3243 !cpi->use_svc && 3272 !cpi->use_svc &&
3244 (cpi->oxcf.pass == 0 && cpi->oxcf.rc_mode == VPX_CBR)) 3273 (cpi->oxcf.pass == 0 && cpi->oxcf.rc_mode == VPX_CBR))
3245 vp9_cyclic_refresh_check_golden_update(cpi); 3274 vp9_cyclic_refresh_check_golden_update(cpi);
3246 3275
3247 // Update the skip mb flag probabilities based on the distribution 3276 // Update the skip mb flag probabilities based on the distribution
3248 // seen in the last encoder iteration. 3277 // seen in the last encoder iteration.
3249 // update_base_skip_probs(cpi); 3278 // update_base_skip_probs(cpi);
3250 vp9_clear_system_state(); 3279 vpx_clear_system_state();
3251 } 3280 }
3252 3281
3253 static void encode_with_recode_loop(VP9_COMP *cpi, 3282 static void encode_with_recode_loop(VP9_COMP *cpi,
3254 size_t *size, 3283 size_t *size,
3255 uint8_t *dest) { 3284 uint8_t *dest) {
3256 VP9_COMMON *const cm = &cpi->common; 3285 VP9_COMMON *const cm = &cpi->common;
3257 RATE_CONTROL *const rc = &cpi->rc; 3286 RATE_CONTROL *const rc = &cpi->rc;
3258 int bottom_index, top_index; 3287 int bottom_index, top_index;
3259 int loop_count = 0; 3288 int loop_count = 0;
3260 int loop_at_this_size = 0; 3289 int loop_at_this_size = 0;
3261 int loop = 0; 3290 int loop = 0;
3262 int overshoot_seen = 0; 3291 int overshoot_seen = 0;
3263 int undershoot_seen = 0; 3292 int undershoot_seen = 0;
3264 int frame_over_shoot_limit; 3293 int frame_over_shoot_limit;
3265 int frame_under_shoot_limit; 3294 int frame_under_shoot_limit;
3266 int q = 0, q_low = 0, q_high = 0; 3295 int q = 0, q_low = 0, q_high = 0;
3267 3296
3268 set_size_independent_vars(cpi); 3297 set_size_independent_vars(cpi);
3269 3298
3270 do { 3299 do {
3271 vp9_clear_system_state(); 3300 vpx_clear_system_state();
3272 3301
3273 set_frame_size(cpi); 3302 set_frame_size(cpi);
3274 3303
3275 if (loop_count == 0 || cpi->resize_pending != 0) { 3304 if (loop_count == 0 || cpi->resize_pending != 0) {
3276 set_size_dependent_vars(cpi, &q, &bottom_index, &top_index); 3305 set_size_dependent_vars(cpi, &q, &bottom_index, &top_index);
3277 3306
3278 // TODO(agrange) Scale cpi->max_mv_magnitude if frame-size has changed. 3307 // TODO(agrange) Scale cpi->max_mv_magnitude if frame-size has changed.
3279 set_mv_search_params(cpi); 3308 set_mv_search_params(cpi);
3280 3309
3281 // Reset the loop state for new frame size. 3310 // Reset the loop state for new frame size.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3325 vp9_setup_in_frame_q_adj(cpi); 3354 vp9_setup_in_frame_q_adj(cpi);
3326 } 3355 }
3327 3356
3328 // transform / motion compensation build reconstruction frame 3357 // transform / motion compensation build reconstruction frame
3329 vp9_encode_frame(cpi); 3358 vp9_encode_frame(cpi);
3330 3359
3331 // Update the skip mb flag probabilities based on the distribution 3360 // Update the skip mb flag probabilities based on the distribution
3332 // seen in the last encoder iteration. 3361 // seen in the last encoder iteration.
3333 // update_base_skip_probs(cpi); 3362 // update_base_skip_probs(cpi);
3334 3363
3335 vp9_clear_system_state(); 3364 vpx_clear_system_state();
3336 3365
3337 // Dummy pack of the bitstream using up to date stats to get an 3366 // Dummy pack of the bitstream using up to date stats to get an
3338 // accurate estimate of output frame size to determine if we need 3367 // accurate estimate of output frame size to determine if we need
3339 // to recode. 3368 // to recode.
3340 if (cpi->sf.recode_loop >= ALLOW_RECODE_KFARFGF) { 3369 if (cpi->sf.recode_loop >= ALLOW_RECODE_KFARFGF) {
3341 save_coding_context(cpi); 3370 save_coding_context(cpi);
3342 if (!cpi->sf.use_nonrd_pick_mode) 3371 if (!cpi->sf.use_nonrd_pick_mode)
3343 vp9_pack_bitstream(cpi, dest, size); 3372 vp9_pack_bitstream(cpi, dest, size);
3344 3373
3345 rc->projected_frame_size = (int)(*size) << 3; 3374 rc->projected_frame_size = (int)(*size) << 3;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
3378 // to make it better without undue risk of popping. 3407 // to make it better without undue risk of popping.
3379 if ((kf_err > high_err_target && 3408 if ((kf_err > high_err_target &&
3380 rc->projected_frame_size <= frame_over_shoot_limit) || 3409 rc->projected_frame_size <= frame_over_shoot_limit) ||
3381 (kf_err > low_err_target && 3410 (kf_err > low_err_target &&
3382 rc->projected_frame_size <= frame_under_shoot_limit)) { 3411 rc->projected_frame_size <= frame_under_shoot_limit)) {
3383 // Lower q_high 3412 // Lower q_high
3384 q_high = q > q_low ? q - 1 : q_low; 3413 q_high = q > q_low ? q - 1 : q_low;
3385 3414
3386 // Adjust Q 3415 // Adjust Q
3387 q = (int)((q * high_err_target) / kf_err); 3416 q = (int)((q * high_err_target) / kf_err);
3388 q = MIN(q, (q_high + q_low) >> 1); 3417 q = VPXMIN(q, (q_high + q_low) >> 1);
3389 } else if (kf_err < low_err_target && 3418 } else if (kf_err < low_err_target &&
3390 rc->projected_frame_size >= frame_under_shoot_limit) { 3419 rc->projected_frame_size >= frame_under_shoot_limit) {
3391 // The key frame is much better than the previous frame 3420 // The key frame is much better than the previous frame
3392 // Raise q_low 3421 // Raise q_low
3393 q_low = q < q_high ? q + 1 : q_high; 3422 q_low = q < q_high ? q + 1 : q_high;
3394 3423
3395 // Adjust Q 3424 // Adjust Q
3396 q = (int)((q * low_err_target) / kf_err); 3425 q = (int)((q * low_err_target) / kf_err);
3397 q = MIN(q, (q_high + q_low + 1) >> 1); 3426 q = VPXMIN(q, (q_high + q_low + 1) >> 1);
3398 } 3427 }
3399 3428
3400 // Clamp Q to upper and lower limits: 3429 // Clamp Q to upper and lower limits:
3401 q = clamp(q, q_low, q_high); 3430 q = clamp(q, q_low, q_high);
3402 3431
3403 loop = q != last_q; 3432 loop = q != last_q;
3404 } else if (recode_loop_test( 3433 } else if (recode_loop_test(
3405 cpi, frame_over_shoot_limit, frame_under_shoot_limit, 3434 cpi, frame_over_shoot_limit, frame_under_shoot_limit,
3406 q, MAX(q_high, top_index), bottom_index)) { 3435 q, VPXMAX(q_high, top_index), bottom_index)) {
3407 // Is the projected frame size out of range and are we allowed 3436 // Is the projected frame size out of range and are we allowed
3408 // to attempt to recode. 3437 // to attempt to recode.
3409 int last_q = q; 3438 int last_q = q;
3410 int retries = 0; 3439 int retries = 0;
3411 3440
3412 if (cpi->resize_pending == 1) { 3441 if (cpi->resize_pending == 1) {
3413 // Change in frame size so go back around the recode loop. 3442 // Change in frame size so go back around the recode loop.
3414 cpi->rc.frame_size_selector = 3443 cpi->rc.frame_size_selector =
3415 SCALE_STEP1 - cpi->rc.frame_size_selector; 3444 SCALE_STEP1 - cpi->rc.frame_size_selector;
3416 cpi->rc.next_frame_size_selector = cpi->rc.frame_size_selector; 3445 cpi->rc.next_frame_size_selector = cpi->rc.frame_size_selector;
(...skipping 21 matching lines...) Expand all
3438 if (undershoot_seen || loop_at_this_size > 1) { 3467 if (undershoot_seen || loop_at_this_size > 1) {
3439 // Update rate_correction_factor unless 3468 // Update rate_correction_factor unless
3440 vp9_rc_update_rate_correction_factors(cpi); 3469 vp9_rc_update_rate_correction_factors(cpi);
3441 3470
3442 q = (q_high + q_low + 1) / 2; 3471 q = (q_high + q_low + 1) / 2;
3443 } else { 3472 } else {
3444 // Update rate_correction_factor unless 3473 // Update rate_correction_factor unless
3445 vp9_rc_update_rate_correction_factors(cpi); 3474 vp9_rc_update_rate_correction_factors(cpi);
3446 3475
3447 q = vp9_rc_regulate_q(cpi, rc->this_frame_target, 3476 q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
3448 bottom_index, MAX(q_high, top_index)); 3477 bottom_index, VPXMAX(q_high, top_index));
3449 3478
3450 while (q < q_low && retries < 10) { 3479 while (q < q_low && retries < 10) {
3451 vp9_rc_update_rate_correction_factors(cpi); 3480 vp9_rc_update_rate_correction_factors(cpi);
3452 q = vp9_rc_regulate_q(cpi, rc->this_frame_target, 3481 q = vp9_rc_regulate_q(cpi, rc->this_frame_target,
3453 bottom_index, MAX(q_high, top_index)); 3482 bottom_index, VPXMAX(q_high, top_index));
3454 retries++; 3483 retries++;
3455 } 3484 }
3456 } 3485 }
3457 3486
3458 overshoot_seen = 1; 3487 overshoot_seen = 1;
3459 } else { 3488 } else {
3460 // Frame is too small 3489 // Frame is too small
3461 q_high = q > q_low ? q - 1 : q_low; 3490 q_high = q > q_low ? q - 1 : q_low;
3462 3491
3463 if (overshoot_seen || loop_at_this_size > 1) { 3492 if (overshoot_seen || loop_at_this_size > 1) {
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
3546 cpi->ext_refresh_frame_context_pending = 0; 3575 cpi->ext_refresh_frame_context_pending = 0;
3547 } 3576 }
3548 if (cpi->ext_refresh_frame_flags_pending) { 3577 if (cpi->ext_refresh_frame_flags_pending) {
3549 cpi->refresh_last_frame = cpi->ext_refresh_last_frame; 3578 cpi->refresh_last_frame = cpi->ext_refresh_last_frame;
3550 cpi->refresh_golden_frame = cpi->ext_refresh_golden_frame; 3579 cpi->refresh_golden_frame = cpi->ext_refresh_golden_frame;
3551 cpi->refresh_alt_ref_frame = cpi->ext_refresh_alt_ref_frame; 3580 cpi->refresh_alt_ref_frame = cpi->ext_refresh_alt_ref_frame;
3552 cpi->ext_refresh_frame_flags_pending = 0; 3581 cpi->ext_refresh_frame_flags_pending = 0;
3553 } 3582 }
3554 } 3583 }
3555 3584
3556 YV12_BUFFER_CONFIG *vp9_scale_if_required_fast(VP9_COMMON *cm,
3557 YV12_BUFFER_CONFIG *unscaled,
3558 YV12_BUFFER_CONFIG *scaled) {
3559 if (cm->mi_cols * MI_SIZE != unscaled->y_width ||
3560 cm->mi_rows * MI_SIZE != unscaled->y_height) {
3561 // For 2x2 scaling down.
3562 vpx_scale_frame(unscaled, scaled, unscaled->y_buffer, 9, 2, 1,
3563 2, 1, 0);
3564 vp9_extend_frame_borders(scaled);
3565 return scaled;
3566 } else {
3567 return unscaled;
3568 }
3569 }
3570
3571 YV12_BUFFER_CONFIG *vp9_scale_if_required(VP9_COMMON *cm, 3585 YV12_BUFFER_CONFIG *vp9_scale_if_required(VP9_COMMON *cm,
3572 YV12_BUFFER_CONFIG *unscaled, 3586 YV12_BUFFER_CONFIG *unscaled,
3573 YV12_BUFFER_CONFIG *scaled) { 3587 YV12_BUFFER_CONFIG *scaled) {
3574 if (cm->mi_cols * MI_SIZE != unscaled->y_width || 3588 if (cm->mi_cols * MI_SIZE != unscaled->y_width ||
3575 cm->mi_rows * MI_SIZE != unscaled->y_height) { 3589 cm->mi_rows * MI_SIZE != unscaled->y_height) {
3576 #if CONFIG_VP9_HIGHBITDEPTH 3590 #if CONFIG_VP9_HIGHBITDEPTH
3577 scale_and_extend_frame_nonnormative(unscaled, scaled, (int)cm->bit_depth); 3591 if (unscaled->y_width == (scaled->y_width << 1) &&
3592 unscaled->y_height == (scaled->y_height << 1))
3593 scale_and_extend_frame(unscaled, scaled, (int)cm->bit_depth);
3594 else
3595 scale_and_extend_frame_nonnormative(unscaled, scaled, (int)cm->bit_depth);
3578 #else 3596 #else
3579 scale_and_extend_frame_nonnormative(unscaled, scaled); 3597 // Use the faster normative (convolve8) scaling filter: for now only for
3598 // scaling factor of 2.
3599 if (unscaled->y_width == (scaled->y_width << 1) &&
3600 unscaled->y_height == (scaled->y_height << 1))
3601 scale_and_extend_frame(unscaled, scaled);
3602 else
3603 scale_and_extend_frame_nonnormative(unscaled, scaled);
3580 #endif // CONFIG_VP9_HIGHBITDEPTH 3604 #endif // CONFIG_VP9_HIGHBITDEPTH
3581 return scaled; 3605 return scaled;
3582 } else { 3606 } else {
3583 return unscaled; 3607 return unscaled;
3584 } 3608 }
3585 } 3609 }
3586 3610
3587 static void set_arf_sign_bias(VP9_COMP *cpi) { 3611 static void set_arf_sign_bias(VP9_COMP *cpi) {
3588 VP9_COMMON *const cm = &cpi->common; 3612 VP9_COMMON *const cm = &cpi->common;
3589 int arf_sign_bias; 3613 int arf_sign_bias;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
3629 static void encode_frame_to_data_rate(VP9_COMP *cpi, 3653 static void encode_frame_to_data_rate(VP9_COMP *cpi,
3630 size_t *size, 3654 size_t *size,
3631 uint8_t *dest, 3655 uint8_t *dest,
3632 unsigned int *frame_flags) { 3656 unsigned int *frame_flags) {
3633 VP9_COMMON *const cm = &cpi->common; 3657 VP9_COMMON *const cm = &cpi->common;
3634 const VP9EncoderConfig *const oxcf = &cpi->oxcf; 3658 const VP9EncoderConfig *const oxcf = &cpi->oxcf;
3635 struct segmentation *const seg = &cm->seg; 3659 struct segmentation *const seg = &cm->seg;
3636 TX_SIZE t; 3660 TX_SIZE t;
3637 3661
3638 set_ext_overrides(cpi); 3662 set_ext_overrides(cpi);
3639 vp9_clear_system_state(); 3663 vpx_clear_system_state();
3640 3664
3641 // Set the arf sign bias for this frame. 3665 // Set the arf sign bias for this frame.
3642 set_arf_sign_bias(cpi); 3666 set_arf_sign_bias(cpi);
3643 3667
3644 // Set default state for segment based loop filter update flags. 3668 // Set default state for segment based loop filter update flags.
3645 cm->lf.mode_ref_delta_update = 0; 3669 cm->lf.mode_ref_delta_update = 0;
3646 3670
3647 if (cpi->oxcf.pass == 2 && 3671 if (cpi->oxcf.pass == 2 &&
3648 cpi->sf.adaptive_interp_filter_search) 3672 cpi->sf.adaptive_interp_filter_search)
3649 cpi->sf.interp_filter_search_mask = 3673 cpi->sf.interp_filter_search_mask =
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
3720 if (oxcf->pass == 0 && 3744 if (oxcf->pass == 0 &&
3721 oxcf->rc_mode == VPX_CBR && 3745 oxcf->rc_mode == VPX_CBR &&
3722 cm->frame_type != KEY_FRAME) { 3746 cm->frame_type != KEY_FRAME) {
3723 if (vp9_rc_drop_frame(cpi)) { 3747 if (vp9_rc_drop_frame(cpi)) {
3724 vp9_rc_postencode_update_drop_frame(cpi); 3748 vp9_rc_postencode_update_drop_frame(cpi);
3725 ++cm->current_video_frame; 3749 ++cm->current_video_frame;
3726 return; 3750 return;
3727 } 3751 }
3728 } 3752 }
3729 3753
3730 vp9_clear_system_state(); 3754 vpx_clear_system_state();
3731 3755
3732 #if CONFIG_INTERNAL_STATS 3756 #if CONFIG_INTERNAL_STATS
3733 memset(cpi->mode_chosen_counts, 0, 3757 memset(cpi->mode_chosen_counts, 0,
3734 MAX_MODES * sizeof(*cpi->mode_chosen_counts)); 3758 MAX_MODES * sizeof(*cpi->mode_chosen_counts));
3735 #endif 3759 #endif
3736 3760
3737 if (cpi->sf.recode_loop == DISALLOW_RECODE) { 3761 if (cpi->sf.recode_loop == DISALLOW_RECODE) {
3738 encode_without_recode_loop(cpi); 3762 encode_without_recode_loop(cpi, size, dest);
3739 } else { 3763 } else {
3740 encode_with_recode_loop(cpi, size, dest); 3764 encode_with_recode_loop(cpi, size, dest);
3741 } 3765 }
3742 3766
3743 #if CONFIG_VP9_TEMPORAL_DENOISING 3767 #if CONFIG_VP9_TEMPORAL_DENOISING
3744 #ifdef OUTPUT_YUV_DENOISED 3768 #ifdef OUTPUT_YUV_DENOISED
3745 if (oxcf->noise_sensitivity > 0) { 3769 if (oxcf->noise_sensitivity > 0) {
3746 vp9_write_yuv_frame_420(&cpi->denoiser.running_avg_y[INTRA_FRAME], 3770 vp9_write_yuv_frame_420(&cpi->denoiser.running_avg_y[INTRA_FRAME],
3747 yuv_denoised_file); 3771 yuv_denoised_file);
3748 } 3772 }
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
4022 step = (int)((this_duration - last_duration) * 10 / last_duration); 4046 step = (int)((this_duration - last_duration) * 10 / last_duration);
4023 } 4047 }
4024 4048
4025 if (this_duration) { 4049 if (this_duration) {
4026 if (step) { 4050 if (step) {
4027 vp9_new_framerate(cpi, 10000000.0 / this_duration); 4051 vp9_new_framerate(cpi, 10000000.0 / this_duration);
4028 } else { 4052 } else {
4029 // Average this frame's rate into the last second's average 4053 // Average this frame's rate into the last second's average
4030 // frame rate. If we haven't seen 1 second yet, then average 4054 // frame rate. If we haven't seen 1 second yet, then average
4031 // over the whole interval seen. 4055 // over the whole interval seen.
4032 const double interval = MIN((double)(source->ts_end 4056 const double interval = VPXMIN(
4033 - cpi->first_time_stamp_ever), 10000000.0); 4057 (double)(source->ts_end - cpi->first_time_stamp_ever), 10000000.0);
4034 double avg_duration = 10000000.0 / cpi->framerate; 4058 double avg_duration = 10000000.0 / cpi->framerate;
4035 avg_duration *= (interval - avg_duration + this_duration); 4059 avg_duration *= (interval - avg_duration + this_duration);
4036 avg_duration /= interval; 4060 avg_duration /= interval;
4037 4061
4038 vp9_new_framerate(cpi, 10000000.0 / avg_duration); 4062 vp9_new_framerate(cpi, 10000000.0 / avg_duration);
4039 } 4063 }
4040 } 4064 }
4041 cpi->last_time_stamp_seen = source->ts_start; 4065 cpi->last_time_stamp_seen = source->ts_start;
4042 cpi->last_end_time_stamp_seen = source->ts_end; 4066 cpi->last_end_time_stamp_seen = source->ts_end;
4043 } 4067 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
4077 // Current frame is an ARF overlay frame. 4101 // Current frame is an ARF overlay frame.
4078 cpi->alt_ref_source = NULL; 4102 cpi->alt_ref_source = NULL;
4079 4103
4080 // Don't refresh the last buffer for an ARF overlay frame. It will 4104 // Don't refresh the last buffer for an ARF overlay frame. It will
4081 // become the GF so preserve last as an alternative prediction option. 4105 // become the GF so preserve last as an alternative prediction option.
4082 cpi->refresh_last_frame = 0; 4106 cpi->refresh_last_frame = 0;
4083 } 4107 }
4084 } 4108 }
4085 4109
4086 #if CONFIG_INTERNAL_STATS 4110 #if CONFIG_INTERNAL_STATS
4087 extern double vp9_get_blockiness(const unsigned char *img1, int img1_pitch, 4111 extern double vp9_get_blockiness(const uint8_t *img1, int img1_pitch,
4088 const unsigned char *img2, int img2_pitch, 4112 const uint8_t *img2, int img2_pitch,
4089 int width, int height); 4113 int width, int height);
4090 4114
4091 static void adjust_image_stat(double y, double u, double v, double all, 4115 static void adjust_image_stat(double y, double u, double v, double all,
4092 ImageStat *s) { 4116 ImageStat *s) {
4093 s->stat[Y] += y; 4117 s->stat[Y] += y;
4094 s->stat[U] += u; 4118 s->stat[U] += u;
4095 s->stat[V] += v; 4119 s->stat[V] += v;
4096 s->stat[ALL] += all; 4120 s->stat[ALL] += all;
4097 s->worst = MIN(s->worst, all); 4121 s->worst = VPXMIN(s->worst, all);
4098 } 4122 }
4099 #endif // CONFIG_INTERNAL_STATS 4123 #endif // CONFIG_INTERNAL_STATS
4100 4124
4101 int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags, 4125 int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags,
4102 size_t *size, uint8_t *dest, 4126 size_t *size, uint8_t *dest,
4103 int64_t *time_stamp, int64_t *time_end, int flush) { 4127 int64_t *time_stamp, int64_t *time_end, int flush) {
4104 const VP9EncoderConfig *const oxcf = &cpi->oxcf; 4128 const VP9EncoderConfig *const oxcf = &cpi->oxcf;
4105 VP9_COMMON *const cm = &cpi->common; 4129 VP9_COMMON *const cm = &cpi->common;
4106 BufferPool *const pool = cm->buffer_pool; 4130 BufferPool *const pool = cm->buffer_pool;
4107 RATE_CONTROL *const rc = &cpi->rc; 4131 RATE_CONTROL *const rc = &cpi->rc;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
4170 break; 4194 break;
4171 } 4195 }
4172 } 4196 }
4173 } 4197 }
4174 cpi->svc.layer_context[cpi->svc.spatial_layer_id].has_alt_frame = 1; 4198 cpi->svc.layer_context[cpi->svc.spatial_layer_id].has_alt_frame = 1;
4175 #endif 4199 #endif
4176 4200
4177 if (oxcf->arnr_max_frames > 0) { 4201 if (oxcf->arnr_max_frames > 0) {
4178 // Produce the filtered ARF frame. 4202 // Produce the filtered ARF frame.
4179 vp9_temporal_filter(cpi, arf_src_index); 4203 vp9_temporal_filter(cpi, arf_src_index);
4180 vp9_extend_frame_borders(&cpi->alt_ref_buffer); 4204 vpx_extend_frame_borders(&cpi->alt_ref_buffer);
4181 force_src_buffer = &cpi->alt_ref_buffer; 4205 force_src_buffer = &cpi->alt_ref_buffer;
4182 } 4206 }
4183 4207
4184 cm->show_frame = 0; 4208 cm->show_frame = 0;
4185 cm->intra_only = 0; 4209 cm->intra_only = 0;
4186 cpi->refresh_alt_ref_frame = 1; 4210 cpi->refresh_alt_ref_frame = 1;
4187 cpi->refresh_golden_frame = 0; 4211 cpi->refresh_golden_frame = 0;
4188 cpi->refresh_last_frame = 0; 4212 cpi->refresh_last_frame = 0;
4189 rc->is_src_frame_alt_ref = 0; 4213 rc->is_src_frame_alt_ref = 0;
4190 rc->source_alt_ref_pending = 0; 4214 rc->source_alt_ref_pending = 0;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
4240 } 4264 }
4241 return -1; 4265 return -1;
4242 } 4266 }
4243 4267
4244 if (source->ts_start < cpi->first_time_stamp_ever) { 4268 if (source->ts_start < cpi->first_time_stamp_ever) {
4245 cpi->first_time_stamp_ever = source->ts_start; 4269 cpi->first_time_stamp_ever = source->ts_start;
4246 cpi->last_end_time_stamp_seen = source->ts_start; 4270 cpi->last_end_time_stamp_seen = source->ts_start;
4247 } 4271 }
4248 4272
4249 // Clear down mmx registers 4273 // Clear down mmx registers
4250 vp9_clear_system_state(); 4274 vpx_clear_system_state();
4251 4275
4252 // adjust frame rates based on timestamps given 4276 // adjust frame rates based on timestamps given
4253 if (cm->show_frame) { 4277 if (cm->show_frame) {
4254 adjust_frame_rate(cpi, source); 4278 adjust_frame_rate(cpi, source);
4255 } 4279 }
4256 4280
4257 if (is_one_pass_cbr_svc(cpi)) { 4281 if (is_one_pass_cbr_svc(cpi)) {
4258 vp9_update_temporal_layer_framerate(cpi); 4282 vp9_update_temporal_layer_framerate(cpi);
4259 vp9_restore_layer_context(cpi); 4283 vp9_restore_layer_context(cpi);
4260 } 4284 }
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
4377 adjust_image_stat(psnr.psnr[1], psnr.psnr[2], psnr.psnr[3], 4401 adjust_image_stat(psnr.psnr[1], psnr.psnr[2], psnr.psnr[3],
4378 psnr.psnr[0], &cpi->psnr); 4402 psnr.psnr[0], &cpi->psnr);
4379 cpi->total_sq_error += psnr.sse[0]; 4403 cpi->total_sq_error += psnr.sse[0];
4380 cpi->total_samples += psnr.samples[0]; 4404 cpi->total_samples += psnr.samples[0];
4381 samples = psnr.samples[0]; 4405 samples = psnr.samples[0];
4382 4406
4383 { 4407 {
4384 PSNR_STATS psnr2; 4408 PSNR_STATS psnr2;
4385 double frame_ssim2 = 0, weight = 0; 4409 double frame_ssim2 = 0, weight = 0;
4386 #if CONFIG_VP9_POSTPROC 4410 #if CONFIG_VP9_POSTPROC
4387 if (vp9_alloc_frame_buffer(&cm->post_proc_buffer, 4411 if (vpx_alloc_frame_buffer(&cm->post_proc_buffer,
4388 recon->y_crop_width, recon->y_crop_height, 4412 recon->y_crop_width, recon->y_crop_height,
4389 cm->subsampling_x, cm->subsampling_y, 4413 cm->subsampling_x, cm->subsampling_y,
4390 #if CONFIG_VP9_HIGHBITDEPTH 4414 #if CONFIG_VP9_HIGHBITDEPTH
4391 cm->use_highbitdepth, 4415 cm->use_highbitdepth,
4392 #endif 4416 #endif
4393 VP9_ENC_BORDER_IN_PIXELS, 4417 VP9_ENC_BORDER_IN_PIXELS,
4394 cm->byte_alignment) < 0) { 4418 cm->byte_alignment) < 0) {
4395 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR, 4419 vpx_internal_error(&cm->error, VPX_CODEC_MEM_ERROR,
4396 "Failed to allocate post processing buffer"); 4420 "Failed to allocate post processing buffer");
4397 } 4421 }
4398 4422
4399 vp9_deblock(cm->frame_to_show, &cm->post_proc_buffer, 4423 vp9_deblock(cm->frame_to_show, &cm->post_proc_buffer,
4400 cm->lf.filter_level * 10 / 6); 4424 cm->lf.filter_level * 10 / 6);
4401 #endif 4425 #endif
4402 vp9_clear_system_state(); 4426 vpx_clear_system_state();
4403 4427
4404 #if CONFIG_VP9_HIGHBITDEPTH 4428 #if CONFIG_VP9_HIGHBITDEPTH
4405 calc_highbd_psnr(orig, pp, &psnr2, cpi->td.mb.e_mbd.bd, 4429 calc_highbd_psnr(orig, pp, &psnr2, cpi->td.mb.e_mbd.bd,
4406 cpi->oxcf.input_bit_depth); 4430 cpi->oxcf.input_bit_depth);
4407 #else 4431 #else
4408 calc_psnr(orig, pp, &psnr2); 4432 calc_psnr(orig, pp, &psnr2);
4409 #endif // CONFIG_VP9_HIGHBITDEPTH 4433 #endif // CONFIG_VP9_HIGHBITDEPTH
4410 4434
4411 cpi->totalp_sq_error += psnr2.sse[0]; 4435 cpi->totalp_sq_error += psnr2.sse[0];
4412 cpi->totalp_samples += psnr2.samples[0]; 4436 cpi->totalp_samples += psnr2.samples[0];
4413 adjust_image_stat(psnr2.psnr[1], psnr2.psnr[2], psnr2.psnr[3], 4437 adjust_image_stat(psnr2.psnr[1], psnr2.psnr[2], psnr2.psnr[3],
4414 psnr2.psnr[0], &cpi->psnrp); 4438 psnr2.psnr[0], &cpi->psnrp);
4415 4439
4416 #if CONFIG_VP9_HIGHBITDEPTH 4440 #if CONFIG_VP9_HIGHBITDEPTH
4417 if (cm->use_highbitdepth) { 4441 if (cm->use_highbitdepth) {
4418 frame_ssim2 = vp9_highbd_calc_ssim(orig, recon, &weight, 4442 frame_ssim2 = vpx_highbd_calc_ssim(orig, recon, &weight,
4419 (int)cm->bit_depth); 4443 (int)cm->bit_depth);
4420 } else { 4444 } else {
4421 frame_ssim2 = vp9_calc_ssim(orig, recon, &weight); 4445 frame_ssim2 = vpx_calc_ssim(orig, recon, &weight);
4422 } 4446 }
4423 #else 4447 #else
4424 frame_ssim2 = vp9_calc_ssim(orig, recon, &weight); 4448 frame_ssim2 = vpx_calc_ssim(orig, recon, &weight);
4425 #endif // CONFIG_VP9_HIGHBITDEPTH 4449 #endif // CONFIG_VP9_HIGHBITDEPTH
4426 4450
4427 cpi->worst_ssim= MIN(cpi->worst_ssim, frame_ssim2); 4451 cpi->worst_ssim = VPXMIN(cpi->worst_ssim, frame_ssim2);
4428 cpi->summed_quality += frame_ssim2 * weight; 4452 cpi->summed_quality += frame_ssim2 * weight;
4429 cpi->summed_weights += weight; 4453 cpi->summed_weights += weight;
4430 4454
4431 #if CONFIG_VP9_HIGHBITDEPTH 4455 #if CONFIG_VP9_HIGHBITDEPTH
4432 if (cm->use_highbitdepth) { 4456 if (cm->use_highbitdepth) {
4433 frame_ssim2 = vp9_highbd_calc_ssim( 4457 frame_ssim2 = vpx_highbd_calc_ssim(
4434 orig, &cm->post_proc_buffer, &weight, (int)cm->bit_depth); 4458 orig, &cm->post_proc_buffer, &weight, (int)cm->bit_depth);
4435 } else { 4459 } else {
4436 frame_ssim2 = vp9_calc_ssim(orig, &cm->post_proc_buffer, &weight); 4460 frame_ssim2 = vpx_calc_ssim(orig, &cm->post_proc_buffer, &weight);
4437 } 4461 }
4438 #else 4462 #else
4439 frame_ssim2 = vp9_calc_ssim(orig, &cm->post_proc_buffer, &weight); 4463 frame_ssim2 = vpx_calc_ssim(orig, &cm->post_proc_buffer, &weight);
4440 #endif // CONFIG_VP9_HIGHBITDEPTH 4464 #endif // CONFIG_VP9_HIGHBITDEPTH
4441 4465
4442 cpi->summedp_quality += frame_ssim2 * weight; 4466 cpi->summedp_quality += frame_ssim2 * weight;
4443 cpi->summedp_weights += weight; 4467 cpi->summedp_weights += weight;
4444 #if 0 4468 #if 0
4445 { 4469 {
4446 FILE *f = fopen("q_used.stt", "a"); 4470 FILE *f = fopen("q_used.stt", "a");
4447 fprintf(f, "%5d : Y%f7.3:U%f7.3:V%f7.3:F%f7.3:S%7.3f\n", 4471 fprintf(f, "%5d : Y%f7.3:U%f7.3:V%f7.3:F%f7.3:S%7.3f\n",
4448 cpi->common.current_video_frame, y2, u2, v2, 4472 cpi->common.current_video_frame, y2, u2, v2,
4449 frame_psnr2, frame_ssim2); 4473 frame_psnr2, frame_ssim2);
4450 fclose(f); 4474 fclose(f);
4451 } 4475 }
4452 #endif 4476 #endif
4453 } 4477 }
4454 } 4478 }
4455 if (cpi->b_calculate_blockiness) { 4479 if (cpi->b_calculate_blockiness) {
4456 #if CONFIG_VP9_HIGHBITDEPTH 4480 #if CONFIG_VP9_HIGHBITDEPTH
4457 if (!cm->use_highbitdepth) 4481 if (!cm->use_highbitdepth)
4458 #endif 4482 #endif
4459 { 4483 {
4460 double frame_blockiness = vp9_get_blockiness( 4484 double frame_blockiness = vp9_get_blockiness(
4461 cpi->Source->y_buffer, cpi->Source->y_stride, 4485 cpi->Source->y_buffer, cpi->Source->y_stride,
4462 cm->frame_to_show->y_buffer, cm->frame_to_show->y_stride, 4486 cm->frame_to_show->y_buffer, cm->frame_to_show->y_stride,
4463 cpi->Source->y_width, cpi->Source->y_height); 4487 cpi->Source->y_width, cpi->Source->y_height);
4464 cpi->worst_blockiness = MAX(cpi->worst_blockiness, frame_blockiness); 4488 cpi->worst_blockiness =
4489 VPXMAX(cpi->worst_blockiness, frame_blockiness);
4465 cpi->total_blockiness += frame_blockiness; 4490 cpi->total_blockiness += frame_blockiness;
4466 } 4491 }
4467 } 4492 }
4468 4493
4469 if (cpi->b_calculate_consistency) { 4494 if (cpi->b_calculate_consistency) {
4470 #if CONFIG_VP9_HIGHBITDEPTH 4495 #if CONFIG_VP9_HIGHBITDEPTH
4471 if (!cm->use_highbitdepth) 4496 if (!cm->use_highbitdepth)
4472 #endif 4497 #endif
4473 { 4498 {
4474 double this_inconsistency = vp9_get_ssim_metrics( 4499 double this_inconsistency = vpx_get_ssim_metrics(
4475 cpi->Source->y_buffer, cpi->Source->y_stride, 4500 cpi->Source->y_buffer, cpi->Source->y_stride,
4476 cm->frame_to_show->y_buffer, cm->frame_to_show->y_stride, 4501 cm->frame_to_show->y_buffer, cm->frame_to_show->y_stride,
4477 cpi->Source->y_width, cpi->Source->y_height, cpi->ssim_vars, 4502 cpi->Source->y_width, cpi->Source->y_height, cpi->ssim_vars,
4478 &cpi->metrics, 1); 4503 &cpi->metrics, 1);
4479 4504
4480 const double peak = (double)((1 << cpi->oxcf.input_bit_depth) - 1); 4505 const double peak = (double)((1 << cpi->oxcf.input_bit_depth) - 1);
4481 double consistency = vpx_sse_to_psnr(samples, peak, 4506 double consistency = vpx_sse_to_psnr(samples, peak,
4482 (double)cpi->total_inconsistency); 4507 (double)cpi->total_inconsistency);
4483 if (consistency > 0.0) 4508 if (consistency > 0.0)
4484 cpi->worst_consistency = MIN(cpi->worst_consistency, 4509 cpi->worst_consistency =
4485 consistency); 4510 VPXMIN(cpi->worst_consistency, consistency);
4486 cpi->total_inconsistency += this_inconsistency; 4511 cpi->total_inconsistency += this_inconsistency;
4487 } 4512 }
4488 } 4513 }
4489 4514
4490 if (cpi->b_calculate_ssimg) { 4515 if (cpi->b_calculate_ssimg) {
4491 double y, u, v, frame_all; 4516 double y, u, v, frame_all;
4492 #if CONFIG_VP9_HIGHBITDEPTH 4517 #if CONFIG_VP9_HIGHBITDEPTH
4493 if (cm->use_highbitdepth) { 4518 if (cm->use_highbitdepth) {
4494 frame_all = vp9_highbd_calc_ssimg(cpi->Source, cm->frame_to_show, &y, 4519 frame_all = vpx_highbd_calc_ssimg(cpi->Source, cm->frame_to_show, &y,
4495 &u, &v, (int)cm->bit_depth); 4520 &u, &v, (int)cm->bit_depth);
4496 } else { 4521 } else {
4497 frame_all = vp9_calc_ssimg(cpi->Source, cm->frame_to_show, &y, &u, 4522 frame_all = vpx_calc_ssimg(cpi->Source, cm->frame_to_show, &y, &u,
4498 &v); 4523 &v);
4499 } 4524 }
4500 #else 4525 #else
4501 frame_all = vp9_calc_ssimg(cpi->Source, cm->frame_to_show, &y, &u, &v); 4526 frame_all = vpx_calc_ssimg(cpi->Source, cm->frame_to_show, &y, &u, &v);
4502 #endif // CONFIG_VP9_HIGHBITDEPTH 4527 #endif // CONFIG_VP9_HIGHBITDEPTH
4503 adjust_image_stat(y, u, v, frame_all, &cpi->ssimg); 4528 adjust_image_stat(y, u, v, frame_all, &cpi->ssimg);
4504 } 4529 }
4505 #if CONFIG_VP9_HIGHBITDEPTH 4530 #if CONFIG_VP9_HIGHBITDEPTH
4506 if (!cm->use_highbitdepth) 4531 if (!cm->use_highbitdepth)
4507 #endif 4532 #endif
4508 { 4533 {
4509 double y, u, v, frame_all; 4534 double y, u, v, frame_all;
4510 frame_all = vp9_calc_fastssim(cpi->Source, cm->frame_to_show, &y, &u, 4535 frame_all = vpx_calc_fastssim(cpi->Source, cm->frame_to_show, &y, &u,
4511 &v); 4536 &v);
4512 adjust_image_stat(y, u, v, frame_all, &cpi->fastssim); 4537 adjust_image_stat(y, u, v, frame_all, &cpi->fastssim);
4513 /* TODO(JBB): add 10/12 bit support */ 4538 /* TODO(JBB): add 10/12 bit support */
4514 } 4539 }
4515 #if CONFIG_VP9_HIGHBITDEPTH 4540 #if CONFIG_VP9_HIGHBITDEPTH
4516 if (!cm->use_highbitdepth) 4541 if (!cm->use_highbitdepth)
4517 #endif 4542 #endif
4518 { 4543 {
4519 double y, u, v, frame_all; 4544 double y, u, v, frame_all;
4520 frame_all = vp9_psnrhvs(cpi->Source, cm->frame_to_show, &y, &u, &v); 4545 frame_all = vpx_psnrhvs(cpi->Source, cm->frame_to_show, &y, &u, &v);
4521 adjust_image_stat(y, u, v, frame_all, &cpi->psnrhvs); 4546 adjust_image_stat(y, u, v, frame_all, &cpi->psnrhvs);
4522 } 4547 }
4523 } 4548 }
4524 } 4549 }
4525 4550
4526 #endif 4551 #endif
4527 4552
4528 if (is_two_pass_svc(cpi)) { 4553 if (is_two_pass_svc(cpi)) {
4529 if (cpi->svc.encode_empty_frame_state == ENCODING) { 4554 if (cpi->svc.encode_empty_frame_state == ENCODING) {
4530 cpi->svc.encode_empty_frame_state = ENCODED; 4555 cpi->svc.encode_empty_frame_state = ENCODED;
4531 cpi->svc.encode_intra_empty_frame = 0; 4556 cpi->svc.encode_intra_empty_frame = 0;
4532 } 4557 }
4533 4558
4534 if (cm->show_frame) { 4559 if (cm->show_frame) {
4535 ++cpi->svc.spatial_layer_to_encode; 4560 ++cpi->svc.spatial_layer_to_encode;
4536 if (cpi->svc.spatial_layer_to_encode >= cpi->svc.number_spatial_layers) 4561 if (cpi->svc.spatial_layer_to_encode >= cpi->svc.number_spatial_layers)
4537 cpi->svc.spatial_layer_to_encode = 0; 4562 cpi->svc.spatial_layer_to_encode = 0;
4538 4563
4539 // May need the empty frame after an visible frame. 4564 // May need the empty frame after an visible frame.
4540 cpi->svc.encode_empty_frame_state = NEED_TO_ENCODE; 4565 cpi->svc.encode_empty_frame_state = NEED_TO_ENCODE;
4541 } 4566 }
4542 } else if (is_one_pass_cbr_svc(cpi)) { 4567 } else if (is_one_pass_cbr_svc(cpi)) {
4543 if (cm->show_frame) { 4568 if (cm->show_frame) {
4544 ++cpi->svc.spatial_layer_to_encode; 4569 ++cpi->svc.spatial_layer_to_encode;
4545 if (cpi->svc.spatial_layer_to_encode >= cpi->svc.number_spatial_layers) 4570 if (cpi->svc.spatial_layer_to_encode >= cpi->svc.number_spatial_layers)
4546 cpi->svc.spatial_layer_to_encode = 0; 4571 cpi->svc.spatial_layer_to_encode = 0;
4547 } 4572 }
4548 } 4573 }
4574 vpx_clear_system_state();
4549 return 0; 4575 return 0;
4550 } 4576 }
4551 4577
4552 int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest, 4578 int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest,
4553 vp9_ppflags_t *flags) { 4579 vp9_ppflags_t *flags) {
4554 VP9_COMMON *cm = &cpi->common; 4580 VP9_COMMON *cm = &cpi->common;
4555 #if !CONFIG_VP9_POSTPROC 4581 #if !CONFIG_VP9_POSTPROC
4556 (void)flags; 4582 (void)flags;
4557 #endif 4583 #endif
4558 4584
4559 if (!cm->show_frame) { 4585 if (!cm->show_frame) {
4560 return -1; 4586 return -1;
4561 } else { 4587 } else {
4562 int ret; 4588 int ret;
4563 #if CONFIG_VP9_POSTPROC 4589 #if CONFIG_VP9_POSTPROC
4564 ret = vp9_post_proc_frame(cm, dest, flags); 4590 ret = vp9_post_proc_frame(cm, dest, flags);
4565 #else 4591 #else
4566 if (cm->frame_to_show) { 4592 if (cm->frame_to_show) {
4567 *dest = *cm->frame_to_show; 4593 *dest = *cm->frame_to_show;
4568 dest->y_width = cm->width; 4594 dest->y_width = cm->width;
4569 dest->y_height = cm->height; 4595 dest->y_height = cm->height;
4570 dest->uv_width = cm->width >> cm->subsampling_x; 4596 dest->uv_width = cm->width >> cm->subsampling_x;
4571 dest->uv_height = cm->height >> cm->subsampling_y; 4597 dest->uv_height = cm->height >> cm->subsampling_y;
4572 ret = 0; 4598 ret = 0;
4573 } else { 4599 } else {
4574 ret = -1; 4600 ret = -1;
4575 } 4601 }
4576 #endif // !CONFIG_VP9_POSTPROC 4602 #endif // !CONFIG_VP9_POSTPROC
4577 vp9_clear_system_state(); 4603 vpx_clear_system_state();
4578 return ret; 4604 return ret;
4579 } 4605 }
4580 } 4606 }
4581 4607
4582 int vp9_set_internal_size(VP9_COMP *cpi, 4608 int vp9_set_internal_size(VP9_COMP *cpi,
4583 VPX_SCALING horiz_mode, VPX_SCALING vert_mode) { 4609 VPX_SCALING horiz_mode, VPX_SCALING vert_mode) {
4584 VP9_COMMON *cm = &cpi->common; 4610 VP9_COMMON *cm = &cpi->common;
4585 int hr = 0, hs = 0, vr = 0, vs = 0; 4611 int hr = 0, hs = 0, vr = 0, vs = 0;
4586 4612
4587 if (horiz_mode > ONETWO || vert_mode > ONETWO) 4613 if (horiz_mode > ONETWO || vert_mode > ONETWO)
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
4699 if (flags & VP8_EFLAG_NO_UPD_ARF) 4725 if (flags & VP8_EFLAG_NO_UPD_ARF)
4700 upd ^= VP9_ALT_FLAG; 4726 upd ^= VP9_ALT_FLAG;
4701 4727
4702 vp9_update_reference(cpi, upd); 4728 vp9_update_reference(cpi, upd);
4703 } 4729 }
4704 4730
4705 if (flags & VP8_EFLAG_NO_UPD_ENTROPY) { 4731 if (flags & VP8_EFLAG_NO_UPD_ENTROPY) {
4706 vp9_update_entropy(cpi, 0); 4732 vp9_update_entropy(cpi, 0);
4707 } 4733 }
4708 } 4734 }
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_encoder.h ('k') | source/libvpx/vp9/encoder/vp9_ethread.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698