2011-01-19 4 views
1

x264.dll을 중심으로 JNA 래퍼를 만드는 중입니다. 내 x264_param_t에 대한 다음과 같은 클래스가 :JNA가있는 x264 인코더

http://pastebin.com/Mh4JkVpP 그러나

, 나는 다음과 같은 오류 얻을

x264_param_t param_t = new x264_param_t; 

처럼 내 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에 필요한 크기를 찾을 수 없습니다. 어떤 포인터?

편집 : 다른 모든 중첩 구조체 (analyze 및 rc)도 초기화되지 않은 것 같습니다. 왜 그런지 궁금해?

+0

왜 JNI를 고려하지 않습니까? 내 가이드 [여기] (http://livertmpjavapublisher.blogspot.com/2014/05/jni-for-x264-encoder.html)를 검토 할 수 있습니다. –

답변

1

Vui를 주석 처리하는 대신 포인터로 바꾸고 다른 두 구조체가 채워져 있는지 확인하십시오.

이러한 구조체는 x264_param_t 구조체의 내부 구조체로 정의됩니다. 아마도 JNA에는이 구조체에 문제가있을 수 있습니다. 계산 된 메모리 오프셋을 인쇄 할 때 x264_param_t.toString()의 결과를 자세히 살펴보십시오. int 배열을 사용하거나 대신 별도의를 사용하는 내부 구조체의 모든 변수를 덤프 :

나는 당신이 JNA mailing list

편집 문제를 해결하기 더러운 해킹에 더 나은 답변을 찾을 희망 수업.

+0

jna 메일 링리스트는 당연히 도움을 요청할 수있는 거의 즉각적인 선택이었습니다. 그러나, 그것은 이메일을 삼키는로 돌아온 것 같습니다. 내 질문에 더 많은, 그것은 jna가 (By Timothy) ByValue 구조체를 중첩시킨 메모리를 자동으로 할당하지 않는 행동으로 잘 알려져있는 것으로 보였다. 충분한 개발자가 구현할 픽스를 요청한 경우 한 번 언급 한대로 문제를 해결했는지 확신 할 수 없습니다. 최신 jna changelog에서 이러한 수정 사항은 언급되지 않았지만 다시 잘못된 것일 수도 있습니다 –

+0

@baba : jna 프로젝트가 java.net으로 이동 중이므로 기다려야하고 새로운 포털을 사용하여 도움을 요청해야 할 수도 있습니다. 또한 ffmpeg jna bridge를 사용해 볼 수도 있습니다. http://code.google.com/p/ffmpeg4java/ –

+0

흠, ffmpeg4java가 끝나지 않은 것 같습니다. 오래전에 제 바인딩을 시도했는데, 거의 효과가있었습니다. :) –

관련 문제