On Tue, Feb 16, 2016 at 2:47 PM, Matthieu Bouron <matthieu.bou...@gmail.com> wrote:
> > > On Tue, Feb 16, 2016 at 12:36 PM, wm4 <nfx...@googlemail.com> wrote: > >> On Tue, 16 Feb 2016 12:09:58 +0100 >> Matthieu Bouron <matthieu.bou...@gmail.com> wrote: >> >> > On Tue, Feb 16, 2016 at 10:41 AM, wm4 <nfx...@googlemail.com> wrote: >> > >> > > On Mon, 15 Feb 2016 18:52:25 +0100 >> > > Matthieu Bouron <matthieu.bou...@gmail.com> wrote: >> > > >> > > > Hello, >> > > > >> > > > The following patchset adds basic MediaCodec support to libavcodec, >> ie: >> > > only >> > > > h264 is supported and the HWAccel part (Surface output) is missing. >> > > > >> > > > JNI comes as a dependency. The JNI support is based on the same >> patchset >> > > I've >> > > > sent some time ago with some improvements. >> > > > >> > > > I originally developed the patch against the Ndk API (Android >= >> 5.0) >> > > but then >> > > > changed my mind and go with the JNI version for two main reasons: >> > > > >> > > > * there are still too many android 4 devices >> > > > * there is still needs for some jni bits as the MediaCodec Ndk API >> > > > does not provide a way to known the codec name which is mandatory >> > > > to workaround or blacklist some implementations (ie: do not use >> known >> > > > software decoders, workaround OMX.SEC.avc.dec as it returns >> invalid >> > > > stride and slice-height values, ...) >> > > > >> > > >> > > I guess there's no way around it. >> > > >> > > > I decided to mimic the Ndk API minus a few differences (see >> > > > mediacodec_wrapper.h) so it can be ported more easily to the C API >> in the >> > > > future. The other reason being it is to totally hide the JNI code. >> > > > >> > > > The HWAccel part is on my todo list but I wanted a real use case to >> > > develop the >> > > > API against. >> > > > >> > > > The development branch can be found here: >> > > > https://github.com/mbouron/FFmpeg/tree/feature/mediacodec-support >> > > > >> > > > --enable-jni and --enable-mediacodec is required to build the >> > > h264_mediacodec >> > > > decoder. >> > > > >> > > > av_jni_register_java_vm(vm) must called before lavc is used. >> > > >> > > Wasn't there some sort of trick that could avoid this? >> > > >> > >> > The workaround for this is to call a *private* C++ API, and in >> particular >> > checking that the variable jni_invocation_ is initialized >> > and call the GetCreatedJavaVMS function from: >> > >> https://android.googlesource.com/platform/libnativehelper/+/master/JniInvocation.cpp >> > >> > >> >> If I read this right, the host can somehow initialize the JNI, and then >> JNI_GetCreatedJavaVMs() will work? >> > > AFAIK, This is initialized when the VM (dalvik or art) is initialized. > >> >> Though it looks like that function will just crash if the jni stuff is >> not initialized. With no way to ensure or verify initialization using >> public (or just C++?) API. Well, I guess this is Android quality code... >> > > Well it is ... this api is not public. > I implemented this and pushed it to the development branch, so there is no need to call av_jni_register_java_vm anymore (so this part of the public api will be removed) [...] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel