turtletooth 04d8fd
#pragma once
turtletooth 04d8fd
turtletooth 04d8fd
#ifndef TTIO_FFMPEG_INCLUDED
turtletooth 04d8fd
#define TTIO_FFMPEG_INCLUDED
turtletooth 04d8fd
turtletooth 04d8fd
#include "tproperty.h"
turtletooth 04d8fd
#include "tlevel_io.h"
turtletooth 04d8fd
#include "trasterimage.h"
turtletooth 04d8fd
#include <qvector></qvector>
turtletooth 04d8fd
#include <qstringlist></qstringlist>
justburner 69bbaf
#include <qprocess></qprocess>
turtletooth 04d8fd
turtletooth 04d8fd
struct ffmpegFileInfo {
turtletooth 04d8fd
  int m_lx, m_ly, m_frameCount;
turtletooth 04d8fd
  double m_frameRate;
turtletooth 04d8fd
};
turtletooth 04d8fd
turtletooth 04d8fd
class Ffmpeg {
turtletooth 04d8fd
public:
turtletooth 04d8fd
  Ffmpeg();
turtletooth 04d8fd
  ~Ffmpeg();
turtletooth 04d8fd
  void createIntermediateImage(const TImageP &image, int frameIndex);
turtletooth 04d8fd
  void runFfmpeg(QStringList preIArgs, QStringList postIArgs,
turtletooth 04d8fd
                 bool includesInPath, bool includesOutPath,
turtletooth 04d8fd
                 bool overWriteFiles);
turtletooth 04d8fd
  void runFfmpeg(QStringList preIArgs, QStringList postIArgs, TFilePath path);
turtletooth 04d8fd
  QString runFfprobe(QStringList args);
turtletooth 04d8fd
  void cleanUpFiles();
turtletooth 04d8fd
  void addToCleanUp(QString);
turtletooth 04d8fd
  void setFrameRate(double fps);
turtletooth 04d8fd
  void setPath(TFilePath path);
turtletooth 04d8fd
  void saveSoundTrack(TSoundTrack *st);
turtletooth 04d8fd
  bool checkFilesExist();
turtletooth 04d8fd
  static bool checkFfmpeg();
turtletooth 04d8fd
  static bool checkFfprobe();
turtletooth 04d8fd
  static bool checkFormat(std::string format);
turtletooth 04d8fd
  double getFrameRate();
turtletooth 04d8fd
  TDimension getSize();
turtletooth 04d8fd
  int getFrameCount();
turtletooth 04d8fd
  void getFramesFromMovie(int frame = -1);
turtletooth 04d8fd
  TRasterImageP getImage(int frameIndex);
turtletooth 04d8fd
  TFilePath getFfmpegCache();
turtletooth 04d8fd
  ffmpegFileInfo getInfo();
turtletooth 04d8fd
  void disablePrecompute();
Jeremy Bullock 779cdf
  int getGifFrameCount();
turtletooth 04d8fd
turtletooth 04d8fd
private:
turtletooth 04d8fd
  QString m_intermediateFormat, m_ffmpegPath, m_audioPath, m_audioFormat;
turtletooth 04d8fd
  int m_frameCount    = 0, m_lx, m_ly, m_bpp, m_bitsPerSample, m_channelCount,
Jeremy Bullock 63a3d7
      m_ffmpegTimeout = 30000, m_frameNumberOffset = -1;
turtletooth 04d8fd
  double m_frameRate  = 24.0;
turtletooth 04d8fd
  bool m_ffmpegExists = false, m_ffprobeExists = false, m_hasSoundTrack = false;
turtletooth 04d8fd
  TFilePath m_path;
turtletooth 04d8fd
  QVector<qstring> m_cleanUpList;</qstring>
turtletooth 04d8fd
  QStringList m_audioArgs;
turtletooth 04d8fd
  TUINT32 m_sampleRate;
Jeremy Bullock 686e82
  QString cleanPathSymbols();
justburner 69bbaf
  bool waitFfmpeg(const QProcess &ffmpeg);
turtletooth 04d8fd
};
turtletooth 04d8fd
turtletooth 04d8fd
#endif