From b9e89c35dac3c19e026d2a0161649a065b3dceee Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 22 Feb 2014 07:48:03 +0100 Subject: 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() --- .../classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java | 13 ++++++------- .../jogamp/opengl/util/av/impl/FFMPEGv08Natives.java | 4 ++-- .../jogamp/opengl/util/av/impl/FFMPEGv09Natives.java | 4 ++-- .../jogamp/opengl/util/av/impl/FFMPEGv10Natives.java | 4 ++-- 4 files changed, 12 insertions(+), 13 deletions(-) (limited to 'src/jogl/classes/jogamp') 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); -- cgit v1.2.3