]> git.sesse.net Git - nageru/blobdiff - decklink_capture.cpp
Support audio-only FFmpeg inputs. Somewhat wonky, though.
[nageru] / decklink_capture.cpp
index 4db60120f3040a0325325959c7edd5a0463cc5a8..6507959251d08a82bec466f180949d4985bdc1f8 100644 (file)
@@ -319,6 +319,14 @@ HRESULT STDMETHODCALLTYPE DeckLinkCapture::VideoInputFrameArrived(
                char thread_name[16];
                snprintf(thread_name, sizeof(thread_name), "DeckLink_C_%d", card_index);
                pthread_setname_np(pthread_self(), thread_name);
+
+               sched_param param;
+               memset(&param, 0, sizeof(param));
+               param.sched_priority = 1;
+               if (sched_setscheduler(0, SCHED_RR, &param) == -1) {
+                       printf("couldn't set realtime priority for DeckLink thread: %s\n", strerror(errno));
+               }
+
                if (has_dequeue_callbacks) {
                        dequeue_init_callback();
                }
@@ -460,14 +468,11 @@ void DeckLinkCapture::stop_dequeue_thread()
                fprintf(stderr, "StopStreams failed with error 0x%x\n", result);
                exit(1);
        }
-       if (input->DisableVideoInput() != S_OK) {
-               fprintf(stderr, "Failed to disable video input for card %d\n", card_index);
-               exit(1);
-       }
-       if (input->DisableAudioInput() != S_OK) {
-               fprintf(stderr, "Failed to disable audio input for card %d\n", card_index);
-               exit(1);
-       }
+
+       // We could call DisableVideoInput() and DisableAudioInput() here,
+       // but they seem to be taking a really long time, and we only do this
+       // during shutdown anyway, so StopStreams() will suffice.
+
        running = false;
 }