tahoma2d/toonz/sources/stopmotion/stopmotion.h

237 lines
6.2 KiB
C
Raw Normal View History

#pragma once
#ifndef STOPMOTION_H
#define STOPMOTION_H
2020-04-10 11:06:47 +12:00
#ifdef WITH_CANON
// Canon Includes
#include "EDSDK.h"
#include "EDSDKErrors.h"
#include "EDSDKTypes.h"
2020-04-10 11:06:47 +12:00
#endif
#include "turbojpeg.h"
// Toonz Includes
#include "traster.h"
#include "toonzqt/gutil.h"
#include "toonzqt/dvdialog.h"
2020-04-27 16:15:39 +12:00
#include "webcam.h"
#include "jpgconverter.h"
#include "canon.h"
#include "stopmotionserial.h"
#include "stopmotionlight.h"
#include <QObject>
2020-04-27 16:15:39 +12:00
#include <QThread>
class QCamera;
class QCameraInfo;
class QTimer;
enum ASPECT_RATIO { FOUR_THREE = 0, THREE_TWO, SIXTEEN_NINE, OTHER_RATIO };
class StopMotion : public QObject { // Singleton
Q_OBJECT
public:
static StopMotion* instance() {
static StopMotion _instance;
return &_instance;
};
private:
StopMotion();
~StopMotion();
2020-04-27 16:15:39 +12:00
// file stuff
int m_frameNumber = 1;
2020-04-27 16:15:39 +12:00
int m_xSheetFrameNumber = 1;
QString m_levelName = "";
QString m_fileType = "jpg";
QString m_filePath = "+extras";
QString m_frameInfoText = "";
QString m_infoColorName = "";
QString m_frameInfoToolTip = "";
2020-04-10 11:06:47 +12:00
2020-04-27 16:19:06 +12:00
// options
int m_opacity = 255.0;
int m_subsampling = 1;
2020-04-27 16:15:39 +12:00
QSize m_allowedCameraSize;
bool m_useNumpadShortcuts = false;
bool m_numpadForStyleSwitching = true;
bool m_turnOnRewind = false;
QTimer* m_reviewTimer;
std::map<std::string, QAction*> m_oldActionMap;
public:
enum LiveViewStatus {
LiveViewClosed = 0,
LiveViewStarting,
LiveViewOpen,
LiveViewPaused
};
2020-04-27 16:15:39 +12:00
Webcam* m_webcam;
Canon* m_canon;
StopMotionSerial* m_serial;
StopMotionLight* m_light;
2020-04-27 16:19:06 +12:00
bool m_usingWebcam = false;
bool m_placeOnXSheet = true;
bool m_alwaysLiveView = false;
bool m_userCalledPause = false;
bool m_drawBeneathLevels = true;
bool m_isTimeLapse = false;
int m_reviewTime = 2;
QString m_tempFile;
2020-04-27 16:15:39 +12:00
// timers
QTimer* m_timer;
2020-04-25 19:30:38 +12:00
int m_intervalTime = 10;
2020-04-25 11:44:28 +12:00
bool m_intervalStarted = false;
2020-05-01 15:07:56 +12:00
QTimer *m_intervalTimer, *m_countdownTimer, *m_webcamOverlayTimer;
2020-04-27 16:15:39 +12:00
// live view and images
int m_liveViewStatus = LiveViewClosed;
bool m_hasLiveViewImage, m_hasLineUpImage, m_showLineUpImage;
TRaster32P m_liveViewImage, m_newImage, m_lineUpImage;
TDimension m_liveViewImageDimensions = TDimension(0, 0);
TDimension m_fullImageDimensions = TDimension(0, 0);
TPointD m_liveViewDpi = TPointD(0.0, 0.0);
TPointD m_fullImageDpi = TPointD(0.0, 0.0);
2020-04-27 16:15:39 +12:00
// files and frames
void setXSheetFrameNumber(int frameNumber);
int getXSheetFrameNumber() { return m_xSheetFrameNumber; }
void setFrameNumber(int frameNumber);
int getFrameNumber() { return m_frameNumber; }
void setLevelName(QString levelName);
QString getLevelName() { return m_levelName; }
void setFileType(QString fileType);
QString getFileType() { return m_fileType; }
void setFilePath(QString filePath);
QString getFilePath() { return m_filePath; }
void updateLevelNameAndFrame(std::wstring levelName);
void setToNextNewLevel();
void nextFrame();
void previousFrame();
void lastFrame();
void nextName();
void previousName();
2020-04-27 16:15:39 +12:00
void refreshFrameInfo();
QString getFrameInfoText() { return m_frameInfoText; }
QString getInfoColorName() { return m_infoColorName; }
QString getFrameInfoToolTip() { return m_frameInfoToolTip; }
// cameras
void setWebcamResolution(QString resolution);
std::string getTEnvCameraName();
void setTEnvCameraName(std::string name);
std::string getTEnvCameraResolution();
void setTEnvCameraResolution(std::string resolution);
void disconnectAllCameras();
void changeCameras(int index);
void refreshCameraList();
// commands
void jumpToCameraFrame();
void removeStopMotionFrame();
2020-04-25 19:30:38 +12:00
2020-04-27 16:15:39 +12:00
// live view and images
bool toggleLiveView();
void pauseLiveView();
bool loadLineUpImage();
void setLiveViewImage();
void captureImage();
2020-05-01 15:07:56 +12:00
void captureWebcamImage();
void captureDslrImage();
2020-04-27 16:15:39 +12:00
void postImportProcess();
2020-04-25 19:30:38 +12:00
// time lapse
2020-04-25 11:44:28 +12:00
void toggleInterval(bool on);
void startInterval();
void stopInterval();
void setIntervalAmount(int value);
void restartInterval();
2020-04-27 16:15:39 +12:00
// options
void raiseOpacity();
void lowerOpacity();
void setOpacity(int opacity);
int getOpacity() { return m_opacity; }
void setAlwaysLiveView(bool on);
bool getAlwaysLiveView() { return m_alwaysLiveView; }
void setPlaceOnXSheet(bool on);
bool getPlaceOnXSheet() { return m_placeOnXSheet; }
void setUseNumpadShortcuts(bool on);
bool getUseNumpadShortcuts() { return m_useNumpadShortcuts; }
void toggleNumpadShortcuts(bool on);
void toggleNumpadForFocusCheck(bool on);
void setDrawBeneathLevels(bool on);
void setReviewTime(int time);
int getReviewTime() { return m_reviewTime; }
void getSubsampling();
void setSubsampling();
int getSubsamplingValue() { return m_subsampling; }
void setSubsamplingValue(int subsampling);
2020-04-27 16:15:39 +12:00
// saving and loading
2020-04-07 20:40:46 +12:00
void saveXmlFile();
bool loadXmlFile();
2020-04-09 15:36:38 +12:00
bool exportImageSequence();
public slots:
2020-04-27 16:15:39 +12:00
// timers
void onTimeout();
void onReviewTimeout();
2020-04-27 16:15:39 +12:00
void onIntervalCaptureTimerTimeout();
2020-05-01 15:07:56 +12:00
void captureWebcamOnTimeout();
void update();
bool importImage();
void onSceneSwitched();
void onPlaybackChanged();
2020-04-27 16:15:39 +12:00
void onCanonCameraChanged(QString);
signals:
2020-04-27 16:15:39 +12:00
// camera stuff
2020-04-16 10:02:02 +12:00
void cameraChanged(QString);
void newCameraSelected(int, bool);
void webcamResolutionsChanged();
void newWebcamResolutionSelected(int);
2020-04-27 16:15:39 +12:00
void updateCameraList(QString);
2020-04-27 16:15:39 +12:00
// live view and images
void newLiveViewImageReady();
void liveViewStopped();
void newImageReady();
void liveViewChanged(bool);
void liveViewOnAllFramesSignal(bool);
void newDimensions();
2020-04-27 16:15:39 +12:00
// file stuff
void filePathChanged(QString);
void levelNameChanged(QString);
void fileTypeChanged(QString);
void frameNumberChanged(int);
void frameInfoTextChanged(QString);
2020-04-27 16:15:39 +12:00
void xSheetFrameNumberChanged(int);
// options
void optionsChanged();
void subsamplingChanged(int);
void opacityChanged(int);
void placeOnXSheetSignal(bool);
void useNumpadSignal(bool);
2020-04-10 18:01:27 +12:00
void drawBeneathLevelsSignal(bool);
void reviewTimeChangedSignal(int);
2020-04-25 19:30:38 +12:00
// time lapse
2020-04-25 11:44:28 +12:00
void intervalToggled(bool);
void intervalStarted();
void intervalStopped();
void intervalAmountChanged(int);
};
#endif // STOPMOTION_H