@@ -45,36 +45,38 @@ protocol LibraryWrapperType {
45
45
}
46
46
47
47
enum LibraryWrapper : LibraryWrapperType {
48
+ private static let lock = NSLock ( )
49
+
48
50
static var libraryLogger : ( Int , String ) -> Void = { _, message in
49
51
print ( " [swift-ass] \( message) " )
50
52
}
51
53
52
54
static func libraryInit( ) -> OpaquePointer ? {
53
- withLock {
55
+ withLock ( lock ) {
54
56
ass_library_init ( )
55
57
}
56
58
}
57
59
58
60
static func libraryDone( _ library: OpaquePointer ) {
59
- withLock {
61
+ withLock ( lock ) {
60
62
ass_library_done ( library)
61
63
}
62
64
}
63
65
64
66
static func rendererInit( _ library: OpaquePointer ) -> OpaquePointer ? {
65
- withLock {
67
+ withLock ( lock ) {
66
68
ass_renderer_init ( library)
67
69
}
68
70
}
69
71
70
72
static func rendererDone( _ renderer: OpaquePointer ) {
71
- withLock {
73
+ withLock ( lock ) {
72
74
ass_renderer_done ( renderer)
73
75
}
74
76
}
75
77
76
78
static func setLogCallback( _ library: OpaquePointer ) {
77
- withLock {
79
+ withLock ( lock ) {
78
80
ass_set_message_cb ( library, { messageLevel, messageString, messageArgs, _ in
79
81
guard let messageString else { return }
80
82
let message = String ( cString: messageString)
@@ -89,13 +91,13 @@ enum LibraryWrapper: LibraryWrapperType {
89
91
}
90
92
91
93
static func setRendererSize( _ renderer: OpaquePointer , size: CGSize ) {
92
- withLock {
94
+ withLock ( lock ) {
93
95
ass_set_frame_size ( renderer, Int32 ( size. width) , Int32 ( size. height) )
94
96
}
95
97
}
96
98
97
99
static func setExtractFonts( _ library: OpaquePointer , extract: Bool ) {
98
- withLock {
100
+ withLock ( lock ) {
99
101
ass_set_extract_fonts ( library, extract ? 1 : 0 )
100
102
}
101
103
}
@@ -107,7 +109,7 @@ enum LibraryWrapper: LibraryWrapperType {
107
109
defaultFont: String ? = nil ,
108
110
defaultFamily: String ? = nil
109
111
) {
110
- withLock {
112
+ withLock ( lock ) {
111
113
let defaultFont = defaultFont. flatMap { $0. cString ( using: . utf8) }
112
114
let defaultFamily = defaultFamily. flatMap { $0. cString ( using: . utf8) }
113
115
let fontConfig = configPath. flatMap { $0. cString ( using: . utf8) }
@@ -117,7 +119,7 @@ enum LibraryWrapper: LibraryWrapperType {
117
119
}
118
120
119
121
static func readTrack( _ library: OpaquePointer , content: String ) -> ASS_Track ? {
120
- withLock {
122
+ withLock ( lock ) {
121
123
guard var buffer = content. cString ( using: . utf8) else { return nil }
122
124
return ass_read_memory ( library, & buffer, buffer. count, nil ) . pointee
123
125
}
@@ -128,22 +130,12 @@ enum LibraryWrapper: LibraryWrapperType {
128
130
track: inout ASS_Track ,
129
131
at offset: TimeInterval
130
132
) -> LibraryRenderResult ? {
131
- withLock {
133
+ withLock ( lock ) {
132
134
var changed : Int32 = 0
133
135
let millisecond = Int64 ( offset * 1000 )
134
136
guard let frame = ass_render_frame ( renderer, & track, millisecond, & changed) else { return nil }
135
137
136
138
return LibraryRenderResult ( image: frame. pointee, changed: changed != 0 )
137
139
}
138
140
}
139
-
140
- // MARK: - Private
141
-
142
- private static let lock = NSLock ( )
143
-
144
- private static func withLock< T> ( _ perform: ( ) -> T ) -> T {
145
- lock. lock ( )
146
- defer { lock. unlock ( ) }
147
- return perform ( )
148
- }
149
141
}
0 commit comments