export: fixed bug where null frames never got signalled and hung exporting

This commit is contained in:
itsmattkc
2020-04-23 03:02:04 +10:00
parent 8f9c056419
commit 61e3641bcc
6 changed files with 33 additions and 14 deletions
+2 -2
View File
@@ -173,10 +173,10 @@ void Encoder::Open()
}
}
void Encoder::WriteFrame(FramePtr frame)
void Encoder::WriteFrame(FramePtr frame, rational time)
{
if (open_) {
WriteInternal(frame);
WriteInternal(frame, time);
}
}
+2 -2
View File
@@ -103,7 +103,7 @@ public:
public slots:
void Open();
void WriteFrame(OLIVE_NAMESPACE::FramePtr frame);
void WriteFrame(OLIVE_NAMESPACE::FramePtr frame, OLIVE_NAMESPACE::rational time);
virtual void WriteAudio(OLIVE_NAMESPACE::AudioRenderingParams pcm_info, const QString& pcm_filename, OLIVE_NAMESPACE::TimeRange range) = 0;
void Close();
@@ -117,7 +117,7 @@ signals:
protected:
virtual bool OpenInternal() = 0;
virtual void WriteInternal(FramePtr frame) = 0;
virtual void WriteInternal(FramePtr frame, rational time) = 0;
virtual void CloseInternal() = 0;
bool IsOpen() const;
+2 -2
View File
@@ -228,7 +228,7 @@ bool FFmpegEncoder::OpenInternal()
return true;
}
void FFmpegEncoder::WriteInternal(FramePtr frame)
void FFmpegEncoder::WriteInternal(FramePtr frame, rational time)
{
AVFrame* encoded_frame = av_frame_alloc();
@@ -267,7 +267,7 @@ void FFmpegEncoder::WriteInternal(FramePtr frame)
goto fail;
}
encoded_frame->pts = qRound(frame->timestamp().toDouble() / av_q2d(video_codec_ctx_->time_base));
encoded_frame->pts = qRound64(time.toDouble() / av_q2d(video_codec_ctx_->time_base));
WriteAVFrame(encoded_frame, video_codec_ctx_, video_stream_);
+1 -1
View File
@@ -43,7 +43,7 @@ public slots:
protected:
virtual bool OpenInternal() override;
virtual void WriteInternal(FramePtr frame) override;
virtual void WriteInternal(FramePtr frame, rational time) override;
virtual void CloseInternal() override;
private: