910e62b5创建于 1月15日历史提交
# Copyright 2024 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
""" Starts a local_video_analyzer process to analyze the recorded video
quality. Unless otherwise noted, all the functions return immediately if the
required binaries do not exist and write the output into av_sync_tests.LOG_DIR.
"""

import json
import logging
import os
import subprocess
import sys

# Copy to avoid cycle dependency.
LOG_DIR = os.environ.get('ISOLATED_OUTDIR', '/tmp')


sys.path.append(
    os.path.join(os.path.dirname(__file__), '..', '..', 'build', 'fuchsia',
                 'test'))

from repeating_log import RepeatingLog


def from_original_video(recorded: str, original: str) -> object:
    """ Analyzes the |recorded| video file by using the |original| as the
        reference, and returns the results as an json object. """
    binary = '/usr/local/cipd/local_analyzer/local_video_analyzer.par'
    assert os.path.isfile(binary)
    _, filename = os.path.split(original)
    output_dir = os.path.join(LOG_DIR, filename)
    os.mkdir(output_dir)

    with RepeatingLog('Waiting for local_video_analyzer.'):
        subprocess.run([
            binary, '--gid=', '--uid=', '--loas_pwd_fallback_in_corp',
            f'--ref_video_file={original}', f'--test_video_file={recorded}',
            f'--output_folder={output_dir}'
        ],
                       check=True)
    try:
        with open(os.path.join(output_dir, 'results.json'), 'r') as file:
            return json.load(file)
    except FileNotFoundError:
        logging.warning('No results.json file generated in %s', output_dir)
        return {}