]> git.sesse.net Git - nageru/blobdiff - nageru/video_encoder.cpp
Make it possible to quit while SRT is not connected, although slowly.
[nageru] / nageru / video_encoder.cpp
index 4d6a403d0051cfec8d3a8c6c5ad638b3983c600c..ec96acc58d9c82e24bbb33338bb0dccdb4c2de43 100644 (file)
@@ -89,23 +89,32 @@ VideoEncoder::VideoEncoder(ResourcePool *resource_pool, QSurface *surface, const
 
        open_output_streams();
        stream_audio_encoder->add_mux(http_mux.get());
-       stream_audio_encoder->add_mux(srt_mux.get());
+       if (srt_mux != nullptr) {
+               stream_audio_encoder->add_mux(srt_mux.get());
+       }
        quicksync_encoder->set_http_mux(http_mux.get());
-       quicksync_encoder->set_srt_mux(srt_mux.get());
+       if (srt_mux != nullptr) {
+               quicksync_encoder->set_srt_mux(srt_mux.get());
+       }
        if (global_flags.x264_video_to_http) {
                x264_encoder->add_mux(http_mux.get());
-               x264_encoder->add_mux(srt_mux.get());
+               if (srt_mux != nullptr) {
+                       x264_encoder->add_mux(srt_mux.get());
+               }
        }
 #ifdef HAVE_AV1
        if (global_flags.av1_video_to_http) {
                av1_encoder->add_mux(http_mux.get());
-               av1_encoder->add_mux(srt_mux.get());
+               if (srt_mux != nullptr) {
+                       av1_encoder->add_mux(srt_mux.get());
+               }
        }
 #endif
 }
 
 VideoEncoder::~VideoEncoder()
 {
+       should_quit = true;
        quicksync_encoder->shutdown();
        x264_encoder.reset(nullptr);
        x264_disk_encoder.reset(nullptr);
@@ -397,7 +406,7 @@ int VideoEncoder::write_srt_packet(uint8_t *buf, int buf_size)
        if (want_srt_metric_update.exchange(false) && srt_sock != -1) {
                srt_metrics.update_srt_stats(srt_sock);
        }
-       while (buf_size > 0) {
+       while (buf_size > 0 && !should_quit.load()) {
                if (srt_sock == -1) {
                        srt_sock = connect_to_srt();
                        if (srt_sock == -1) {