xref: /aosp_15_r20/external/webrtc/tools_webrtc/configure_pipewire.py (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker#!/usr/bin/env vpython3
2*d9f75844SAndroid Build Coastguard Worker# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker#
4*d9f75844SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker# that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker# tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker# in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker# be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker"""
10*d9f75844SAndroid Build Coastguard WorkerThis script is a wrapper that loads "pipewire" library.
11*d9f75844SAndroid Build Coastguard Worker"""
12*d9f75844SAndroid Build Coastguard Worker
13*d9f75844SAndroid Build Coastguard Workerimport os
14*d9f75844SAndroid Build Coastguard Workerimport subprocess
15*d9f75844SAndroid Build Coastguard Workerimport sys
16*d9f75844SAndroid Build Coastguard Worker
17*d9f75844SAndroid Build Coastguard Worker_SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
18*d9f75844SAndroid Build Coastguard Worker_SRC_DIR = os.path.dirname(_SCRIPT_DIR)
19*d9f75844SAndroid Build Coastguard Worker
20*d9f75844SAndroid Build Coastguard Worker
21*d9f75844SAndroid Build Coastguard Workerdef _GetPipeWireDir():
22*d9f75844SAndroid Build Coastguard Worker  pipewire_dir = os.path.join(_SRC_DIR, 'third_party', 'pipewire',
23*d9f75844SAndroid Build Coastguard Worker                              'linux-amd64')
24*d9f75844SAndroid Build Coastguard Worker
25*d9f75844SAndroid Build Coastguard Worker  if not os.path.isdir(pipewire_dir):
26*d9f75844SAndroid Build Coastguard Worker    pipewire_dir = None
27*d9f75844SAndroid Build Coastguard Worker
28*d9f75844SAndroid Build Coastguard Worker  return pipewire_dir
29*d9f75844SAndroid Build Coastguard Worker
30*d9f75844SAndroid Build Coastguard Worker
31*d9f75844SAndroid Build Coastguard Workerdef _ConfigurePipeWirePaths(path):
32*d9f75844SAndroid Build Coastguard Worker  library_dir = os.path.join(path, 'lib64')
33*d9f75844SAndroid Build Coastguard Worker  pipewire_binary_dir = os.path.join(path, 'bin')
34*d9f75844SAndroid Build Coastguard Worker  pipewire_config_prefix = os.path.join(path, 'share', 'pipewire')
35*d9f75844SAndroid Build Coastguard Worker  pipewire_module_dir = os.path.join(library_dir, 'pipewire-0.3')
36*d9f75844SAndroid Build Coastguard Worker  spa_plugin_dir = os.path.join(library_dir, 'spa-0.2')
37*d9f75844SAndroid Build Coastguard Worker  media_session_config_dir = os.path.join(pipewire_config_prefix,
38*d9f75844SAndroid Build Coastguard Worker                                          'media-session.d')
39*d9f75844SAndroid Build Coastguard Worker
40*d9f75844SAndroid Build Coastguard Worker  env_vars = os.environ
41*d9f75844SAndroid Build Coastguard Worker  env_vars['LD_LIBRARY_PATH'] = library_dir
42*d9f75844SAndroid Build Coastguard Worker  env_vars['PIPEWIRE_CONFIG_PREFIX'] = pipewire_config_prefix
43*d9f75844SAndroid Build Coastguard Worker  env_vars['PIPEWIRE_MODULE_DIR'] = pipewire_module_dir
44*d9f75844SAndroid Build Coastguard Worker  env_vars['SPA_PLUGIN_DIR'] = spa_plugin_dir
45*d9f75844SAndroid Build Coastguard Worker  env_vars['MEDIA_SESSION_CONFIG_DIR'] = media_session_config_dir
46*d9f75844SAndroid Build Coastguard Worker  env_vars['PIPEWIRE_RUNTIME_DIR'] = '/tmp'
47*d9f75844SAndroid Build Coastguard Worker  env_vars['PATH'] = env_vars['PATH'] + ':' + pipewire_binary_dir
48*d9f75844SAndroid Build Coastguard Worker
49*d9f75844SAndroid Build Coastguard Worker
50*d9f75844SAndroid Build Coastguard Workerdef main():
51*d9f75844SAndroid Build Coastguard Worker  pipewire_dir = _GetPipeWireDir()
52*d9f75844SAndroid Build Coastguard Worker
53*d9f75844SAndroid Build Coastguard Worker  if pipewire_dir is None:
54*d9f75844SAndroid Build Coastguard Worker    print('configure-pipewire: Couldn\'t find directory %s' % pipewire_dir)
55*d9f75844SAndroid Build Coastguard Worker    return 1
56*d9f75844SAndroid Build Coastguard Worker
57*d9f75844SAndroid Build Coastguard Worker  _ConfigurePipeWirePaths(pipewire_dir)
58*d9f75844SAndroid Build Coastguard Worker
59*d9f75844SAndroid Build Coastguard Worker  pipewire_process = subprocess.Popen(["pipewire"], stdout=None)
60*d9f75844SAndroid Build Coastguard Worker  pipewire_media_session_process = subprocess.Popen(["pipewire-media-session"],
61*d9f75844SAndroid Build Coastguard Worker                                                    stdout=None)
62*d9f75844SAndroid Build Coastguard Worker
63*d9f75844SAndroid Build Coastguard Worker  return_value = subprocess.call(sys.argv[1:])
64*d9f75844SAndroid Build Coastguard Worker
65*d9f75844SAndroid Build Coastguard Worker  pipewire_media_session_process.terminate()
66*d9f75844SAndroid Build Coastguard Worker  pipewire_process.terminate()
67*d9f75844SAndroid Build Coastguard Worker
68*d9f75844SAndroid Build Coastguard Worker  return return_value
69*d9f75844SAndroid Build Coastguard Worker
70*d9f75844SAndroid Build Coastguard Worker
71*d9f75844SAndroid Build Coastguard Workerif __name__ == '__main__':
72*d9f75844SAndroid Build Coastguard Worker  sys.exit(main())
73