tdesktop/Telegram/SourceFiles/media/streaming/media_streaming_utility.h

67 lines
1.6 KiB
C
Raw Normal View History

/*
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 "media/streaming/media_streaming_common.h"
2019-06-26 17:04:38 +02:00
#include "ffmpeg/ffmpeg_utility.h"
namespace Media {
namespace Streaming {
2019-02-21 20:01:55 +04:00
struct TimePoint {
2019-02-21 18:57:00 +04:00
crl::time trackTime = kTimeUnknown;
crl::time worldTime = kTimeUnknown;
bool valid() const {
return (trackTime != kTimeUnknown) && (worldTime != kTimeUnknown);
}
explicit operator bool() const {
return valid();
}
};
struct Stream {
int index = -1;
crl::time duration = kTimeUnknown;
2019-06-26 17:04:38 +02:00
AVRational timeBase = FFmpeg::kUniversalTimeBase;
FFmpeg::CodecPointer codec;
FFmpeg::FramePointer frame;
std::deque<FFmpeg::Packet> queue;
int invalidDataPackets = 0;
// Audio only.
int frequency = 0;
// Video only.
int rotation = 0;
2019-06-26 17:04:38 +02:00
AVRational aspect = FFmpeg::kNormalAspect;
FFmpeg::SwscalePointer swscale;
};
[[nodiscard]] crl::time FramePosition(const Stream &stream);
2019-06-26 17:04:38 +02:00
[[nodiscard]] FFmpeg::AvErrorWrap ProcessPacket(
Stream &stream,
FFmpeg::Packet &&packet);
[[nodiscard]] FFmpeg::AvErrorWrap ReadNextFrame(Stream &stream);
2019-02-22 15:58:26 +04:00
2019-02-27 15:36:19 +04:00
[[nodiscard]] bool GoodForRequest(
const QImage &image,
const FrameRequest &request);
[[nodiscard]] QImage ConvertFrame(
2019-03-01 01:03:25 +04:00
Stream &stream,
AVFrame *frame,
QSize resize,
QImage storage);
2019-02-27 15:36:19 +04:00
[[nodiscard]] QImage PrepareByRequest(
const QImage &original,
const FrameRequest &request,
QImage storage);
} // namespace Streaming
} // namespace Media