/*
 * Class:     sage_DShowDVDPlayer
 * Method:    setupGraph0
 * Signature: (JLjava/lang/String;Ljava/lang/String;ZZ)V
 */
JNIEXPORT void JNICALL Java_sage_DShowDVDPlayer_setupGraph0
	(JNIEnv *env, jobject jo, jlong dataPtr, jstring jFilename, jstring jhostname, 
		jboolean renderVideo, jboolean renderAudio)
{
	NPE_RET(dataPtr);
	try
	{
		CDVDPlayerData* playerData = dynamic_cast<CDVDPlayerData*>((CPlayerData*) dataPtr);
		const jchar* wszFilename = jFilename ? env->GetStringChars(jFilename, NULL) : NULL;
		HRESULT hr = playerData->SetDVDLocation((const WCHAR*) wszFilename);
		if (wszFilename)
			env->ReleaseStringChars(jFilename, wszFilename);
		PLAYEXCEPT_RET(sage_PlaybackException_FILESYSTEM);

		if (renderAudio)
		{
			hr = playerData->RenderAudio();
			PLAYEXCEPT_RET(sage_PlaybackException_AUDIO_RENDER);
		}
		if (renderVideo)
		{
			hr = playerData->RenderVideo();
			PLAYEXCEPT_RET(sage_PlaybackException_VIDEO_RENDER);
			hr = playerData->RenderSubPicture();
			HTESTPRINT(hr); // if there's no subpicture we're OK and shouldn't fail
			hr = playerData->RenderCC();
			HTESTPRINT(hr); // if there's no CC we're OK and shouldn't fail
		}
		LogFilterGraphInfo(playerData->GetGraph());
	}
	catch (...)
	{
		throwPlaybackException(env, sage_PlaybackException_DIRECTX_INSTALL, 0);
	}
}
Exemple #2
0
/*
 * Class:     sage_DShowMediaPlayer
 * Method:    setupGraph0
 * Signature: (JLjava/lang/String;Ljava/lang/String;ZZ)V
 */
JNIEXPORT void JNICALL Java_sage_DShowMediaPlayer_setupGraph0
	(JNIEnv *env, jobject jo, jlong dataPtr, jstring jFilename, jstring jhostname,
		jboolean renderVideo, jboolean renderAudio)
{
	NPE_RET(dataPtr);
	try
	{
		CPlayerData* playData = (CPlayerData*) dataPtr;
		const jchar* wszFilename = env->GetStringChars(jFilename, NULL);
		const char* cHostname = jhostname ? env->GetStringUTFChars(jhostname, NULL) : NULL;
		HRESULT hr = playData->SetSourceFilename((const WCHAR**) &wszFilename, 1, cHostname);
		env->ReleaseStringChars(jFilename, wszFilename);
		if (cHostname)
			env->ReleaseStringUTFChars(jhostname, cHostname);
		if (hr == E_NOINTERFACE)
		{
			// This happens if they're using the wrong SageTV filter components from an older version
			PLAYEXCEPT_RET(sage_PlaybackException_SAGETV_INSTALL);
		}
		PLAYEXCEPT_RET(sage_PlaybackException_FILESYSTEM);

		BOOL hasDemux = playData->HasDemux();
		if (hasDemux)
		{
			if (renderAudio)
				hr = playData->RenderAudio();
			PLAYEXCEPT_RET(sage_PlaybackException_AUDIO_RENDER);
			if (renderVideo)
				hr = playData->RenderVideo();
			PLAYEXCEPT_RET(sage_PlaybackException_VIDEO_RENDER);
			if (renderVideo)
				hr = playData->RenderCC(); // We accept failures rendering this
			//HTESTPRINT(hr);
		}
		else if (renderAudio || renderVideo)
		{
			hr = playData->RenderSource();
			PLAYEXCEPT_RET(renderVideo ? sage_PlaybackException_VIDEO_RENDER : sage_PlaybackException_AUDIO_RENDER);
		}
		LogFilterGraphInfo(playData->GetGraph());
	}
	catch (...)
	{
		throwPlaybackException(env, sage_PlaybackException_VIDEO_RENDER, 0);
	}
}