diff --git a/src/audio.cpp b/src/audio.cpp index 1995e380..f55046c0 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -115,6 +115,10 @@ namespace audio { opus_multistream_encoder_ctl(opus.get(), OPUS_SET_BITRATE(stream->bitrate)); opus_multistream_encoder_ctl(opus.get(), OPUS_SET_VBR(0)); + BOOST_LOG(info) << "Opus initialized: "sv << stream->sampleRate / 1000 << " kHz, "sv + << stream->channelCount << " channels, "sv + << stream->bitrate / 1000 << " kbps (total), LOWDELAY"sv; + auto frame_size = config.packetDuration * stream->sampleRate / 1000; while (auto sample = samples->pop()) { buffer_t packet { 1400 }; diff --git a/src/platform/linux/kmsgrab.cpp b/src/platform/linux/kmsgrab.cpp index ad97c9b0..bad467d9 100644 --- a/src/platform/linux/kmsgrab.cpp +++ b/src/platform/linux/kmsgrab.cpp @@ -1685,7 +1685,9 @@ namespace platf { if (!fb->handles[0]) { BOOST_LOG(error) << "Couldn't get handle for DRM Framebuffer ["sv << plane->fb_id << "]: Probably not permitted"sv; BOOST_LOG((window_system != window_system_e::X11 || config::video.capture == "kms") ? fatal : error) - << "You must run [sudo setcap cap_sys_admin+p $(readlink -f $(which sunshine))] for KMS display capture to work!"sv; + << "You must run [sudo setcap cap_sys_admin+p $(readlink -f $(which sunshine))] for KMS display capture to work!\n"sv + << "If you installed from AppImage or Flatpak, please refer to the official documentation:\n"sv + << "https://docs.lizardbyte.dev/projects/sunshine/en/latest/about/setup.html#install"sv; break; } diff --git a/src/platform/linux/vaapi.cpp b/src/platform/linux/vaapi.cpp index 9f1d3f32..9fa75135 100644 --- a/src/platform/linux/vaapi.cpp +++ b/src/platform/linux/vaapi.cpp @@ -371,7 +371,7 @@ namespace va { return -1; } - BOOST_LOG(debug) << "vaapi vendor: "sv << vaQueryVendorString(display.get()); + BOOST_LOG(info) << "vaapi vendor: "sv << vaQueryVendorString(display.get()); *hw_device_buf = av_hwdevice_ctx_alloc(AV_HWDEVICE_TYPE_VAAPI); auto ctx = (AVHWDeviceContext *) (*hw_device_buf)->data; diff --git a/src/platform/linux/x11grab.cpp b/src/platform/linux/x11grab.cpp index c3b23a4c..3f6cd0c5 100644 --- a/src/platform/linux/x11grab.cpp +++ b/src/platform/linux/x11grab.cpp @@ -679,6 +679,7 @@ namespace platf { } else { auto img_cookie = xcb::shm_get_image_unchecked(xcb.get(), display->root, offset_x, offset_y, width, height, ~0, XCB_IMAGE_FORMAT_Z_PIXMAP, seg, 0); + auto frame_timestamp = std::chrono::steady_clock::now(); xcb_img_t img_reply { xcb::shm_get_image_reply(xcb.get(), img_cookie, nullptr) }; if (!img_reply) { @@ -691,6 +692,7 @@ namespace platf { } std::copy_n((std::uint8_t *) data.data, frame_size(), img_out->data); + img_out->frame_timestamp = frame_timestamp; if (cursor) { blend_cursor(shm_xdisplay.get(), *img_out, offset_x, offset_y); diff --git a/src/video.cpp b/src/video.cpp index 6c1938c2..12f8cb41 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -1294,6 +1294,10 @@ namespace video { return ret; } + if (av_packet->flags & AV_PKT_FLAG_KEY) { + BOOST_LOG(debug) << "Frame "sv << frame_nr << ": IDR Keyframe (AV_FRAME_FLAG_KEY)"sv; + } + if ((frame->flags & AV_FRAME_FLAG_KEY) && !(av_packet->flags & AV_PKT_FLAG_KEY)) { BOOST_LOG(error) << "Encoder did not produce IDR frame when requested!"sv; }