|
Sunshine master
Self-hosted game stream host for Moonlight.
|
Abstract display capture backend used by the streaming pipeline. More...
#include <src/platform/common.h>
Public Types | |
| 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. | |
Public Member Functions | |
| virtual std::shared_ptr< img_t > | alloc_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 | 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< avcodec_encode_device_t > | make_avcodec_encode_device (pix_fmt_e pix_fmt) |
| Create AVCodec encode device. | |
| virtual std::unique_ptr< nvenc_encode_device_t > | make_nvenc_encode_device (pix_fmt_e pix_fmt) |
| Create NVENC encode device. | |
Protected Attributes | |
| logging::time_delta_periodic_logger | sleep_overshoot_logger = {debug, "Frame capture sleep overshoot"} |
| Periodic logger for capture sleep overshoot measurements. | |
Abstract display capture backend used by the streaming pipeline.
| using platf::display_t::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.
| true | On success, img_out contains free image |
| false | When capture has been interrupted, img_out contains nullptr |
| using platf::display_t::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.
| true | On success |
| false | On break request |
|
pure virtual |
Allocate an image buffer compatible with this display backend.
Implemented in cuda::nvfbc::display_t, pipewire::pipewire_display_t, platf::av_display_t, platf::dxgi::display_ram_t, platf::dxgi::display_vram_t, platf::kms::display_ram_t, platf::kms::display_vram_t, platf::shm_attr_t, platf::x11_attr_t, wl::wlr_ram_t, and wl::wlr_vram_t.
|
pure virtual |
Capture a frame.
| push_captured_image_cb | The callback that is called with captured image, must be called from the same thread as capture() |
| pull_free_image_cb | Capture 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. |
| cursor | A pointer to the flag that indicates whether the cursor should be captured as well. |
| capture_e::ok | When stopping |
| capture_e::error | On error |
| capture_e::reinit | When need of reinitialization |
Implemented in cuda::nvfbc::display_t, pipewire::pipewire_display_t, platf::av_display_t, platf::dxgi::display_base_t, platf::kms::display_ram_t, platf::kms::display_vram_t, platf::shm_attr_t, platf::x11_attr_t, wl::wlr_ram_t, and wl::wlr_vram_t.
|
pure virtual |
Populate a fallback image when real capture data is unavailable.
| img | Image or frame object to read from or populate. |
Implemented in cuda::nvfbc::display_t, pipewire::pipewire_display_t, platf::av_display_t, platf::dxgi::display_ram_t, platf::dxgi::display_vram_t, platf::kms::display_ram_t, platf::kms::display_vram_t, platf::shm_attr_t, platf::x11_attr_t, wl::wlr_t, and wl::wlr_vram_t.
|
inlinevirtual |
Read HDR metadata for the active display mode.
| metadata | Output structure populated with HDR metadata. |
metadata. Reimplemented in pipewire::pipewire_display_t, platf::dxgi::display_base_t, and platf::kms::display_t.
|
inlinevirtual |
Check that a given codec is supported by the display device.
| name | The FFmpeg codec name (or similar for non-FFmpeg codecs). |
| config | The codec configuration. |
true if supported, false otherwise. Reimplemented in platf::dxgi::display_vram_t.
|
inlinevirtual |
Report whether the active display mode is HDR.
Reimplemented in pipewire::pipewire_display_t, platf::dxgi::display_base_t, and platf::kms::display_t.
|
inlinevirtual |
Create AVCodec encode device.
| pix_fmt | Sunshine pixel format to convert or allocate for. |
Reimplemented in cuda::nvfbc::display_t, pipewire::pipewire_display_t, platf::av_display_t, platf::dxgi::display_ram_t, platf::dxgi::display_vram_t, platf::kms::display_ram_t, platf::kms::display_vram_t, platf::x11_attr_t, wl::wlr_ram_t, and wl::wlr_vram_t.
|
inlinevirtual |
Create NVENC encode device.
| pix_fmt | Sunshine pixel format to convert or allocate for. |
Reimplemented in platf::dxgi::display_vram_t.