Reland "Tidy up and increase exception handling in compare_videos"
This is a reland of 1c60ff521eda26c80fa53097d9c614f10200f651 Original change's description: > Tidy up and increase exception handling in compare_videos > > Bug: webrtc:9642 > Change-Id: I5c8b252de3b285f81a5437af99d789b5a28ce646 > Reviewed-on: https://webrtc-review.googlesource.com/102880 > Commit-Queue: Paulina Hensman <phensman@webrtc.org> > Reviewed-by: Patrik Höglund <phoglund@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#24909} Bug: webrtc:9642 Change-Id: I11078a358297ae5046991ac3b0680df468bb413b Reviewed-on: https://webrtc-review.googlesource.com/c/102941 Reviewed-by: Sami Kalliomäki <sakal@webrtc.org> Reviewed-by: Patrik Höglund <phoglund@webrtc.org> Commit-Queue: Paulina Hensman <phensman@webrtc.org> Cr-Commit-Position: refs/heads/master@{#25024}
This commit is contained in:

committed by
Commit Bot

parent
6c19decc14
commit
a6471eb589
@ -136,7 +136,7 @@ def DecodeBarcodesInVideo(options, path_to_decoder, video, stat_file):
|
||||
return 0
|
||||
|
||||
|
||||
def _RunFrameAnalyzer(options):
|
||||
def _RunFrameAnalyzer(options, yuv_directory=None):
|
||||
"""Run frame analyzer to compare the videos and print output."""
|
||||
cmd = [
|
||||
options.frame_analyzer,
|
||||
@ -152,15 +152,17 @@ def _RunFrameAnalyzer(options):
|
||||
cmd.append('--chartjson_result_file=%s' % options.chartjson_result_file)
|
||||
if options.aligned_output_file:
|
||||
cmd.append('--aligned_output_file=%s' % options.aligned_output_file)
|
||||
if options.yuv_directory:
|
||||
cmd.append('--yuv_directory=%s' % options.yuv_directory)
|
||||
if yuv_directory:
|
||||
cmd.append('--yuv_directory=%s' % yuv_directory)
|
||||
frame_analyzer = subprocess.Popen(cmd, stdin=_DevNull(),
|
||||
stdout=sys.stdout, stderr=sys.stderr)
|
||||
frame_analyzer.wait()
|
||||
if frame_analyzer.returncode != 0:
|
||||
print 'Failed to run frame analyzer.'
|
||||
return frame_analyzer.returncode
|
||||
|
||||
|
||||
def _RunVmaf(options):
|
||||
def _RunVmaf(options, yuv_directory):
|
||||
""" Run VMAF to compare videos and print output.
|
||||
|
||||
The provided vmaf directory is assumed to contain a c++ wrapper executable
|
||||
@ -174,8 +176,8 @@ def _RunVmaf(options):
|
||||
'yuv420p',
|
||||
str(options.yuv_frame_width),
|
||||
str(options.yuv_frame_height),
|
||||
os.path.join(options.yuv_directory, "ref.yuv"),
|
||||
os.path.join(options.yuv_directory, "test.yuv"),
|
||||
os.path.join(yuv_directory, "ref.yuv"),
|
||||
os.path.join(yuv_directory, "test.yuv"),
|
||||
options.vmaf_model,
|
||||
]
|
||||
if options.vmaf_phone_model:
|
||||
@ -189,7 +191,13 @@ def _RunVmaf(options):
|
||||
return 1
|
||||
output = vmaf.stdout.read()
|
||||
# Extract score from VMAF output.
|
||||
try:
|
||||
score = float(output.split('\n')[2].split()[3])
|
||||
except (ValueError, IndexError):
|
||||
print 'Error in VMAF output (expected "VMAF score = [float]" on line 3):'
|
||||
print output
|
||||
return 1
|
||||
|
||||
print 'RESULT Vmaf: %s= %f' % (options.label, score)
|
||||
return 0
|
||||
|
||||
@ -226,25 +234,21 @@ def main():
|
||||
options.test_video, options.stats_file_test) != 0:
|
||||
return 1
|
||||
|
||||
try:
|
||||
# Create a directory to save temporary YUV files for VMAF in frame_analyzer.
|
||||
options.yuv_directory = None
|
||||
if options.vmaf:
|
||||
options.yuv_directory = tempfile.mkdtemp() + '/'
|
||||
try:
|
||||
# Directory to save temporary YUV files for VMAF in frame_analyzer.
|
||||
yuv_directory = tempfile.mkdtemp()
|
||||
|
||||
# Run frame_analyzer to compare the videos and print output.
|
||||
if _RunFrameAnalyzer(options) != 0:
|
||||
print 'Failed to run frame analyzer.'
|
||||
# Run frame analyzer to compare the videos and print output.
|
||||
if _RunFrameAnalyzer(options, yuv_directory=yuv_directory) != 0:
|
||||
return 1
|
||||
|
||||
# Run VMAF for further video comparison and print output.
|
||||
if options.vmaf:
|
||||
return _RunVmaf(options)
|
||||
|
||||
return _RunVmaf(options, yuv_directory)
|
||||
finally:
|
||||
if options.yuv_directory:
|
||||
shutil.rmtree(options.yuv_directory)
|
||||
|
||||
shutil.rmtree(yuv_directory)
|
||||
else:
|
||||
return _RunFrameAnalyzer(options)
|
||||
|
||||
return 0
|
||||
|
||||
|
@ -23,6 +23,20 @@
|
||||
#include "rtc_tools/video_file_writer.h"
|
||||
#include "test/testsupport/perf_test.h"
|
||||
|
||||
namespace {
|
||||
|
||||
#ifdef WIN32
|
||||
const char* const kPathDelimiter = "\\";
|
||||
#else
|
||||
const char* const kPathDelimiter = "/";
|
||||
#endif
|
||||
|
||||
std::string JoinFilename(std::string directory, std::string filename) {
|
||||
return directory + kPathDelimiter + filename;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
/*
|
||||
* A command line tool running PSNR and SSIM on a reference video and a test
|
||||
* video. The test video is a record of the reference video which can start at
|
||||
@ -147,9 +161,11 @@ int main(int argc, char* argv[]) {
|
||||
}
|
||||
std::string yuv_directory = parser.GetFlag("yuv_directory");
|
||||
if (!yuv_directory.empty()) {
|
||||
webrtc::test::WriteVideoToFile(reordered_video, yuv_directory + "ref.yuv",
|
||||
webrtc::test::WriteVideoToFile(reordered_video,
|
||||
JoinFilename(yuv_directory, "ref.yuv"),
|
||||
/*fps=*/30);
|
||||
webrtc::test::WriteVideoToFile(test_video, yuv_directory + "test.yuv",
|
||||
webrtc::test::WriteVideoToFile(test_video,
|
||||
JoinFilename(yuv_directory, "test.yuv"),
|
||||
/*fps=*/30);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user