viewer: moved cached frame loading code so that more classes have access to it

This commit is contained in:
itsmattkc
2020-06-09 02:35:13 +10:00
parent 9095dfa463
commit 52ca18d5e1
3 changed files with 48 additions and 31 deletions
+43
View File
@@ -205,6 +205,49 @@ void FrameHashCache::SaveCacheFrame(const QByteArray &hash, FramePtr frame)
SaveCacheFrame(hash, frame->data(), frame->video_params());
}
FramePtr FrameHashCache::LoadCacheFrame(const QByteArray &hash, const PixelFormat::Format &format)
{
return LoadCacheFrame(CachePathName(hash, format));
}
FramePtr FrameHashCache::LoadCacheFrame(const QString &fn)
{
FramePtr frame = nullptr;
if (!fn.isEmpty() && QFileInfo::exists(fn)) {
auto input = OIIO::ImageInput::open(fn.toStdString());
if (input) {
PixelFormat::Format image_format = PixelFormat::OIIOFormatToOliveFormat(input->spec().format,
input->spec().nchannels == kRGBAChannels);
frame = Frame::Create();
frame->set_video_params(VideoParams(input->spec().width,
input->spec().height,
image_format));
frame->allocate();
input->read_image(input->spec().format,
frame->data(),
OIIO::AutoStride,
frame->linesize_bytes());
input->close();
#if OIIO_VERSION < 10903
OIIO::ImageInput::destroy(input);
#endif
} else {
qWarning() << "OIIO Error:" << OIIO::geterror().c_str();
}
}
return frame;
}
void FrameHashCache::LengthChangedEvent(const rational &old, const rational &newlen)
{
if (newlen < old) {
+2
View File
@@ -63,6 +63,8 @@ public:
static bool SaveCacheFrame(const QString& filename, char *data, const VideoParams &vparam);
static void SaveCacheFrame(const QByteArray& hash, char *data, const VideoParams &vparam);
static void SaveCacheFrame(const QByteArray& hash, FramePtr frame);
static FramePtr LoadCacheFrame(const QByteArray& hash, const PixelFormat::Format& format);
static FramePtr LoadCacheFrame(const QString& fn);
static QString GetFormatExtension(const PixelFormat::Format& f);
+3 -31
View File
@@ -394,38 +394,10 @@ void ViewerWidget::SetBackgroundCacheTask(CacheTask *t)
FramePtr DecodeCachedImage(const QString &fn, const rational& time)
{
FramePtr frame = nullptr;
FramePtr frame = FrameHashCache::LoadCacheFrame(fn);
if (!fn.isEmpty() && QFileInfo::exists(fn)) {
auto input = OIIO::ImageInput::open(fn.toStdString());
if (input) {
PixelFormat::Format image_format = PixelFormat::OIIOFormatToOliveFormat(input->spec().format,
input->spec().nchannels == kRGBAChannels);
frame = Frame::Create();
frame->set_timestamp(time);
frame->set_video_params(VideoParams(input->spec().width,
input->spec().height,
image_format));
frame->allocate();
input->read_image(input->spec().format,
frame->data(),
OIIO::AutoStride,
frame->linesize_bytes());
input->close();
#if OIIO_VERSION < 10903
OIIO::ImageInput::destroy(input);
#endif
} else {
qWarning() << "OIIO Error:" << OIIO::geterror().c_str();
}
if (frame) {
frame->set_timestamp(time);
}
return frame;