| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- This file is part of Telegram Desktop,
- the official desktop application for the Telegram messaging service.
- For license and copyright information please follow this link:
- https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
- */
- #pragma once
- #include <QtCore/QBuffer>
- #include <QtCore/QFile>
- namespace Core {
- class FileLocation;
- } // namespace Core
- namespace Media {
- namespace Clip {
- namespace internal {
- class ReaderImplementation {
- public:
- ReaderImplementation(Core::FileLocation *location, QByteArray *data)
- : _location(location)
- , _data(data) {
- }
- enum class Mode {
- Silent,
- Inspecting, // Not playing video, but reading data.
- };
- enum class ReadResult {
- Success,
- Error,
- EndOfFile,
- };
- // Read frames till current frame will have presentation time > frameMs, systemMs = crl::now().
- virtual ReadResult readFramesTill(crl::time frameMs, crl::time systemMs) = 0;
- // Get current frame real and presentation time.
- virtual crl::time frameRealTime() const = 0;
- virtual crl::time framePresentationTime() const = 0;
- // Render current frame to an image with specific size.
- virtual bool renderFrame(
- QImage &to,
- bool &hasAlpha,
- int &index,
- const QSize &size) = 0;
- virtual crl::time durationMs() const = 0;
- virtual bool start(Mode mode, crl::time &positionMs) = 0;
- virtual ~ReaderImplementation() {
- }
- int64 dataSize() const {
- return _dataSize;
- }
- protected:
- Core::FileLocation *_location = nullptr;
- QByteArray *_data = nullptr;
- QFile _file;
- QBuffer _buffer;
- QIODevice *_device = nullptr;
- int64 _dataSize = 0;
- void initDevice();
- };
- } // namespace internal
- } // namespace Clip
- } // namespace Media
|