带JNA的x264编码器

时间:2011-01-19 15:45:32

标签: java video native jna x264

我一直忙于围绕x2​​64.dll创建一个JNA包装器。我的x264_param_t有以下课程:

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,那么实例化就可以了。我想知道这个嵌套结构有什么不同,因为还有另外两个(即Rc和Analyze)以相同的方式嵌套。但不知何故,JNA无法找到Vui所需的大小。有什么指针吗?

修改: 似乎所有其他嵌套结构(analyze和rc)也没有初始化。我想知道为什么?

1 个答案:

答案 0 :(得分:1)

不是注释掉Vui,而是用指针替换它,并检查其他两个结构是否已填满。

这些结构被定义为x264_param_t结构中的内部结构,也许JNA有问题。仔细查看x264_param_t.toString()的输出,因为它打印计算的内存偏移量。

我希望你能在jna mailing list

找到更好的答案

编辑解决问题的一个肮脏的黑客:使用一个int数组或只是从内部结构转储所有变量而不是使用单独的类。