]> git.sesse.net Git - nageru/commitdiff
Support the new audio output from FakeCapture, with a (non-default) flag.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 29 Jul 2016 10:37:10 +0000 (12:37 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 29 Jul 2016 10:37:10 +0000 (12:37 +0200)
bmusb
flags.cpp
flags.h
mixer.cpp

diff --git a/bmusb b/bmusb
index b9433278b3cca82312d3785e2e75a57375a8683c..e0837a17b5a497476d67237c768836e51f8a4ce7 160000 (submodule)
--- a/bmusb
+++ b/bmusb
@@ -1 +1 @@
-Subproject commit b9433278b3cca82312d3785e2e75a57375a8683c
+Subproject commit e0837a17b5a497476d67237c768836e51f8a4ce7
index acbf497b834bb1cc8193b0ff272cae91d3b15077..2ff7d4b7fb2bd1d926ee2c19a7f27f352fa2ebb2 100644 (file)
--- a/flags.cpp
+++ b/flags.cpp
@@ -13,7 +13,8 @@ Flags global_flags;
 
 // Long options that have no corresponding short option.
 enum LongOption {
-       OPTION_HTTP_UNCOMPRESSED_VIDEO = 1000,
+       OPTION_FAKE_CARDS_AUDIO = 1000,
+       OPTION_HTTP_UNCOMPRESSED_VIDEO,
        OPTION_HTTP_X264_VIDEO,
        OPTION_X264_PRESET,
        OPTION_X264_TUNE,
@@ -54,6 +55,7 @@ void usage()
        fprintf(stderr, "  -v, --va-display=SPEC           VA-API device for H.264 encoding\n");
        fprintf(stderr, "                                    ($DISPLAY spec or /dev/dri/render* path)\n");
        fprintf(stderr, "  -m, --map-signal=SIGNAL,CARD    set a default card mapping (can be given multiple times)\n");
+       fprintf(stderr, "      --fake-cards-audio          make fake (disconnected) cards output a simple tone\n");
        fprintf(stderr, "      --http-uncompressed-video   send uncompressed NV12 video to HTTP clients\n");
        fprintf(stderr, "      --http-x264-video           send x264-compressed video to HTTP clients\n");
        fprintf(stderr, "      --x264-preset               x264 quality preset (default " X264_DEFAULT_PRESET ")\n");
@@ -99,6 +101,7 @@ void parse_flags(int argc, char * const argv[])
                { "theme-dir", required_argument, 0, 'I' },
                { "map-signal", required_argument, 0, 'm' },
                { "va-display", required_argument, 0, 'v' },
+               { "fake-cards-audio", no_argument, 0, OPTION_FAKE_CARDS_AUDIO },
                { "http-uncompressed-video", no_argument, 0, OPTION_HTTP_UNCOMPRESSED_VIDEO },
                { "http-x264-video", no_argument, 0, OPTION_HTTP_X264_VIDEO },
                { "x264-preset", required_argument, 0, OPTION_X264_PRESET },
@@ -167,6 +170,9 @@ void parse_flags(int argc, char * const argv[])
                case 'v':
                        global_flags.va_display = optarg;
                        break;
+               case OPTION_FAKE_CARDS_AUDIO:
+                       global_flags.fake_cards_audio = true;
+                       break;
                case OPTION_HTTP_UNCOMPRESSED_VIDEO:
                        global_flags.uncompressed_video_to_http = true;
                        break;
diff --git a/flags.h b/flags.h
index f75ccd0fe8ef3c541ab9770b4c083b568db23ae6..ba69db6af09cce6b0c32fbfb49740083cc7a97d6 100644 (file)
--- a/flags.h
+++ b/flags.h
@@ -10,6 +10,7 @@
 struct Flags {
        int num_cards = 2;
        std::string va_display;
+       bool fake_cards_audio = false;
        bool uncompressed_video_to_http = false;
        bool x264_video_to_http = false;
        std::vector<std::string> theme_dirs { ".", "/usr/local/share/nageru" };
index fd33abbb18f35d3569b89f4d673c37e9e7a92365..52a8d84f2c5e340821d3610377803164e9f3911f 100644 (file)
--- a/mixer.cpp
+++ b/mixer.cpp
@@ -201,7 +201,8 @@ Mixer::Mixer(const QSurfaceFormat &format, unsigned num_cards)
 
        unsigned num_fake_cards = 0;
        for ( ; card_index < num_cards; ++card_index, ++num_fake_cards) {
-               configure_card(card_index, new FakeCapture(WIDTH, HEIGHT, FAKE_FPS, OUTPUT_FREQUENCY, card_index), /*is_fake_capture=*/true);
+               FakeCapture *capture = new FakeCapture(WIDTH, HEIGHT, FAKE_FPS, OUTPUT_FREQUENCY, card_index, global_flags.fake_cards_audio);
+               configure_card(card_index, capture, /*is_fake_capture=*/true);
        }
 
        if (num_fake_cards > 0) {
@@ -817,7 +818,8 @@ void Mixer::handle_hotplugged_cards()
                CaptureCard *card = &cards[card_index];
                if (card->capture->get_disconnected()) {
                        fprintf(stderr, "Card %u went away, replacing with a fake card.\n", card_index);
-                       configure_card(card_index, new FakeCapture(WIDTH, HEIGHT, FAKE_FPS, OUTPUT_FREQUENCY, card_index), /*is_fake_capture=*/true);
+                       FakeCapture *capture = new FakeCapture(WIDTH, HEIGHT, FAKE_FPS, OUTPUT_FREQUENCY, card_index, global_flags.fake_cards_audio);
+                       configure_card(card_index, capture, /*is_fake_capture=*/true);
                        card->queue_length_policy.reset(card_index);
                        card->capture->start_bm_capture();
                }