JNA を使用した x264 エンコーダー
質問
私は x264.dll の JNA ラッパーを作成するのに忙しかったです。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 と Analyze ) があるのに、まさにこの入れ子構造は何が違うのでしょう。しかしどういうわけか、JNA は Vui に必要なサイズを見つけることができません。何かヒントはありますか?
編集:他のすべてのネストされた構造体 (analyse と rc ) も初期化されていないようです。なぜだろうか?
解決
Vui をコメントアウトする代わりに、それを Pointer に置き換え、他の 2 つの構造体が埋められているかどうかを確認します。
これらの構造体は x264_param_t 構造体内の内部構造体として定義されており、JNA に問題がある可能性があります。x264_param_t.toString() の出力を詳しく見てみましょう。計算されたメモリ オフセットが出力されます。
jna でより良い答えが見つかることを願っています メーリングリスト
編集 問題を解決するための汚いハック:int の配列を使用するか、別のクラスを使用する代わりに内部構造体からすべての変数をダンプします。
所属していません StackOverflow