mirror of
https://github.com/LizardByte/Sunshine.git
synced 2024-11-18 11:10:04 +00:00
2b450839a1
This commit introduces initial support for MacOS as third major host platform. It relies on the VideoToolbox framework for audio and video processing, which enables hardware accelerated processing of the stream on most platforms. Audio capturing requires third party tools as MacOS does not offer the recording of the audio output like the other platforms do. The commit enables most features offered by Sunshine for MacOS with the big exception of gamepad support. The patch sets was tested by a few volunteers, which allowed to remove some of the early bugs. However, several bugs especially regarding corner cases have probably not surfaced yet. Besides instructions how to build from source, the commit also adds a Portfile that allows a more easy installation. After available on the release branch, a pull request for the Portfile in the MacPorts project is planned. Signed-off-by: Anselm Busse <anselm.busse@outlook.com>
30 lines
989 B
C++
30 lines
989 B
C++
#ifndef vtdevice_h
|
|
#define vtdevice_h
|
|
|
|
#include "sunshine/platform/common.h"
|
|
|
|
namespace platf {
|
|
|
|
class nv12_zero_device : public hwdevice_t {
|
|
// display holds a pointer to an av_video object. Since the namespaces of AVFoundation
|
|
// and FFMPEG collide, we need this opaque pointer and cannot use the definition
|
|
void *display;
|
|
|
|
public:
|
|
// this function is used to set the resolution on an av_video object that we cannot
|
|
// call directly because of namespace collisions between AVFoundation and FFMPEG
|
|
using resolution_fn_t = std::function<void(void *display, int width, int height)>;
|
|
resolution_fn_t resolution_fn;
|
|
using pixel_format_fn_t = std::function<void(void *display, int pixelFormat)>;
|
|
|
|
int init(void *display, resolution_fn_t resolution_fn, pixel_format_fn_t pixel_format_fn);
|
|
|
|
int convert(img_t &img);
|
|
int set_frame(AVFrame *frame);
|
|
void set_colorspace(std::uint32_t colorspace, std::uint32_t color_range);
|
|
};
|
|
|
|
} // namespace platf
|
|
|
|
#endif /* vtdevice_h */
|