Skip to content

Commit 1c5482d

Browse files
authored
Merge pull request #1748 from pedroSG94/fix/gl-crash
Fix/gl crash
2 parents 4a01f0e + 8fdb283 commit 1c5482d

File tree

2 files changed

+47
-85
lines changed

2 files changed

+47
-85
lines changed

library/src/main/java/com/pedro/library/view/GlStreamInterface.kt

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -136,35 +136,27 @@ class GlStreamInterface(private val context: Context): OnFrameAvailableListener,
136136
}
137137

138138
override fun addMediaCodecSurface(surface: Surface) {
139-
executor?.secureSubmit {
140-
if (surfaceManager.isReady) {
141-
surfaceManagerEncoder.release()
142-
surfaceManagerEncoder.eglSetup(surface, surfaceManager)
143-
}
139+
if (surfaceManager.isReady) {
140+
surfaceManagerEncoder.release()
141+
surfaceManagerEncoder.eglSetup(surface, surfaceManager)
144142
}
145143
}
146144

147145
override fun removeMediaCodecSurface() {
148146
threadQueue.clear()
149-
executor?.secureSubmit {
150-
surfaceManagerEncoder.release()
151-
}
147+
surfaceManagerEncoder.release()
152148
}
153149

154150
override fun addMediaCodecRecordSurface(surface: Surface) {
155-
executor?.secureSubmit {
156-
if (surfaceManager.isReady) {
157-
surfaceManagerEncoderRecord.release()
158-
surfaceManagerEncoderRecord.eglSetup(surface, surfaceManager)
159-
}
151+
if (surfaceManager.isReady) {
152+
surfaceManagerEncoderRecord.release()
153+
surfaceManagerEncoderRecord.eglSetup(surface, surfaceManager)
160154
}
161155
}
162156

163157
override fun removeMediaCodecRecordSurface() {
164158
threadQueue.clear()
165-
executor?.secureSubmit {
166-
surfaceManagerEncoderRecord.release()
167-
}
159+
surfaceManagerEncoderRecord.release()
168160
}
169161

170162
override fun takePhoto(takePhotoCallback: TakePhotoCallback?) {
@@ -174,14 +166,15 @@ class GlStreamInterface(private val context: Context): OnFrameAvailableListener,
174166
override fun start() {
175167
threadQueue.clear()
176168
executor = newSingleThreadExecutor(threadQueue)
169+
surfaceManager.release()
170+
surfaceManager.eglSetup()
171+
surfaceManagerPhoto.release()
172+
surfaceManagerPhoto.eglSetup(encoderWidth, encoderHeight, surfaceManager)
173+
sensorRotationManager.start()
174+
running.set(true)
177175
executor?.secureSubmit {
178-
surfaceManager.release()
179-
surfaceManager.eglSetup()
180176
surfaceManager.makeCurrent()
181177
mainRender.initGl(context, encoderWidth, encoderHeight, encoderWidth, encoderHeight)
182-
surfaceManagerPhoto.release()
183-
surfaceManagerPhoto.eglSetup(encoderWidth, encoderHeight, surfaceManager)
184-
running.set(true)
185178
mainRender.getSurfaceTexture().setOnFrameAvailableListener(this)
186179
forceRender.start {
187180
executor?.execute {
@@ -192,24 +185,21 @@ class GlStreamInterface(private val context: Context): OnFrameAvailableListener,
192185
}
193186
}
194187
}
195-
sensorRotationManager.start()
196188
}
197189
}
198190

199191
override fun stop() {
200192
running.set(false)
201193
threadQueue.clear()
202-
executor?.secureSubmit {
203-
forceRender.stop()
204-
sensorRotationManager.stop()
205-
surfaceManagerPhoto.release()
206-
surfaceManagerEncoder.release()
207-
surfaceManagerEncoderRecord.release()
208-
surfaceManager.release()
209-
mainRender.release()
210-
}
211194
executor?.shutdownNow()
212195
executor = null
196+
forceRender.stop()
197+
sensorRotationManager.stop()
198+
surfaceManagerPhoto.release()
199+
surfaceManagerEncoder.release()
200+
surfaceManagerEncoderRecord.release()
201+
surfaceManager.release()
202+
mainRender.release()
213203
}
214204

215205
private fun draw(forced: Boolean) {
@@ -318,18 +308,14 @@ class GlStreamInterface(private val context: Context): OnFrameAvailableListener,
318308
}
319309

320310
fun attachPreview(surface: Surface) {
321-
executor?.secureSubmit {
322-
if (surfaceManager.isReady) {
323-
surfaceManagerPreview.release()
324-
surfaceManagerPreview.eglSetup(surface, surfaceManager)
325-
}
311+
if (surfaceManager.isReady) {
312+
surfaceManagerPreview.release()
313+
surfaceManagerPreview.eglSetup(surface, surfaceManager)
326314
}
327315
}
328316

329317
fun deAttachPreview() {
330-
executor?.secureSubmit {
331-
surfaceManagerPreview.release()
332-
}
318+
surfaceManagerPreview.release()
333319
}
334320

335321
override fun setStreamRotation(orientation: Int) {

library/src/main/java/com/pedro/library/view/OpenGlView.java

Lines changed: 22 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -302,65 +302,45 @@ private void draw(boolean forced) {
302302

303303
@Override
304304
public void addMediaCodecSurface(Surface surface) {
305-
ExecutorService executor = this.executor;
306-
if (executor == null) return;
307-
ExtensionsKt.secureSubmit(executor, () -> {
308-
if (surfaceManager.isReady()) {
309-
surfaceManagerEncoder.release();
310-
surfaceManagerEncoder.eglSetup(surface, surfaceManager);
311-
}
312-
return null;
313-
});
305+
if (surfaceManager.isReady()) {
306+
surfaceManagerEncoder.release();
307+
surfaceManagerEncoder.eglSetup(surface, surfaceManager);
308+
}
314309
}
315310

316311
@Override
317312
public void removeMediaCodecSurface() {
318313
threadQueue.clear();
319-
ExecutorService executor = this.executor;
320-
if (executor == null) return;
321-
ExtensionsKt.secureSubmit(executor, () -> {
322-
surfaceManagerEncoder.release();
323-
return null;
324-
});
314+
surfaceManagerEncoder.release();
325315
}
326316

327317
@Override
328318
public void addMediaCodecRecordSurface(Surface surface) {
329-
ExecutorService executor = this.executor;
330-
if (executor == null) return;
331-
ExtensionsKt.secureSubmit(executor, () -> {
332-
if (surfaceManager.isReady()) {
333-
surfaceManagerEncoderRecord.release();
334-
surfaceManagerEncoderRecord.eglSetup(surface, surfaceManager);
335-
}
336-
return null;
337-
});
319+
if (surfaceManager.isReady()) {
320+
surfaceManagerEncoderRecord.release();
321+
surfaceManagerEncoderRecord.eglSetup(surface, surfaceManager);
322+
}
338323
}
339324

340325
@Override
341326
public void removeMediaCodecRecordSurface() {
342327
threadQueue.clear();
343-
ExecutorService executor = this.executor;
344-
if (executor == null) return;
345-
ExtensionsKt.secureSubmit(executor, () -> {
346-
surfaceManagerEncoderRecord.release();
347-
return null;
348-
});
328+
surfaceManagerEncoderRecord.release();
349329
}
350330

351331
@Override
352332
public void start() {
353333
threadQueue.clear();
354334
executor = ExtensionsKt.newSingleThreadExecutor(threadQueue);
335+
surfaceManager.release();
336+
surfaceManager.eglSetup(getHolder().getSurface());
337+
surfaceManagerPhoto.release();
338+
surfaceManagerPhoto.eglSetup(encoderWidth, encoderHeight, surfaceManager);
339+
running.set(true);
355340
ExecutorService executor = this.executor;
356341
ExtensionsKt.secureSubmit(executor, () -> {
357-
surfaceManager.release();
358-
surfaceManager.eglSetup(getHolder().getSurface());
359342
surfaceManager.makeCurrent();
360343
mainRender.initGl(getContext(), encoderWidth, encoderHeight, encoderWidth, encoderHeight);
361-
surfaceManagerPhoto.release();
362-
surfaceManagerPhoto.eglSetup(encoderWidth, encoderHeight, surfaceManager);
363-
running.set(true);
364344
mainRender.getSurfaceTexture().setOnFrameAvailableListener(this);
365345
forceRenderer.start(() -> {
366346
ExecutorService ex = this.executor;
@@ -385,18 +365,14 @@ public void stop() {
385365
running.set(false);
386366
threadQueue.clear();
387367
ExecutorService executor = this.executor;
388-
if (executor == null) return;
389-
ExtensionsKt.secureSubmit(executor, () -> {
390-
forceRenderer.stop();
391-
surfaceManagerPhoto.release();
392-
surfaceManagerEncoder.release();
393-
surfaceManagerEncoderRecord.release();
394-
surfaceManager.release();
395-
mainRender.release();
396-
return null;
397-
});
398-
executor.shutdownNow();
368+
if (executor != null) executor.shutdownNow();
399369
this.executor = null;
370+
forceRenderer.stop();
371+
surfaceManagerPhoto.release();
372+
surfaceManagerEncoder.release();
373+
surfaceManagerEncoderRecord.release();
374+
surfaceManager.release();
375+
mainRender.release();
400376
}
401377

402378
@Override

0 commit comments

Comments
 (0)