Adding sse_to_psnr function to tools_common.{h, c}.

Change-Id: Id5f974172416499ff55b0929e315b12d16ff1b1b
This commit is contained in:
Dmitry Kovalev 2014-02-27 14:00:41 -08:00
Родитель c57fc4f38c
Коммит 2dad0e1238
6 изменённых файлов: 22 добавлений и 37 удалений

Просмотреть файл

@ -18,11 +18,12 @@
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include "math.h"
#include <math.h>
#define VPX_CODEC_DISABLE_COMPAT 1
#include "vpx/vpx_encoder.h"
#include "vpx/vp8cx.h"
#include "vpx_ports/mem_ops.h"
#include "./tools_common.h"
#define interface (vpx_codec_vp8_cx())
#define fourcc 0x30385056
@ -44,21 +45,6 @@
#include "third_party/libyuv/include/libyuv/scale.h"
#include "third_party/libyuv/include/libyuv/cpu_id.h"
static double vp8_mse2psnr(double Samples, double Peak, double Mse)
{
double psnr;
if ((double)Mse > 0.0)
psnr = 10.0 * log10(Peak * Peak * Samples / Mse);
else
psnr = 60; // Limit to prevent / 0
if (psnr > 60)
psnr = 60;
return psnr;
}
static void die(const char *fmt, ...) {
va_list ap;
@ -454,7 +440,7 @@ int main(int argc, char **argv)
if ( (show_psnr) && (psnr_count[i]>0) )
{
int j;
double ovpsnr = vp8_mse2psnr(psnr_samples_total[i], 255.0,
double ovpsnr = sse_to_psnr(psnr_samples_total[i], 255.0,
psnr_sse_total[i]);
fprintf(stderr, "\n ENC%d PSNR (Overall/Avg/Y/U/V)", i);

Просмотреть файл

@ -8,13 +8,14 @@
* be found in the AUTHORS file in the root of the source tree.
*/
#include "tools_common.h"
#include <math.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "./tools_common.h"
#if CONFIG_VP8_ENCODER || CONFIG_VP9_ENCODER
#include "vpx/vp8cx.h"
#endif
@ -273,3 +274,14 @@ int vpx_img_read(vpx_image_t *img, FILE *file) {
return 1;
}
// TODO(dkovalev) change sse_to_psnr signature: double -> int64_t
double sse_to_psnr(double samples, double peak, double sse) {
static const double kMaxPSNR = 100.0;
if (sse > 0.0) {
const double psnr = 10.0 * log10(samples * peak * peak / sse);
return psnr > kMaxPSNR ? kMaxPSNR : psnr;
} else {
return kMaxPSNR;
}
}

Просмотреть файл

@ -145,6 +145,8 @@ int vpx_img_plane_height(const vpx_image_t *img, int plane);
void vpx_img_write(const vpx_image_t *img, FILE *file);
int vpx_img_read(vpx_image_t *img, FILE *file);
double sse_to_psnr(double samples, double peak, double mse);
#ifdef __cplusplus
} /* extern "C" */
#endif

Просмотреть файл

@ -1399,7 +1399,7 @@ static void show_psnr(struct stream_state *stream) {
return;
fprintf(stderr, "Stream %d PSNR (Overall/Avg/Y/U/V)", stream->index);
ovpsnr = vp8_mse2psnr((double)stream->psnr_samples_total, 255.0,
ovpsnr = sse_to_psnr((double)stream->psnr_samples_total, 255.0,
(double)stream->psnr_sse_total);
fprintf(stderr, " %.3f", ovpsnr);

Просмотреть файл

@ -120,16 +120,3 @@ void stats_write(stats_io_t *stats, const void *pkt, size_t len) {
vpx_fixed_buf_t stats_get(stats_io_t *stats) {
return stats->buf;
}
double vp8_mse2psnr(double samples, double peak, double mse) {
const int kMaxPSNR = 100;
double psnr = kMaxPSNR;
if (mse > 0.0)
psnr = 10.0 * log10(peak * peak * samples / mse);
if (psnr > kMaxPSNR)
psnr = kMaxPSNR;
return psnr;
}

Просмотреть файл

@ -36,8 +36,6 @@ void stats_close(stats_io_t *stats, int last_pass);
void stats_write(stats_io_t *stats, const void *pkt, size_t len);
vpx_fixed_buf_t stats_get(stats_io_t *stats);
double vp8_mse2psnr(double samples, double peak, double mse);
#ifdef __cplusplus
} // extern "C"
#endif