Passed
Push — master ( 1ed32d...5696b4 )
by manny
01:30 queued 11s
created

helpers.obs_context_manager.p_source_ar()   A

Complexity

Conditions 1

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 7
rs 10
c 0
b 0
f 0
cc 1
nop 3
1
from contextlib import contextmanager
2
3
import obspython as obs
4
5
# auto release context managers
6
7
8
@contextmanager
9
def source_ar(source_name):
10
    source = obs.obs_get_source_by_name(source_name)
11
    try:
12
        yield source
13
    finally:
14
        obs.obs_source_release(source)
15
16
17
@contextmanager
18
def p_source_ar(id, source_name, settings):
19
    try:
20
        _source = obs.obs_source_create_private(id, source_name, settings)
21
        yield _source
22
    finally:
23
        obs.obs_source_release(_source)
24
25
26
@contextmanager
27
def data_ar(source_settings=None):
28
    settings = None
29
    if not source_settings:
30
        settings = obs.obs_data_create()
31
    if source_settings:
32
        settings = obs.obs_source_get_settings(source_settings)
33
    try:
34
        yield settings
35
    finally:
36
        obs.obs_data_release(settings)
37
38
39
@contextmanager
40
def scene_ar(scene):
41
    scene = obs.obs_scene_from_source(scene)
42
    try:
43
        yield scene
44
    finally:
45
        obs.obs_scene_release(scene)
46
47
48
@contextmanager
49
def filter_ar(source, name):
50
    source = obs.obs_source_get_filter_by_name(source, name)
51
    try:
52
        yield source
53
    finally:
54
        obs.obs_source_release(source)
55
56
57
@contextmanager
58
def source_list_ar():
59
    source_list = obs.obs_enum_sources()
60
    try:
61
        yield source_list
62
    finally:
63
        obs.source_list_release(source_list)
64
65
66
@contextmanager
67
def media_source_ar(media_path: str, use_monitoring: bool):
68
    media_source = obs.obs_source_create_private(
69
        "ffmpeg_source", "Global Media Source", None
70
        )
71
    settings = data_ar()
72
    obs.obs_data_set_string(settings, "local_file", media_path)
73
    obs.obs_source_update(media_source, settings)
74
    if use_monitoring:
75
        obs.obs_source_set_monitoring_type(
76
            media_source, obs.OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT
77
        )
78
    else:
79
        obs.obs_source_set_monitoring_type(
80
            media_source, obs.OBS_MONITORING_TYPE_NONE
81
        )
82
    try:
83
        yield media_source
84
    finally:
85
        obs.obs_source_release(media_source)
86