Sunshine0.0.5917
Sunshine 0.0.5917
Self-hosted game stream host for Moonlight.
Loading...
Searching...
No Matches
platf::kms::display_vram_t Class Reference

KMS capture backend that exports frames as GPU resources. More...

Inheritance diagram for platf::kms::display_vram_t:
Collaboration diagram for platf::kms::display_vram_t:

Public Member Functions

std::shared_ptr< img_t > alloc_img () override
 Allocate an image buffer compatible with this display backend.
capture_e capture (const push_captured_image_cb_t &push_captured_image_cb, const pull_free_image_cb_t &pull_free_image_cb, bool *cursor) override
 Capture KMS frames until capture stops or the display needs reinitialization.
 display_vram_t (mem_type_e mem_type)
 Explicitly initialize a KMS display backend that exports frames as GPU resources.
int dummy_img (platf::img_t *img) override
 Populate a fallback image when real capture data is unavailable.
int init (const std::string &display_name, const ::video::config_t &config)
 Initialize KMS capture that exports frames as GPU resources.
std::unique_ptr< avcodec_encode_device_t > make_avcodec_encode_device (pix_fmt_e pix_fmt) override
 Create AVCodec encode device.
capture_e snapshot (const pull_free_image_cb_t &pull_free_image_cb, std::shared_ptr< platf::img_t > &img_out, std::chrono::milliseconds, bool cursor)
 Capture a display frame into the provided image object.
Public Member Functions inherited from platf::kms::display_t
 display_t (mem_type_e mem_type)
 Explicitly initialize common KMS display state for the requested memory type.
bool get_hdr_metadata (SS_HDR_METADATA &metadata) override
 Read HDR metadata for the active display mode.
int init (const std::string &display_name, const ::video::config_t &config)
 Initialize the base KMS capture state for the selected monitor.
bool is_hdr () override
 Report whether the active display mode is HDR.
capture_e refresh (file_t *file, egl::surface_descriptor_t *sd, std::optional< std::chrono::steady_clock::time_point > &frame_timestamp)
 Refresh cached platform state from the operating system.
void update_cursor ()
 Update cached cursor-plane image and position.
Public Member Functions inherited from platf::display_t
virtual bool is_codec_supported (std::string_view name, const ::video::config_t &config)
 Check that a given codec is supported by the display device.
virtual std::unique_ptr< nvenc_encode_device_t > make_nvenc_encode_device (pix_fmt_e pix_fmt)
 Create NVENC encode device.

Public Attributes

std::uint64_t sequence {}
 Monotonic capture sequence assigned to KMS frames.
Public Attributes inherited from platf::kms::display_t
cursor_t captured_cursor {}
 Captured cursor.
card_t card
 Card.
std::optional< uint32_t > connector_id
 Connector ID.
int crtc_id
 Crtc ID.
int crtc_index
 Crtc index.
int cursor_plane_id
 Cursor plane ID.
std::chrono::nanoseconds delay
 Delay before the timer task becomes eligible to run.
kms::empty_plane_timer_t empty_plane_timer {250ms}
 Reinitializes capture once the captured plane stays empty.
std::optional< uint64_t > hdr_metadata_blob_id
 HDR metadata blob ID.
int img_height
 Img height.
int img_offset_x
 Img offset x.
int img_offset_y
 Img offset y.
int img_width
 Img width.
mem_type_e mem_type
 Mem type.
int plane_id
 Plane ID.
Public Attributes inherited from platf::display_t
int env_height {0}
 Height of the full capture environment in physical pixels.
int env_logical_height {0}
 Height of the full capture environment after display scaling.
int env_logical_width {0}
 Width of the full capture environment after display scaling.
int env_offset_x {0}
 Horizontal origin of the full capture environment in native desktop coordinates.
int env_offset_y {0}
 Vertical origin of the full capture environment in native desktop coordinates.
int env_width {0}
 Width of the full capture environment in physical pixels.
