Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: webrtc/tools/compare_videos.py

Issue 2553693002: Comparison of videos with reference frame not starting from zero (Closed)
Patch Set: Added newline in debug prints for PrintMaxRepeatedAndSkippedFrames Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/tools/frame_analyzer/frame_analyzer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 # Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 # 3 #
4 # Use of this source code is governed by a BSD-style license 4 # Use of this source code is governed by a BSD-style license
5 # that can be found in the LICENSE file in the root of the source 5 # that can be found in the LICENSE file in the root of the source
6 # tree. An additional intellectual property rights grant can be found 6 # tree. An additional intellectual property rights grant can be found
7 # in the file PATENTS. All contributing project authors may 7 # in the file PATENTS. All contributing project authors may
8 # be found in the AUTHORS file in the root of the source tree. 8 # be found in the AUTHORS file in the root of the source tree.
9 9
10 import optparse 10 import optparse
(...skipping 30 matching lines...) Expand all
41 'will assume we can find it in barcode_tools/' 41 'will assume we can find it in barcode_tools/'
42 'relative to this directory.')) 42 'relative to this directory.'))
43 parser.add_option('--ffmpeg_path', type='string', 43 parser.add_option('--ffmpeg_path', type='string',
44 help=('The path to where the ffmpeg executable is located. ' 44 help=('The path to where the ffmpeg executable is located. '
45 'If omitted, it will be assumed to be present in the ' 45 'If omitted, it will be assumed to be present in the '
46 'PATH with the name ffmpeg[.exe].')) 46 'PATH with the name ffmpeg[.exe].'))
47 parser.add_option('--zxing_path', type='string', 47 parser.add_option('--zxing_path', type='string',
48 help=('The path to where the zxing executable is located. ' 48 help=('The path to where the zxing executable is located. '
49 'If omitted, it will be assumed to be present in the ' 49 'If omitted, it will be assumed to be present in the '
50 'PATH with the name zxing[.exe].')) 50 'PATH with the name zxing[.exe].'))
51 parser.add_option('--stats_file', type='string', default='stats.txt', 51 parser.add_option('--stats_file_ref', type='string', default='stats_ref.txt',
52 help=('Path to the temporary stats file to be created and ' 52 help=('Path to the temporary stats file to be created and '
53 'used. Default: %default')) 53 'used for the reference video file. '
54 'Default: %default'))
55 parser.add_option('--stats_file_test', type='string',
56 default='stats_test.txt',
57 help=('Path to the temporary stats file to be created and '
58 'used for the test video file. Default: %default'))
59 parser.add_option('--stats_file', type='string',
60 help=('DEPRECATED'))
54 parser.add_option('--yuv_frame_width', type='int', default=640, 61 parser.add_option('--yuv_frame_width', type='int', default=640,
55 help='Width of the YUV file\'s frames. Default: %default') 62 help='Width of the YUV file\'s frames. Default: %default')
56 parser.add_option('--yuv_frame_height', type='int', default=480, 63 parser.add_option('--yuv_frame_height', type='int', default=480,
57 help='Height of the YUV file\'s frames. Default: %default') 64 help='Height of the YUV file\'s frames. Default: %default')
58 options, _ = parser.parse_args() 65 options, _ = parser.parse_args()
59 66
67 if options.stats_file:
68 options.stats_file_test = options.stats_file
69 print ('WARNING: Using deprecated switch --stats_file. '
70 'The new flag is --stats_file_test.')
71
60 if not options.ref_video: 72 if not options.ref_video:
61 parser.error('You must provide a path to the reference video!') 73 parser.error('You must provide a path to the reference video!')
62 if not os.path.exists(options.ref_video): 74 if not os.path.exists(options.ref_video):
63 parser.error('Cannot find the reference video at %s' % options.ref_video) 75 parser.error('Cannot find the reference video at %s' % options.ref_video)
64 76
65 if not options.test_video: 77 if not options.test_video:
66 parser.error('You must provide a path to the test video!') 78 parser.error('You must provide a path to the test video!')
67 if not os.path.exists(options.test_video): 79 if not os.path.exists(options.test_video):
68 parser.error('Cannot find the test video at %s' % options.test_video) 80 parser.error('Cannot find the test video at %s' % options.test_video)
69 81
70 if not options.frame_analyzer: 82 if not options.frame_analyzer:
71 parser.error('You must provide the path to the frame analyzer executable!') 83 parser.error('You must provide the path to the frame analyzer executable!')
72 if not os.path.exists(options.frame_analyzer): 84 if not os.path.exists(options.frame_analyzer):
73 parser.error('Cannot find frame analyzer executable at %s!' % 85 parser.error('Cannot find frame analyzer executable at %s!' %
74 options.frame_analyzer) 86 options.frame_analyzer)
75 return options 87 return options
76 88
89 def _DevNull():
90 """On Windows, sometimes the inherited stdin handle from the parent process
91 fails. Workaround this by passing null to stdin to the subprocesses commands.
92 This function can be used to create the null file handler.
93 """
94 return open(os.devnull, 'r')
95
96 def DecodeBarcodesInVideo(options, path_to_decoder, video, stat_file):
97 # Run barcode decoder on the test video to identify frame numbers.
98 png_working_directory = tempfile.mkdtemp()
99 cmd = [
100 sys.executable,
101 path_to_decoder,
102 '--yuv_file=%s' % video,
103 '--yuv_frame_width=%d' % options.yuv_frame_width,
104 '--yuv_frame_height=%d' % options.yuv_frame_height,
105 '--stats_file=%s' % stat_file,
106 '--png_working_dir=%s' % png_working_directory,
107 ]
108 if options.zxing_path:
109 cmd.append('--zxing_path=%s' % options.zxing_path)
110 if options.ffmpeg_path:
111 cmd.append('--ffmpeg_path=%s' % options.ffmpeg_path)
112
113
114 barcode_decoder = subprocess.Popen(cmd, stdin=_DevNull(),
115 stdout=sys.stdout, stderr=sys.stderr)
116 barcode_decoder.wait()
117
118 shutil.rmtree(png_working_directory)
119 if barcode_decoder.returncode != 0:
120 print 'Failed to run barcode decoder script.'
121 return 1
122 return 0
77 123
78 def main(): 124 def main():
79 """The main function. 125 """The main function.
80 126
81 A simple invocation is: 127 A simple invocation is:
82 ./webrtc/tools/barcode_tools/compare_videos.py 128 ./webrtc/tools/barcode_tools/compare_videos.py
83 --ref_video=<path_and_name_of_reference_video> 129 --ref_video=<path_and_name_of_reference_video>
84 --test_video=<path_and_name_of_test_video> 130 --test_video=<path_and_name_of_test_video>
85 --frame_analyzer=<path_and_name_of_the_frame_analyzer_executable> 131 --frame_analyzer=<path_and_name_of_the_frame_analyzer_executable>
86 132
87 Notice that the prerequisites for barcode_decoder.py also applies to this 133 Notice that the prerequisites for barcode_decoder.py also applies to this
88 script. The means the following executables have to be available in the PATH: 134 script. The means the following executables have to be available in the PATH:
89 * zxing 135 * zxing
90 * ffmpeg 136 * ffmpeg
91 """ 137 """
92 options = _ParseArgs() 138 options = _ParseArgs()
93 139
94 if options.barcode_decoder: 140 if options.barcode_decoder:
95 path_to_decoder = options.barcode_decoder 141 path_to_decoder = options.barcode_decoder
96 else: 142 else:
97 path_to_decoder = os.path.join(SCRIPT_DIR, 'barcode_tools', 143 path_to_decoder = os.path.join(SCRIPT_DIR, 'barcode_tools',
98 'barcode_decoder.py') 144 'barcode_decoder.py')
99 145
100 # On Windows, sometimes the inherited stdin handle from the parent process 146 if DecodeBarcodesInVideo(options, path_to_decoder,
101 # fails. Work around this by passing null to stdin to the subprocesses. 147 options.ref_video, options.stats_file_ref) != 0:
102 null_filehandle = open(os.devnull, 'r') 148 return 1
103 149 if DecodeBarcodesInVideo(options, path_to_decoder,
104 # Run barcode decoder on the test video to identify frame numbers. 150 options.test_video, options.stats_file_test) != 0:
105 png_working_directory = tempfile.mkdtemp()
106 cmd = [
107 sys.executable,
108 path_to_decoder,
109 '--yuv_file=%s' % options.test_video,
110 '--yuv_frame_width=%d' % options.yuv_frame_width,
111 '--yuv_frame_height=%d' % options.yuv_frame_height,
112 '--stats_file=%s' % options.stats_file,
113 '--png_working_dir=%s' % png_working_directory,
114 ]
115 if options.zxing_path:
116 cmd.append('--zxing_path=%s' % options.zxing_path)
117 if options.ffmpeg_path:
118 cmd.append('--ffmpeg_path=%s' % options.ffmpeg_path)
119 barcode_decoder = subprocess.Popen(cmd, stdin=null_filehandle,
120 stdout=sys.stdout, stderr=sys.stderr)
121 barcode_decoder.wait()
122
123 shutil.rmtree(png_working_directory)
124 if barcode_decoder.returncode != 0:
125 print 'Failed to run barcode decoder script.'
126 return 1 151 return 1
127 152
128 # Run frame analyzer to compare the videos and print output. 153 # Run frame analyzer to compare the videos and print output.
129 cmd = [ 154 cmd = [
130 options.frame_analyzer, 155 options.frame_analyzer,
131 '--label=%s' % options.label, 156 '--label=%s' % options.label,
132 '--reference_file=%s' % options.ref_video, 157 '--reference_file=%s' % options.ref_video,
133 '--test_file=%s' % options.test_video, 158 '--test_file=%s' % options.test_video,
134 '--stats_file=%s' % options.stats_file, 159 '--stats_file_ref=%s' % options.stats_file_ref,
160 '--stats_file_test=%s' % options.stats_file_test,
135 '--width=%d' % options.yuv_frame_width, 161 '--width=%d' % options.yuv_frame_width,
136 '--height=%d' % options.yuv_frame_height, 162 '--height=%d' % options.yuv_frame_height,
137 ] 163 ]
138 frame_analyzer = subprocess.Popen(cmd, stdin=null_filehandle, 164 frame_analyzer = subprocess.Popen(cmd, stdin=_DevNull(),
139 stdout=sys.stdout, stderr=sys.stderr) 165 stdout=sys.stdout, stderr=sys.stderr)
140 frame_analyzer.wait() 166 frame_analyzer.wait()
141 if frame_analyzer.returncode != 0: 167 if frame_analyzer.returncode != 0:
142 print 'Failed to run frame analyzer.' 168 print 'Failed to run frame analyzer.'
143 return 1 169 return 1
144 170
145 return 0 171 return 0
146 172
147 if __name__ == '__main__': 173 if __name__ == '__main__':
148 sys.exit(main()) 174 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | webrtc/tools/frame_analyzer/frame_analyzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698