Home | History | Annotate | Download | only in video_VideoCapability
      1 # Copyright 2017 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import logging
      6 import os
      7 import subprocess
      8 
      9 
     10 from autotest_lib.client.bin import test
     11 from autotest_lib.client.common_lib import error
     12 from autotest_lib.client.cros.video import device_capability
     13 
     14 class video_VideoCapability(test.test):
     15     """
     16     This tests the video static capabilities settings
     17     with label detector: "avtest_label_detect."
     18     """
     19     version = 1
     20     avtest_label_to_capability = {
     21         'hw_video_acc_h264'    : 'hw_dec_h264_1080_30',
     22         'hw_video_acc_vp8'     : 'hw_dec_vp8_1080_30',
     23         'hw_video_acc_vp9'     : 'hw_dec_vp9_1080_30',
     24         'hw_video_acc_vp9_2'   : 'hw_dec_vp9-2_1080_30',
     25         'hw_jpeg_acc_dec'      : 'hw_dec_jpeg',
     26         'hw_jpeg_acc_enc'      : 'hw_enc_jpeg',
     27         'hw_video_acc_enc_h264': 'hw_enc_h264_1080_30',
     28         'hw_video_acc_enc_vp8' : 'hw_enc_vp8_1080_30',
     29         'hw_video_acc_enc_vp9' : 'hw_enc_vp9_1080_30',
     30         'webcam'               : 'usb_camera',
     31     }
     32 
     33 
     34     def compare_avtest_label_detect(self, dc_results):
     35         avtest_label = subprocess.check_output(['avtest_label_detect']).strip()
     36         logging.debug("avtest_label_detect result\n%s", avtest_label)
     37         mismatch_list = []
     38         avtest_detected_labels = set()
     39         for line in avtest_label.splitlines():
     40             label = line.split(':')[1].strip()
     41             if label in video_VideoCapability.avtest_label_to_capability:
     42                 cap = video_VideoCapability.avtest_label_to_capability[label]
     43                 avtest_detected_labels.add(cap)
     44 
     45         for cap in video_VideoCapability.avtest_label_to_capability.values():
     46             if dc_results[cap] == 'yes' and cap not in avtest_detected_labels:
     47                 logging.error('Static capability claims %s is available. '
     48                               "But avtest_label_detect doesn't detect", cap)
     49                 mismatch_list.append(cap)
     50 
     51             if dc_results[cap] == 'no' and cap in avtest_detected_labels:
     52                 logging.error("Static capability claims %s isn't available. "
     53                               'But avtest_label_detect detects', cap)
     54                 mismatch_list.append(cap)
     55 
     56         if mismatch_list:
     57             raise error.TestFail("Dynamic capability detection results did not "
     58                                  "match static capability configuration. "
     59                                  "mismatch_list=%r" % mismatch_list)
     60 
     61 
     62     def run_once(self):
     63         logging.debug('Starting video_VideoCapability')
     64         dc = device_capability.DeviceCapability()
     65         dc_results = {}
     66         for cap in dc.get_managed_caps():
     67             ret = dc.get_capability(cap)
     68             dc_results[cap] = ret
     69 
     70         self.compare_avtest_label_detect(dc_results)
     71