Loading...
Searching...
No Matches
CameraInput.hpp
1#pragma once
2#include <Media/Libav.hpp>
3#if SCORE_HAS_LIBAV
4
5#include <Video/ExternalInput.hpp>
6#include <Video/FrameQueue.hpp>
7#include <Video/LibavInterrupt.hpp>
8#include <Video/Rescale.hpp>
9
10extern "C" {
11#include <libavformat/avformat.h>
12#include <libswscale/swscale.h>
13}
14
15#include <ossia/detail/lockfree_queue.hpp>
16
17#include <score_plugin_media_export.h>
18
19#include <atomic>
20#include <string>
21#include <thread>
22namespace Video
23{
24
25class SCORE_PLUGIN_MEDIA_EXPORT CameraInput final
26 : public ExternalInput
27 , public LibAVDecoder
28{
29public:
30 CameraInput() noexcept;
31 ~CameraInput() noexcept;
32
33 bool load(
34 const std::string& inputDevice, const std::string& format, int w, int h,
35 double fps, int codec, int pixelfmt) noexcept;
36
37 bool start() noexcept override;
38 void stop() noexcept override;
39
40 AVFrame* dequeue_frame() noexcept override;
41 void release_frame(AVFrame* frame) noexcept override;
42
43 bool notifyFormatChange(
44 int new_w, int new_h, AVPixelFormat new_pixfmt) noexcept override;
45
46private:
47 void buffer_thread() noexcept;
48 void close_file() noexcept;
49 AVFrame* read_frame_impl() noexcept;
50 bool open_stream() noexcept;
51 void close_stream() noexcept;
52 bool alloc_format_context() noexcept;
53 ReadFrame read_one_frame(AVFramePointer frame, AVPacket& packet);
54
55 static const constexpr int frames_to_buffer = 1;
56
58 static const constexpr auto open_timeout = std::chrono::milliseconds(2000);
60 static const constexpr auto read_timeout = std::chrono::milliseconds(5000);
61
62 LibavInterrupt m_interrupt;
63
64 AVCodecID m_requestedCodec{AV_CODEC_ID_NONE};
65 AVPixelFormat m_requestedPixfmt{AV_PIX_FMT_NONE};
66
67 std::thread m_thread;
68
69 std::string m_inputKind;
70 std::string m_inputDevice;
71
72 std::atomic_bool m_running{};
73};
74
75}
76#endif
Definition CameraInput.hpp:28
Definition ExternalInput.hpp:11
Deadline for the blocking libav I/O of one AVFormatContext.
Definition LibavInterrupt.hpp:30
Definition Rescale.hpp:49
Definition VideoInterface.hpp:71