コード例 #1
0
ファイル: ofxEdsdk.cpp プロジェクト: elliotwoods/ofxEdsdk
	void Camera::update() {
		if(connected){
#ifdef TARGET_OSX
			if (bTryInitLiveView) {
				if (ofGetElapsedTimeMillis() - initTime > OFX_EDSDK_LIVE_DELAY) {
					bTryInitLiveView = false;
					resetLiveView();
				}
			}
#endif
		lock();
		if(liveBufferMiddle.size() > 0) {
			// decoding the jpeg in the main thread allows the capture thread to run in a tighter loop.
			ofBuffer* middleFront = liveBufferMiddle.front();
			liveBufferFront.set(middleFront->getBinaryBuffer(), middleFront->size());
			liveBufferMiddle.pop();
			unlock();
			ofLoadImage(livePixels, liveBufferFront);
            livePixels.rotate90(rotateMode90);
			if(liveTexture.getWidth() != livePixels.getWidth() ||
				 liveTexture.getHeight() != livePixels.getHeight()) {
				liveTexture.allocate(livePixels.getWidth(), livePixels.getHeight(), GL_RGB8);
			}
			liveTexture.loadData(livePixels);
			lock();
			liveDataReady = true;
			frameNew = true;
			unlock();
		} else {
			unlock();
		}
		}
	}
コード例 #2
0
ファイル: ofxEdsdk.cpp プロジェクト: luxloop/ofxEdsdk
 void Camera::captureLoop() {
     if(liveViewReady) {
         if(Eds::DownloadEvfData(camera, *liveBufferBack)) {
             lock();
             fps.tick();
             bytesPerFrame = ofLerp(bytesPerFrame, liveBufferBack->size(), .01);
             swap(liveBufferBack, liveBufferMiddle.back());
             liveBufferMiddle.push();
             unlock();
         }
     }
     
     if(needToTakePhoto) {
         try {
             
             if (shootNoCard) {
                 EdsUInt32 saveTo = kEdsSaveTo_Host;
                 EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, sizeof(saveTo), &saveTo);
                 
                 EdsCapacity maxCapacity = {0x7FFFFFFF, 0x1000, 1};
                 EdsSetCapacity(camera, maxCapacity );
             } else {
                 EdsUInt32 saveTo = kEdsSaveTo_Camera;
                 EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, sizeof(saveTo), &saveTo);
             }
             
             
             Eds::SendCommand(camera, kEdsCameraCommand_TakePicture, 0);
             lock();
             needToTakePhoto = false;
             unlock();
             //ofSendMessage("test");
         } catch (Eds::Exception& e) {
             ofLogError() << "Error while taking a picture: " << e.what();
             //ofSendMessage("Error: " + ofToString(e.what()));
         }
     }
     
     if(needToStartRecording) {
         try {
             EdsUInt32 saveTo = kEdsSaveTo_Camera;
             EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, sizeof(saveTo) , &saveTo);
             
             EdsUInt32 record_start = 4; // Begin movie shooting
             EdsSetPropertyData(camera, kEdsPropID_Record, 0, sizeof(record_start), &record_start);
             lock();
             needToStartRecording = false;
             unlock();
         } catch (Eds::Exception& e) {
             ofLogError() << "Error while beginning to record: " << e.what();
         }
     }
     
     if(needToStopRecording) {
         try {
             EdsUInt32 record_stop = 0; // End movie shooting
             EdsSetPropertyData(camera, kEdsPropID_Record, 0, sizeof(record_stop), &record_stop);
             lock();
             needToStopRecording = false;
             unlock();
         } catch (Eds::Exception& e) {
             ofLogError() << "Error while stopping to record: " << e.what();
         }
     }
     
     if(needToSendKeepAlive) {
         try {
             // always causes EDS_ERR_DEVICE_BUSY, even with live view disabled or a delay
             // but if it's not here, then the camera shuts down after 5 minutes.
             Eds::SendStatusCommand(camera, kEdsCameraCommand_ExtendShutDownTimer, 0);
         } catch (Eds::Exception& e) {
             ofLogError() << "Error while sending kEdsCameraCommand_ExtendShutDownTimer with Eds::SendStatusCommand: " << e.what();
         }
         lock();
         needToSendKeepAlive = false;
         unlock();
     }
     
     if(needToDownloadImage) {
         try {
             EdsDirectoryItemInfo dirItemInfo = Eds::DownloadImage(directoryItem, photoBuffer);
             ofLogVerbose() << "Downloaded item: " << (int) (photoBuffer.size() / 1024) << " KB";
             lock();
             photoDataReady = true;
             needToDecodePhoto = true;
             needToUpdatePhoto = true;
             needToDownloadImage = false;
             
             if (dirItemInfo.format == OFX_EDSDK_JPG_FORMAT) {
                 photoNew = true;
             } else if (dirItemInfo.format == OFX_EDSDK_MOV_FORMAT) {
                 movieNew = true;
             }
             
             unlock();
         } catch (Eds::Exception& e) {
             ofLogError() << "Error while downloading item: " << e.what();
         }
     }
     
     float timeSinceLastReset = ofGetElapsedTimef() - lastResetTime;
     if(timeSinceLastReset > resetIntervalMinutes * 60) {
         resetLiveView();
     }
     
 }