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

Unified Diff: webrtc/tools/video_analysis.py

Issue 2789533002: Improve USB device reset logic (Closed)
Patch Set: fix test Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/tools/run_video_analysis.py ('k') | webrtc/tools/video_analysis_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/tools/video_analysis.py
diff --git a/webrtc/tools/run_video_analysis.py b/webrtc/tools/video_analysis.py
similarity index 89%
rename from webrtc/tools/run_video_analysis.py
rename to webrtc/tools/video_analysis.py
index 29682aa02917779742ececaca52b0662a6d80546..b13543d65a85ea1a57ccccf0b1b5397ddf02d0e5 100755
--- a/webrtc/tools/run_video_analysis.py
+++ b/webrtc/tools/video_analysis.py
@@ -7,14 +7,14 @@
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
+import glob
import optparse
import os
+import shutil
import subprocess
import sys
import time
-import glob
-import re
-import shutil
+
# Used to time-stamp output files and directories
CURRENT_TIME = time.strftime("%d_%m_%Y-%H:%M:%S")
@@ -158,47 +158,67 @@ def CreateRecordingDirs(options):
return record_paths
-def RestartMagewellDevices(ref_video_device, test_video_device):
- """Reset the USB ports where Magewell capture devices are connected to.
+def FindUsbPortForV4lDevices(ref_video_device, test_video_device):
+ """Tries to find the usb port for ref_video_device and test_video_device.
Tries to find the provided ref_video_device and test_video_device devices
which use video4linux and then do a soft reset by using USB unbind and bind.
+
+ Args:
+ ref_device(string): reference recording device path.
+ test_device(string): test recording device path
+
+ Returns:
+ usb_ports(list): USB ports(string) for the devices found.
+ """
+
+ # Find the device location including USB and USB Bus ID's. Use the usb1
+ # in the path since the driver folder is a symlink which contains all the
+ # usb device port mappings and it's the same in all usbN folders. Tested
+ # on Ubuntu 14.04.
+ v4l_device_path = '/sys/bus/usb/devices/usb1/1-1/driver/**/**/video4linux/'
+ v4l_ref_device = glob.glob('%s%s' % (v4l_device_path, ref_video_device))
+ v4l_test_device = glob.glob('%s%s' % (v4l_device_path, test_video_device))
+ usb_ports = []
+ paths = []
+
+ # Split on the driver folder first since we are only interested in the
+ # folders thereafter.
+ ref_path = str(v4l_ref_device).split('driver')[1].split('/')
+ test_path = str(v4l_test_device).split('driver')[1].split('/')
+ paths.append(ref_path)
+ paths.append(test_path)
+
+ for path in paths:
+ for usb_id in path:
+ # Look for : separator and then use the first element in the list.
+ # E.g 3-3.1:1.0 split on : and [0] becomes 3-3.1 which can be used
+ # for bind/unbind.
+ if ':' in usb_id:
+ usb_ports.append(usb_id.split(':')[0])
+ return usb_ports
+
+
+def RestartMagewellDevices(ref_video_device_path, test_video_device_path):
+ """Reset the USB ports where Magewell capture devices are connected to.
+
+ Performs a soft reset by using USB unbind and bind.
This is due to Magewell capture devices have proven to be unstable after the
first recording attempt.
- Args :
- ref_video_device(string): reference recording device path.
- test_video_device(string): test recording device path
+ Args:
+ ref_video_device_path(string): reference recording device path.
+ test_video_device_path(string): test recording device path
Raises:
MagewellError: If no magewell devices are found.
"""
# Get the dev/videoN device name from the command line arguments.
- ref_magewell = ref_video_device.split('/')[2]
- test_magewell = test_video_device.split('/')[2]
-
- # Find the device location including USB and USB Bus ID's.
- device_string = '/sys/bus/usb/devices/usb*/**/**/video4linux/'
- ref_magewell_device = glob.glob('%s%s' % (device_string, ref_magewell))
- test_magewell_device = glob.glob('%s%s' % (device_string, test_magewell))
-
- magewell_usb_ports = []
-
- # Figure out the USB bus and port ID for each device.
- ref_magewell_path = str(ref_magewell_device).split('/')
- for directory in ref_magewell_path:
- # Find the folder with pattern "N-N", e.g. "4-3" or \
- # "[USB bus ID]-[USB port]"
- if re.match(r'^\d-\d$', directory):
- magewell_usb_ports.append(directory)
-
- test_magewell_path = str(test_magewell_device).split('/')
- for directory in test_magewell_path:
- # Find the folder with pattern "N-N", e.g. "4-3" or \
- # "[USB bus ID]-[USB port]"
- if re.match(r'^\d-\d$', directory):
- magewell_usb_ports.append(directory)
+ ref_magewell_path = ref_video_device_path.split('/')[2]
+ test_magewell_path = test_video_device_path.split('/')[2]
+ magewell_usb_ports = FindUsbPortForV4lDevices(ref_magewell_path,
+ test_magewell_path)
# Abort early if no devices are found.
if len(magewell_usb_ports) == 0:
@@ -413,7 +433,6 @@ def CompareVideos(options, cropped_ref_file, cropped_test_file):
crop_height = param.split(':')[1]
compare_cmd = [
- sys.executable,
compare_videos_script,
'--ref_video', cropped_ref_file,
'--test_video', cropped_test_file,
« no previous file with comments | « webrtc/tools/run_video_analysis.py ('k') | webrtc/tools/video_analysis_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698