x264 Encoder с JNA
Вопрос
Я был занят созданием обертки JNA около x264.dll. У меня есть следующий класс для моего x264_param_t:
Однако, когда я пытаюсь инициализировать свой x264_param_t
x264_param_t param_t = new x264_param_t;
Я получаю следующую ошибку:
Exception in thread "main" java.lang.IllegalArgumentException: Can't determine size of nested structure: Can't instantiate class anotherReversed.x264_param_t$Vui (java.lang.InstantiationException: anotherReversed.x264_param_t$Vui)
at com.sun.jna.Structure.calculateSize(Structure.java:790)
at com.sun.jna.Structure.allocateMemory(Structure.java:287)
at com.sun.jna.Structure.<init>(Structure.java:177)
at com.sun.jna.Structure.<init>(Structure.java:167)
at com.sun.jna.Structure.<init>(Structure.java:163)
at com.sun.jna.Structure.<init>(Structure.java:154)
at anotherReversed.x264_param_t.<init>(x264_param_t.java:7)
Если я прокомментирую VUI в его конструкторе родительского класса, экземпляр в порядке. Интересно, что отличается именно от этой вложенной структуры, так как есть еще 2 других (а именно RC и анализ), которые вложены одинаково. Каким -то образом, однако, JNA не может найти необходимый размер для VUI. Есть указатели?
РЕДАКТИРОВАТЬ: Похоже, что все остальные вложенные структуры (анализ и RC) также не были инициализированы. Интересно, почему?
Решение
Вместо того, чтобы комментировать VUI, замените его указателем и проверьте, заполняются ли две другие структуры.
Эти структуры определяются как внутренние структуры в структуре x264_param_t, возможно, у JNA есть проблемы с ним. Посмотрите на вывод x264_param_t.tostring (), так как он печатает расчетные смещения памяти.
Надеюсь, вы найдете лучшие ответы на JNA список рассылки
РЕДАКТИРОВАТЬ Грязный взлом для решения проблемы: используйте массив INT или просто сбрасывайте все переменные из внутренней структуры вместо использования отдельного класса.