2011-01-19 2 views
1

Я был занят созданием JNA-обертки вокруг x264.dll. У меня есть следующий класс для моего x264_param_t:x264 encoder with JNA

http://pastebin.com/Mh4JkVpP

Однако, когда я пытаюсь инициализировать мой 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 и Analyze), которые вложены таким же образом. Так или иначе, JNA не может найти необходимый размер для Vui. Любые указатели?

Редактировать: Кажется, что все другие вложенные структуры (анализ и rc) также не были инициализированы. Интересно, почему?

+0

Почему вы не рассматриваете JNI? Вы можете ознакомиться с моим руководством [здесь] (http://livertmpjavapublisher.blogspot.com/2014/05/jni-for-x264-encoder.html). –

ответ

1

Вместо того, чтобы комментировать Vui, замените его указателем и проверьте, заполнены ли две другие структуры.

Эти структуры определены как внутренние структуры внутри структуры x264_param_t, возможно, у JNA есть проблемы с ней. Познакомьтесь с выходом x264_param_t.toString(), поскольку он печатает расчетные смещения памяти.

Я надеюсь, что вы найдете лучшие ответы на ЮНЕ mailing list

EDIT Грязный хак, чтобы решить эту проблему: использовать массив целых чисел или просто сбросить все переменные из внутренней структуры вместо того, чтобы использовать отдельный класс.

+0

Список рассылки jna, конечно, был моим почти немедленным выбором, чтобы обратиться за помощью. Тем не менее, похоже, что он вернулся к проглатыванию писем. Более подробно о моем вопросе, казалось, что джна хорошо знала (по Тимофею) поведение не автоматически распределять память на вложенные структуры ByValue. Я не уверен, исправил ли он проблему, когда он упоминал один раз, если достаточное количество разработчиков запросит исправление, которое он выполнит. В последнем журнале изменений в jna такое исправление не упоминалось, но потом я мог ошибаться –

+0

@baba: проект jna переходит на java.net, поэтому вам, возможно, придется подождать и использовать новый портал для поиска помощи. Вы также можете попробовать использовать ffmpeg jna bridge http://code.google.com/p/ffmpeg4java/ –

+0

hmm, ffmpeg4java, похоже, далеко не закончен. Я попытался написать свою привязку некоторое время назад, она почти сработала :) –

Смежные вопросы