summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/webrtc/tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/webrtc/tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc')
-rw-r--r--chromium/third_party/webrtc/tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc29
1 files changed, 21 insertions, 8 deletions
diff --git a/chromium/third_party/webrtc/tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc b/chromium/third_party/webrtc/tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc
index 15246106848..9c9b131a210 100644
--- a/chromium/third_party/webrtc/tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc
+++ b/chromium/third_party/webrtc/tools/psnr_ssim_analyzer/psnr_ssim_analyzer.cc
@@ -8,6 +8,7 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
@@ -18,10 +19,16 @@
#include "webrtc/tools/frame_analyzer/video_quality_analysis.h"
#include "webrtc/tools/simple_command_line_parser.h"
+#define MAX_NUM_FRAMES_PER_FILE INT_MAX
+
void CompareFiles(const char* reference_file_name, const char* test_file_name,
const char* results_file_name, int width, int height) {
- FILE* ref_file = fopen(reference_file_name, "rb");
- FILE* test_file = fopen(test_file_name, "rb");
+ // Check if the reference_file_name ends with "y4m".
+ bool y4m_mode = false;
+ if (std::string(reference_file_name).find("y4m") != std::string::npos){
+ y4m_mode = true;
+ }
+
FILE* results_file = fopen(results_file_name, "w");
int size = webrtc::test::GetI420FrameSize(width, height);
@@ -30,10 +37,19 @@ void CompareFiles(const char* reference_file_name, const char* test_file_name,
uint8* test_frame = new uint8[size];
uint8* ref_frame = new uint8[size];
- int frame_counter = 0;
+ bool read_result = true;
+ for(int frame_counter = 0; frame_counter < MAX_NUM_FRAMES_PER_FILE;
+ ++frame_counter){
+ read_result &= (y4m_mode) ? webrtc::test::ExtractFrameFromY4mFile(
+ reference_file_name, width, height, frame_counter, ref_frame):
+ webrtc::test::ExtractFrameFromYuvFile(reference_file_name, width,
+ height, frame_counter, ref_frame);
+ read_result &= webrtc::test::ExtractFrameFromYuvFile(test_file_name, width,
+ height, frame_counter, test_frame);
+
+ if (!read_result)
+ break;
- while (webrtc::test::GetNextI420Frame(ref_file, width, height, ref_frame) &&
- webrtc::test::GetNextI420Frame(test_file, width, height, test_frame)) {
// Calculate the PSNR and SSIM.
double result_psnr = webrtc::test::CalculateMetrics(
webrtc::test::kPSNR, ref_frame, test_frame, width, height);
@@ -41,13 +57,10 @@ void CompareFiles(const char* reference_file_name, const char* test_file_name,
webrtc::test::kSSIM, ref_frame, test_frame, width, height);
fprintf(results_file, "Frame: %d, PSNR: %f, SSIM: %f\n", frame_counter,
result_psnr, result_ssim);
- ++frame_counter;
}
delete[] test_frame;
delete[] ref_frame;
- fclose(ref_file);
- fclose(test_file);
fclose(results_file);
}