X-Git-Url: https://git.sesse.net/?p=nageru;a=blobdiff_plain;f=nageru%2Fquicksync_encoder.cpp;fp=nageru%2Fquicksync_encoder.cpp;h=70bf8002073d64aba40f2aa6021c3e19ddf9a352;hp=9dc603b5ede7a0c1c2f6bbefcf59db713bd92408;hb=dcb238eb81768be4021f01dc7102c6c73821d0c0;hpb=0aa4c2665980537a02b15f74acd32a207f67e520 diff --git a/nageru/quicksync_encoder.cpp b/nageru/quicksync_encoder.cpp index 9dc603b..70bf800 100644 --- a/nageru/quicksync_encoder.cpp +++ b/nageru/quicksync_encoder.cpp @@ -719,6 +719,9 @@ void QuickSyncEncoderImpl::enable_zerocopy_if_possible() } else if (global_flags.x264_video_to_http) { fprintf(stderr, "Disabling zerocopy H.264 encoding due to --http-x264-video.\n"); use_zerocopy = false; + } else if (!global_flags.v4l_output_device.empty()) { + fprintf(stderr, "Disabling zerocopy H.264 encoding due to --v4l-output.\n"); + use_zerocopy = false; } else { use_zerocopy = true; } @@ -1547,6 +1550,10 @@ QuickSyncEncoderImpl::QuickSyncEncoderImpl(const std::string &filename, Resource memset(&slice_param, 0, sizeof(slice_param)); } + if (!global_flags.v4l_output_device.empty()) { + v4l_output.reset(new V4LOutput(global_flags.v4l_output_device.c_str(), width, height)); + } + call_once(quick_sync_metrics_inited, [](){ mixer_latency_histogram.init("mixer"); qs_latency_histogram.init("quick_sync"); @@ -1990,6 +1997,10 @@ void QuickSyncEncoderImpl::pass_frame(QuickSyncEncoderImpl::PendingFrame frame, } else if (global_flags.x264_video_to_http || global_flags.x264_video_to_disk) { x264_encoder->add_frame(pts, duration, frame.ycbcr_coefficients, data, received_ts); } + + if (v4l_output != nullptr) { + v4l_output->send_frame(data); + } } void QuickSyncEncoderImpl::encode_frame(QuickSyncEncoderImpl::PendingFrame frame, int encoding_frame_num, int display_frame_num, int gop_start_display_frame_num,