]> git.sesse.net Git - nageru/blobdiff - video_encoder.h
Use the new libavformat functionality for marking keyframes.
[nageru] / video_encoder.h
index 92f83572006ee8119fb102fb4b92b4d2638164f5..fc3a570a736c4867e002ec27987505d7099c6de0 100644 (file)
@@ -25,7 +25,7 @@ namespace movit {
 class ResourcePool;
 }  // namespace movit
 
-class VideoEncoder : public KeyFrameSignalReceiver {
+class VideoEncoder {
 public:
        VideoEncoder(movit::ResourcePool *resource_pool, QSurface *surface, const std::string &va_display, int width, int height, HTTPD *httpd);
        ~VideoEncoder();
@@ -37,14 +37,10 @@ public:
        // Does a cut of the disk stream immediately ("frame" is used for the filename only).
        void do_cut(int frame);
 
-       virtual void signal_keyframe() override {
-               stream_mux_writing_keyframes = true;
-       }
-
 private:
        void open_output_stream();
-       static int write_packet_thunk(void *opaque, uint8_t *buf, int buf_size);
-       int write_packet(uint8_t *buf, int buf_size);
+       static int write_packet2_thunk(void *opaque, uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time);
+       int write_packet2(uint8_t *buf, int buf_size, AVIODataMarkerType type, int64_t time);
 
        AVOutputFormat *oformat;
        std::mutex qs_mu;
@@ -59,13 +55,8 @@ private:
        std::unique_ptr<AudioEncoder> stream_audio_encoder;
        std::unique_ptr<X264Encoder> x264_encoder;  // nullptr if not using x264.
 
-       // While Mux object is constructing, <stream_mux_writing_header> is true,
-       // and the header is being collected into stream_mux_header.
-       bool stream_mux_writing_header;
        std::string stream_mux_header;
 
-       bool stream_mux_writing_keyframes = false;
-
        std::atomic<int> quicksync_encoders_in_shutdown{0};
 
        // Encoders that are shutdown, but need to call release_gl_resources()