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

📄 avicaptcl.cpp

📁 G729语音压缩的很好的离子和示范 大家来下载吧
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	if (!cap->BeginCompression()) {
		Tcl_SetResult(interp,"avicap:compression initialization error",TCL_STATIC);
		return TCL_ERROR;
	}
	return TCL_OK;
}
int avicapCmdEndCompression(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	if (!cap->EndCompression()) {
		Tcl_SetResult(interp,"avicap:compression finalization error",TCL_STATIC);
		return TCL_ERROR;
	}
	return TCL_OK;
}

int avicapCmdCompressor(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	if (argc==2) {
		PCOMPVARS pc=cap->GetCompressor();
		Tcl_Obj *res=Tcl_NewByteArrayObj((unsigned char *)pc,sizeof(COMPVARS));
		Tcl_SetObjResult(interp,res);
		return TCL_OK;
	} else if (argc==3) {
		int size;
		PCOMPVARS pc;
		pc=(PCOMPVARS)Tcl_GetByteArrayFromObj(argv[2],&size);
		if (size!=sizeof(COMPVARS)) {
			Tcl_SetResult(interp,"avicap: not a valid compressor",TCL_STATIC);
			return TCL_ERROR;
		}
		cap->SetCompressor(pc);
		return TCL_OK;
	} else {
		Tcl_SetResult(interp,"syntax: avipathname compressor ?newcompressor?",TCL_STATIC);
		return TCL_ERROR;
	}
}

