Exemple #1
0
int main()
{
	// Set wave format when sampling the audio
	WAVEFORMATEX wf;
	SetWaveFormat(&wf,1,1,12000,1,8,0);
	
	// Open wave input channel
	HWAVEIN hWaveIn;
	OpenWaveIn(&hWaveIn,&wf);

	// Prepare Wave In Header and allocate memory
	WAVEHDR waveHdr;
	DWORD dataSize = 240000L;
	PrepareWaveIn(&hWaveIn, &waveHdr, dataSize);

	// Start recording
	StartRecord(&hWaveIn);
	
	Sleep(10000);

	// Stop recording
	MMTIME mmt;
	StopRecord(&hWaveIn, &mmt);

	SaveRecordtoFile("test//myTest.wav",&wf,&hWaveIn,&waveHdr,&mmt);

	ReleaseWaveIn(&hWaveIn, &waveHdr);
	CloseWaveIn(&hWaveIn);

	system("pause");
	return 0;
}
Exemple #2
0
bool VideoCam::RecordNFrames(int f_num){

    bool r=StartRecord();
    rec_n_frames=f_num;
    return r;

}
Exemple #3
0
void CGhost::CheckStart()
{
	int RaceTick = -m_pClient->m_Snap.m_pGameInfoObj->m_WarmupTimer;
	int RenderTick = m_NewRenderTick;

	if(m_LastRaceTick != RaceTick && Client()->GameTick() - RaceTick < Client()->GameTickSpeed())
	{
		if(m_Rendering && m_RenderingStartedByServer) // race restarted: stop rendering
			StopRender();
		if(m_Recording && m_LastRaceTick != -1) // race restarted: activate restarting for local start detection so we have a smooth transition
			m_AllowRestart = true;
		if(m_LastRaceTick == -1) // no restart: reset rendering preparations
			m_NewRenderTick = -1;
		if(GhostRecorder()->IsRecording()) // race restarted: stop recording
			GhostRecorder()->Stop(0, -1);
		int StartTick = RaceTick;

		CServerInfo ServerInfo;
		Client()->GetServerInfo(&ServerInfo);
		if(IsDDRace(&ServerInfo)) // the client recognizes the start one tick earlier than ddrace servers
			StartTick--;
		StartRecord(StartTick);
		RenderTick = StartTick;
	}

	TryRenderStart(RenderTick, true);
}
Exemple #4
0
void FrameSaver::Toggle(int w)
{
	if( m_record == 0 ) 
		StartRecord(w) ;
	else 
		m_record = 0 ;
}
Exemple #5
0
void MOV_StartMovie(int mode)
{
	Movie.mode = mode;
	Movie.currentFrame = 0;
	Movie.MaxRecFrames = 0;
	Movie.lagCounter = 0;
	Movie.currentCdrom = 1;
	cdOpenCase = 0;
	cheatsEnabled = 0;
	Config.Sio = 0;	
	Config.VSyncWA = 0;
	memset(&MovieControl, 0, sizeof(MovieControl));
	if (Movie.mode == MOVIEMODE_RECORD)
	{
		StartRecord();
		GPUdisplayText("Movie recording started.");
	}
	else if (Movie.mode == MOVIEMODE_PLAY)
	{
		if (!StartReplay())
			MOV_StopMovie();
		else
			GPUdisplayText("Movie playback started.");
	}
}
Exemple #6
0
DeviceStatus Device::CheckDevice(astring strUrl, astring strUrlSubStream, 
		BOOL bHasSubStream, BOOL bOnline, BOOL bOnlineUrl)
{
    if (bOnline == TRUE)
    {
        /* Camera from offline to online */
        if (m_param.m_OnlineUrl == FALSE)
        {
        	BOOL HWAccel = FALSE;
		if (m_param.m_Conf.data.conf.HWAccel == 1)
		{
			HWAccel = TRUE;
		}
		if (bOnlineUrl == FALSE)
		{
		    return  DEV_NO_CHANGE;
		}
		m_param.m_strUrl = strUrl;
		m_param.m_strUrlSubStream = strUrlSubStream;
		m_param.m_bHasSubStream = bHasSubStream;
		if (m_param.m_Conf.data.conf.nSubType == VSC_SUB_DEVICE_FILE)
		{
			m_vPlay.Init(m_param.m_strUrl, HWAccel);
		}else
		{
			m_vPlay.Init(TRUE, m_param.m_strUrl, m_param.m_Conf.data.conf.User,
				m_param.m_Conf.data.conf.Password, HWAccel);
			VDC_DEBUG( "%s url %s\n",__FUNCTION__, m_param.m_strUrl.c_str());
			if (m_param.m_bHasSubStream == TRUE)
			{
				m_vPlaySubStream.Init(TRUE, m_param.m_strUrlSubStream, m_param.m_Conf.data.conf.User,
					m_param.m_Conf.data.conf.Password, HWAccel);			
			}
		}
		VDC_DEBUG( "%s url %s\n",__FUNCTION__, m_param.m_strUrl.c_str());

		StartRecord();
		StartHdfsRecord();
		m_param.m_OnlineUrl = TRUE;
		UpdatePTZConf();
        }
        if (m_param.m_Online == FALSE)
        {
            m_param.m_Online = TRUE;
            return DEV_OFF2ON;
        }
    }else
    {
        if (m_param.m_Online == TRUE)
        {
            m_param.m_Online = FALSE;
            return DEV_ON2OFF;
        }
    }

    return DEV_NO_CHANGE;
    
}
Exemple #7
0
////////////////////////////////////////////////////////////////
// リプレイ記録再開
//
// 引数:	filename	出力ファイル名
// 引数:	frame       途中再開するフレーム
// 返値:	bool		true:成功 false:失敗
////////////////////////////////////////////////////////////////
bool REPLAY::ResumeRecord( const char *filename, int frame )
{
	if( !StartRecord( filename ) ) return false;
	char buf[16];
	sprintf( buf, "%08lX", frame );
	// 指定されたフレーム以降のリプレイを削除し、そこから再開
	Ini->DeleteAfter( "REPLAY", buf );
	
	RepFrm = frame;
	return true;
}
Exemple #8
0
void CTestPage::OnRecord() 
/////////////////////////////////////////////////////////////////////////////
{
	static char BASED_CODE szFilter[] = "Wave Files(*.wav)|*.wav|All Files(*.*)|*.*||";
	char	szInitialDir[ _MAX_PATH ];
	char	szFileName[ _MAX_PATH ];

	UpdateData( TRUE );	// Get data from the controls

	if( !m_pHalAdapter->IsOpen() )
	{
		MessageBox( "Must Open Adapter First!" );
		return;
	}

 	if( m_nRecordMode == MODE_STOP )
	{
		// Pop up the file dialog box
		CFileDialog	dlg( TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_PATHMUSTEXIST, szFilter, this );

		if( m_szFileName[0] )
		{
			char	szDrive[ _MAX_DRIVE ];
			char	szDir[ _MAX_DIR ];
			char	szBaseName[ _MAX_FNAME ];
			char	szExt[ _MAX_EXT ];

			_splitpath( m_szFileName, szDrive, szDir, szBaseName, szExt );
			sprintf( szInitialDir, "%s%s", szDrive, szDir );
			sprintf( szFileName, "%s%s", szBaseName, szExt );
			
			dlg.m_ofn.lpstrInitialDir = szInitialDir;
			dlg.m_ofn.lpstrFile = szFileName;
		}
		else
			dlg.m_ofn.lpstrInitialDir = "D:\\Audio";

		if( dlg.DoModal() == IDCANCEL )
			return;

		CString	PathName;
		PathName = dlg.GetPathName();
		strcpy( m_szFileName, PathName.GetBuffer( _MAX_PATH - 1 ) );
		PathName.ReleaseBuffer();
		
		StartRecord();
	}
	else
	{
		StopRecord();
	}
}
Exemple #9
0
inline BOOL StorFactory::StartRecordAll()
{
	Lock();
	CameraParamMap CameraMap = m_CameraParamMap;
	UnLock();
	CameraParamMap::iterator it = CameraMap.begin(); 
	for(; it!=CameraMap.end(); ++it)
	{
	    StartRecord((*it).second.m_Conf.data.conf.nId);
	}

	return TRUE;
}
Exemple #10
0
inline BOOL Factory::StartRecordAll()
{
	Lock();
	DeviceParamMap DeviceMap = m_DeviceParamMap;
	UnLock();
	DeviceParamMap::iterator it = DeviceMap.begin(); 
	for(; it!=DeviceMap.end(); ++it)
	{
	    StartRecord((*it).second.m_Conf.data.conf.nId);
	}

	return TRUE;
}
Exemple #11
0
void CGhost::CheckStartLocal(bool Predicted)
{
	if(Predicted) // rendering
	{
		int RenderTick = m_NewRenderTick;

		vec2 PrevPos = m_pClient->m_PredictedPrevChar.m_Pos;
		vec2 Pos = m_pClient->m_PredictedChar.m_Pos;
		if(((!m_Rendering && RenderTick == -1) || m_AllowRestart) && CRaceHelper::IsStart(m_pClient, PrevPos, Pos))
		{
			if(m_Rendering && !m_RenderingStartedByServer) // race restarted: stop rendering
				StopRender();
			RenderTick = Client()->PredGameTick();
		}

		TryRenderStart(RenderTick, false);
	}
	else // recording
	{
		int PrevTick = m_pClient->m_Snap.m_pLocalPrevCharacter->m_Tick;
		int CurTick = m_pClient->m_Snap.m_pLocalCharacter->m_Tick;
		vec2 PrevPos = vec2(m_pClient->m_Snap.m_pLocalPrevCharacter->m_X, m_pClient->m_Snap.m_pLocalPrevCharacter->m_Y);
		vec2 Pos = vec2(m_pClient->m_Snap.m_pLocalCharacter->m_X, m_pClient->m_Snap.m_pLocalCharacter->m_Y);

		// detecting death, needed because race allows immediate respawning
		if((!m_Recording || m_AllowRestart) && m_LastDeathTick < PrevTick)
		{
			// estimate the exact start tick
			int RecordTick = -1;
			int TickDiff = CurTick - PrevTick;
			for(int i = 0; i < TickDiff; i++)
			{
				if(CRaceHelper::IsStart(m_pClient, mix(PrevPos, Pos, (float)i / TickDiff), mix(PrevPos, Pos, (float)(i + 1) / TickDiff)))
				{
					RecordTick = PrevTick + i + 1;
					if(!m_AllowRestart)
						break;
				}
			}
			if(RecordTick != -1)
			{
				if(GhostRecorder()->IsRecording()) // race restarted: stop recording
					GhostRecorder()->Stop(0, -1);
				StartRecord(RecordTick);
			}
		}
	}
}
Exemple #12
0
LRESULT CALLBACK WinKongZhiProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
)
{
  switch(uMsg)
  {
  case WM_LBUTTONDOWN:
    {
      if (!m_bRecording)
	  {
        StartRecord(hwnd);
        m_bRecording = TRUE;
      }
	  else
	  {
        StopAndSave();
		PostQuitMessage(0);
      }
      break;
    }
  case WM_CLOSE:
    if(IDYES==MessageBox(hwnd,"是否真的结束?",NULL,MB_YESNO))
    {
      DestroyWindow(hwnd);
    }
    break;
  case WM_DESTROY:
    PostQuitMessage(0);
    break;
  default:
    return DefWindowProc(hwnd,uMsg,wParam,lParam);
  }
  return 0;
}
Exemple #13
0
void VideoAndSound() {
	VideoCapture capture;
	//capture.open("rtsp://*****:*****@192.168.1.65/Streaming/Channels/1");	//����ͷ1
	capture.open("rtsp://*****:*****@192.168.1.141:554/axis-media/media.amp");		//	����ͷ2
																					//capture.open("rtsp://service:@10.153.33.11/?line=1$camera");					//�˴�ΰ	����
																					//capture.open(0);																//open ���ݱ�Ŵ�����ͷ
																					//AVI or ASF
																					// MPEG4 CV_FOURCC('D', 'I', 'V', 'X')
																					// MJPG  CV_FOURCC('M', 'J', 'P', 'G')
	VideoWriter writer("VideoTestDemo.avi", CV_FOURCC('M', 'J', 'P', 'G'), 30.0, Size(640, 480));

	std::cout << "-------------" << std::endl;
	if (!capture.isOpened())
	{
		std::cout << "Read video Failed !" << std::endl;
		return;
	}

	//cv::VideoCapture capture;

	cv::Mat frame;
	cv::namedWindow("video test");

	int frame_num = 800;

	//��ʼ¼��
	StartRecord();

	//for (;;) {
	//	if (!capture.read(frame)) {
	//		std::cout << "No frame" << std::endl;
	//		cv::waitKey();
	//	}
	//	writer << frame;
	//	cv::imshow("Output Window", frame);
	//	if (cv::waitKey(1) >= 0) break;
	//}

	for (int i = 0; i < frame_num - 1; ++i)
	{
		capture >> frame;
		capture.read(frame);

		//���۽���ǰ
		imshow("video test", frame);
		writer << frame;

		//���۽����� ��Ƶ�洢��¼����������
		//writer << fisheye2pano2(frame);
		//frame = fisheye2pano2(frame);
		//imshow("fisheyevideo test", frame);

		if (cv::waitKey(30) == 'q')
		{
			break;
		}
	}

	//������Ƶ
	StopRecord();
	SaveRecord();

	cv::destroyWindow("video test");
	//cv::destroyAllWindows();
	capture.release();

	Encode();
}
Exemple #14
0
//
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目的: 处理主窗口的消息。
//
//  WM_COMMAND	- 处理应用程序菜单
//  WM_PAINT	- 绘制主窗口
//  WM_DESTROY	- 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	int wmId, wmEvent;
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	case WM_CREATE:
		{
			g_hWndMain = hWnd;
			CreateControlButtons(hWnd);
			UpdateButtonStatus();
		}
		break;
	case WM_COMMAND:
		wmId    = LOWORD(wParam);
		wmEvent = HIWORD(wParam);
		// 分析菜单选择:
		switch (wmId)
		{
		case IDM_ABOUT:
			DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
			break;
		case IDM_EXIT:
			DestroyWindow(hWnd);
			break;
		case START_CAPTURE_ID:
			StartRecord();
			break;
		case STOP_CAPTURE_ID:
			StopRecord();
			break;
		case START_PLAY_ID:
			StartPlay();
			break;
		case STOP_PLAY_ID:
			StopPlay();
			break;
		case START_EXTRACT_ID:
			StartExtract();
			break;
		case STOP_EXTRACT_ID:
			StopExtract();
			break;
		case ADD_SCALE_ID:
			AddScale();
			break;
		case SUB_SCALE_ID:
			SubScale();
			break;
		case PAINT_RECORD_ID:
			PaintRecorder();
			break;
		case PAINT_EXTRACT_ID:
			PaintExtractor();
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: 在此添加任意绘图代码...

		if (g_pAudioPainter->IsEnable())
		{
			RECT rect;
			::GetWindowRect(hWnd, &rect);

			rect.right = rect.right - rect.left - 20;
			rect.left = 10;
			rect.bottom = (rect.bottom - rect.top) / 2;
			rect.top = 200;

			g_pAudioPainter->Paint(hWnd, hdc, rect, 10.0f);
		}

		wchar_t buf[20];
		wsprintf(buf, L"Scale: %d%%", (int)(g_pAudioPainter->GetScale() * 100));
		::TextOut(hdc, 0, 0, buf, ::wcslen(buf));

		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_TIMER:
		if (g_pAudioPainter->IsEnable())
		{
			RECT rect = { 0, 0,  WINDOW_WIDTH, WINDOW_HEIGHT };
			::InvalidateRect(hWnd, &rect, true);
		}
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
Exemple #15
0
/**
 * Server command receiver routine.
 *
 * @param pkt
 *        packet node.
 * @return
 *        15 to exit command thread, all other value
 *        are considered normal.
 */
int
SrvRxCmd( void * pkt )
{
	int ret = 0;
	int acked = 0;

	pkt_node_t * p = (pkt_node_t *)pkt;

	DBGLOG("command: %d", p->hdr.cmd);
	switch (p->hdr.cmd) 
	{
	case CMD_GET_VERSION:
		DBGLOG("CMD_GET_VERSION.");
		CoolCmdSendPacket(p->fd, CMD_GET_VERSION|NMS_CMD_ACK, 
					  (void*)version, strlen(version)+1);
		acked = 1;
		break;

		// careful: this will be the last command server responds to.
	case CMD_STOP_SERVER: 
		DBGLOG("CMD_STOP_SERVER.");
		ret = 15;
		break;
		
	case CMD_SET_INPUT_MODE:
		DBGLOG("CMD_SET_INPUT_MODE.");
		EncInputSetMode(*(int*)p->data);
		break;
		
	case CMD_SET_OUTPUT_MODE:
		DBGLOG("CMD_SET_OUTPUT_MODE.");
	  	{
			OutputSetMode(*(int*)p->data);
			if (SrvIsMonitorActive())
			{
				SrvStartMonitorInternal();
			}
			else if (SrvIsRecording())
			{
			}
			else if (SrvIsPlaying())
			{
				OutputActivateMode(0);
			}
	  	}
	  	break;

	case CMD_SET_OUTPUT_PROPORTIONS:
		DBGLOG("CMD_SET_OUTPUT_PROPORTIONS.");
		SrvSetProportions((*(int*)p->data));
		break;

	case CMD_GET_OUTPUT_PROPORTIONS:
		DBGLOG("CMD_GET_OUTPUT_PROPORTIONS.");
		int proportions = SrvGetProportions();
		CoolCmdSendPacket(p->fd, CMD_GET_OUTPUT_PROPORTIONS|NMS_CMD_ACK, 
		                  (void*)&proportions, sizeof(int));
		acked = 1;
		break;

	case CMD_START_SLIDE_SHOW:
		DBGLOG("CMD_START_SLIDE_SHOW.");
		{
			int startslideshow;
			startslideshow = SrvStartSlideShow();
			CoolCmdSendPacket(p->fd, CMD_START_SLIDE_SHOW|NMS_CMD_ACK, 
						  (void*)&startslideshow, sizeof(int));
			acked = 1;
			DBGLOG("CMD_START_SLIDE_SHOW completed.");
		}
		break;
		
	case CMD_SET_SLIDE_SHOW_IMAGE:
		DBGLOG("CMD_SLIDE_SHOW_SET_IMAGE.");
		{
			SrvSlideShowSetImage((char *)p->data);
		}
		break;
		
	case CMD_STOP_SLIDE_SHOW:
		DBGLOG("CMD_SLIDE_SHOW_STOP.");
		SrvStopSlideShow();
		break;
		
	case CMD_PLAY:
		DBGLOG("CMD_PLAY.");
		int ret = StartPlay(p->data, p->hdr.dataLen);
		CoolCmdSendPacket(p->fd, CMD_PLAY|NMS_CMD_ACK, 
					  (void*)&ret, sizeof(int));
		acked = 1;
		break;
		
	case CMD_PAUSE_UNPAUSE:
		DBGLOG("CMD_PAUSE_UNPAUSE.");
		SrvPauseUnpause();
		break;
		
	case CMD_STOP_PLAY:
		DBGLOG("CMD_STOP_PLAY.");
		SrvStop();
		break;
		
	case CMD_GET_SRV_STATUS:
		DBGLOG("CMD_GET_SRV_STATUS.");
	  	{
			int status;
			status = SrvGetSrvStatus();
			CoolCmdSendPacket(p->fd, CMD_GET_SRV_STATUS|NMS_CMD_ACK,                                                 
						  (void*)&status, sizeof(int));
			acked = 1;
	  	}
	  	break;
		
	case CMD_GET_VOLUME:
		DBGLOG("CMD_GET_VOLUME.");
		{
			int vol[2];
			SrvGetVolume(&vol[0], &vol[1]);
			CoolCmdSendPacket(p->fd, CMD_GET_VOLUME|NMS_CMD_ACK, 
						  (void*)vol, sizeof(vol));
			acked = 1;
		}
		break;
		
	case CMD_SET_VOLUME:
		DBGLOG("CMD_SET_VOLUME.");
		{
			int vol[2];
			int * pv;
			pv = (int*)p->data;
			vol[0] = *pv++;
			vol[1] = *pv;
			SrvSetVolume(vol[0], vol[1]);
		}
		break;
		
	case CMD_GET_PLAY_TIME:
		DBGLOG("CMD_GET_PLAYTIME.");
		{
			int t;
			t = SrvGetPlaytime();
			CoolCmdSendPacket(p->fd, CMD_GET_PLAY_TIME|NMS_CMD_ACK,                                                 
						  (void*)&t, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_SEEK:
		DBGLOG("CMD_SEEK.");
		{
			int t;
			int *pv;
			pv = (int*)p->data;
			t = *pv;
			t = SrvSeek(t);
			CoolCmdSendPacket(p->fd, CMD_SEEK|NMS_CMD_ACK, 
						  (void*)&t, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_TRACK_CHANGE:
		DBGLOG("CMD_TRACK_CHANGE.");
		{
			int track;
			int *pv;
			int retv;
			pv = (int*)p->data;
			track = *pv;
			retv = SrvTrackChange(track);
			CoolCmdSendPacket(p->fd, CMD_TRACK_CHANGE|NMS_CMD_ACK, 
						  (void*)&retv, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_FF_RW:
		DBGLOG("CMD_FF_RW.");
		SrvFfRw(*(int*)p->data);
		break;
		
	case CMD_GET_FFRW_LEVEL:
		DBGLOG("CMD_GET_FFRW_LEVEL.");
	 	{
			int level = SrvGetFFRWLevel();
			CoolCmdSendPacket(p->fd, CMD_GET_FFRW_LEVEL|NMS_CMD_ACK, 
						  (void*)&level, sizeof(int));
			acked = 1;
	 	}
		break;

	case CMD_SF_RW:
		DBGLOG("CMD_SF_RW.");
		SrvSfRw(*(int*)p->data);
		break;
		
	case CMD_GET_SFRW_LEVEL:
		DBGLOG("CMD_GET_SFRW_LEVEL.");
	 	{
			int level = SrvGetSFRWLevel();
			CoolCmdSendPacket(p->fd, CMD_GET_SFRW_LEVEL|NMS_CMD_ACK, 
						  (void*)&level, sizeof(int));
			acked = 1;
	 	}
		break;
		
	case CMD_FRAME_BY_FRAME:	
		DBGLOG("CMD_FRAME_BY_FRAME.");	
		SrvFrameByFrame(*(int*)p->data);	
		break;

	case CMD_REPEAT_A_B:
		DBGLOG("CMD_REPEAT_A_B.");	
		SrvRepeatAB(*(int*)p->data);	
		break;
		
	case CMD_GET_REPEAT_AB_STATUS:
		DBGLOG("CMD_GET_REPEAT_AB_STATUS.");
		{
			int status = SrvGetRepeatABStatus();
			CoolCmdSendPacket(p->fd, CMD_GET_REPEAT_AB_STATUS|NMS_CMD_ACK, 
						  (void*)&status, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_IS_PLAYING:
		DBGLOG("CMD_IS_PLAYING.");
		{
			int playing = SrvIsPlaying();
			CoolCmdSendPacket(p->fd, CMD_IS_PLAYING|NMS_CMD_ACK, 
						  (void*)&playing, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_GET_PLAYMODE:
		DBGLOG("CMD_GET_PLAYMODE.");
		{
			int mode = SrvGetPlaymode();
			CoolCmdSendPacket(p->fd, CMD_GET_PLAYMODE|NMS_CMD_ACK, 
						  (void*)&mode, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_SET_PLAYMODE:
		DBGLOG("CMD_SET_PLAYMODE.");
		{
			SrvSetPlaymode(*((int*)p->data));
		}
		break;
		
	case CMD_SET_EDITMODE:
		DBGLOG("CMD_SET_EDITMODE.");
		{
			SrvSetEditmode(*((int*)p->data));
		}
		break;	
		
	case CMD_GET_REPEATMODE:
		DBGLOG("CMD_GET_REPEATMODE.");
		{
			int mode = SrvGetRepeatmode();
			CoolCmdSendPacket(p->fd, CMD_GET_REPEATMODE|NMS_CMD_ACK, 
						  (void*)&mode, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_SET_REPEATMODE:
		DBGLOG("CMD_SET_REPEATMODE.");
		{
			SrvSetRepeatmode(*((int*)p->data));
		}
		break;
		
	case CMD_GET_TOTAL_FILES:
		DBGLOG("CMD_GET_TOTAL_FILES.");
		{
			int num = SrvGetTotalFiles();
			CoolCmdSendPacket(p->fd, CMD_GET_TOTAL_FILES|NMS_CMD_ACK, 
						  (void*)&num, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_GET_FILE_INDEX:
		DBGLOG("CMD_GET_FILE_INDEX.");
		{
			int idx = SrvGetFileIndex();
			CoolCmdSendPacket(p->fd, CMD_GET_FILE_INDEX|NMS_CMD_ACK, 
						  (void*)&idx, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_GET_FILE_PATH:
		DBGLOG("CMD_GET_FILE_PATH.");
		{
			char path[PATH_MAX];
			int idx;
			int *pv;
			
			pv = (int*)p->data;
			idx = *pv;
			SrvGetFilePath(idx, path,PATH_MAX);
			
			CoolCmdSendPacket(p->fd, CMD_GET_FILE_PATH|NMS_CMD_ACK, 
						  (void*)path, strlen(path)+1);
			acked = 1;
		}
		break;
		
	case CMD_MEDIA_INFO:
		DBGLOG("CMD_MEDIA_INFO.");
		{
			media_info_t media_info;
			
			memset(&media_info, 0 , sizeof(media_info_t));
			SrvGetMediaInfo((char *)p->data, &media_info);
			
			CoolCmdSendPacket(p->fd,CMD_MEDIA_INFO|NMS_CMD_ACK,
						  (void *)(&media_info),sizeof(media_info_t));
			acked = 1;
		}
		break;		

		/* start of encoder interface. */
	case CMD_RECORD:
		DBGLOG("CMD_RECORD.");

		NMS_SRV_ERROR_DETAIL result;
		StartRecord(p->data, p->hdr.dataLen, &result);

		CoolCmdSendPacket(p->fd, CMD_RECORD | NMS_CMD_ACK,
		                  (void *)(&result), sizeof(NMS_SRV_ERROR_DETAIL));
		acked = 1;

		break;

	case CMD_PAUSE_UNPAUSE_RECORD:
		DBGLOG("CMD_PAUSE_UNPAUSE_RECORD.");
		SrvPauseRecord(*(int*)p->data);
		break;
		
	case CMD_STOP_RECORD:
		DBGLOG("CMD_STOP_RECORD.");
		SrvStopRecord();
		break;
		
	case CMD_GET_GAIN:
		DBGLOG("CMD_GET_GAIN.");
		{
			int gain[2];
			SrvGetGain(&gain[0], &gain[1]);
			CoolCmdSendPacket(p->fd, CMD_GET_GAIN|NMS_CMD_ACK, 
						  (void*)gain, sizeof(gain));
			acked = 1;
		}
		break;
		
	case CMD_SET_GAIN:
		DBGLOG("CMD_SET_GAIN.");
		{
			int gain[2];
			int * pg;
			pg = (int*)p->data;
			gain[0] = *pg++;
			gain[1] = *pg;
			SrvSetGain(gain[0], gain[1]);
		}
		break;
		
	case CMD_GET_RECORD_TIME:
		DBGLOG("CMD_GET_RECORD_TIME.");
		{
			int t;
			t = SrvGetRecordtime();
			CoolCmdSendPacket(p->fd, CMD_GET_RECORD_TIME|NMS_CMD_ACK, 
						  (void*)&t, sizeof(int));
			acked = 1;
		}
		break;

	case CMD_GET_RECORD_SIZE:
		DBGLOG("CMD_GET_RECORD_SIZE.");
		{
			unsigned int t;
			t = SrvGetRecordsize();
			CoolCmdSendPacket(p->fd, CMD_GET_RECORD_SIZE|NMS_CMD_ACK, 
						  (void*)&t, sizeof(unsigned int));
			acked = 1;
		}
		break;

	case CMD_GET_RECORD_ERROR:
		DBGLOG("CMD_GET_RECORD_ERROR.");
		{
			NMS_SRV_ERROR_DETAIL det;
			SrvGetRecordError(&det);
			
			CoolCmdSendPacket(p->fd, CMD_GET_RECORD_ERROR|NMS_CMD_ACK,
			                  (void*)&det, sizeof(NMS_SRV_ERROR_DETAIL));
			acked = 1;
		}
		break;
		
	case CMD_IS_RECORDING:
		DBGLOG("CMD_IS_RECORDING.");
		{
			int recording = SrvIsRecording();
			CoolCmdSendPacket(p->fd, CMD_IS_RECORDING|NMS_CMD_ACK, 
						  (void*)&recording, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_START_MONITOR:
		DBGLOG("CMD_START_MONITOR.");
		{
			int startmonitor;
			int pid = (*(int*)p->data);
			startmonitor = SrvStartMonitor(pid);
			CoolCmdSendPacket(p->fd, CMD_START_MONITOR|NMS_CMD_ACK, 
						  (void*)&startmonitor, sizeof(int));
			acked = 1;
			DBGLOG("CMD_START_MONITOR completed.");
		}
		break;
		
	case CMD_STOP_MONITOR:
		DBGLOG("CMD_STOP_MONITOR.");

		int pid = (*(int*)p->data);
		SrvStopMonitor(pid);
		break;

	case CMD_IS_MONITOR_ENABLED:
		DBGLOG("CMD_IS_MONITOR_ENABLED.");
		{
			int monitoractive = SrvIsMonitorActive();
			CoolCmdSendPacket(p->fd, CMD_IS_MONITOR_ENABLED|NMS_CMD_ACK, 
						  (void*)&monitoractive, sizeof(int));
			acked = 1;
		}
		break;
		
	case CMD_CAP_INIT:
		DBGLOG("CMD_CAP_INIT.");
		{
			capture_desc_t desc;
			capture_ret_t capret;
			desc.capture_type = (*(int*)p->data);
			int suc = CaptureInit(&desc);
			if(suc)
			{
				capret.width = -1;
				capret.height = -1;
			}
			else
			{
				capret.width = desc.width;
				capret.height = desc.height;
			}
			capret.ret = suc;
			CoolCmdSendPacket(p->fd,CMD_CAP_INIT|NMS_CMD_ACK,
						  (void *)(&capret),sizeof(capture_ret_t));
			acked = 1;
		}
		break;	

	case CMD_CAP_GET_FRAME:
		DBGLOG("CMD_CAP_GET_FRAME.");
		{
			frame_desc_t desc;
			int suc = CaptureGetFrame(&desc);
			if(suc)
			{
				CoolCmdSendPacket(p->fd, CMD_CAP_GET_FRAME|NMS_CMD_ACK, 
						  (void *)(&suc), sizeof(int));
			}
			else
			{
				CoolCmdSendPacket(p->fd, CMD_CAP_GET_FRAME|NMS_CMD_ACK, 
						  (void *)(desc.data), desc.size);
				CaptureReleaseFrame();
			}
			acked = 1;
		}
		break;
			
	case CMD_CAP_FINISH:
		DBGLOG("CMD_CAP_FINISH.");
		{
			int suc = CaptureFinish();
			CoolCmdSendPacket(p->fd, CMD_CAP_FINISH|NMS_CMD_ACK, 
						  (void*)&suc, sizeof(int));
			acked = 1;
		}
		break;

	case CMD_PING:
		DBGLOG("CMD_PING.");
		break;

	default:
		/* retain the data for now. */
		WPRINT("unknown command, data retained.");
	    ret = 1; 
		break;
	}
	
	/* send back original command as ack. */
	if (!acked)	
	{
		CoolCmdSendPacket(p->fd, p->hdr.cmd|NMS_CMD_ACK, NULL, 0);
		DBGLOG("server acked.");
	}
	close(p->fd);
	
	/* release data. */
	if ( 0 == ret ) 
	{
		if (p->hdr.dataLen)  free(p->data);
	} 
	
	return ret;
}
tBool DAXAudio::Start()
{
	return StartRecord() && StartPlay();
}