Loading...
Searching...
No Matches
Rescale.hpp
1#pragma once
2
3#include <Media/Libav.hpp>
4#if SCORE_HAS_LIBAV
5
6#include <Video/FrameQueue.hpp>
7#include <Video/VideoInterface.hpp>
8
9extern "C" {
10struct SwsContext;
11#include <libavcodec/avcodec.h>
12#include <libavformat/avformat.h>
13}
14
15#include <QDebug>
16
17#include <score_plugin_media_export.h>
18namespace Video
19{
20class SCORE_PLUGIN_MEDIA_EXPORT Rescale
21{
22public:
23 operator bool() const noexcept { return m_rescale; }
24
25 void open(const VideoMetadata& src);
26 void close();
27 void rescale(FrameQueue& m_frames, AVFramePointer& frame, ReadFrame& read);
28
29private:
30 const VideoMetadata* m_src{};
31 SwsContext* m_rescale{};
32 AVPixelFormat m_rescaleFormat{};
33};
34
35struct SCORE_PLUGIN_MEDIA_EXPORT DecoderConfiguration
36{
37 AVPixelFormat hardwareAcceleration{AV_PIX_FMT_NONE};
38 std::string decoder;
39 int threads{};
40 bool useAVCodec{true};
41 bool ignorePTS{false};
42};
43
44struct SCORE_PLUGIN_MEDIA_EXPORT LibAVDecoder
45{
46 ReadFrame enqueue_frame(const AVPacket* pkt) noexcept;
47 std::pair<AVBufferRef*, const AVCodec*> open_hwdec(const AVCodec&) noexcept;
48
49 int init_codec_context(
50 const AVCodec* codec, AVBufferRef* hw_dev_ctx, const AVStream* stream,
51 std::function<void(AVCodecContext&)> setup);
52 bool open_codec_context(
53 VideoInterface& self, const AVStream* stream,
54 std::function<void(AVCodecContext&)> setup);
55 void init_scaler(VideoInterface& self) noexcept;
56 void load_packet_in_frame(const AVPacket& packet, AVFrame& frame);
57
58 ReadFrame read_one_frame(AVPacket& packet);
59 ReadFrame read_one_frame_raw(AVPacket& packet);
60 ReadFrame read_one_frame_avcodec(AVPacket& packet);
61
63
64 AVFormatContext* m_formatContext{};
65 AVStream* m_avstream{};
66 const AVCodec* m_codec{};
67 AVCodecContext* m_codecContext{};
68
69 FrameQueue m_frames;
70 Rescale m_rescale;
71 bool m_finished{};
72};
73
74}
75#endif
Definition Rescale.hpp:21
Definition Rescale.hpp:36
Definition FrameQueue.hpp:53
Definition Rescale.hpp:45
Definition VideoInterface.hpp:44
Definition VideoInterface.hpp:37
Definition VideoInterface.hpp:29