Sunshine master
Self-hosted game stream host for Moonlight.
platf::av_display_t Struct Reference

macOS display capture source and image buffers. More...

Inheritance diagram for platf::av_display_t:
[legend]
Collaboration diagram for platf::av_display_t:
[legend]

Public Member Functions

std::shared_ptr< img_talloc_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 a frame.
 
int dummy_img (img_t *img) override
 Populate a fallback image when real capture data is unavailable.
 
std::unique_ptr< avcodec_encode_device_tmake_avcodec_encode_device (pix_fmt_e pix_fmt) override
 Create AVCodec encode device.
 
- Public Member Functions inherited from platf::display_t
virtual bool get_hdr_metadata (SS_HDR_METADATA &metadata)
 Read HDR metadata for the active display mode.
 
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 bool is_hdr ()
 Report whether the active display mode is HDR.
 
virtual std::unique_ptr< nvenc_encode_device_tmake_nvenc_encode_device (pix_fmt_e pix_fmt)
 Create NVENC encode device.
 

Static Public Member Functions

static void setPixelFormat (void *display, OSType pixelFormat)
 Set pixel format.
 
static void setResolution (void *display, int width, int height)
 

Public Attributes

AVVideoav_capture {}
 AV capture.
 
CGDirectDisplayID display_id {}
 Display ID.
 
std::unique_ptr< display_device::DisplayPowerGuardInterface > display_power_guard
 Display power guard.
 
- 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

macOS display capture source and image buffers.

Member Function Documentation

◆ alloc_img()

std::shared_ptr< img_t > platf::av_display_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::av_display_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 a frame.

Parameters
push_captured_image_cbThe callback that is called with captured image, must be called from the same thread as capture()
pull_free_image_cbCapture backends call this callback to get empty image from the pool. If backend uses multiple threads, calls to this callback must be synchronized. Calls to this callback and push_captured_image_cb must be synchronized as well.
cursorA pointer to the flag that indicates whether the cursor should be captured as well.
Return values
capture_e::okWhen stopping
capture_e::errorOn error
capture_e::reinitWhen need of reinitialization

Implements platf::display_t.

◆ dummy_img()

int platf::av_display_t::dummy_img ( 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.

◆ make_avcodec_encode_device()

std::unique_ptr< avcodec_encode_device_t > platf::av_display_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.

◆ setPixelFormat()

static void platf::av_display_t::setPixelFormat ( void * display,
OSType pixelFormat )
inlinestatic

Set pixel format.

Parameters
displayDisplay object or identifier associated with the operation.
pixelFormatPixel format.

◆ setResolution()

static void platf::av_display_t::setResolution ( void * display,
int width,
int height )
inlinestatic

A bridge from the pure C++ code of the hwdevice_t class to the pure Objective C code.

display --> an opaque pointer to an object of this class width --> the intended capture width height --> the intended capture height

Parameters
displayDisplay object or identifier associated with the operation.
widthFrame or display width in pixels.
heightFrame or display height in pixels.

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