Beispiel #1
0
static void set_gogo_opts(void)
{
	if(gogo_opts.optENCODEMODE>=0)
		MPGE_setConfigure(MC_ENCODEMODE,(UPARAM)gogo_opts.optENCODEMODE,(UPARAM)0);
	if(gogo_opts.optINPFREQ>=0)
		MPGE_setConfigure(MC_INPFREQ,(UPARAM)gogo_opts.optINPFREQ,(UPARAM)0);
	if(gogo_opts.optOUTFREQ>=0)
		MPGE_setConfigure(MC_OUTFREQ,(UPARAM)gogo_opts.optOUTFREQ,(UPARAM)0);
	if(gogo_opts.optSTARTOFFSET>=0)
		MPGE_setConfigure(MC_STARTOFFSET,(UPARAM)gogo_opts.optSTARTOFFSET,(UPARAM)0);
	if(gogo_opts.optUSEPSY>=0)
		MPGE_setConfigure(MC_USEPSY,(UPARAM)gogo_opts.optUSEPSY,(UPARAM)0);
	if(gogo_opts.optUSELPF16>=0)
		MPGE_setConfigure(MC_USELPF16,(UPARAM)gogo_opts.optUSELPF16,(UPARAM)0);
	if(gogo_opts.optUSEMMX>=0)
		MPGE_setConfigure(MC_USEMMX,(UPARAM)gogo_opts.optUSEMMX,(UPARAM)0);
	if(gogo_opts.optUSE3DNOW>=0)
		MPGE_setConfigure(MC_USE3DNOW,(UPARAM)gogo_opts.optUSE3DNOW,(UPARAM)0);
	if(gogo_opts.optUSEKNI>=0)
		MPGE_setConfigure(MC_USEKNI,(UPARAM)gogo_opts.optUSEKNI,(UPARAM)0);
	if(gogo_opts.optUSEE3DNOW>=0)
		MPGE_setConfigure(MC_USEE3DNOW,(UPARAM)gogo_opts.optUSEE3DNOW,(UPARAM)0);
	if(gogo_opts.optADDTAGnum>=0){
		int i;
		for(i=0;i<gogo_opts.optADDTAGnum;i++)
			MPGE_setConfigure(MC_ADDTAG,(UPARAM)gogo_opts.optADDTAG_len[i],(UPARAM)gogo_opts.optADDTAG_buf[i]);
	}
	if(gogo_opts.optEMPHASIS>=0)
		MPGE_setConfigure(MC_EMPHASIS,(UPARAM)gogo_opts.optEMPHASIS,(UPARAM)0);
	if(gogo_opts.optVBR>=0)
		MPGE_setConfigure(MC_VBR,(UPARAM)gogo_opts.optVBR,(UPARAM)0);
	if(gogo_opts.optCPU>=0)
		MPGE_setConfigure(MC_CPU,(UPARAM)gogo_opts.optCPU,(UPARAM)0);
	if(gogo_opts.optBYTE_SWAP>=0)
		MPGE_setConfigure(MC_BYTE_SWAP,(UPARAM)gogo_opts.optBYTE_SWAP,(UPARAM)0);
	if(gogo_opts.opt8BIT_PCM>=0)
		MPGE_setConfigure(MC_8BIT_PCM,(UPARAM)gogo_opts.opt8BIT_PCM,(UPARAM)0);
	if(gogo_opts.optMONO_PCM>=0)
		MPGE_setConfigure(MC_MONO_PCM,(UPARAM)gogo_opts.optMONO_PCM,(UPARAM)0);
	if(gogo_opts.optTOWNS_SND>=0)
		MPGE_setConfigure(MC_TOWNS_SND,(UPARAM)gogo_opts.optTOWNS_SND,(UPARAM)0);
	if(gogo_opts.optTHREAD_PRIORITY!=-10000)
		MPGE_setConfigure(MC_THREAD_PRIORITY,(UPARAM)gogo_opts.optTHREAD_PRIORITY,(UPARAM)0);
	if(gogo_opts.optREADTHREAD_PRIORITY!=-10000)
		MPGE_setConfigure(MC_READTHREAD_PRIORITY,(UPARAM)gogo_opts.optREADTHREAD_PRIORITY,(UPARAM)0);
	if(gogo_opts.optOUTPUT_FORMAT>=0)
		MPGE_setConfigure(MC_OUTPUT_FORMAT,(UPARAM)gogo_opts.optOUTPUT_FORMAT,(UPARAM)0);
	if(gogo_opts.optENHANCEDFILTER_A>=0 && gogo_opts.optENHANCEDFILTER_B>=0)
		MPGE_setConfigure(MC_ENHANCEDFILTER,(UPARAM)gogo_opts.optENHANCEDFILTER_A,(UPARAM)gogo_opts.optENHANCEDFILTER_B);
	if(gogo_opts.optVBRBITRATE_low>=0 && gogo_opts.optVBRBITRATE_high>=0)
		MPGE_setConfigure(MC_VBRBITRATE,(UPARAM)gogo_opts.optVBRBITRATE_low,(UPARAM)gogo_opts.optVBRBITRATE_high);
	if(gogo_opts.optMSTHRESHOLD_threshold>=0 && gogo_opts.optMSTHRESHOLD_mspower>=0)
		MPGE_setConfigure(MC_MSTHRESHOLD,(UPARAM)gogo_opts.optMSTHRESHOLD_threshold,(UPARAM)gogo_opts.optMSTHRESHOLD_mspower);
	if(gogo_opts.optVERIFY>=0)
		MPGE_setConfigure(MC_VERIFY,(UPARAM)gogo_opts.optVERIFY,(UPARAM)0);
	if(gogo_opts.optOUTPUTDIR[0]!='\0')
		MPGE_setConfigure(MC_OUTPUTDIR,(UPARAM)gogo_opts.optOUTPUTDIR,(UPARAM)0);
	if(strcmp((char *)gogo_opts.output_name,"-")==0){
		MPGE_setConfigure(MC_OUTPUTFILE,(UPARAM)MC_OUTDEV_STDOUT,(UPARAM)0);
	} else {
		MPGE_setConfigure(MC_OUTPUTFILE,(UPARAM)MC_OUTDEV_FILE,(UPARAM)gogo_opts.output_name);
	}
	if(dpm.rate>=32000){
		if(gogo_opts.optBITRATE1>=0)
			MPGE_setConfigure(MC_BITRATE,(UPARAM)gogo_opts.optBITRATE1,(UPARAM)0);
	} else {
		if(gogo_opts.optBITRATE2>=0)
			MPGE_setConfigure(MC_BITRATE,(UPARAM)gogo_opts.optBITRATE2,(UPARAM)0);
	}
}
Beispiel #2
0
// gogo.dll or gogo.lib の関数を用いた mp3 作成部分は別スレッドにて行う。 
// スレッド作成には CreateMPGEthread() を用いる。
// そのスレッドは、gogo_buffer_termination が非 0 になったとき必ず終了する。
// そのスレッドが終了したことは、IsTerminatedMPGEthread()により検知する。
// スレッドが終了したことを確認してから close_output() は完了する。 
// データの渡しは gogo_buffer にて行うが、バッファが一杯のときは、元スレッドが
// 停止し、バッファの読み込み待機時は gogo 用スレッドが停止する。
static int __stdcall MPGEthread(void)
{
	MERET	rval;
	struct MCP_INPDEV_USERFUNC mcp_inpdev_userfunc;
	unsigned long gogo_vercode;
	char gogo_verstring[1024];

	gogo_buffer_reset();
	rval = MPGE_initializeWork();
	if(rval != ME_NOERR){
		gogo_error(rval);
		gogo_buffer_termination  = -1;
		MPGE_endCoder();
		return -1;
	}
	MPGE_getVersion(&gogo_vercode,gogo_verstring);
	ctl->cmsg(CMSG_INFO, VERB_NORMAL, "Gogo: %s", gogo_verstring);
	memset(&mcp_inpdev_userfunc,0,sizeof(struct MCP_INPDEV_USERFUNC));
	mcp_inpdev_userfunc.pUserFunc = gogoUserFunc;
	mcp_inpdev_userfunc.nSize = MC_INPDEV_MEMORY_NOSIZE;
	mcp_inpdev_userfunc.nBit = (dpm.encoding & PE_16BIT) ? 16 : 8;
	mcp_inpdev_userfunc.nFreq = dpm.rate;
	mcp_inpdev_userfunc.nChn = (dpm.encoding & PE_MONO) ? 1 : 2;
#ifndef IA_W32GUI
	if(use_gogo_commandline_options && gogo_commandline_options!=NULL){
		gogo_opts_reset();
		set_gogo_opts_use_commandline_options(gogo_commandline_options);
	}
#else
	gogo_ConfigDialogInfoApply();
#endif
	set_gogo_opts();
	rval = MPGE_setConfigure( MC_INPUTFILE,MC_INPDEV_USERFUNC,(UPARAM)&mcp_inpdev_userfunc);
	if(rval != ME_NOERR){
		gogo_error(rval);
		gogo_buffer_termination  = -1;
		MPGE_endCoder();
		return -1;
	}
	if(gogo_vercode<300){
		rval = MPGE_setConfigure(MC_STARTOFFSET,(UPARAM)0,(UPARAM)0);
		if(rval != ME_NOERR){
			gogo_error(rval);
			gogo_buffer_termination  = -1;
			MPGE_endCoder();
			return -1;
		}
	}
#if 0
	rval = MPGE_setConfigure(MC_INPFREQ,(UPARAM)dpm.rate,(UPARAM)0);
	if(rval != ME_NOERR){
		gogo_error(rval);
		gogo_buffer_termination  = -1;
		MPGE_endCoder();
		return -1;
	}
#endif
	if(gogo_vercode<300){
	rval = MPGE_setConfigure(MC_BYTE_SWAP,(UPARAM)((dpm.encoding & PE_BYTESWAP) ? TRUE : FALSE),(UPARAM)0);
	if(rval != ME_NOERR){
		gogo_error(rval);
		gogo_buffer_termination  = -1;
		MPGE_endCoder();
		return -1;
	}
	rval = MPGE_setConfigure(MC_8BIT_PCM,(UPARAM)((dpm.encoding & PE_16BIT) ? FALSE : TRUE),(UPARAM)0);
	if(rval != ME_NOERR){
		gogo_error(rval);
		gogo_buffer_termination  = -1;
		MPGE_endCoder();
		return -1;
	}
	rval = MPGE_setConfigure(MC_MONO_PCM,(UPARAM)((dpm.encoding & PE_MONO) ? TRUE : FALSE),(UPARAM)0);
	if(rval != ME_NOERR){
		gogo_error(rval);
		gogo_buffer_termination  = -1;
		MPGE_endCoder();
		return -1;
	}
	}
	rval = MPGE_detectConfigure();
	if( rval != ME_NOERR ){
		gogo_error(rval);
		gogo_buffer_termination  = -1;
		MPGE_endCoder();
		return -1;
	} else {
//		UPARAM curFrame;
//		curFrame = 0;
		do {
//			ctl->cmsg(CMSG_INFO, VERB_DEBUG,"gogo_a : frame %d",curFrame);
//			curFrame++;
			rval = MPGE_processFrame();
		} while( rval == ME_NOERR );
		if( rval != ME_EMPTYSTREAM ){
			gogo_buffer_termination  = -1;
			gogo_error(rval);
		}
	}
	MPGE_closeCoder();
	MPGE_endCoder();
	return 0;
}
Beispiel #3
0
static int
getOpt(int argc, char *argv[])
{
	char inName[MAX_FILE_LEN], outName[MAX_FILE_LEN];
	char *inPtr, *outPtr;

	inPtr = outPtr = NULL;
	argc--, argv++;

	while(argc > 0){
		if(**argv == '-'){
			int usedArgNum;
			UPARAM para[2], mode;

			/* for MPGE_setConfigure */
			usedArgNum = getOpt1(optTblDLL, argc, argv, para, &mode);

			if(usedArgNum > 0){
				/* converse(special case) */
				if(mode == MC_USEPSY) para[0] = !para[0];

				if(MPGE_setConfigure(mode, para[0], para[1]) != ME_NOERR) goto OPT_ERR;

				argc -= usedArgNum;
				argv += usedArgNum;
				continue;
			}

			/* for console option */
			usedArgNum = getOpt1(optTblCON, argc, argv, para, &mode);

			if(usedArgNum > 0){
				if(setConsoleOpt(mode, para) == ERR) goto OPT_ERR;
				argc -= usedArgNum;
				argv += usedArgNum;
				continue;
			}
			goto OPT_ERR;
		}else if(!inPtr){
			inPtr = *argv;
		}else if(!outPtr){
			outPtr = *argv;
		}else{
			goto OPT_ERR;
		}
		argc--, argv++;
	} /* while(argc) */

	if (bench) {
		struct MCP_INPDEV_USERFUNC user_in;
		MPGE_USERFUNC user_out;

		memset( &user_in, 0, sizeof(user_in) );
		user_in.nSize = 44100 * 2 * 2 * bench_sec;
		user_in.nChn  = 2;				// stereo
		user_in.nFreq = 44100;			// 44100Hz
		user_in.nBit  = 16;			// 16bit PCM

		//	エラーの時はどうしよう???
		init_bench_input(&user_in);
		init_bench_output(&user_out);

		MPGE_setConfigure( MC_INPUTFILE, MC_INPDEV_USERFUNC, (UPARAM)&user_in );
		MPGE_setConfigure( MC_OUTPUTFILE, MC_OUTDEV_USERFUNC, (UPARAM)user_out );
		if( !silent ){
			printf( "test time %dsec\n", bench_sec );
		}
	}
	else {
		if(!inPtr || strlen(inPtr) >= MAX_FILE_LEN) return ERR;
		strcpy(inName, inPtr);
		if (strcmp(inName, "stdin")) {
			if(convertToLongFileName(inName, MAX_FILE_LEN) == ERR) return ERR;
			if (libsnd) {
				MPGE_setConfigure(MC_INPUTFILE, MC_INPDEV_LIBSND, (UPARAM)inName);
			}
			else {
				MPGE_setConfigure(MC_INPUTFILE, MC_INPDEV_FILE, (UPARAM)inName);
			}
		} else {
			if (libsnd) {
				MPGE_setConfigure(MC_INPUTFILE, MC_INPDEV_LIBSND, (UPARAM)"-");
			}
			else {
				MPGE_setConfigure(MC_INPUTFILE, MC_INPDEV_STDIO, 0);
			}
		}

		if(!outPtr){
			if(changeSuffix(outName, inName, MAX_FILE_LEN) == ERR) return ERR;
		}else{
			if(strlen(outPtr) >= MAX_FILE_LEN) return ERR;
			strcpy(outName, outPtr);
		}
		if (strcmp(outName, "stdout")) {
			MPGE_setConfigure(MC_OUTPUTFILE, MC_OUTDEV_FILE, (UPARAM)outName);
		} else {
			MPGE_setConfigure(MC_OUTPUTFILE, MC_OUTDEV_STDOUT, 0);
		}
		if( !silent ){
			printf("encode %s to %s\n", inName, outName );
		}
	}

	return NOERR;
OPT_ERR:;
	if(!silent) fprintf(stderr, "opt err[%s]\n", *argv);
	return ERR;
} /* getOpt */