]> git.sesse.net Git - nageru/blobdiff - nageru/ffmpeg_capture.h
IWYU-fix nageru/*.h.
[nageru] / nageru / ffmpeg_capture.h
index 2ab9481aad6d351e5597f86cc0df3315a39d6606..122bf86726ba4cb6d73a70a0ca81166d6e7d7431 100644 (file)
 // see the subtitle until the next frame.
 
 #include <assert.h>
+#include <stddef.h>
 #include <stdint.h>
+#include <time.h>
+
+#include <atomic>
+#include <chrono>
 #include <functional>
 #include <map>
 #include <memory>
 #include <set>
 #include <string>
 #include <thread>
+#include <vector>
 
 #include <movit/effect.h>
 #include <movit/ycbcr.h>
 
 extern "C" {
+#include <libavutil/frame.h>
 #include <libswresample/swresample.h>
+#include <libavutil/channel_layout.h>
 #include <libavutil/pixfmt.h>
 #include <libavutil/rational.h>
 #include <libavutil/samplefmt.h>
@@ -288,6 +296,10 @@ private:
        std::atomic<bool> should_interrupt{false};
        bool last_frame_was_connected = true;
 
+       // TODO: Replace with std::optional if we go C++17.
+       bool frame_timeout_valid = false;  // If true, will time out any reads after ten seconds.
+       std::chrono::steady_clock::time_point frame_timeout_started;  // Only relevant if frame_timeout_valid == true.
+
        bool has_dequeue_callbacks = false;
        std::function<void()> dequeue_init_callback = nullptr;
        std::function<void()> dequeue_cleanup_callback = nullptr;
@@ -326,7 +338,7 @@ private:
        // Audio resampler.
        SwrContext *resampler = nullptr;
        AVSampleFormat last_src_format, last_dst_format;
-       int64_t last_channel_layout;
+       AVChannelLayout last_channel_layout;
        int last_sample_rate;
 
        // Subtitles (no decoding done, really).