gpt4 book ai didi

c++ - 更有效地遍历原始视频

转载 作者:行者123 更新时间:2023-11-28 04:23:54 25 4
gpt4 key购买 nike

我有一个原始视频文件,我在 qt 中制作了一个从该文件逐帧读取的应用程序。在大型原始文件中,当我按下一个转到下一帧的按钮时,会有一个很大的延迟,几乎是一秒. 这是我从原始文件返回帧的代码:

 void RawVideoReader::getFrame(int offset)
{
std::cout<<"getFrame"<<std::endl;
file.seek((unsigned long long int)(((unsigned long long int)width * (unsigned long long int)height) * (unsigned long long int)offset));
QByteArray array = file.read(width * height);

const std::size_t count = array.size();

hex = std::unique_ptr<unsigned char>(new unsigned char[count]);
std::memcpy(hex.get(), array.constData(), count);
}

最佳答案

您可以直接读入您想要的缓冲区 - 问题是:为什么要使用 unique_ptr 来管理这个内存缓冲区? QByteArray 已经完成了这项工作。此外,您可能希望保留相同的缓冲区,而不是一遍又一遍地重新分配它。

class RawVideoReader : ... {
QByteArray frame;
uint8_t *frameData() const { return frame.size() ? static_cast<uint8_t*>(frame.constData()) : nullptr; }
size_t frameSize() const { return static_cast<size_t>(frame.size()); }
...
};

bool RawVideoReader::getFrame(int frameNo) {
qDebug() << __FUNCTION__;
frame.resize(width * height * 1);
file.seek(qint64(frame.size()) * qint64(frameNo));
auto const hadRead = file.read(frame.data(), frame.size());
return hadRead == frame.size();
}

关于c++ - 更有效地遍历原始视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54866393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com