0

我正在尝试将 , 包含c fileImageProc我的 java 文件中以使用它的功能。

我从 aMjpegInputStream file那里得到了代码(一切都应该工作,但当然它从来没有那么容易)

这是崩溃的代码(不知何故没有抓住它)

static {
    try {
        System.loadLibrary("ImageProc");
    }
    catch (Exception e){
        e.getMessage();
    }
}

makefile

include $(CLEAR_VARS)
LOCAL_MODULE    := ImageProc
LOCAL_SRC_FILES := ImageProc.c
LOCAL_LDLIBS    := -llog -ljnigraphics
LOCAL_SHARED_LIBRARIES := prebuilt-libjpeg
LOCAL_C_INCLUDES       := external/include jni/external/include

所以据我了解,我应该能够使用ImageProc.

我知道它通过并编译了,c file因为起初它找不到 h 文件引用(现已修复)。

我不确定的另一件事是我调用pixeltobmp了 c 文件中定义的函数,这Java_com_camera_simplemjpeg_MjpegInputStream_pixeltobmp让我觉得很奇怪。我尝试更改方法的名称以包含我正在使用的包,而不是我从中复制它的包,但这并没有解决任何问题。

任何帮助表示赞赏。

附加信息:我正在使用 gradle build 2.10

4

3 回答 3

1
 1. Compile your library
 2. Check if you have the .so compiled library(this is important!)
 3. In your gradle file add this:

      android {  
        compileSdkVersion 23
            buildToolsVersion "22.0.1"

            defaultConfig {
                minSdkVersion 18
                    targetSdkVersion 23
                    versionCode 1
                    versionName "1.0"
                }

                sourceSets.main {
                    jni.srcDirs = []
                    File configFile = file('pathToYourLibsFolder')
                    jniLibs.srcDir configFile.absolutePath
                }

然后它应该工作。

于 2016-03-01T19:24:06.317 回答
0

作为替代选项,可以轻松修改您正在使用的代码以消除对 OpenCV 的依赖(或者现在可以在您提出问题后 2 年)。

MjpegInputStream.java有两个相关的方法,readMjpegFrame()readMjpegFrame(Bitmap bmp).

只有后者依赖于 OpenCV,因此依赖于本地库。如果修改代码去掉这个方法,然后去掉:

static {
    System.loadLibrary("ImageProc");
}

public native int pixeltobmp(byte[] jp, int l, Bitmap bmp);

public native void freeCameraMemory();

您将不再有这个问题,并且仍然可以使用readMjpegFrame()来获取您想要的内容。

我不确定这是否性能较低,但在我的用例中运行良好。

于 2019-02-09T13:32:09.543 回答
0

在 build.gradle

apply plugin: 'com.android.application'
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.2"

        defaultConfig {
           ...
        }
        buildTypes {
            ...
        }
        ndk {
            moduleName "ImageProc"
            // stl "stlport_static"
            // ldLibs "log"
        }
    }

}
于 2016-02-15T05:17:02.463 回答