static void opening(void) { if(!silent) { char verbuf[ MGV_BUFLENGTH ]; unsigned long vercode; if( MPGE_getVersion( &vercode, verbuf ) != ME_NOERR ) verbuf[0] = '\0'; fprintf(stderr, "GOGO-no-coda %s is a mp3 encoder based on lame 3.88,\n" "which is distributed under LGPL on http://www.mp3dev.org/mp3/ .\n" "See http://member.nifty.ne.jp/~pen/ ,\n" " http://homepage1.nifty.com/herumi/gogo_e.html .\n", verbuf); } }
// 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; }