Fix DSLR pause live view

This commit is contained in:
Jeremy Bullock 2020-04-20 15:55:16 -06:00
parent 967cf5329a
commit 28d3d5375a

View file

@ -442,7 +442,7 @@ void StopMotion::disconnectAllCameras() {
m_proxyImageDimensions = TDimension(0, 0); m_proxyImageDimensions = TDimension(0, 0);
if (m_sessionOpen && getCameraCount() > 0) { if (m_sessionOpen && getCameraCount() > 0) {
if (m_liveViewStatus > 0) { if (m_liveViewStatus > LiveViewClosed) {
endCanonLiveView(); endCanonLiveView();
} }
closeCameraSession(); closeCameraSession();
@ -464,7 +464,8 @@ void StopMotion::disconnectAllCameras() {
//----------------------------------------------------------------- //-----------------------------------------------------------------
void StopMotion::onPlaybackChanged() { void StopMotion::onPlaybackChanged() {
if (TApp::instance()->getCurrentFrame()->isPlaying() || m_liveViewStatus == 0) if (TApp::instance()->getCurrentFrame()->isPlaying() ||
m_liveViewStatus == LiveViewClosed)
return; return;
int r0, r1, step; int r0, r1, step;
@ -996,7 +997,8 @@ void StopMotion::setXSheetFrameNumber(int frameNumber) {
//----------------------------------------------------------------- //-----------------------------------------------------------------
bool StopMotion::loadLineUpImage() { bool StopMotion::loadLineUpImage() {
if (m_liveViewStatus < 1) return false; if (m_liveViewStatus == LiveViewClosed || m_liveViewStatus == LiveViewPaused)
return false;
m_hasLineUpImage = false; m_hasLineUpImage = false;
// first see if the level exists in the current level set // first see if the level exists in the current level set
ToonzScene *currentScene = TApp::instance()->getCurrentScene()->getScene(); ToonzScene *currentScene = TApp::instance()->getCurrentScene()->getScene();
@ -1282,7 +1284,7 @@ void StopMotion::setSubsampling() {
void StopMotion::onTimeout() { void StopMotion::onTimeout() {
int currentFrame = TApp::instance()->getCurrentFrame()->getFrame(); int currentFrame = TApp::instance()->getCurrentFrame()->getFrame();
// int destinationFrame = m_xSheetFrameNumber - 1; // int destinationFrame = m_xSheetFrameNumber - 1;
if (m_liveViewStatus > 0 && m_liveViewStatus < 3 && if (m_liveViewStatus > LiveViewClosed && m_liveViewStatus < LiveViewPaused &&
!TApp::instance()->getCurrentFrame()->isPlaying()) { !TApp::instance()->getCurrentFrame()->isPlaying()) {
if (getAlwaysLiveView() || (currentFrame == m_xSheetFrameNumber - 1)) { if (getAlwaysLiveView() || (currentFrame == m_xSheetFrameNumber - 1)) {
if (!m_usingWebcam) { if (!m_usingWebcam) {
@ -1298,11 +1300,11 @@ void StopMotion::onTimeout() {
} else { } else {
m_showLineUpImage = true; m_showLineUpImage = true;
} }
} else if (m_liveViewStatus == 2) { } else if (m_liveViewStatus == LiveViewOpen) {
m_liveViewStatus = 3; m_liveViewStatus = LiveViewPaused;
TApp::instance()->getCurrentScene()->notifySceneChanged(); TApp::instance()->getCurrentScene()->notifySceneChanged();
} }
} else if (m_liveViewStatus == 3 && !m_userCalledPause) { } else if (m_liveViewStatus == LiveViewPaused && !m_userCalledPause) {
if (getAlwaysLiveView() || (currentFrame == m_xSheetFrameNumber - 1)) { if (getAlwaysLiveView() || (currentFrame == m_xSheetFrameNumber - 1)) {
if (!m_usingWebcam) { if (!m_usingWebcam) {
#ifdef WITH_CANON #ifdef WITH_CANON
@ -1317,8 +1319,8 @@ void StopMotion::onTimeout() {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void StopMotion::onReviewTimeout() { void StopMotion::onReviewTimeout() {
if (m_liveViewStatus > 0) { if (m_liveViewStatus > LiveViewClosed) {
m_liveViewStatus = 2; m_liveViewStatus = LiveViewOpen;
m_timer->start(40); m_timer->start(40);
} }
TApp::instance()->getCurrentFrame()->setFrame(m_xSheetFrameNumber - 1); TApp::instance()->getCurrentFrame()->setFrame(m_xSheetFrameNumber - 1);
@ -1649,7 +1651,7 @@ void StopMotion::captureImage() {
#ifdef WITH_CANON #ifdef WITH_CANON
sessionOpen = m_sessionOpen; sessionOpen = m_sessionOpen;
#endif #endif
if (!m_usingWebcam && !sessionOpen) { if ((!m_usingWebcam && !sessionOpen) || m_liveViewStatus == LiveViewPaused) {
DVGui::warning(tr("Please start live view before capturing an image.")); DVGui::warning(tr("Please start live view before capturing an image."));
return; return;
} }
@ -1661,8 +1663,8 @@ void StopMotion::captureImage() {
} }
if (getReviewTime() > 0 && !m_isTimeLapse) { if (getReviewTime() > 0 && !m_isTimeLapse) {
m_timer->stop(); m_timer->stop();
if (m_liveViewStatus > 0) { if (m_liveViewStatus > LiveViewClosed) {
m_liveViewStatus = 3; m_liveViewStatus = LiveViewPaused;
} }
} }
m_lineUpImage = m_liveViewImage; m_lineUpImage = m_liveViewImage;
@ -1692,8 +1694,8 @@ void StopMotion::captureImage() {
m_timer->stop(); m_timer->stop();
} }
if (m_liveViewStatus > 0 && !m_isTimeLapse) { if (m_liveViewStatus > LiveViewClosed && !m_isTimeLapse) {
m_liveViewStatus = 3; m_liveViewStatus = LiveViewPaused;
} }
if (m_hasLiveViewImage) { if (m_hasLiveViewImage) {
@ -2189,7 +2191,7 @@ void StopMotion::refreshFrameInfo() {
sessionOpen = m_sessionOpen; sessionOpen = m_sessionOpen;
#endif #endif
if ((!sessionOpen && m_liveViewStatus < 2) && !m_usingWebcam) { if ((!sessionOpen && m_liveViewStatus < LiveViewOpen) && !m_usingWebcam) {
m_frameInfoText = ""; m_frameInfoText = "";
return; return;
} }
@ -2579,7 +2581,7 @@ void StopMotion::changeCameras(int index) {
#ifdef WITH_CANON #ifdef WITH_CANON
if (m_sessionOpen && getCameraCount() > 0) { if (m_sessionOpen && getCameraCount() > 0) {
if (m_liveViewStatus > 0) { if (m_liveViewStatus > LiveViewClosed) {
endCanonLiveView(); endCanonLiveView();
closeCameraSession(); closeCameraSession();
} }
@ -2767,7 +2769,7 @@ bool StopMotion::initWebcam(int index) {
void StopMotion::releaseWebcam() { void StopMotion::releaseWebcam() {
m_cvWebcam.release(); m_cvWebcam.release();
m_liveViewStatus = 0; m_liveViewStatus = LiveViewClosed;
emit(liveViewStopped()); emit(liveViewStopped());
} }
@ -2782,7 +2784,7 @@ void StopMotion::setWebcamResolution(QString resolution) {
// the split text must be "<width>" "x" and "<height>" // the split text must be "<width>" "x" and "<height>"
if (texts.size() != 3) return; if (texts.size() != 3) return;
int tempStatus = m_liveViewStatus; int tempStatus = m_liveViewStatus;
m_liveViewStatus = 0; m_liveViewStatus = LiveViewClosed;
bool startTimer = false; bool startTimer = false;
if (m_timer->isActive()) { if (m_timer->isActive()) {
m_timer->stop(); m_timer->stop();
@ -2854,7 +2856,7 @@ void StopMotion::getWebcamImage() {
memcpy(rawData, imgBuf, size); memcpy(rawData, imgBuf, size);
m_liveViewImage->unlock(); m_liveViewImage->unlock();
m_hasLiveViewImage = true; m_hasLiveViewImage = true;
m_liveViewStatus = 2; m_liveViewStatus = LiveViewOpen;
if (m_hasLiveViewImage && if (m_hasLiveViewImage &&
(m_liveViewDpi.x == 0.0 || m_liveViewImageDimensions.lx == 0)) { (m_liveViewDpi.x == 0.0 || m_liveViewImageDimensions.lx == 0)) {
TCamera *camera = TCamera *camera =
@ -2895,7 +2897,7 @@ bool StopMotion::toggleLiveView() {
sessionOpen = m_sessionOpen; sessionOpen = m_sessionOpen;
#endif #endif
if ((sessionOpen || m_usingWebcam) && m_liveViewStatus == 0) { if ((sessionOpen || m_usingWebcam) && m_liveViewStatus == LiveViewClosed) {
m_liveViewDpi = TPointD(0.0, 0.0); m_liveViewDpi = TPointD(0.0, 0.0);
m_liveViewImageDimensions = TDimension(0, 0); m_liveViewImageDimensions = TDimension(0, 0);
if (!m_usingWebcam) { if (!m_usingWebcam) {
@ -2903,14 +2905,15 @@ bool StopMotion::toggleLiveView() {
startCanonLiveView(); startCanonLiveView();
#endif #endif
} else } else
m_liveViewStatus = 1; m_liveViewStatus = LiveViewStarting;
loadLineUpImage(); loadLineUpImage();
m_timer->start(40); m_timer->start(40);
emit(liveViewChanged(true)); emit(liveViewChanged(true));
Preferences::instance()->setValue(rewindAfterPlayback, false); Preferences::instance()->setValue(rewindAfterPlayback, false);
TApp::instance()->getCurrentXsheet()->notifyXsheetChanged(); TApp::instance()->getCurrentXsheet()->notifyXsheetChanged();
return true; return true;
} else if ((sessionOpen || m_usingWebcam) && m_liveViewStatus > 0) { } else if ((sessionOpen || m_usingWebcam) &&
m_liveViewStatus > LiveViewClosed) {
if (!m_usingWebcam) { if (!m_usingWebcam) {
#ifdef WITH_CANON #ifdef WITH_CANON
endCanonLiveView(); endCanonLiveView();
@ -2934,14 +2937,14 @@ bool StopMotion::toggleLiveView() {
//----------------------------------------------------------------- //-----------------------------------------------------------------
void StopMotion::pauseLiveView() { void StopMotion::pauseLiveView() {
if (m_liveViewStatus == 2) { if (m_liveViewStatus == LiveViewOpen) {
m_liveViewStatus = 3; m_liveViewStatus = LiveViewPaused;
m_userCalledPause = true; m_userCalledPause = true;
emit(liveViewStopped()); emit(liveViewStopped());
} else if (m_liveViewStatus == 3) { } else if (m_liveViewStatus == LiveViewPaused) {
m_liveViewStatus = 2; m_liveViewStatus = LiveViewOpen;
m_userCalledPause = false; m_userCalledPause = false;
} else if (m_liveViewStatus == 0) { } else if (m_liveViewStatus == LiveViewClosed) {
toggleLiveView(); toggleLiveView();
} }
} }
@ -2998,7 +3001,7 @@ int StopMotion::getCameraCount() {
if (m_count == 0) { if (m_count == 0) {
m_error = EDS_ERR_DEVICE_NOT_FOUND; m_error = EDS_ERR_DEVICE_NOT_FOUND;
m_sessionOpen = false; m_sessionOpen = false;
m_liveViewStatus = 0; m_liveViewStatus = LiveViewClosed;
} }
return m_count; return m_count;
} else } else
@ -3794,7 +3797,8 @@ EdsError StopMotion::endCanonLiveView() {
//----------------------------------------------------------------- //-----------------------------------------------------------------
EdsError StopMotion::zoomLiveView() { EdsError StopMotion::zoomLiveView() {
if (!m_sessionOpen || !m_liveViewStatus > 0) return EDS_ERR_DEVICE_INVALID; if (!m_sessionOpen || !m_liveViewStatus > LiveViewClosed)
return EDS_ERR_DEVICE_INVALID;
EdsError err = EDS_ERR_OK; EdsError err = EDS_ERR_OK;
if (m_pickLiveViewZoom) toggleZoomPicking(); if (m_pickLiveViewZoom) toggleZoomPicking();
if (m_liveViewZoom == 1) { if (m_liveViewZoom == 1) {
@ -3824,7 +3828,7 @@ void StopMotion::makeZoomPoint(TPointD pos) {
//----------------------------------------------------------------- //-----------------------------------------------------------------
void StopMotion::toggleZoomPicking() { void StopMotion::toggleZoomPicking() {
if (!m_sessionOpen || !m_liveViewStatus > 0) return; if (!m_sessionOpen || !m_liveViewStatus > LiveViewClosed) return;
if (m_pickLiveViewZoom) { if (m_pickLiveViewZoom) {
m_pickLiveViewZoom = false; m_pickLiveViewZoom = false;
toggleNumpadForFocusCheck(false); toggleNumpadForFocusCheck(false);
@ -4020,7 +4024,8 @@ EdsError StopMotion::downloadEVFData() {
if (!m_converterSucceeded) return EDS_ERR_UNEXPECTED_EXCEPTION; if (!m_converterSucceeded) return EDS_ERR_UNEXPECTED_EXCEPTION;
// make sure not to set to LiveViewOpen if it has been turned off // make sure not to set to LiveViewOpen if it has been turned off
if (m_liveViewStatus > 0) { if (m_liveViewStatus > LiveViewClosed &&
m_liveViewStatus < LiveViewPaused) {
m_liveViewStatus = LiveViewOpen; m_liveViewStatus = LiveViewOpen;
} }
emit(newLiveViewImageReady()); emit(newLiveViewImageReady());
@ -4233,7 +4238,7 @@ EdsError StopMotion::handleStateEvent(EdsStateEvent event, EdsUInt32 parameter,
} }
if (event == kEdsStateEvent_WillSoonShutDown) { if (event == kEdsStateEvent_WillSoonShutDown) {
instance()->extendCameraOnTime(); instance()->extendCameraOnTime();
if (instance()->m_liveViewStatus > 1) { if (instance()->m_liveViewStatus > LiveViewStarting) {
instance()->toggleLiveView(); instance()->toggleLiveView();
} }
} }
@ -4823,15 +4828,21 @@ void StopMotion::sendSerialData() {
std::string text = response.toStdString(); std::string text = response.toStdString();
} }
// for not data sending is not implemented yet, just the frame number. // for not data sending is not implemented yet, just the frame number.
// These lines are here to be a reference for using column data as movement. // These lines are here to be a reference for using column data as movement.
//TDoubleParam *param = TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getParam(TStageObject::T_X); // TDoubleParam *param =
//double value = TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getParam(TStageObject::T_X, m_xSheetFrameNumber - 1); // TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getParam(TStageObject::T_X);
//QString isCam = TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getId().isCamera() ? "yep" : "nope"; // double value =
//std::string name = TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getName(); // TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getParam(TStageObject::T_X,
//TMeasure *measure =param->getMeasure(); // m_xSheetFrameNumber - 1);
//const TUnit *unit = measure->getCurrentUnit(); // QString isCam =
//double newValue = unit->convertTo(value); // TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getId().isCamera()
// ? "yep" : "nope";
// std::string name =
// TApp::instance()->getCurrentScene()->getScene()->getXsheet()->getStageObjectTree()->getStageObject(0)->getName();
// TMeasure *measure =param->getMeasure();
// const TUnit *unit = measure->getCurrentUnit();
// double newValue = unit->convertTo(value);
} }
//----------------------------------------------------------------- //-----------------------------------------------------------------