int avicapCbOnVideoStream(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	if (argc<3) {
		Tcl_SetResult(interp,"syntax: avipathname cbkonvideostream function_name ?compression?",TCL_STATIC);
		return TCL_ERROR;
	}
	int compressed=1;
	if (argc>=4) {
		if (Tcl_GetIntFromObj(interp,argv[3],&compressed)!=TCL_OK) {
			compressed=1;
		}
	}
	if (strcmp(Tcl_GetString(argv[2]),"")==0) {
		//remove callback
		if (!cap->SetTclVideoStreamCallback(NULL,compressed)) {
			Tcl_SetResult(interp,"Cannot remove callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	} else {
		if (!cap->SetTclVideoStreamCallback(argv[2],compressed)) {
			Tcl_SetResult(interp,"Error initializing callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	}
	return TCL_OK;
}
int avicapCbOnWaveStream(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	if (argc<3) {
		Tcl_SetResult(interp,"syntax: avipathname cbkonwavestream function_name",TCL_STATIC);
		return TCL_ERROR;
	}
	if (strcmp(Tcl_GetString(argv[2]),"")==0) {
		//remove callback
		if (!cap->SetTclWaveStreamCallback(NULL)) {
			Tcl_SetResult(interp,"Cannot remove callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	} else {
		if (!cap->SetTclWaveStreamCallback(argv[2])) {
			Tcl_SetResult(interp,"Error initializing callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	}
	return TCL_OK;
}
int avicapCbOnYield(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	if (argc<3) {
		Tcl_SetResult(interp,"syntax: avipathname cbkonyield function_name",TCL_STATIC);
		return TCL_ERROR;
	}
	if (strcmp(Tcl_GetString(argv[2]),"")==0) {
		//remove callback
		if (!cap->SetTclYieldCallback(NULL)) {
			Tcl_SetResult(interp,"Cannot remove callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	} else {
		if (!cap->SetTclYieldCallback(argv[2])) {
			Tcl_SetResult(interp,"Error initializing callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	}
	return TCL_OK;
}
int avicapCbOnFrame(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	if (argc<3) {
		Tcl_SetResult(interp,"syntax: avipathname cbkonframe function_name ?compression?",TCL_STATIC);
		return TCL_ERROR;
	}
	int compressed;
	if (Tcl_GetIntFromObj(interp,argv[3],&compressed)!=TCL_OK) {
		compressed=1;
	}
	if (strcmp(Tcl_GetString(argv[2]),"")==0) {
		//remove callback
		if (!cap->SetTclFrameCallback(NULL,compressed)) {
			Tcl_SetResult(interp,"Cannot remove callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	} else {
		if (!cap->SetTclFrameCallback(argv[2],compressed)) {
			Tcl_SetResult(interp,"Error initializing callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	}
	return TCL_OK;
}
int avicapCbOnError(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	if (argc<3) {
		Tcl_SetResult(interp,"syntax: avipathname cbkonerror function_name",TCL_STATIC);
		return TCL_ERROR;
	}
	if (strcmp(Tcl_GetString(argv[2]),"")==0) {
		//remove callback
		if (!cap->SetTclErrorCallback(NULL)) {
			Tcl_SetResult(interp,"Cannot remove callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	} else {
		if (!cap->SetTclErrorCallback(argv[2])) {
			Tcl_SetResult(interp,"Error initializing callback function",TCL_STATIC);
			return TCL_ERROR;
		}
	}
	return TCL_OK;
}
int avicapGetBmpInfo(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	if (argc!=3) {
		Tcl_SetResult(interp,"syntax: avipathname getbmpinfo compressed",TCL_STATIC);
		return TCL_ERROR;
	}
	int compressed;
	EXTRACT_TCL_INT(argv[2],&compressed);
	if (compressed) {
		if (!cap->GetCompressor()||!cap->GetCompressor()->lpbiOut) {
			Tcl_SetResult(interp,"No compressor initialized (use begincompression)",TCL_STATIC);
			return TCL_ERROR;
		}
	}
	LPBITMAPINFO lpbi=compressed?cap->GetCompressor()->lpbiOut:cap->GetBitmapInfo();
	Tcl_Obj *res=Tcl_NewByteArrayObj((unsigned char*)lpbi,sizeof(*lpbi));
	Tcl_SetObjResult(interp,res);
	return TCL_OK;
}

////////////////////////////////////////////////////////
// Capture setup manipulation functions
////////////////////////////////////////////////////////
typedef enum {t_UINT,t_BOOL,t_DWORD} t_type;
typedef struct {
	char * name;
	void *def;
	t_type type;
} t_options;
static CAPTUREPARMS dum;
static const t_options setup_options[]= {
	{"-frame",(void *)(&dum.dwRequestMicroSecPerFrame),t_DWORD},
	{"-prompt",(void *)(&dum.fMakeUserHitOKToCapture),t_BOOL},
	{"-toleratederror",(void *)(&dum.wPercentDropForError),t_UINT},
	{"-thread",(void *)(&dum.fYield),t_BOOL},
	{"-indexsize",(void *)(&dum.dwIndexSize),t_DWORD},
	{"-chunksize",(void *)(&dum.wChunkGranularity ),t_UINT},
	{"-numvideorequest",(void *)(&dum.wNumVideoRequested),t_UINT},
	{"-captureaudio",(void *)(&dum.fCaptureAudio),t_BOOL},
	{"-numaudiobuffer",(void *)(&dum.wNumAudioRequested),t_UINT},
	{"-abortkey",(void *)(&dum.vKeyAbort),t_DWORD},
	{"-obsoletedosMem",(void *)(&dum.fUsingDOSMemory),t_BOOL},
	{"-leftbuttonaborts",(void *)(&dum.fAbortLeftMouse),t_BOOL},
	{"-rightbuttonaborts",(void *)(&dum.fAbortRightMouse),t_BOOL},
	{"-istimelimit",(void *)(&dum.fLimitEnabled),t_BOOL},
	{"-timelimit",(void *)(&dum.wTimeLimit),t_UINT},
	{"-MCIcontrol",(void *)(&dum.fMCIControl),t_BOOL},
	{"-stepMCIdevice",(void *)(&dum.fStepMCIDevice),t_BOOL},
	{"-MCIstarttime",(void *)(&dum.dwMCIStartTime),t_DWORD},
	{"-MCIstoptime",(void *)(&dum.dwMCIStopTime),t_DWORD},
	{"-x2",(void *)(&dum.fStepCaptureAt2x),t_BOOL},
	{"-averageframes",(void *)(&dum.wStepCaptureAverageFrames),t_UINT},
	{"-audiobuffersize",(void *)(&dum.dwAudioBufferSize),t_DWORD},
	{"-disablewritecache",(void *)(&dum.fDisableWriteCache),t_BOOL},
	{"-syncmaster",(void *)(&dum.AVStreamMaster),t_UINT}
};

int SearchSetupOption(const char *str) {
		for (int j=0;j<sizeof(setup_options)/sizeof(setup_options[0]);j++) {
			if (strcmp(str,setup_options[j].name)==0) {
				return j;
			}
		}
		return -1;
}
int CreateSetupErrorMsg(Tcl_Interp *interp) {
	static char msg[1024];
	memset(msg,0,1024);
	strcat(msg,"avicap: bad option, valid options are");
	for (int i=0;i<sizeof(setup_options)/sizeof(setup_options[0]);i++) {
		strcat(msg," ");
		strcat(msg,setup_options[i].name);
	}
	Tcl_SetResult(interp,msg,TCL_STATIC);
	return TCL_ERROR;
}
int avicapCmdSetSetup(ClientData clientData, Tcl_Interp *interp,int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	cap->GetCaptureSetup(&dum);
	int dummy;
	if (argc%2) {
			Tcl_SetResult(interp,"avicap:bad number of arguments",TCL_STATIC);
			return TCL_ERROR;
	}
	for (int i=2;i<argc-1;i+=2) {
		int p=SearchSetupOption(Tcl_GetString(argv[i]));
		if (p==-1) {
			return CreateSetupErrorMsg(interp);
		}
		EXTRACT_TCL_INT(argv[i+1],&dummy);
		switch (setup_options[p].type) {
			case t_BOOL:(*((BOOL*)setup_options[p].def))=(BOOL)dummy;break;
			case t_UINT:(*((UINT*)setup_options[p].def))=(UINT)dummy;break;
			case t_DWORD:(*((DWORD*)setup_options[p].def))=(DWORD)dummy;break;
		}
	}
	if (!cap->SetCaptureSetup(&dum)) {
			Tcl_SetResult(interp,"avicap:cannot setup capture",TCL_STATIC);
			return TCL_ERROR;
	}
	return TCL_OK;
}
void CreateStringResultForSetup(char *res,int p) {
	switch (setup_options[p].type) {
		case t_BOOL:strcat(res,Tcl_GetString(Tcl_NewIntObj(*((BOOL*)setup_options[p].def))));break;
		case t_UINT:strcat(res,Tcl_GetString(Tcl_NewIntObj(*((UINT*)setup_options[p].def))));break;
		case t_DWORD:strcat(res,Tcl_GetString(Tcl_NewIntObj(*((DWORD*)setup_options[p].def))));break;
	}
}
int avicapCmdGetSetup(ClientData clientData, Tcl_Interp *interp,
					  int argc, Tcl_Obj *CONST argv[]) {
	CCapture *cap=(CCapture*)clientData;
	cap->GetCaptureSetup(&dum);
	if (argc==3) {
		char *res=Tcl_Alloc(256);
		int p=SearchSetupOption(Tcl_GetString(argv[2]));
		if (p==-1) {
			return CreateSetupErrorMsg(interp);
		}
		memset(res,0,256);
		CreateStringResultForSetup(res,p);
		Tcl_SetResult(interp,res,TCL_DYNAMIC);
	} else if (argc==2) {
		char res[256];
		for (int j=0;j<sizeof(setup_options)/sizeof(setup_options[0]);j++) {
			memset(res,0,256);
			Tcl_AppendElement(interp,setup_options[j].name);
			CreateStringResultForSetup(res,j);
			Tcl_AppendElement(interp,res);
		}
	} else {
		return CreateSetupErrorMsg(interp);
	}
	return TCL_OK;
}

⌨️ 快捷键说明

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