X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=flags.cpp;h=62028dfb83df184969dc6988c4fe5ccfd89601ee;hb=bd5b2de9a277b87c75d71d94bd8c5095ab14ecf7;hp=025b6d9b07708504e83b2325b4f406d2233c5238;hpb=471db5155f58c3bf7a98c446575cfa0c483da765;p=nageru diff --git a/flags.cpp b/flags.cpp index 025b6d9..62028df 100644 --- a/flags.cpp +++ b/flags.cpp @@ -19,6 +19,7 @@ enum LongOption { OPTION_FAKE_CARDS_AUDIO, OPTION_HTTP_UNCOMPRESSED_VIDEO, OPTION_HTTP_X264_VIDEO, + OPTION_RECORD_X264_VIDEO, OPTION_X264_PRESET, OPTION_X264_TUNE, OPTION_X264_SPEEDCONTROL, @@ -76,6 +77,8 @@ void usage() 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, " --record-x264-video store x264-compressed video to disk (implies --http-x264-video,\n"); + fprintf(stderr, " removes the need for working VA-API encoding)\n"); fprintf(stderr, " --x264-preset x264 quality preset (default " X264_DEFAULT_PRESET ")\n"); fprintf(stderr, " --x264-tune x264 tuning (default " X264_DEFAULT_TUNE ", can be blank)\n"); fprintf(stderr, " --x264-speedcontrol try to match x264 preset to available CPU speed\n"); @@ -114,8 +117,8 @@ void usage() fprintf(stderr, " --audio-queue-length-ms=MS length of audio resampling queue (default 100.0)\n"); fprintf(stderr, " --output-ycbcr-coefficients={rec601,rec709,auto}\n"); fprintf(stderr, " Y'CbCr coefficient standard of output (default auto)\n"); - fprintf(stderr, " auto is rec709 if and only if --output-card is used\n"); - fprintf(stderr, " and a HD resolution is set\n"); + fprintf(stderr, " auto is rec601, unless --output-card is used\n"); + fprintf(stderr, " and a Rec. 709 mode (typically HD modes) is in use\n"); fprintf(stderr, " --output-buffer-frames=NUM number of frames in output buffer for --output-card,\n"); fprintf(stderr, " can be fractional (default 6.0); note also\n"); fprintf(stderr, " the audio queue can't be much longer than this\n"); @@ -145,6 +148,7 @@ void parse_flags(int argc, char * const argv[]) { "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 }, + { "record-x264-video", no_argument, 0, OPTION_RECORD_X264_VIDEO }, { "x264-preset", required_argument, 0, OPTION_X264_PRESET }, { "x264-tune", required_argument, 0, OPTION_X264_TUNE }, { "x264-speedcontrol", no_argument, 0, OPTION_X264_SPEEDCONTROL }, @@ -261,6 +265,10 @@ void parse_flags(int argc, char * const argv[]) case OPTION_HTTP_X264_VIDEO: global_flags.x264_video_to_http = true; break; + case OPTION_RECORD_X264_VIDEO: + global_flags.x264_video_to_disk = true; + global_flags.x264_video_to_http = true; + break; case OPTION_X264_PRESET: global_flags.x264_preset = optarg; break; @@ -430,17 +438,17 @@ void parse_flags(int argc, char * const argv[]) // On the other hand, HDMI/SDI output typically requires Rec. 709 for // HD resolutions (with no way of signaling anything else), which is // a conflicting demand. In this case, we typically let the HDMI/SDI - // output win, but the user can override this. + // output win if it is active, but the user can override this. if (output_ycbcr_coefficients == "auto") { - if (global_flags.output_card >= 0 && global_flags.width >= 1280) { - global_flags.ycbcr_rec709_coefficients = true; - } else { - global_flags.ycbcr_rec709_coefficients = false; - } + // Essentially: BT.709 if HDMI/SDI output is on, otherwise BT.601. + global_flags.ycbcr_rec709_coefficients = false; + global_flags.ycbcr_auto_coefficients = true; } else if (output_ycbcr_coefficients == "rec709") { global_flags.ycbcr_rec709_coefficients = true; + global_flags.ycbcr_auto_coefficients = false; } else if (output_ycbcr_coefficients == "rec601") { global_flags.ycbcr_rec709_coefficients = false; + global_flags.ycbcr_auto_coefficients = false; } else { fprintf(stderr, "ERROR: --output-ycbcr-coefficients must be “rec601”, “rec709” or “auto”\n"); exit(1);