-%extend sigrok::InputFormat {
- std::shared_ptr<sigrok::Input> create_input()
- {
- return $self->create_input();
+%inline {
+namespace {
+ class ScopedEnv {
+ public:
+ ScopedEnv(JavaVM *jvm);
+ ~ScopedEnv();
+ JNIEnv* operator-> () { return env; }
+ operator bool () const { return (bool)env; }
+ private:
+ JavaVM *jvm;
+ JNIEnv *env;
+ int env_status;
+ };
+ ScopedEnv::ScopedEnv(JavaVM *jvm) : jvm(jvm), env(NULL) {
+ env_status = jvm->GetEnv((void **)&env, JNI_VERSION_1_2);
+ if (env_status == JNI_EDETACHED) {
+%#if defined(__ANDROID__)
+ jvm->AttachCurrentThread(&env, NULL);
+%#else
+ jvm->AttachCurrentThread((void **)&env, NULL);
+%#endif
+ }