]> git.sesse.net Git - nageru/blobdiff - nageru/ffmpeg_capture.h
Fix another crash with newer SVT-AV1.
[nageru] / nageru / ffmpeg_capture.h
index 4cddbfddf757bce77a1f49b6c21b52bd7b57675b..2ab9481aad6d351e5597f86cc0df3315a39d6606 100644 (file)
@@ -159,9 +159,13 @@ public:
                        std::placeholders::_11);
        }
 
-       // FFmpegCapture-specific callback that gives the raw audio.
-       typedef std::function<void(const AVPacket *pkt, const AVRational timebase)> audio_callback_t;
-       void set_audio_callback(audio_callback_t callback)
+       // FFmpegCapture-specific callback that gives the raw audio/video.
+       typedef std::function<void(const AVPacket *pkt, const AVRational timebase)> packet_callback_t;
+       void set_video_callback(packet_callback_t callback)
+       {
+               video_callback = callback;
+       }
+       void set_audio_callback(packet_callback_t callback)
        {
                audio_callback = callback;
        }
@@ -297,7 +301,8 @@ private:
        std::unique_ptr<bmusb::FrameAllocator> owned_video_frame_allocator;
        std::unique_ptr<bmusb::FrameAllocator> owned_audio_frame_allocator;
        frame_callback_t frame_callback = nullptr;
-       audio_callback_t audio_callback = nullptr;
+       packet_callback_t video_callback = nullptr;
+       packet_callback_t audio_callback = nullptr;
 
        SwsContextWithDeleter sws_ctx;
        int sws_last_width = -1, sws_last_height = -1, sws_last_src_format = -1;
@@ -329,6 +334,11 @@ private:
        std::string last_subtitle;
 
        movit::RGBTriplet last_neutral_color{1.0f, 1.0f, 1.0f};
+
+       // Used for suppressing repeated warnings. Reset when a video starts playing.
+       // -1 is strictly speaking outside the range of the enum, but hopefully, it will be alright.
+       AVColorSpace last_colorspace = static_cast<AVColorSpace>(-1);
+       AVChromaLocation last_chroma_location = static_cast<AVChromaLocation>(-1);
 };
 
 #endif  // !defined(_FFMPEG_CAPTURE_H)