int height {0}
 Height of the captured display in physical pixels.
int logical_height {0}
 Height of the captured display after display scaling.
int logical_width {0}
 Width of the captured display after display scaling.
int offset_x {0}
 Horizontal capture offset in physical pixels.
int offset_y {0}
 Vertical capture offset in physical pixels.
int width {0}
 Width of the captured display in physical pixels.

Additional Inherited Members

Public Types inherited from platf::display_t
using pull_free_image_cb_t = std::function<bool(std::shared_ptr<img_t> &img_out)>
 Get free image from pool. Calls must be synchronized. Blocks until there is free image in the pool or capture is interrupted.
using push_captured_image_cb_t = std::function<bool(std::shared_ptr<img_t> &&img, bool frame_captured)>
 Callback for when a new image is ready. When display has a new image ready or a timeout occurs, this callback will be called with the image. If a frame was captured, frame_captured will be true. If a timeout occurred, it will be false.
Protected Attributes inherited from platf::display_t
logging::time_delta_periodic_logger sleep_overshoot_logger = {debug, "Frame capture sleep overshoot"}
 Periodic logger for capture sleep overshoot measurements.

Detailed Description

KMS capture backend that exports frames as GPU resources.

Constructor & Destructor Documentation

◆ display_vram_t()

platf::kms::display_vram_t::display_vram_t ( mem_type_e mem_type)
inlineexplicit

Explicitly initialize a KMS display backend that exports frames as GPU resources.

Parameters
mem_typeMem type.

Member Function Documentation

◆ alloc_img()

std::shared_ptr< img_t > platf::kms::display_vram_t::alloc_img ( )
inlineoverridevirtual

Allocate an image buffer compatible with this display backend.

Returns
Allocated img object, or null when unavailable.

Implements platf::display_t.

◆ capture()

capture_e platf::kms::display_vram_t::capture ( const push_captured_image_cb_t & push_captured_image_cb,
const pull_free_image_cb_t & pull_free_image_cb,
bool * cursor )
inlineoverridevirtual

Capture KMS frames until capture stops or the display needs reinitialization.

Parameters
push_captured_image_cbCallback receiving a captured image or a capture timeout.
pull_free_image_cbCallback providing an available image buffer.
cursorWhether the cursor should be included in the captured image.
Returns
Final capture status reported to the streaming pipeline.

Implements platf::display_t.

◆ dummy_img()

int platf::kms::display_vram_t::dummy_img ( platf::img_t * img)
inlineoverridevirtual

Populate a fallback image when real capture data is unavailable.

Parameters
imgImage or frame object to read from or populate.
Returns
Capture status reported to the streaming pipeline.

Implements platf::display_t.

◆ init()

int platf::kms::display_vram_t::init ( const std::string & display_name,
const ::video::config_t & config )
inline

Initialize KMS capture that exports frames as GPU resources.

Parameters
display_nameDisplay name.
configConfiguration values to apply.
Returns
0 on success; nonzero or negative platform status on failure.

◆ make_avcodec_encode_device()

std::unique_ptr< avcodec_encode_device_t > platf::kms::display_vram_t::make_avcodec_encode_device ( pix_fmt_e pix_fmt)
inlineoverridevirtual

Create AVCodec encode device.

Parameters
pix_fmtSunshine pixel format to convert or allocate for.
Returns
Constructed AVCodec encode device object.

Reimplemented from platf::display_t.

◆ snapshot()

capture_e platf::kms::display_vram_t::snapshot ( const pull_free_image_cb_t & pull_free_image_cb,
std::shared_ptr< platf::img_t > & img_out,
std::chrono::milliseconds ,
bool cursor )
inline

Capture a display frame into the provided image object.

Parameters
pull_free_image_cbPull free image cb.
img_outCaptured KMS image descriptor returned to the streaming pipeline.
cursorCursor image or visibility state to composite.
Returns
Capture status reported to the streaming pipeline.

The documentation for this class was generated from the following file: