Adding sse_to_psnr function to tools_common.{h, c}.
Change-Id: Id5f974172416499ff55b0929e315b12d16ff1b1b
This commit is contained in:
parent
c57fc4f38c
commit
2dad0e1238
@ -18,11 +18,12 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "math.h"
|
#include <math.h>
|
||||||
#define VPX_CODEC_DISABLE_COMPAT 1
|
#define VPX_CODEC_DISABLE_COMPAT 1
|
||||||
#include "vpx/vpx_encoder.h"
|
#include "vpx/vpx_encoder.h"
|
||||||
#include "vpx/vp8cx.h"
|
#include "vpx/vp8cx.h"
|
||||||
#include "vpx_ports/mem_ops.h"
|
#include "vpx_ports/mem_ops.h"
|
||||||
|
#include "./tools_common.h"
|
||||||
#define interface (vpx_codec_vp8_cx())
|
#define interface (vpx_codec_vp8_cx())
|
||||||
#define fourcc 0x30385056
|
#define fourcc 0x30385056
|
||||||
|
|
||||||
@ -44,21 +45,6 @@
|
|||||||
#include "third_party/libyuv/include/libyuv/scale.h"
|
#include "third_party/libyuv/include/libyuv/scale.h"
|
||||||
#include "third_party/libyuv/include/libyuv/cpu_id.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, ...) {
|
static void die(const char *fmt, ...) {
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
@ -454,8 +440,8 @@ int main(int argc, char **argv)
|
|||||||
if ( (show_psnr) && (psnr_count[i]>0) )
|
if ( (show_psnr) && (psnr_count[i]>0) )
|
||||||
{
|
{
|
||||||
int j;
|
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]);
|
psnr_sse_total[i]);
|
||||||
|
|
||||||
fprintf(stderr, "\n ENC%d PSNR (Overall/Avg/Y/U/V)", 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.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "tools_common.h"
|
#include <math.h>
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "./tools_common.h"
|
||||||
|
|
||||||
#if CONFIG_VP8_ENCODER || CONFIG_VP9_ENCODER
|
#if CONFIG_VP8_ENCODER || CONFIG_VP9_ENCODER
|
||||||
#include "vpx/vp8cx.h"
|
#include "vpx/vp8cx.h"
|
||||||
#endif
|
#endif
|
||||||
@ -273,3 +274,14 @@ int vpx_img_read(vpx_image_t *img, FILE *file) {
|
|||||||
return 1;
|
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);
|
void vpx_img_write(const vpx_image_t *img, FILE *file);
|
||||||
int vpx_img_read(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
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
4
vpxenc.c
4
vpxenc.c
@ -1399,8 +1399,8 @@ static void show_psnr(struct stream_state *stream) {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
fprintf(stderr, "Stream %d PSNR (Overall/Avg/Y/U/V)", stream->index);
|
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);
|
(double)stream->psnr_sse_total);
|
||||||
fprintf(stderr, " %.3f", ovpsnr);
|
fprintf(stderr, " %.3f", ovpsnr);
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
|
13
vpxstats.c
13
vpxstats.c
@ -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) {
|
vpx_fixed_buf_t stats_get(stats_io_t *stats) {
|
||||||
return stats->buf;
|
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);
|
void stats_write(stats_io_t *stats, const void *pkt, size_t len);
|
||||||
vpx_fixed_buf_t stats_get(stats_io_t *stats);
|
vpx_fixed_buf_t stats_get(stats_io_t *stats);
|
||||||
|
|
||||||
double vp8_mse2psnr(double samples, double peak, double mse);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user