| OLD | NEW |
| 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. | 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 # DESCRIPTION : | 6 # DESCRIPTION : |
| 7 # | 7 # |
| 8 # This test looks in "/dev/video0" for a v4l2 video capture device, | 8 # This test looks in "/dev/video0" for a v4l2 video capture device, |
| 9 # and starts streaming captured frames on the monitor. | 9 # and starts streaming captured frames on the monitor. |
| 10 # The observer then decides if the captured image looks good or defective, | 10 # The observer then decides if the captured image looks good or defective, |
| 11 # pressing enter key to let it pass or tab key to fail. | 11 # pressing enter key to let it pass or tab key to fail. |
| 12 | 12 |
| 13 from autotest_lib.client.bin import test | |
| 14 from autotest_lib.client.common_lib import error | |
| 15 from autotest_lib.client.common_lib import factory_test | |
| 16 | 13 |
| 17 import gtk | 14 import gtk |
| 18 from gtk import gdk | 15 from gtk import gdk |
| 19 import glib | 16 import glib |
| 20 import pango | 17 import pango |
| 21 import numpy | 18 import numpy |
| 22 | 19 |
| 20 from autotest_lib.client.bin import factory |
| 21 from autotest_lib.client.bin import factory_ui_lib as ful |
| 22 from autotest_lib.client.bin import test |
| 23 from autotest_lib.client.common_lib import error |
| 24 |
| 23 import v4l2 | 25 import v4l2 |
| 24 | 26 |
| 27 |
| 25 DEVICE_NAME = "/dev/video0" | 28 DEVICE_NAME = "/dev/video0" |
| 26 PREFERRED_WIDTH = 320 | 29 PREFERRED_WIDTH = 320 |
| 27 PREFERRED_HEIGHT = 240 | 30 PREFERRED_HEIGHT = 240 |
| 28 PREFERRED_BUFFER_COUNT = 4 | 31 PREFERRED_BUFFER_COUNT = 4 |
| 29 | 32 |
| 33 |
| 30 class factory_Camera(test.test): | 34 class factory_Camera(test.test): |
| 31 version = 1 | 35 version = 1 |
| 32 key_good = gdk.keyval_from_name('Return') | 36 key_good = gdk.keyval_from_name('Return') |
| 33 key_bad = gdk.keyval_from_name('Tab') | 37 key_bad = gdk.keyval_from_name('Tab') |
| 34 | 38 |
| 35 @staticmethod | 39 @staticmethod |
| 36 def get_best_frame_size(dev, pixel_format, width, height): | 40 def get_best_frame_size(dev, pixel_format, width, height): |
| 37 """Given the preferred frame size, find a reasonable frame size the | 41 """Given the preferred frame size, find a reasonable frame size the |
| 38 capture device is capable of. | 42 capture device is capable of. |
| 39 | 43 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 54 return min(good_sizes, key=lambda x: x[0] * x[1]) | 58 return min(good_sizes, key=lambda x: x[0] * x[1]) |
| 55 return max(sizes, key=lambda x: x[0] * x[1]) | 59 return max(sizes, key=lambda x: x[0] * x[1]) |
| 56 | 60 |
| 57 def render(self, pixels): | 61 def render(self, pixels): |
| 58 numpy.maximum(pixels, 0, pixels) | 62 numpy.maximum(pixels, 0, pixels) |
| 59 numpy.minimum(pixels, 255, pixels) | 63 numpy.minimum(pixels, 255, pixels) |
| 60 self.pixels[:] = pixels | 64 self.pixels[:] = pixels |
| 61 self.img.queue_draw() | 65 self.img.queue_draw() |
| 62 | 66 |
| 63 def key_release_callback(self, widget, event): | 67 def key_release_callback(self, widget, event): |
| 64 factory_test.XXX_log('key_release_callback %s(%s)' % | 68 factory.log('key_release_callback %s(%s)' % |
| 65 (event.keyval, gdk.keyval_name(event.keyval))) | 69 (event.keyval, gdk.keyval_name(event.keyval))) |
| 66 if event.keyval == self.key_good: | 70 if event.keyval == self.key_good: |
| 67 self.fail = False | 71 self.fail = False |
| 68 gtk.main_quit() | 72 gtk.main_quit() |
| 69 if event.keyval == self.key_bad: | 73 if event.keyval == self.key_bad: |
| 70 gtk.main_quit() | 74 gtk.main_quit() |
| 71 return factory_test.test_switch_on_trigger(event) | 75 self.ft_state.exit_on_trigger(event) |
| 76 return |
| 72 | 77 |
| 73 def register_callbacks(self, w): | 78 def register_callbacks(self, w): |
| 74 w.connect('key-release-event', self.key_release_callback) | 79 w.connect('key-release-event', self.key_release_callback) |
| 75 w.add_events(gdk.KEY_RELEASE_MASK) | 80 w.add_events(gdk.KEY_RELEASE_MASK) |
| 76 | 81 |
| 77 def run_once(self, test_widget_size=None, trigger_set=None, | 82 def run_once(self, test_widget_size=None, trigger_set=None, |
| 78 result_file_path=None): | 83 result_file_path=None): |
| 79 | 84 |
| 85 factory.log('%s run_once' % self.__class__) |
| 86 |
| 80 self.fail = True | 87 self.fail = True |
| 81 | 88 |
| 82 factory_test.XXX_log('factory_Camera') | 89 self.ft_state = ful.State( |
| 83 | 90 trigger_set=trigger_set, |
| 84 factory_test.init(trigger_set=trigger_set, | 91 result_file_path=result_file_path) |
| 85 result_file_path=result_file_path) | |
| 86 | 92 |
| 87 label = gtk.Label( | 93 label = gtk.Label( |
| 88 "Press %s key if the image looks good\nPress %s otherwise" | 94 "Press %s key if the image looks good\nPress %s otherwise" |
| 89 % (gdk.keyval_name(self.key_good),gdk.keyval_name(self.key_bad))) | 95 % (gdk.keyval_name(self.key_good),gdk.keyval_name(self.key_bad))) |
| 90 | 96 |
| 91 label.modify_font(pango.FontDescription('courier new condensed 12')) | 97 label.modify_font(pango.FontDescription('courier new condensed 12')) |
| 92 label.modify_fg(gtk.STATE_NORMAL, gdk.color_parse('light green')) | 98 label.modify_fg(gtk.STATE_NORMAL, gdk.color_parse('light green')) |
| 93 | 99 |
| 94 test_widget = gtk.VBox() | 100 test_widget = gtk.VBox() |
| 95 test_widget.modify_bg(gtk.STATE_NORMAL, gdk.color_parse('black')) | 101 test_widget.modify_bg(gtk.STATE_NORMAL, gdk.color_parse('black')) |
| (...skipping 23 matching lines...) Expand all Loading... |
| 119 self.pixbuf = gdk.Pixbuf(gdk.COLORSPACE_RGB, False, 8, | 125 self.pixbuf = gdk.Pixbuf(gdk.COLORSPACE_RGB, False, 8, |
| 120 width, height) | 126 width, height) |
| 121 self.pixels = self.pixbuf.get_pixels_array() | 127 self.pixels = self.pixbuf.get_pixels_array() |
| 122 self.img = gtk.image_new_from_pixbuf(self.pixbuf) | 128 self.img = gtk.image_new_from_pixbuf(self.pixbuf) |
| 123 self.test_widget.add(self.img) | 129 self.test_widget.add(self.img) |
| 124 self.img.show() | 130 self.img.show() |
| 125 | 131 |
| 126 dev.capture_mmap_prepare(PREFERRED_BUFFER_COUNT, 2) | 132 dev.capture_mmap_prepare(PREFERRED_BUFFER_COUNT, 2) |
| 127 dev.capture_mmap_start() | 133 dev.capture_mmap_start() |
| 128 | 134 |
| 129 factory_test.run_test_widget( | 135 self.ft_state.run_test_widget( |
| 130 test_widget=test_widget, | 136 test_widget=test_widget, |
| 131 test_widget_size=test_widget_size, | 137 test_widget_size=test_widget_size, |
| 132 window_registration_callback=self.register_callbacks) | 138 window_registration_callback=self.register_callbacks) |
| 133 | 139 |
| 134 dev.capture_mmap_stop() | 140 dev.capture_mmap_stop() |
| 135 dev.capture_mmap_finish() | 141 dev.capture_mmap_finish() |
| 136 | 142 |
| 137 if self.fail: | 143 if self.fail: |
| 138 raise error.TestFail('camera test failed by user indication') | 144 raise error.TestFail('camera test failed by user indication') |
| 139 | 145 |
| 140 factory_test.XXX_log('exiting factory_Camera') | 146 factory.log('%s run_once finished' % self.__class__) |
| OLD | NEW |