14 #include <QMessageBox> 19 : QObject(parent), m_Process(new QProcess(this)), m_Framerate(0), m_IsRunning(false)
21 this->connect(m_Process, SIGNAL(error(QProcess::ProcessError)),
this, SLOT(OnProcessError(QProcess::ProcessError)));
24 m_Process, SIGNAL(finished(
int, QProcess::ExitStatus)),
this, SLOT(OnProcessFinished(
int, QProcess::ExitStatus)));
53 m_Size = QSize(width, height);
63 m_Framerate = framerate;
78 if (m_FFmpegPath.isEmpty())
79 mitkThrow() <<
"FFmpeg/Libav path is empty!";
82 mitkThrow() <<
"Invalid video frame size!";
87 if (m_OutputPath.isEmpty())
90 m_Process->start(m_FFmpegPath,
97 << QString(
"%1x%2").arg(m_Size.width()).arg(m_Size.height())
99 << QString(
"%1").arg(m_Framerate)
110 m_Process->waitForStarted();
121 if (frame ==
nullptr || !m_Process->isOpen())
124 m_Process->write(reinterpret_cast<const char *>(frame), m_Size.width() * m_Size.height() * 3);
125 m_Process->waitForBytesWritten();
131 m_Process->closeWriteChannel();
134 void QmitkFFmpegWriter::OnProcessError(QProcess::ProcessError error)
138 MITK_ERROR << QString::fromLatin1(m_Process->readAllStandardError()).toStdString();
142 case QProcess::FailedToStart:
143 mitkThrow() <<
"FFmpeg/Libav failed to start!";
145 case QProcess::Crashed:
148 case QProcess::Timedout:
149 mitkThrow() <<
"FFmpeg/Libav timed out!";
151 case QProcess::WriteError:
152 mitkThrow() <<
"Could not write to FFmpeg/Libav!";
154 case QProcess::ReadError:
155 mitkThrow() <<
"Could not read from FFmpeg/Libav!";
158 mitkThrow() <<
"An unknown error occurred!";
162 void QmitkFFmpegWriter::OnProcessFinished(
int exitCode, QProcess::ExitStatus exitStatus)
166 if (exitStatus != QProcess::CrashExit)
171 mitkThrow() << QString(
"FFmpeg/Libav exit code: %1").arg(exitCode).toStdString().c_str();
void WriteFrame(const unsigned char *frame)
void SetFramerate(int framerate)
~QmitkFFmpegWriter() override
void SetFFmpegPath(const QString &path)
QString GetFFmpegPath() const
void SetSize(const QSize &size)
QmitkFFmpegWriter(QObject *parent=nullptr)
void SetOutputPath(const QString &path)
QString GetOutputPath() const