コード例 #1
0
ファイル: FskPin.c プロジェクト: dadongdong/kinomajs
FskErr FskPinI2CNew(FskPinI2C *pin, SInt32 sda, SInt32 sclk, SInt32 bus)
{
	FskErr err;
	FskPinI2CDispatch dispatch = NULL;
	UInt32 i = 0;

	while (true) {
		SInt32 remappedBus = kFskPinI2CNoBus;
		FskPinI2CDispatch aDispatch = FskExtensionGetByIndex(kFskExtensionPinI2C, i++);
		if (NULL == aDispatch)
			BAIL(kFskErrExtensionNotFound);

		if ((aDispatch->doCanHandle)(sda, sclk, bus, &remappedBus)) {
			dispatch = aDispatch;
			break;
		}

		if (kFskPinI2CNoBus != remappedBus)
			bus = remappedBus;
	}

	err = (dispatch->doNew)(pin, sda, sclk, bus);
	BAIL_IF_ERR(err);

	(*pin)->dispatch = dispatch;

bail:
	return err;
}
コード例 #2
0
ファイル: FskPin.c プロジェクト: dadongdong/kinomajs
FskErr FskPinAnalogNew(FskPinAnalog *pin, SInt32 number, const char *name)
{
	FskErr err;
	FskPinAnalogDispatch dispatch = NULL;
	UInt32 i = 0;

	while (true) {
		FskPinAnalogDispatch aDispatch = FskExtensionGetByIndex(kFskExtensionPinAnalog, i++);
		if (NULL == aDispatch)
			BAIL(kFskErrExtensionNotFound);

		if ((aDispatch->doCanHandle)(number, name, &number)) {
			dispatch = aDispatch;
			break;
		}
	}

	err = (dispatch->doNew)(pin, number, name);
	BAIL_IF_ERR(err);

	(*pin)->dispatch = dispatch;

bail:
	return err;
}
コード例 #3
0
ファイル: FskAudioCodec.c プロジェクト: lizhizhou/kinomajs
FskErr FskAudioDecompressNew(FskAudioDecompress *decoOut, UInt32 audioFormat, const char *mimeType, UInt32 sampleRate, UInt32 channelCount, void *formatInfo, UInt32 formatInfoSize)
{
    FskErr err;
    FskAudioDecompressor decoder;
    FskAudioDecompress deco;
    UInt32 i = 0;

    while (true) {
        Boolean canHandle = false;
        decoder = (FskAudioDecompressor)FskExtensionGetByIndex(kFskExtensionAudioDecompressor, i++);
        if (NULL == decoder) {
            if (decoOut)
                *decoOut = NULL;
            return kFskErrExtensionNotFound;
        }

        if ((kFskErrNone == decoder->doCanHandle(audioFormat, mimeType, &canHandle)) && canHandle)
            break;
    }

    if (NULL == decoOut)
        return kFskErrNone;			// can handler

    err = FskMemPtrNewClear(sizeof(FskAudioDecompressRecord), &deco);
    BAIL_IF_ERR(err);

    deco->inputSampleRate = sampleRate;
    deco->inputChannelCount = channelCount;
    deco->outputChannelCount = channelCount;

    deco->formatInfoSize = formatInfoSize;
    err = FskMemPtrNewFromData(formatInfoSize, formatInfo, (FskMemPtr*)(void*)&deco->formatInfo);
    BAIL_IF_ERR(err);

    deco->decoder = decoder;
    FskInstrumentedItemNew(deco, FskStrDoCopy_Untracked(mimeType), &gAudioDecompressTypeInstrumentation);
    err = deco->decoder->doNew(deco, audioFormat, mimeType);
    BAIL_IF_ERR(err);

bail:
    if (err) {
        FskAudioDecompressDispose(deco);
        deco = NULL;
    }
    *decoOut = deco;

    return err;
}
コード例 #4
0
ファイル: FskAudioCodec.c プロジェクト: lizhizhou/kinomajs
FskErr FskAudioCompressNew(FskAudioCompress *compOut, const char *outputFormat, const char *inputFormat, UInt32 inputSampleRate, UInt32 inputChannelCount)
{
    FskErr err;
    FskAudioCompressor encoder;
    FskAudioCompress comp;
    UInt32 i = 0;

    while (true) {
        Boolean canHandle = false;
        encoder = (FskAudioCompressor)FskExtensionGetByIndex(kFskExtensionAudioCompressor, i++);
        if (NULL == encoder) {
            *compOut = NULL;
            return kFskErrExtensionNotFound;
        }

        if ((kFskErrNone == encoder->doCanHandle(outputFormat, &canHandle)) && canHandle)
            break;
    }

    err = FskMemPtrNewClear(sizeof(FskAudioCompressRecord), &comp);
    BAIL_IF_ERR(err);

    comp->outputFormat = FskStrDoCopy(outputFormat);
    comp->inputFormat = FskStrDoCopy(inputFormat);
    comp->inputSampleRate = inputSampleRate;
    comp->inputChannelCount = inputChannelCount;

    comp->outputSampleRate = inputSampleRate;
    comp->outputChannelCount = inputChannelCount;

    comp->encoder = encoder;
    err = comp->encoder->doNew(comp);
    BAIL_IF_ERR(err);

bail:
    if (err) {
        FskAudioCompressDispose(comp);
        comp = NULL;
    }
    *compOut = comp;

    return err;
}
コード例 #5
0
ファイル: FskAudioFilter.c プロジェクト: Kazu-zamasu/kinomajs
FskErr FskAudioFilterNew(FskAudioFilter *filterOut, const char *filterType)
{
	FskErr err = kFskErrNone;
	FskAudioFilter filter = NULL;
	UInt32 i = 0;
	FskAudioFilterDispatch dispatch;

	while (true) {
		dispatch = (FskAudioFilterDispatch)FskExtensionGetByIndex(kFskExtensionAudioFilter, i++);
		if (NULL == dispatch)
			return kFskErrUnimplemented;

		if (dispatch->doCanHandle(filterType))
			break;
	}

	if (NULL == filterOut) goto bail;		// "can handle" request

	err = FskMemPtrNewClear(sizeof(FskAudioFilterRecord) + FskStrLen(filterType) + 1, &filter);
	BAIL_IF_ERR(err);

	filter->filterType = (char *)(filter + 1);
	FskStrCopy(filter->filterType, filterType);
	filter->dispatch = dispatch;

	FskInstrumentedItemNew(filter, filter->filterType, &gAudioFilterTypeInstrumentation);

	err = (filter->dispatch->doNew)(filter, &filter->state);
	BAIL_IF_ERR(err);

bail:
	if (kFskErrNone != err) {
		FskAudioFilterDispose(filter);
		filter = NULL;
	}

	if (NULL != filterOut)
		*filterOut = filter;

	return err;
}
コード例 #6
0
ファイル: FskMuxer.c プロジェクト: Kazu-zamasu/kinomajs
FskErr FskMuxerNew(FskMuxer *muxerOut, const char *mimeType, UInt32 scale, FskMuxerWriteProc write, void *writeRefCon)
{
	FskErr err;
	FskMuxer muxer = NULL;
	UInt32 i = 0;
	FskMuxerDispatch dispatch;

	while (true) {
		dispatch = (FskMuxerDispatch)FskExtensionGetByIndex(kFskExtensionMuxer, i++);
		if (NULL == dispatch)
			return kFskErrExtensionNotFound;

		if (dispatch->doCanHandle(mimeType))
			break;
	}

	err = FskMemPtrNewClear(sizeof(FskMuxerRecord) + FskStrLen(mimeType) + 1, &muxer);
	BAIL_IF_ERR(err);

	muxer->mimeType = (char *)(muxer + 1);
	FskStrCopy(muxer->mimeType, mimeType);
	muxer->scale = scale;
	muxer->write = write;
	muxer->writeRefCon = writeRefCon;
	muxer->dispatch = dispatch;

	err = (muxer->dispatch->doNew)(muxer, &muxer->state);
	BAIL_IF_ERR(err);

bail:
	if (kFskErrNone != err) {
		FskMuxerDispose(muxer);
		muxer = NULL;
	}
	*muxerOut = muxer;

	return err;
}
コード例 #7
0
ファイル: FskPin.c プロジェクト: dadongdong/kinomajs
FskErr FskPinSerialNew(FskPinSerial *pin, SInt32 rxNumber, SInt32 txNumber, const char *nameIn, SInt32 baud)
{
	FskErr err;
	const char *name = nameIn;
	FskPinSerialDispatch dispatch = NULL;
	UInt32 i = 0;

	while (true) {
		char *remappedName = NULL;
		FskPinSerialDispatch aDispatch = FskExtensionGetByIndex(kFskExtensionPinSerial, i++);
		if (NULL == aDispatch)
			BAIL(kFskErrExtensionNotFound);

		if ((aDispatch->doCanHandle)(rxNumber, txNumber, name, &remappedName)) {
			dispatch = aDispatch;
			break;
		}

		if (remappedName) {
			if (name != nameIn)
				FskMemPtrDispose((char *)name);
			name = remappedName;
		}
	}

	err = (dispatch->doNew)(pin, rxNumber, txNumber, name, baud);
	BAIL_IF_ERR(err);

	(*pin)->dispatch = dispatch;

bail:
	if (name != nameIn)
		FskMemPtrDispose((char *)name);

	return err;
}