export: fixed bug where null frames never got signalled and hung exporting
This commit is contained in:
@@ -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
@@ -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;
|
||||
|
||||
@@ -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_);
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user