diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2013-06-06 08:24:25 +0200 | 
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2013-06-06 08:24:25 +0200 | 
| commit | 49cc95872c9df48c8a3e7dcd807e65f5f20a140e (patch) | |
| tree | 7f5b945ea7e635208347a98224c0cdd321c68c32 /ftnoir_tracker_sm | |
| parent | f7aa064edc20eafbc738271c5b53238fa4ad8361 (diff) | |
Use a standard way for creating the mapping
Diffstat (limited to 'ftnoir_tracker_sm')
| -rw-r--r-- | ftnoir_tracker_sm/ftnoir_tracker_faceapi_dialog.cpp | 87 | ||||
| -rw-r--r-- | ftnoir_tracker_sm/ftnoir_tracker_sm.h | 13 | 
2 files changed, 17 insertions, 83 deletions
diff --git a/ftnoir_tracker_sm/ftnoir_tracker_faceapi_dialog.cpp b/ftnoir_tracker_sm/ftnoir_tracker_faceapi_dialog.cpp index bea5179c..f515dedc 100644 --- a/ftnoir_tracker_sm/ftnoir_tracker_faceapi_dialog.cpp +++ b/ftnoir_tracker_sm/ftnoir_tracker_faceapi_dialog.cpp @@ -34,8 +34,11 @@  // Constructor for server-settings-dialog
  //
  TrackerControls::TrackerControls() :
 -QWidget()
 +    QWidget(),
 +    shm(SM_MM_DATA, SM_MUTEX, sizeof(TFaceData))
  {
 +    pMemData = (SMMemMap*) shm.mem;
 +    
  	ui.setupUi( this );
  	theTracker = NULL;
 @@ -54,13 +57,6 @@ QWidget()  	connect(ui.cbxFilterSetting, SIGNAL(currentIndexChanged(int)), this, SLOT(doSetFilter( int )));
  	connect(ui.btnCameraSettings, SIGNAL(clicked()), this, SLOT(doShowCam()));
 -	if (SMCreateMapping()) {
 -		qDebug() << "TrackerControls::Initialize Mapping created.";
 -	}
 -	else {
 -		QMessageBox::warning(0,"FaceTrackNoIR Error","Memory mapping not created!",QMessageBox::Ok,QMessageBox::NoButton);
 -	}
 -
  	//Setup the timer for showing the headpose.
  	timUpdateSettings = new QTimer(this);
      connect(timUpdateSettings, SIGNAL(timeout()), this, SLOT(doTimUpdate()));
 @@ -73,7 +69,6 @@ QWidget()  	connect(ui.chkEnableX, SIGNAL(stateChanged(int)), this, SLOT(settingChanged(int)));
  	connect(ui.chkEnableY, SIGNAL(stateChanged(int)), this, SLOT(settingChanged(int)));
  	connect(ui.chkEnableZ, SIGNAL(stateChanged(int)), this, SLOT(settingChanged(int)));
 -
  }
  //
 @@ -206,62 +201,6 @@ void TrackerControls::save() {  	settingsDirty = false;
  }
 -//
 -// Create a memory-mapping to the faceAPI data.
 -// It contains the tracking data, a command-code from FaceTrackNoIR
 -//
 -//
 -bool TrackerControls::SMCreateMapping()
 -{
 -	qDebug() << "TrackerControls::FTCreateMapping says: Starting Function";
 -
 -	//
 -	// A FileMapping is used to create 'shared memory' between the faceAPI and FaceTrackNoIR.
 -	//
 -	// Try to create a FileMapping to the Shared Memory.
 -	// If one already exists: close it.
 -	//
 -	hSMMemMap = CreateFileMappingA( INVALID_HANDLE_VALUE , 00 , PAGE_READWRITE , 0 , 
 -		                           sizeof( TFaceData ) + sizeof( HANDLE ) + 100, 
 -								   (LPCSTR) SM_MM_DATA );
 -
 -	if ( hSMMemMap != 0 ) {
 -		qDebug() << "TrackerControls::FTCreateMapping says: FileMapping Created!";
 -	}
 -
 -	if ( ( hSMMemMap != 0 ) && ( (long) GetLastError == ERROR_ALREADY_EXISTS ) ) {
 -		CloseHandle( hSMMemMap );
 -		hSMMemMap = 0;
 -	}
 -
 -	//
 -	// Create a new FileMapping, Read/Write access
 -	//
 -    hSMMemMap = OpenFileMappingA( FILE_MAP_WRITE , false , (LPCSTR) SM_MM_DATA );
 -	if ( ( hSMMemMap != 0 ) ) {
 -		qDebug() << "TrackerControls::FTCreateMapping says: FileMapping Created again..." << hSMMemMap;
 -        pMemData = (SMMemMap *) MapViewOfFile(hSMMemMap, FILE_MAP_WRITE, 0, 0, sizeof(TFaceData));
 -		if (pMemData != NULL) {
 -			qDebug() << "TrackerControls::FTCreateMapping says: MapViewOfFile OK.";
 -//			pMemData->handle = handle;	// The game uses the handle, to send a message that the Program-Name was set!
 -		}
 -	    hSMMutex = CreateMutexA(NULL, false, SM_MUTEX);
 -	}
 -	else {
 -		qDebug() << "TrackerControls::FTCreateMapping says: Error creating Shared Memory for faceAPI!";
 -		return false;
 -	}
 -
 -	//if (pMemData != NULL) {
 -	//	pMemData->data.DataID = 1;
 -	//	pMemData->data.CamWidth = 100;
 -	//	pMemData->data.CamHeight = 250;
 -	//}
 -
 -	return true;
 -}
 -
 -//
  // Show the current engine-settings etc.
  //
  void TrackerControls::doTimUpdate()
 @@ -312,11 +251,9 @@ void TrackerControls::showSettings( int newState )  //
  void TrackerControls::doCommand(int command)
  {
 -	if ( (pMemData != NULL) && (WaitForSingleObject(hSMMutex, 100) == WAIT_OBJECT_0) ) {
 -		pMemData->command = command;					// Send command
 -		ReleaseMutex(hSMMutex);
 -	}
 -	return;
 +    shm.lock();
 +    pMemData->command = command;
 +    shm.unlock();
  }
  //
 @@ -324,12 +261,10 @@ void TrackerControls::doCommand(int command)  //
  void TrackerControls::doCommand(int command, int value)
  {
 -	if ( (pMemData != NULL) && (WaitForSingleObject(hSMMutex, 100) == WAIT_OBJECT_0) ) {
 -		pMemData->command = command;					// Send command
 -		pMemData->par_val_int = value;
 -		ReleaseMutex(hSMMutex);
 -	}
 -	return;
 +    shm.lock();
 +    pMemData->command = command;					// Send command
 +    pMemData->par_val_int = value;
 +    shm.unlock();
  }
  ////////////////////////////////////////////////////////////////////////////////
 diff --git a/ftnoir_tracker_sm/ftnoir_tracker_sm.h b/ftnoir_tracker_sm/ftnoir_tracker_sm.h index 22f9ca4e..33cfb9ef 100644 --- a/ftnoir_tracker_sm/ftnoir_tracker_sm.h +++ b/ftnoir_tracker_sm/ftnoir_tracker_sm.h @@ -79,15 +79,14 @@ public:      void Initialize(QWidget *parent);
  	void registerTracker(ITracker *tracker) {
  		theTracker = (FTNoIR_Tracker *) tracker;			// Accept the pointer to the Tracker
 -	};
 +	}
  	void unRegisterTracker() {
  		theTracker = NULL;									// Reset the pointer
 -	};
 +	}
  private:
  	Ui::UICSMClientControls ui;
  	void loadSettings();
 -	bool SMCreateMapping();
  	void doCommand( int command );
  	void doCommand( int command, int value );
 @@ -98,19 +97,19 @@ private:  	//
  	// global variables
  	//
 -	HANDLE hSMMemMap;
  	SMMemMap *pMemData;
 -	HANDLE hSMMutex;
 +    
      smEngineHandle *engine_handle;
  	QTimer *timUpdateSettings;								// Timer to display current settings
  	FTNoIR_Tracker *theTracker;
 +    PortableLockedShm shm;
  private slots:
  	void doOK();
  	void doCancel();
  	void save();
 -	void settingChanged() { settingsDirty = true; };
 +	void settingChanged() { settingsDirty = true; }
  	void doTimUpdate();
  	void showSettings( int newState );
  	void doStartEngine(){
 @@ -127,7 +126,7 @@ private slots:  	}
  	void settingChanged(int dummy) { 
  		settingsDirty = true;
 -	};
 +	}
  signals:
       void stateChanged(int newState);
  | 
