【问题标题】:x264 encoder with JNA带 JNA 的 x264 编码器
【发布时间】:2011-06-11 20:37:08
【问题描述】:

我一直忙于围绕 x264.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,实例化就可以了。我想知道 EXACTLY 这个嵌套结构有什么不同,因为还有其他 2 个(即 Rc 和 Analyze )以相同的方式嵌套。但是,不知何故,JNA 无法找到 Vui 所需的大小。有什么指点吗?

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

【问题讨论】:

  • 为什么不考虑 JNI?您可以查看我的指南here

标签: java video native jna x264


【解决方案1】:

不要注释掉 Vui,而是用一个 Pointer 替换它并检查其他两个结构是否被填充。

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

希望你能在jnamailing list找到更好的答案

编辑解决问题的肮脏技巧:使用整数数组或仅转储内部结构中的所有变量,而不是使用单独的类。

【讨论】:

  • jna 邮件列表当然是我寻求帮助的直接选择。然而,它似乎又回到了吞下电子邮件。关于我的问题的更多信息,似乎 jna (蒂莫西)众所周知的行为不会自动将内存分配给嵌套的 ByValue 结构。我不确定他是否解决了这个问题,因为他曾经提到过,如果有足够多的开发人员请求修复,他会实施它。在最新的 jna 更新日志中没有提到这样的修复,但我可能又错了
  • @baba:jna 项目正在迁移到 java.net,因此您可能需要等待并使用新门户寻求帮助。也可以尝试使用ffmpeg jna桥code.google.com/p/ffmpeg4java
  • hmm,ffmpeg4java 似乎远未完成。不久前我尝试编写绑定,它几乎可以工作:)
  • 谢谢你们的回答。我对 ffmepg4java 项目非常熟悉,并且也尝试了 1 天的时间为它编写绑定......但后来又重新考虑了。我第二个想法的原因是:ffmpeg4java 几乎不再开发了,它依赖于 JAI 和 JMF(这也是一个鬼城)。所以我决定重新开始使用 x264,因为它是开源的,被很多项目(参见 Xuggle、Avidemux 等)使用并且正在积极开发中。
  • @baba:如果你“内联”结构会怎样?只写所有变量,还是像没有内部结构一样使用int数组?
猜你喜欢
  • 2013-01-15
  • 1970-01-01
  • 2014-11-18
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多