Android Использование tinyalsa в коде Java

Я собрал библиотеку tinyalsa, используя источники из tinyalsa-ndk, и обернул ее вызовами JNI, и я пытаюсь использовать ее в своем коде.

Я использовал Swig для генерации Java-оболочек (и изменил вывод для соответствия моему пакету). Моя нативная декларация метода:

public final static native long mixer_open(long jarg);

Мой вызов оболочки JNI находится внутри класса оболочки TinyAlsa.java под корневым пакетом (для примера я буду использовать com.Example.App):

public static SWIGTYPE_p_mixer mixer_open(long card) 
{
    long cPtr = TinyAlsaJNI.mixer_open(card);
    return (cPtr == 0) ? null : new SWIGTYPE_p_mixer(cPtr, false);
}

и мой метод обертки c:

SWIGEXPORT jlong JNICALL Java_com_Example_App_Native_TinyAlsaJNI_mixer_1open(JNIEnv *jenv, jclass jcls, jlong jarg1) 
{
    jlong jresult = 0 ;
    unsigned int arg1 ;
    struct mixer *result = 0 ;

    (void)jenv;
    (void)jcls;
    arg1 = (unsigned int)jarg1; 
    result = (struct mixer *)mixer_open(arg1);
    *(struct mixer **)&jresult = result; 
    return jresult;
}

Библиотека Tinalsa загружается нормально без исключений, но такие вызовы, как mixer_open(0) возвращает нулевые указатели.
Однако, если я выполню скомпилированный процессор tinymix, микшер будет открыт, и элементы управления микшером будут перечислены в следующем порядке.
Я что-то пропустил? Как я могу заставить это работать из моего кода?

0 ответов

Другие вопросы по тегам