Exemplo n.º 1
0
VOID * CMTimer_Imp::TimeProc(VOID* pData)
{
	  CMTimer_Imp *pTimer = (CMTimer_Imp*)pData;

	  struct timeval delay;
	  delay.tv_sec = 0;
	  delay.tv_usec = pTimer->m_nWaitingInterval * 1000;
	  select(0, NULL, NULL, NULL, &delay);	
	  
	  pTimer->m_bExitThread = FALSE;
	  pTimer->m_Pthread_t = pthread_self();
	  JNIEnv*env;
	  GetJavaVM()->AttachCurrentThread((JNIEnv**)&env, NULL);
	  if(pTimer)
	  {
		  	while(!pTimer->m_bExitThread)	 
	  		{
	  			if(pTimer->m_bRuning && pTimer->m_pTimer)
	  			{
	  				pTimer->m_bRuning = FALSE;
	  				pTimer->m_pTimer->m_pNotify->OnTimer(*pTimer->m_pTimer);
				}
				else
				{
					struct timeval delay;
					delay.tv_sec = 0;
					delay.tv_usec = pTimer->m_nWaitingInterval * 1000;
					select(0, NULL, NULL, NULL, &delay);				
				}
	  		}
	  }
	GetJavaVM()->DetachCurrentThread();
	pTimer->m_Pthread_t = 0;
}
Exemplo n.º 2
0
void unloadSensorController(MPEGVSensorContext *rc)
{
	if ( rc->isAttached )
	{
		(*rc->env)->PopLocalFrame(rc->env, NULL);
		(*GetJavaVM())->DetachCurrentThread(GetJavaVM());
		rc->isAttached = 0;
	}

	rc->env = NULL;
}
Exemplo n.º 3
0
//----------------------------------------------------------------------
// Called by the audio thread
static void WAV_Shutdown(GF_AudioOutput *dr)
{
	DroidContext *ctx = (DroidContext *)dr->opaque;
	JNIEnv* env = ctx->env;

	(*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mStop);
	(*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mRelease);

	(*env)->PopLocalFrame(env, NULL);

	(*GetJavaVM())->DetachCurrentThread(GetJavaVM());
}
Exemplo n.º 4
0
/* Called by the audio thread */
static GF_Err WAV_ConfigureOutput(GF_AudioOutput *dr, u32 *SampleRate, u32 *NbChannels, u32 *nbBitsPerSample, u32 channel_cfg)
{
	JNIEnv* env = NULL;
	u32 i;
	DroidContext *ctx = (DroidContext *)dr->opaque;

	LOGI("[Android Audio] Configure Output for %u channels...", *NbChannels);

	if (!ctx) return GF_BAD_PARAM;

	ctx->sampleRateInHz = *SampleRate;
	ctx->channelConfig = (*NbChannels == 1) ? CHANNEL_CONFIGURATION_MONO : CHANNEL_CONFIGURATION_STEREO; //AudioFormat.CHANNEL_CONFIGURATION_MONO
	ctx->audioFormat = (*nbBitsPerSample == 8)? ENCODING_PCM_8BIT : ENCODING_PCM_16BIT; //AudioFormat.ENCODING_PCM_16BIT

	// Get the java environment in the new thread
	(*GetJavaVM())->AttachCurrentThread(GetJavaVM(), &env, NULL);
	ctx->env = env;
	LOGV("[Android Audio] SampleRate : %d",ctx->sampleRateInHz);
        LOGV("[Android Audio] BitPerSample : %d", *nbBitsPerSample);

	(*env)->PushLocalFrame(env, 2);

	ctx->num_buffers = 1;
	ctx->mbufferSizeInBytes = (*env)->CallStaticIntMethod(env, cAudioTrack, mGetMinBufferSize,
			ctx->sampleRateInHz, ctx->channelConfig, ctx->audioFormat);

	i = 1;
	if ( ctx->channelConfig == CHANNEL_CONFIGURATION_STEREO )
		i *= 2;
	if ( ctx->audioFormat == ENCODING_PCM_16BIT )
		i *= 2;

	ctx->total_length_ms =  1000 * ctx->num_buffers * ctx->mbufferSizeInBytes / i / ctx->sampleRateInHz;

	/*initial delay is full buffer size*/
	ctx->delay = ctx->total_length_ms;

	mtrack = (*env)->NewObject(env, cAudioTrack, mAudioTrack, STREAM_MUSIC, ctx->sampleRateInHz,
		ctx->channelConfig, ctx->audioFormat, ctx->mbufferSizeInBytes, MODE_STREAM); //AudioTrack.MODE_STREAM
        if (mtrack){
          mtrack = (*env)->NewGlobalRef(env, mtrack);
          ctx->mtrack = mtrack;
          (*env)->CallNonvirtualVoidMethod(env, mtrack, cAudioTrack, mPlay);
        }  else {
		LOGV("[Android Audio] mtrack = %p", mtrack);
		return GF_NOT_SUPPORTED;
	}

	ctx->buff = (*env)->NewByteArray(env, ctx->mbufferSizeInBytes);
        LOGV("[Android Audio] ConfigureOutput DONE.", *NbChannels);
	return GF_OK;
}
JD_IMETHODIMP
JavaPluginFactory5::CreateInstance(ISupports *aOuter,
				   const JDIID & aIID,
				   void **result) {
    trace("JavaPluginFactory5:CreateInstance\n");

    if (result == NULL) {
        plugin_error("NULL result in create instance");
	return JD_ERROR_NULL_POINTER;
    }

    *result = NULL;

    if (aOuter != NULL) {
        plugin_error("NO_AGGREGATION in create instance!");
	return JD_ERROR_NO_AGGREGATION;
    }

    if (! (aIID.Equals(jIPluginInstanceIID) ||
	   aIID.Equals(jISupportsIID)))
	return JD_NOINTERFACE;

    /* Startup the JVM if it is not already running */
    JavaVM5* vm = GetJavaVM();

    /* Create a new instance and refcount it */
    JavaPluginInstance5 * pluginInstance = new JavaPluginInstance5(this);

    *result = (IPluginInstance *) pluginInstance;
    pluginInstance->AddRef();

    UNUSED(vm);

    return JD_OK;
}
/* Make a call to return the plugin instance for an object */
jobject 
JavaPluginFactory5::GetJavaObjectForInstance(int plugin_number) {
  /* Get the vm, making sure it is started if necessary */
  JavaVM5* jvm = GetJavaVM();
  
  return jvm->GetJavaObjectForInstance(plugin_number);

}
void JniLogSystemCallback::operator()(AdblockPlus::LogSystem::LogLevel logLevel,
    const std::string& message, const std::string& source)
{
  JNIEnvAcquire env(GetJavaVM());

  jmethodID method = env->GetMethodID(
      *JniLocalReference<jclass>(*env,
          env->GetObjectClass(GetCallbackObject())),
      "logCallback",
      "(" TYP("LogSystem$LogLevel") "Ljava/lang/String;Ljava/lang/String;)V");

  // TODO: Set log level from Java and handle it here (to reduce C++->Java calls)

  if (method)
  {
    const char* enumName = 0;

    switch (logLevel)
    {
    default:
    case AdblockPlus::LogSystem::LOG_LEVEL_TRACE:
      enumName = "TRACE";
      break;
    case AdblockPlus::LogSystem::LOG_LEVEL_LOG:
      enumName = "LOG";
      break;
    case AdblockPlus::LogSystem::LOG_LEVEL_INFO:
      enumName = "INFO";
      break;
    case AdblockPlus::LogSystem::LOG_LEVEL_WARN:
      enumName = "WARN";
      break;
    case AdblockPlus::LogSystem::LOG_LEVEL_ERROR:
      enumName = "ERROR";
      break;
    }

    jclass enumClass = logLevelClass->Get();
    if (enumClass)
    {
      jfieldID enumField = env->GetStaticFieldID(enumClass, enumName,
          TYP("LogSystem$LogLevel"));
      JniLocalReference<jobject> jLogLevel(*env,
          env->GetStaticObjectField(enumClass, enumField));

      JniLocalReference<jstring> jMessage(*env,
          env->NewStringUTF(message.c_str()));
      JniLocalReference<jstring> jSource(*env,
          env->NewStringUTF(source.c_str()));

      env->CallVoidMethod(GetCallbackObject(), method, *jLogLevel, *jMessage,
          *jSource);
    }

    CheckAndLogJavaException(*env);
  }
}
Exemplo n.º 8
0
void loadSensorControler(MPEGVSensorContext *rc)
{
	JNIEnv* env = NULL;
	jint res = 0;

	// Here we can be in a thread

	res = (*GetJavaVM())->GetEnv(javaVM, (void**)&env, JNI_VERSION_1_2);
	if ( res == JNI_EDETACHED )
	{
		GF_LOG(GF_LOG_ERROR, GF_LOG_CORE, ("[MPEG-V_IN] The current thread is not attached to the VM, assuming native thread\n"));
		if ( res = (*GetJavaVM())->AttachCurrentThread(GetJavaVM(), &env, NULL) )
		{
			GF_LOG(GF_LOG_ERROR, GF_LOG_CORE, ("[MPEG-V_IN] Attach current thread failed: %d\n", res));
			return;
		}
		rc->isAttached = 1;
		(*env)->PushLocalFrame(env, 2);
	}
	else
		if ( res == JNI_EVERSION )
		{
			GF_LOG(GF_LOG_ERROR, GF_LOG_CORE, ("[MPEG-V_IN] The specified version is not supported\n"));
			return;
		}

	rc->env = env;
	rc->sensCtrlClass = sensCtrlClass;
	rc->cid = cid;
	rc->startSensor = startSensor;
	rc->stopSensor = stopSensor;

	// Create the sensor object in the thread
	rc->sensCtrlObj = (*rc->env)->NewObject(rc->env, rc->sensCtrlClass, rc->cid);
	if (rc->sensCtrlObj == 0)
	{
		GF_LOG(GF_LOG_ERROR, GF_LOG_CORE, ("[MPEG-V_IN] Cannot create MPEGVSensor object\n"));
		return;
	}
}
JD_IMETHODIMP JavaPluginFactory5::ShowJavaConsole(void) {

    JavaVM5 *vm = GetJavaVM();

    CWriteBuffer wb;
    trace("JavaPluginFactory5:ShowJavaConsole");
    wb.putInt(JAVA_PLUGIN_CONSOLE_SHOW);
    SendRequest(wb, FALSE);

    UNUSED(vm);

    return JD_OK;
}
void JniEventCallback::Callback(AdblockPlus::JsValueList& params)
{
  JNIEnvAcquire env(GetJavaVM());

  jclass clazz = env->GetObjectClass(GetCallbackObject());
  jmethodID method = env->GetMethodID(clazz, "eventCallback", "(Ljava/util/List;)V");

  if (method)
  {
    jobject jsList = JniJsValueListToArrayList(*env, params);
    env->CallVoidMethod(GetCallbackObject(), method, jsList);
  }
}
void JniEventCallback::Callback(AdblockPlus::JsValueList&& params)
{
  JNIEnvAcquire env(GetJavaVM());

  jmethodID method = env->GetMethodID(
      *JniLocalReference<jclass>(*env,
          env->GetObjectClass(GetCallbackObject())),
      "eventCallback", "(Ljava/util/List;)V");

  if (method)
  {
    jobject jsList = JniJsValueListToArrayList(*env, std::move(params));
    env->CallVoidMethod(GetCallbackObject(), method, jsList);
  }
}
void JniUpdaterCallback::Callback(const std::string& arg)
{
  JNIEnvAcquire env(GetJavaVM());

  jclass clazz = env->GetObjectClass(GetCallbackObject());
  jmethodID method = env->GetMethodID(clazz, "updateCallback", "(Ljava/lang/String;)V");

  if (method)
  {
    jstring jArg = env->NewStringUTF(arg.c_str());
    env->CallVoidMethod(GetCallbackObject(), method, jArg);
  }

  CheckAndLogJavaException(*env);
}
void JniFilterChangeCallback::Callback(const std::string& arg, const AdblockPlus::JsValuePtr jsValue)
{
  JNIEnvAcquire env(GetJavaVM());

  jclass clazz = env->GetObjectClass(GetCallbackObject());
  jmethodID method = env->GetMethodID(clazz, "filterChangeCallback", "(Ljava/lang/String;" TYP("JsValue") ")V");

  if (method)
  {
    jstring jArg = env->NewStringUTF(arg.c_str());
    jobject jJsValue = NewJniJsValue(*env, jsValue, jsValueClass->Get());
    env->CallVoidMethod(GetCallbackObject(), method, jArg, jJsValue);
  }

  CheckAndLogJavaException(*env);
}
void JniUpdateCheckDoneCallback::Callback(const std::string& arg)
{
  JNIEnvAcquire env(GetJavaVM());

  jmethodID method = env->GetMethodID(
      *JniLocalReference<jclass>(*env,
          env->GetObjectClass(GetCallbackObject())),
      "updateCheckDoneCallback",
      "(Ljava/lang/String;)V");

  if (method)
  {
    JniLocalReference<jstring> jArg(*env, env->NewStringUTF(arg.c_str()));
    env->CallVoidMethod(GetCallbackObject(), method, *jArg);
  }

  CheckAndLogJavaException(*env);
}
JD_IMETHODIMP
JavaPluginFactory5::CreateSecureEnv(JNIEnv* proxy_env, ISecureEnv* *result) 
{
    trace("JavaPluginFactory5:CreateSecureEnv\n");
    if (result != NULL) *result = NULL;

// This is left here to make it easy to turn off live connect support 
// should something prove to be out of wack! (Just un comment)
//    return JD_ERROR_FAILURE;

    JavaVM5 * vm = GetJavaVM();
    if(!(vm->GetJVMEnabled())) return JD_ERROR_FAILURE;

    RemoteJNIEnv* remote_env = javaVM->CreateRemoteJNIEnv(proxy_env);

    return CSecureJNIEnv::Create(NULL, remote_env, 
			         jISupportsIID, 
			         (void**) result);
}
Exemplo n.º 16
0
void CMUpdateDataListener::OnUpdateDataProgress(void* UserData, int nPercent)
{
    JNIEnv *env = NULL;
    int status = GetJavaVM()->GetEnv((void **) &env, JNI_VERSION_1_4);
    if(status < 0) {
        CM_ERR("CMUpdateDataListener OnUpdateDataProgress:failed to get JNI environment");
        return;
    }

    if (env) {
        callback_cookie* pCookie = (callback_cookie *)UserData;
        env->CallStaticVoidMethod(
                pCookie->info_class, mFuncID, pCookie->ref, 
                1, nPercent, 0);
        if (env->ExceptionCheck()) {
            env->ExceptionDescribe();
            env->ExceptionClear();
        }
    }
}
Exemplo n.º 17
0
void CMSimpleResultListener::OnRequestFinish(void* UserData, int Result)
{
    JNIEnv *env = NULL;
    int status = GetJavaVM()->GetEnv((void **) &env, JNI_VERSION_1_4);
    if(status < 0) {
        CM_ERR("CMSimpleResultListener OnRequestFinish:failed to get JNI environment");
        return;
    }

    if (env) {
        callback_cookie* pCookie = (callback_cookie *)UserData;
        env->CallStaticVoidMethod(
                pCookie->info_class, mFuncID, pCookie->ref, 
                3, Result, 0);
        if (env->ExceptionCheck()) {
            env->ExceptionDescribe();
            env->ExceptionClear();
        }
    }
}
Exemplo n.º 18
0
CMPath::CMPath(DEF_TYPE nDefType)
{
    switch(nDefType)
    {
       /* 该功能放到CMGlobal中
       
        case CONF_PATH://用户配置文件路径
         {
		 	m_sPath = CMPath(DATA_PATH).String();
			CMString sID;
            if(CMGlobal::TheOne().GetSessionID(sID) && !(CMSettings::GetInstance().m_sName.IsEmpty()))
                AddDir(CMSettings::GetInstance().m_sName + L"/");
            break;
        }*/
        case SYS_CONF_PATH://系统配置文件路径
        case DATA_PATH://数据路径
		{
		   /*     char buf[260];
		        memset(buf,0,260);
		        int ret = readlink("proc/self/exe", buf, 260);
		        if(ret < 0 || ret >= 1024)
		        	break;
			for(INT32 i=strlen(buf)-1;i>0;i--)
			{
				if(buf[i]=='/')
				{
					buf[i+1]=L'\0';
					break;
				}
			}*/
			//CM_ERRP("DATA_PATH%s",buf);
			JNIEnv*  env ;
			if (GetJavaVM()->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)
				return ;
			jmethodID method = env->GetStaticMethodID(GetGlobalCls(), "getInstance", "()Lcom/wunding/mlplayer/CMGlobal;");
			if(!method)
				return;
			jobject obj = (jobject)env->CallStaticObjectMethod(GetGlobalCls(), method); 
			if(!obj)
				return;
			method = env->GetMethodID(GetGlobalCls(), "GetDataDir", "()Ljava/lang/String;");
			const char * buf = NULL;
			if(method)
			{
				jstring jstr = (jstring)env->CallObjectMethod(obj, method); 
				if(jstr)
				{
					buf = env->GetStringUTFChars(jstr, NULL);
					m_sPath = buf;
					if(buf) 
						env->ReleaseStringUTFChars(jstr, buf);
				}
			}
			m_sPath += L"/";
			//CM_ERRP("DATA_PATH:%s",(const char*)m_sPath);
			break;
		}
		case TEMP_PATH:
		{
			m_sPath = CMPath(DATA_PATH).String();
			AddDir(L"tmp/");
			break;
		}
		case DOWNLOAD_PATH:
		{
			m_sPath = CMPath(DATA_PATH).String();
			if(!m_sPath.IsEmpty())
				AddDir(L"dld/");
			break;
//			m_sPath = CMPath(CARD_PATH).String();
//			if(!m_sPath.IsEmpty()){
//				AddDir(L"wunding_ulp/");
//			}
//			break;
		}
		case DOWNLOAD_OLD:
		{
			m_sPath = CMPath(CARD_PATH).String()+L"wunding_ulp/";
			break;
		}
		case UNZIP_PATH: //下载课件解压缩后目录
		{
			m_sPath = CMPath::CMPath(DOWNLOAD_PATH).String();
			if (!m_sPath.IsEmpty()) {
				AddDir(L"download/");
			}
			break;
		}

		case APP_PATH:
	    {
			m_sPath = CMPath(DATA_PATH).String();
		    break;
		}
	    case CARD_PATH://存储卡根目录
	    {
	    	JNIEnv*  env ;
		if (GetJavaVM()->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK)
			return ;
		jclass cls = (jclass)env->FindClass("android/os/Environment");
    		if(!cls)
       			return;
		jmethodID method = env->GetStaticMethodID(cls, "getExternalStorageDirectory", "()Ljava/io/File;");
		if(!method)
			return;
		jobject obj = (jobject)env->CallStaticObjectMethod(cls, method); 
		if(!obj)
			return;
			
		cls = (jclass)env->FindClass("java/io/File");
    		if(!cls)
       			return;
		method = env->GetMethodID(cls, "getPath", "()Ljava/lang/String;");
		if(!method)
			return;
		const char * buf = NULL;
		if(method)
		{
			jstring jstr = (jstring)env->CallObjectMethod(obj, method); 
			if(jstr)
			{
				buf = env->GetStringUTFChars(jstr, NULL);
				m_sPath = buf;
				if(buf) 
					env->ReleaseStringUTFChars(jstr, buf);
			}
		}
		m_sPath += L"/";
	        break;
	    }
	    case WSYS_PATH://系统盘根目录
	    {
			m_sPath = L"/";
	        break;
	    }
	    default:
	        break;
    }
}