Esempio n. 1
0
void KprSoundSetup()
{
	FskErr err = kFskErrNone;
	FskMediaPropertyValueRecord ambientAudio = {kFskMediaPropertyTypeInteger, {kFskAudioOutCategoryAmbient}};
#if FSK_EXTENSION_EMBED
#else
	char* applicationPath = NULL;
	char* libraryPath = NULL;
#if TARGET_OS_WIN32
	char* libraryName = "mediareader.dll";
#else
	char* libraryName = "mediareader.so";
#endif
	FskLibrary library = NULL;
#endif
	
	if (gSoundChannel) goto bail;
	
#if FSK_EXTENSION_EMBED
	FskMediaReaderNewProc = FskMediaReaderNew;
	FskMediaReaderDisposeProc = FskMediaReaderDispose;
	FskMediaReaderExtractProc = FskMediaReaderExtract;
	FskMediaReaderGetPropertyProc = FskMediaReaderGetProperty;
	FskMediaReaderGetTrackProc = FskMediaReaderGetTrack;
	FskMediaReaderStartProc = FskMediaReaderStart;
	FskMediaReaderStopProc = FskMediaReaderStop;
	FskMediaReaderTrackGetPropertyProc = FskMediaReaderTrackGetProperty;
#else
	applicationPath = FskGetApplicationPath();
	bailIfNULL(applicationPath);
	bailIfError(FskMemPtrNewClear(FskStrLen(applicationPath) + FskStrLen(libraryName) + 1, &libraryPath));
	FskStrCopy(libraryPath, applicationPath);
	FskStrCat(libraryPath, libraryName);
	bailIfError(FskLibraryLoad(&library, libraryPath));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderNew", &FskMediaReaderNewProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderDispose", &FskMediaReaderDisposeProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderExtract", &FskMediaReaderExtractProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderGetProperty", &FskMediaReaderGetPropertyProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderGetTrack", &FskMediaReaderGetTrackProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderStart", &FskMediaReaderStartProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderStop", &FskMediaReaderStopProc));
	bailIfError(FskLibraryGetSymbolAddress(library, "FskMediaReaderTrackGetProperty", &FskMediaReaderTrackGetPropertyProc));
#endif
	bailIfError(FskSndChannelNew(&gSoundChannel, 0, kFskAudioFormatUndefined, 0));
	FskTimeCallbackNew(&gSoundTimer);

	FskSndChannelSetProperty(gSoundChannel, kFskMediaPropertyAudioCategory, &ambientAudio);

bail:
#if FSK_EXTENSION_EMBED
#else
	if (err)
		FskLibraryUnload(library);
	else
		FskMemPtrDispose(library);
	FskMemPtrDispose(libraryPath);
	FskMemPtrDispose(applicationPath);
#endif
	return;
}
Esempio n. 2
0
void fxUnmapArchive(void* it)
{
	txArchive* archive = it;
	if (archive) {
		if (archive->scripts)
			FskMemPtrDispose(archive->scripts);
		if (archive->symbols)
			FskMemPtrDispose(archive->symbols);
		if (archive->library)
			FskLibraryUnload(archive->library);
		FskFileDisposeMap(archive->map);
		FskMemPtrDispose(archive);
	}
}
Esempio n. 3
0
FskErr FskECMAScriptLoadLibrary(const char *name)
{
	FskErr err = kFskErrBadData;
	FskLibraryLoadProc libLoad;
	char *extension = NULL, *symbolName = NULL, *dot, *slash, *fullPath = NULL, *temp = NULL;
	FskLibrary library = NULL;
	char* root = NULL;
	FskFileInfo itemInfo;

	FskDebugStr("FskECMAScriptLoadLibrary: %s", name);
	dot = FskStrRChr(name, '.');
	slash = FskStrRChr(name, '/');
	if ((NULL == dot) || (slash && (slash > dot))) {
#if TARGET_OS_WIN32
		extension = ".dll";
#elif TARGET_OS_MAC || TARGET_OS_LINUX
		extension = ".so";
#elif TARGET_OS_KPL
		extension = (char*)KplECMAScriptGetExtension();
#endif
	}

	if (extension)
		fullPath = FskStrDoCat(name, extension);
	else
		fullPath = FskStrDoCopy(name);

	if (kFskErrNone != FskFileGetFileInfo(fullPath, &itemInfo)) {
#if TARGET_OS_ANDROID
		char *libDir;
		libDir = FskStrDoCat(gAndroidCallbacks->getStaticDataDirCB(), "../lib/lib");
		temp = FskStrDoCat(libDir, fullPath);
		FskMemPtrDispose(libDir);
#else
		root = FskGetApplicationPath();
		temp = FskStrDoCat(root, fullPath);
		FskMemPtrDispose(root);
#endif
		if (kFskErrNone != FskFileGetFileInfo(temp, &itemInfo)) {
			FskDebugStr(" - no file: %s", temp);
			goto bail;
		}
		FskMemPtrDispose(fullPath);
		fullPath = temp;
		temp = NULL;
	}

	err = FskLibraryLoad(&library, fullPath);
	FskDebugStr(" - try: %s -> %d", fullPath, err);
	if (err) goto bail;

	symbolName = FskStrDoCat(name, "_fskLoad");

	if ((kFskErrNone == FskLibraryGetSymbolAddress(library, symbolName, &libLoad)) ||
		(kFskErrNone == FskLibraryGetSymbolAddress(library, "fskLoad", &libLoad))) {

		err = (libLoad)(library);
		FskDebugStr(" - symbolName: %x -> %d", libLoad, err);
		if (err)
			goto bail;

		err = kFskErrNone;
	}

bail:
	if (err) {
		FskLibraryUnload(library);
	}

	FskMemPtrDispose(symbolName);
	FskMemPtrDispose(fullPath);

	return err;
}