]> git.sesse.net Git - nageru/blobdiff - ffmpeg_capture.h
In FFmpegCapture, refactor command queue processing into its own function.
[nageru] / ffmpeg_capture.h
index e20f24cb5f6fdd965ac19eb5826c8b6085f6f035..cde99c497fd596a4e7768dc51adce45ec1e3c6b6 100644 (file)
 // Since we don't really know much about the video when building the chains,
 // there are some limitations. In particular, frames are always assumed to be
 // sRGB even if the video container says something else. We could probably
-// try to load the video on startup and pick out the parameters at that point
-// (which would probably also allow us to send Y'CbCr video through without
-// CPU conversion), but it would require some more plumbing, and it would also
-// fail if the file changes parameters midway, which is allowed in some formats.
+// try to load the video on startup and pick out the parameters at that point,
+// but it would require some more plumbing, and it would also fail if the file
+// changes parameters midway, which is allowed in some formats.
 //
 // There is currently no audio support.
 
@@ -34,6 +33,8 @@
 #include "bmusb/bmusb.h"
 #include "quittable_sleeper.h"
 
+struct AVFormatContext;
+
 class FFmpegCapture : public bmusb::CaptureInterface
 {
 public:
@@ -151,6 +152,9 @@ private:
        bool play_video(const std::string &pathname);
        void internal_rewind();
 
+       // Returns true if there was an error.
+       bool process_queued_commands(AVFormatContext *format_ctx, const std::string &pathname, timespec last_modified);
+
        std::string description, filename;
        uint16_t timecode = 0;
        unsigned width, height;
@@ -158,6 +162,7 @@ private:
        movit::YCbCrFormat current_frame_ycbcr_format;
        bool running = false;
        int card_index = -1;
+       double rate = 1.0;
 
        bool has_dequeue_callbacks = false;
        std::function<void()> dequeue_init_callback = nullptr;