⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spbtest.cpp

📁 symbian下ffmpeg编程。。废了好大劲下下来的!。
💻 CPP
字号:
#include <QuickTime/QuickTime.h>#include "utils.c"#include <unistd.h>char extrabuf[800000];int extrabufsize = 800000;int extrabufpos = 0;void MySICompletionProc(SPBPtr inParamPtr) {	printf("MySICompletionProc\n");	CFRunLoopStop(CFRunLoopGetCurrent());}SPB backup;void MySIInterruptProc(SPBPtr inParamPtr, Ptr dataBuffer, short peakAmplitude, long sampleSize) {/*	printf("MySIInterruptProc\n");	if (inParamPtr->inRefNum != backup.inRefNum) printf("inRefNum\n");	if (inParamPtr->count != backup.count) printf("count\n");	if (inParamPtr->milliseconds != backup.milliseconds) printf("milliseconds\n");	if (inParamPtr->bufferLength != backup.bufferLength) printf("bufferLength\n");	if (inParamPtr->bufferPtr != backup.bufferPtr) printf("bufferPtr\n");	if (inParamPtr->completionRoutine != backup.completionRoutine) printf("completionRoutine\n");	if (inParamPtr->interruptRoutine != backup.interruptRoutine) printf("interruptRoutine\n");	if (inParamPtr->userLong != backup.userLong) printf("userLong\n");	if (inParamPtr->error != backup.error) printf("error %d\n", inParamPtr->error);	if (inParamPtr->unused1 != backup.unused1) printf("unused1\n");	printf("dataBuffer: %p\n", dataBuffer);	printf("peakAmplitude: %d\n", peakAmplitude);	printf("sampleSize: %d\n", sampleSize);*/	int n = sampleSize;	if (extrabufpos + n > extrabufsize)		n = extrabufsize - extrabufpos;	memcpy(extrabuf + extrabufpos, dataBuffer, n);	extrabufpos += n;/*	for (int i = 0; i < 10; i++)		printf("%d ", dataBuffer[i]);	printf("\n");	printf("\n");*///	printf("bufferPtr: %p\n", inParamPtr->bufferPtr);}int main(int argc, char *argv[]) {	Str255 name;	cstrToPstr(name, "Movino sound");	long refNum;	OSErr err = SPBOpenDevice(name, siWritePermission, &refNum);	if (err == noErr) {		printf("opened\n");	} else {		printf("SPBOpenDevice: %d\n", err);		return 1;	}	short continuous = 1;	SPBSetDeviceInfo(refNum, siContinuous, &continuous);	SPBGetDeviceInfo(refNum, siDeviceName, name);	char cname[200];	pstrToCstr(cname, name);	printf("name: %s\n", cname);	Handle handle;	SPBGetDeviceInfo(refNum, siInputSourceNames, &handle);	uint8_t* ptr = (uint8_t*) *handle;	short sources = *(short*) ptr;	ptr += 2;	for (int i = 0; i < sources; i++) {		pstrToCstr(cname, ptr);		printf("source name %d: %s\n", i, cname);		ptr += *ptr + 1;	}	short source = 1;	SPBSetDeviceInfo(refNum, siInputSource, &source);	long bufferInfo;	SPBGetDeviceInfo(refNum, siDeviceBufferInfo, &bufferInfo);	printf("bufferInfo: %d\n", bufferInfo);	SPB spb;	spb.inRefNum = refNum;	spb.count = 80000;	spb.bufferLength = spb.count;	uint8_t *buf = (uint8_t*) malloc(spb.bufferLength);	printf("buf: %p\n", buf);	spb.milliseconds = 100000;	spb.bufferPtr = (Ptr) buf;//	spb.bufferPtr = NULL;//	spb.count = 1;	spb.completionRoutine = MySICompletionProc;	spb.interruptRoutine = MySIInterruptProc;	spb.userLong = 0x42;	spb.error = 0;	spb.unused1 = 0;	printf("spb: %p\n", &spb);	memcpy(&backup, &spb, sizeof(SPB));	err = SPBRecord(&spb, TRUE);	printf("SPBRecord: %d\n", err);//	sleep(10);	CFRunLoopRun();	SPBCloseDevice(refNum);	printf("error: %d\n", spb.error);	printf("extrabufpos: %d\n", extrabufpos);	printf("count: %d\n", spb.count);/*	for (int i = 0; i < spb.count && i < extrabufpos; i++) {		if (spb.bufferPtr[i] != extrabuf[i])			printf("diff at %d\n", i);	}*/	free(buf);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -