33 bool open(
const std::string& inputFile)
noexcept;
34 bool load(
const std::string& inputFile)
noexcept;
36 const std::string& file()
const noexcept {
return m_inputFile; }
38 int64_t duration()
const noexcept;
40 void seek(int64_t flicks)
override;
42 AVFrame* dequeue_frame()
noexcept override;
43 void release_frame(AVFrame*)
noexcept override;
60 std::lock_guard l{decoder->m_condMut};
61 decoder->m_holdSeeks =
false;
63 decoder->m_condVar.notify_one();
66 [[nodiscard]]
SeekHold holdSeekRequests() noexcept
68 std::lock_guard l{m_condMut};
70 return SeekHold{
this};
74 void buffer_thread() noexcept;
75 void close_file() noexcept;
76 bool seek_impl(int64_t dts) noexcept;
77 AVFrame* read_frame_impl() noexcept;
78 bool open_stream() noexcept;
79 void close_video() noexcept;
81 static const constexpr
int frames_to_buffer = 16;
83 std::
string m_inputFile;
87 std::condition_variable m_condVar;
93 std::atomic_int64_t m_seekTo = -1;
95 std::atomic_int64_t m_last_dequeued_pts = AV_NOPTS_VALUE;
96 std::atomic_int64_t m_dequeued = 0;
98 std::atomic_bool m_running{};