aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/jogamp
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2014-02-22 07:48:03 +0100
committerSven Gothel <[email protected]>2014-02-22 07:48:03 +0100
commitb9e89c35dac3c19e026d2a0161649a065b3dceee (patch)
tree44ef0a989551124fd6bb0dad3b35f2b0542538ed /src/jogl/classes/jogamp
parentd553668d3c5a687ef626501f4ed5963f16c6dba3 (diff)
Bug 927 - Multithreading (MT) issues libav/ffmpeg
FFMPEG Natives: - Move 'mutex_avcodec_openclose' to local static and initialize at initSymbols0 - setStream0: - Add another locked mutex block around: - [ sp_avformat_open_input .. sp_avformat_find_stream_info ] This solves the issue of: [NULL @ 0x89d20c60] insufficient thread locking around avcodec_open/close()
Diffstat (limited to 'src/jogl/classes/jogamp')
-rw-r--r--src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java13
-rw-r--r--src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java4
-rw-r--r--src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java4
-rw-r--r--src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java4
4 files changed, 12 insertions, 13 deletions
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java
index c3fc2898f..b4b887bc9 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java
@@ -31,20 +31,19 @@ import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame;
/* pp */ abstract class FFMPEGNatives {
- private static final Object mutex_avcodec_openclose = new Object();
+ private static final Object mutex_avcodec_openclose_jni = new Object();
- abstract boolean initSymbols0(long[] symbols, int count);
+ final boolean initSymbols0(long[] symbols, int count) {
+ return initSymbols0(mutex_avcodec_openclose_jni, symbols, count);
+ }
+ abstract boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
abstract int getAvUtilMajorVersionCC0();
abstract int getAvFormatMajorVersionCC0();
abstract int getAvCodecMajorVersionCC0();
abstract int getAvResampleMajorVersionCC0();
abstract int getSwResampleMajorVersionCC0();
- final long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose) {
- return createInstance0(mutex_avcodec_openclose, upstream, verbose);
- }
- abstract long createInstance0(Object mutex_avcodec_openclose, FFMPEGMediaPlayer upstream, boolean verbose);
-
+ abstract long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose);
abstract void destroyInstance0(long moviePtr);
/**
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java
index 6ca0ea311..6bab23f25 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java
@@ -29,7 +29,7 @@ package jogamp.opengl.util.av.impl;
class FFMPEGv08Natives extends FFMPEGNatives {
@Override
- native boolean initSymbols0(long[] symbols, int count);
+ native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
@Override
native int getAvUtilMajorVersionCC0();
@@ -47,7 +47,7 @@ class FFMPEGv08Natives extends FFMPEGNatives {
native int getSwResampleMajorVersionCC0();
@Override
- native long createInstance0(Object mutex_avcodec_openclose, FFMPEGMediaPlayer upstream, boolean verbose);
+ native long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose);
@Override
native void destroyInstance0(long moviePtr);
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java
index 1d9f7f5fa..a48b5f21f 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java
@@ -29,7 +29,7 @@ package jogamp.opengl.util.av.impl;
class FFMPEGv09Natives extends FFMPEGNatives {
@Override
- native boolean initSymbols0(long[] symbols, int count);
+ native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
@Override
native int getAvUtilMajorVersionCC0();
@@ -47,7 +47,7 @@ class FFMPEGv09Natives extends FFMPEGNatives {
native int getSwResampleMajorVersionCC0();
@Override
- native long createInstance0(Object mutex_avcodec_openclose, FFMPEGMediaPlayer upstream, boolean verbose);
+ native long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose);
@Override
native void destroyInstance0(long moviePtr);
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java
index 19bc10f5f..f35fb29dc 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java
@@ -29,7 +29,7 @@ package jogamp.opengl.util.av.impl;
class FFMPEGv10Natives extends FFMPEGNatives {
@Override
- native boolean initSymbols0(long[] symbols, int count);
+ native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
@Override
native int getAvUtilMajorVersionCC0();
@@ -47,7 +47,7 @@ class FFMPEGv10Natives extends FFMPEGNatives {
native int getSwResampleMajorVersionCC0();
@Override
- native long createInstance0(Object mutex_avcodec_openclose, FFMPEGMediaPlayer upstream, boolean verbose);
+ native long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose);
@Override
native void destroyInstance0(long moviePtr);