| Index: source/libvpx/vp9/encoder/vp9_encoder.c
|
| diff --git a/source/libvpx/vp9/encoder/vp9_encoder.c b/source/libvpx/vp9/encoder/vp9_encoder.c
|
| index 02cafe5cbd29958c263990757be701258f9251a6..a9622cbd8729f31382b7b2a1f79eeddf1841d77f 100644
|
| --- a/source/libvpx/vp9/encoder/vp9_encoder.c
|
| +++ b/source/libvpx/vp9/encoder/vp9_encoder.c
|
| @@ -17,6 +17,7 @@
|
| #include "./vpx_dsp_rtcd.h"
|
| #include "./vpx_scale_rtcd.h"
|
| #include "vpx/internal/vpx_psnr.h"
|
| +#include "vpx_dsp/vpx_dsp_common.h"
|
| #include "vpx_dsp/vpx_filter.h"
|
| #if CONFIG_INTERNAL_STATS
|
| #include "vpx_dsp/ssim.h"
|
| @@ -1452,6 +1453,8 @@ static void realloc_segmentation_maps(VP9_COMP *cpi) {
|
| void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) {
|
| VP9_COMMON *const cm = &cpi->common;
|
| RATE_CONTROL *const rc = &cpi->rc;
|
| + int last_w = cpi->oxcf.width;
|
| + int last_h = cpi->oxcf.height;
|
|
|
| if (cm->profile != oxcf->profile)
|
| cm->profile = oxcf->profile;
|
| @@ -1504,8 +1507,10 @@ void vp9_change_config(struct VP9_COMP *cpi, const VP9EncoderConfig *oxcf) {
|
|
|
| cm->display_width = cpi->oxcf.width;
|
| cm->display_height = cpi->oxcf.height;
|
| - cm->width = cpi->oxcf.width;
|
| - cm->height = cpi->oxcf.height;
|
| + if (last_w != cpi->oxcf.width || last_h != cpi->oxcf.height) {
|
| + cm->width = cpi->oxcf.width;
|
| + cm->height = cpi->oxcf.height;
|
| + }
|
|
|
| if (cpi->initial_width) {
|
| if (cm->width > cpi->initial_width || cm->height > cpi->initial_height) {
|
| @@ -2247,42 +2252,6 @@ typedef struct {
|
| uint32_t samples[4]; // total/y/u/v
|
| } PSNR_STATS;
|
|
|
| -static void calc_psnr(const YV12_BUFFER_CONFIG *a, const YV12_BUFFER_CONFIG *b,
|
| - PSNR_STATS *psnr) {
|
| - static const double peak = 255.0;
|
| - const int widths[3] = {
|
| - a->y_crop_width, a->uv_crop_width, a->uv_crop_width};
|
| - const int heights[3] = {
|
| - a->y_crop_height, a->uv_crop_height, a->uv_crop_height};
|
| - const uint8_t *a_planes[3] = {a->y_buffer, a->u_buffer, a->v_buffer};
|
| - const int a_strides[3] = {a->y_stride, a->uv_stride, a->uv_stride};
|
| - const uint8_t *b_planes[3] = {b->y_buffer, b->u_buffer, b->v_buffer};
|
| - const int b_strides[3] = {b->y_stride, b->uv_stride, b->uv_stride};
|
| - int i;
|
| - uint64_t total_sse = 0;
|
| - uint32_t total_samples = 0;
|
| -
|
| - for (i = 0; i < 3; ++i) {
|
| - const int w = widths[i];
|
| - const int h = heights[i];
|
| - const uint32_t samples = w * h;
|
| - const uint64_t sse = get_sse(a_planes[i], a_strides[i],
|
| - b_planes[i], b_strides[i],
|
| - w, h);
|
| - psnr->sse[1 + i] = sse;
|
| - psnr->samples[1 + i] = samples;
|
| - psnr->psnr[1 + i] = vpx_sse_to_psnr(samples, peak, (double)sse);
|
| -
|
| - total_sse += sse;
|
| - total_samples += samples;
|
| - }
|
| -
|
| - psnr->sse[0] = total_sse;
|
| - psnr->samples[0] = total_samples;
|
| - psnr->psnr[0] = vpx_sse_to_psnr((double)total_samples, peak,
|
| - (double)total_sse);
|
| -}
|
| -
|
| #if CONFIG_VP9_HIGHBITDEPTH
|
| static void calc_highbd_psnr(const YV12_BUFFER_CONFIG *a,
|
| const YV12_BUFFER_CONFIG *b,
|
| @@ -2335,6 +2304,44 @@ static void calc_highbd_psnr(const YV12_BUFFER_CONFIG *a,
|
| psnr->psnr[0] = vpx_sse_to_psnr((double)total_samples, peak,
|
| (double)total_sse);
|
| }
|
| +
|
| +#else // !CONFIG_VP9_HIGHBITDEPTH
|
| +
|
| +static void calc_psnr(const YV12_BUFFER_CONFIG *a, const YV12_BUFFER_CONFIG *b,
|
| + PSNR_STATS *psnr) {
|
| + static const double peak = 255.0;
|
| + const int widths[3] = {
|
| + a->y_crop_width, a->uv_crop_width, a->uv_crop_width};
|
| + const int heights[3] = {
|
| + a->y_crop_height, a->uv_crop_height, a->uv_crop_height};
|
| + const uint8_t *a_planes[3] = {a->y_buffer, a->u_buffer, a->v_buffer};
|
| + const int a_strides[3] = {a->y_stride, a->uv_stride, a->uv_stride};
|
| + const uint8_t *b_planes[3] = {b->y_buffer, b->u_buffer, b->v_buffer};
|
| + const int b_strides[3] = {b->y_stride, b->uv_stride, b->uv_stride};
|
| + int i;
|
| + uint64_t total_sse = 0;
|
| + uint32_t total_samples = 0;
|
| +
|
| + for (i = 0; i < 3; ++i) {
|
| + const int w = widths[i];
|
| + const int h = heights[i];
|
| + const uint32_t samples = w * h;
|
| + const uint64_t sse = get_sse(a_planes[i], a_strides[i],
|
| + b_planes[i], b_strides[i],
|
| + w, h);
|
| + psnr->sse[1 + i] = sse;
|
| + psnr->samples[1 + i] = samples;
|
| + psnr->psnr[1 + i] = vpx_sse_to_psnr(samples, peak, (double)sse);
|
| +
|
| + total_sse += sse;
|
| + total_samples += samples;
|
| + }
|
| +
|
| + psnr->sse[0] = total_sse;
|
| + psnr->samples[0] = total_samples;
|
| + psnr->psnr[0] = vpx_sse_to_psnr((double)total_samples, peak,
|
| + (double)total_sse);
|
| +}
|
| #endif // CONFIG_VP9_HIGHBITDEPTH
|
|
|
| static void generate_psnr_packet(VP9_COMP *cpi) {
|
|
|