Sunshine master
Self-hosted game stream host for Moonlight.
platf::kms::display_t Class Reference

Base KMS display capture backend shared by RAM and VRAM paths. More...

Inheritance diagram for platf::kms::display_t:
[legend]
Collaboration diagram for platf::kms::display_t:
[legend]

Public Member Functions

 display_t (mem_type_e mem_type)
 Initialize common KMS display state for the requested memory type.
 
bool get_hdr_metadata (SS_HDR_METADATA &metadata)
 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 ()
 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 std::shared_ptr< img_talloc_img ()=0
 Allocate an image buffer compatible with this display backend.
 
virtual 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)=0
 Capture a frame.
 
virtual int dummy_img (img_t *img)=0
 Populate a fallback image when real capture data is unavailable.
 
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< avcodec_encode_device_tmake_avcodec_encode_device (pix_fmt_e pix_fmt)
 Create AVCodec encode device.
 
virtual std::unique_ptr< nvenc_encode_device_tmake_nvenc_encode_device (pix_fmt_e pix_fmt)
 Create NVENC encode device.
 

Public Attributes

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.
 
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_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

Base KMS display capture backend shared by RAM and VRAM paths.

Constructor & Destructor Documentation

◆ display_t()

platf::kms::display_t::display_t ( mem_type_e mem_type)
inline

Initialize common KMS display state for the requested memory type.

Parameters
mem_typeMem type.

Member Function Documentation

◆ get_hdr_metadata()

bool platf::kms::display_t::get_hdr_metadata ( SS_HDR_METADATA & metadata)
inlinevirtual

Read HDR metadata for the active display mode.

Parameters
metadataOutput structure populated with HDR metadata.
Returns
True when HDR metadata was written to the output structure.

Reimplemented from platf::display_t.

◆ init()

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

Initialize the base KMS capture state for the selected monitor.

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

◆ is_hdr()

bool platf::kms::display_t::is_hdr ( )
inlinevirtual

Report whether the active display mode is HDR.

Returns
True when the active display mode is HDR.

Reimplemented from platf::display_t.

◆ refresh()

capture_e platf::kms::display_t::refresh ( file_t * file,
egl::surface_descriptor_t * sd,
std::optional< std::chrono::steady_clock::time_point > & frame_timestamp )
inline

Refresh cached platform state from the operating system.

Parameters
fileDMA-BUF file descriptors exported for the current framebuffer.
sdEGL surface descriptor to import.
frame_timestampOutput timestamp assigned to the captured frame.
Returns
Capture status after refreshing framebuffer and cursor state.

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