video#

Include dependency graph for video.h:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "23" [label="atomic" tooltip="atomic"]
    "18" [label="src/stat_trackers.h" tooltip="src/stat_trackers.h"]
    "3" [label="functional" tooltip="functional"]
    "19" [label="limits" tooltip="limits"]
    "17" [label="boost/log/sinks.hpp" tooltip="boost/log/sinks.hpp"]
    "6" [label="filesystem" tooltip="filesystem"]
    "31" [label="variant" tooltip="variant"]
    "20" [label="boost/format.hpp" tooltip="boost/format.hpp"]
    "8" [label="string" tooltip="string"]
    "25" [label="map" tooltip="map"]
    "26" [label="utility.h" tooltip="utility.h"]
    "1" [label="src/video.h" tooltip="src/video.h" fillcolor="#BFBFBF"]
    "9" [label="src/config.h" tooltip="src/config.h"]
    "4" [label="platform/common.h" tooltip="platform/common.h"]
    "29" [label="string_view" tooltip="string_view"]
    "24" [label="condition_variable" tooltip="condition_variable"]
    "32" [label="src/video_colorspace.h" tooltip="src/video_colorspace.h"]
    "14" [label="nvenc/nvenc_config.h" tooltip="nvenc/nvenc_config.h"]
    "5" [label="bitset" tooltip="bitset"]
    "33" [label="libavutil/pixfmt.h" tooltip="libavutil/pixfmt.h"]
    "11" [label="optional" tooltip="optional"]
    "2" [label="input.h" tooltip="input.h"]
    "36" [label="libswscale/swscale.h" tooltip="libswscale/swscale.h"]
    "13" [label="vector" tooltip="vector"]
    "22" [label="array" tooltip="array"]
    "35" [label="libavcodec/avcodec.h" tooltip="libavcodec/avcodec.h"]
    "15" [label="src/logging.h" tooltip="src/logging.h"]
    "12" [label="unordered_map" tooltip="unordered_map"]
    "7" [label="mutex" tooltip="mutex"]
    "10" [label="chrono" tooltip="chrono"]
    "30" [label="type_traits" tooltip="type_traits"]
    "34" [label="moonlight-common-c/src/Limelight.h" tooltip="moonlight-common-c/src/Limelight.h"]
    "16" [label="boost/log/common.hpp" tooltip="boost/log/common.hpp"]
    "27" [label="algorithm" tooltip="algorithm"]
    "28" [label="memory" tooltip="memory"]
    "21" [label="src/thread_safe.h" tooltip="src/thread_safe.h"]
    "18" -> "10" [dir=forward tooltip="include"]
    "18" -> "3" [dir=forward tooltip="include"]
    "18" -> "19" [dir=forward tooltip="include"]
    "18" -> "20" [dir=forward tooltip="include"]
    "26" -> "27" [dir=forward tooltip="include"]
    "26" -> "24" [dir=forward tooltip="include"]
    "26" -> "28" [dir=forward tooltip="include"]
    "26" -> "7" [dir=forward tooltip="include"]
    "26" -> "11" [dir=forward tooltip="include"]
    "26" -> "8" [dir=forward tooltip="include"]
    "26" -> "29" [dir=forward tooltip="include"]
    "26" -> "30" [dir=forward tooltip="include"]
    "26" -> "31" [dir=forward tooltip="include"]
    "26" -> "13" [dir=forward tooltip="include"]
    "1" -> "2" [dir=forward tooltip="include"]
    "1" -> "4" [dir=forward tooltip="include"]
    "1" -> "21" [dir=forward tooltip="include"]
    "1" -> "32" [dir=forward tooltip="include"]
    "1" -> "35" [dir=forward tooltip="include"]
    "1" -> "36" [dir=forward tooltip="include"]
    "9" -> "5" [dir=forward tooltip="include"]
    "9" -> "10" [dir=forward tooltip="include"]
    "9" -> "11" [dir=forward tooltip="include"]
    "9" -> "8" [dir=forward tooltip="include"]
    "9" -> "12" [dir=forward tooltip="include"]
    "9" -> "13" [dir=forward tooltip="include"]
    "9" -> "14" [dir=forward tooltip="include"]
    "4" -> "5" [dir=forward tooltip="include"]
    "4" -> "6" [dir=forward tooltip="include"]
    "4" -> "3" [dir=forward tooltip="include"]
    "4" -> "7" [dir=forward tooltip="include"]
    "4" -> "8" [dir=forward tooltip="include"]
    "4" -> "9" [dir=forward tooltip="include"]
    "4" -> "15" [dir=forward tooltip="include"]
    "4" -> "18" [dir=forward tooltip="include"]
    "4" -> "21" [dir=forward tooltip="include"]
    "4" -> "26" [dir=forward tooltip="include"]
    "4" -> "32" [dir=forward tooltip="include"]
    "4" -> "34" [dir=forward tooltip="include"]
    "32" -> "33" [dir=forward tooltip="include"]
    "2" -> "3" [dir=forward tooltip="include"]
    "2" -> "4" [dir=forward tooltip="include"]
    "2" -> "21" [dir=forward tooltip="include"]
    "15" -> "16" [dir=forward tooltip="include"]
    "15" -> "17" [dir=forward tooltip="include"]
    "21" -> "22" [dir=forward tooltip="include"]
    "21" -> "23" [dir=forward tooltip="include"]
    "21" -> "24" [dir=forward tooltip="include"]
    "21" -> "3" [dir=forward tooltip="include"]
    "21" -> "25" [dir=forward tooltip="include"]
    "21" -> "7" [dir=forward tooltip="include"]
    "21" -> "13" [dir=forward tooltip="include"]
    "21" -> "26" [dir=forward tooltip="include"]
}

This graph shows which files directly or indirectly include video.h:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "18" [label="src/stream.cpp" tooltip="src/stream.cpp"]
    "8" [label="src/platform/linux/vaapi.cpp" tooltip="src/platform/linux/vaapi.cpp"]
    "3" [label="src/nvenc/nvenc_base.h" tooltip="src/nvenc/nvenc_base.h"]
    "7" [label="src/platform/linux/kmsgrab.cpp" tooltip="src/platform/linux/kmsgrab.cpp"]
    "13" [label="src/platform/windows/display.h" tooltip="src/platform/windows/display.h"]
    "19" [label="src/upnp.cpp" tooltip="src/upnp.cpp"]
    "1" [label="src/video.h" tooltip="src/video.h" fillcolor="#BFBFBF"]
    "16" [label="src/platform/windows/display_vram.cpp" tooltip="src/platform/windows/display_vram.cpp"]
    "10" [label="src/platform/linux/x11grab.cpp" tooltip="src/platform/linux/x11grab.cpp"]
    "15" [label="src/platform/windows/display_base.cpp" tooltip="src/platform/windows/display_base.cpp"]
    "14" [label="src/platform/windows/display_ram.cpp" tooltip="src/platform/windows/display_ram.cpp"]
    "6" [label="src/platform/linux/cuda.cpp" tooltip="src/platform/linux/cuda.cpp"]
    "2" [label="src/main.cpp" tooltip="src/main.cpp"]
    "17" [label="src/stream.h" tooltip="src/stream.h"]
    "4" [label="src/video.cpp" tooltip="src/video.cpp"]
    "12" [label="src/platform/macos/nv12_zero_device.cpp" tooltip="src/platform/macos/nv12_zero_device.cpp"]
    "5" [label="src/platform/linux/graphics.cpp" tooltip="src/platform/linux/graphics.cpp"]
    "9" [label="src/platform/linux/wlgrab.cpp" tooltip="src/platform/linux/wlgrab.cpp"]
    "11" [label="src/platform/macos/display.mm" tooltip="src/platform/macos/display.mm"]
    "3" -> "4" [dir=back tooltip="include"]
    "13" -> "14" [dir=back tooltip="include"]
    "13" -> "15" [dir=back tooltip="include"]
    "13" -> "16" [dir=back tooltip="include"]
    "1" -> "2" [dir=back tooltip="include"]
    "1" -> "3" [dir=back tooltip="include"]
    "1" -> "5" [dir=back tooltip="include"]
    "1" -> "6" [dir=back tooltip="include"]
    "1" -> "7" [dir=back tooltip="include"]
    "1" -> "8" [dir=back tooltip="include"]
    "1" -> "9" [dir=back tooltip="include"]
    "1" -> "10" [dir=back tooltip="include"]
    "1" -> "11" [dir=back tooltip="include"]
    "1" -> "12" [dir=back tooltip="include"]
    "1" -> "13" [dir=back tooltip="include"]
    "1" -> "15" [dir=back tooltip="include"]
    "1" -> "16" [dir=back tooltip="include"]
    "1" -> "17" [dir=back tooltip="include"]
    "1" -> "4" [dir=back tooltip="include"]
    "17" -> "18" [dir=back tooltip="include"]
    "17" -> "19" [dir=back tooltip="include"]
}

todo

Defines

_CONVERT(x)#
namespace video#

Typedefs

using avcodec_buffer_t = util::safe_ptr<AVBufferRef, free_buffer>#
using avcodec_ctx_t = util::safe_ptr<AVCodecContext, free_ctx>#
using avcodec_frame_t = util::safe_ptr<AVFrame, free_frame>#
using hdr_info_t = std::unique_ptr<hdr_info_raw_t>#
using img_event_t = std::shared_ptr<safe::event_t<std::shared_ptr<platf::img_t>>>#
using packet_t = std::unique_ptr<packet_raw_t>#
using sws_t = util::safe_ptr<SwsContext, sws_freeContext>#
struct config_t#

Public Members

int bitrate#
int dynamicRange#
int encoderCscMode#
int framerate#
int height#
int numRefFrames#
int slicesPerFrame#
int videoFormat#
int width#
struct encode_session_t#

Inheritence diagram for video::encode_session_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "3" [label="video::nvenc_encode_session_t" tooltip="video::nvenc_encode_session_t"]
    "1" [label="video::encode_session_t" tooltip="video::encode_session_t" fillcolor="#BFBFBF"]
    "2" [label="video::avcodec_encode_session_t" tooltip="video::avcodec_encode_session_t"]
    "3" -> "1" [dir=forward tooltip="public-inheritance"]
    "2" -> "1" [dir=forward tooltip="public-inheritance"]
}

Subclassed by video::avcodec_encode_session_t, video::nvenc_encode_session_t

Public Functions

virtual int convert(platf::img_t &img) = 0#
virtual void invalidate_ref_frames(int64_t first_frame, int64_t last_frame) = 0#
virtual void request_idr_frame() = 0#
virtual void request_normal_frame() = 0#
virtual ~encode_session_t() = default#
struct encoder_platform_formats_avcodec : public video::encoder_platform_formats_t#

Inheritence diagram for video::encoder_platform_formats_avcodec:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="video::encoder_platform_formats_avcodec" tooltip="video::encoder_platform_formats_avcodec" fillcolor="#BFBFBF"]
    "2" [label="video::encoder_platform_formats_t" tooltip="video::encoder_platform_formats_t"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for video::encoder_platform_formats_avcodec:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="video::encoder_platform_formats_avcodec" tooltip="video::encoder_platform_formats_avcodec" fillcolor="#BFBFBF"]
    "2" [label="video::encoder_platform_formats_t" tooltip="video::encoder_platform_formats_t"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Public Types

using init_buffer_function_t = std::function<util::Either<avcodec_buffer_t, int>(platf::avcodec_encode_device_t*)>#

Public Functions

inline encoder_platform_formats_avcodec(const AVHWDeviceType &avcodec_base_dev_type, const AVHWDeviceType &avcodec_derived_dev_type, const AVPixelFormat &avcodec_dev_pix_fmt, const AVPixelFormat &avcodec_pix_fmt_8bit, const AVPixelFormat &avcodec_pix_fmt_10bit, const init_buffer_function_t &init_avcodec_hardware_input_buffer_function)#

Public Members

AVHWDeviceType avcodec_base_dev_type#
AVHWDeviceType avcodec_derived_dev_type#
AVPixelFormat avcodec_dev_pix_fmt#
AVPixelFormat avcodec_pix_fmt_10bit#
AVPixelFormat avcodec_pix_fmt_8bit#
init_buffer_function_t init_avcodec_hardware_input_buffer#
struct encoder_platform_formats_nvenc : public video::encoder_platform_formats_t#

Inheritence diagram for video::encoder_platform_formats_nvenc:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "2" [label="video::encoder_platform_formats_t" tooltip="video::encoder_platform_formats_t"]
    "1" [label="video::encoder_platform_formats_nvenc" tooltip="video::encoder_platform_formats_nvenc" fillcolor="#BFBFBF"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for video::encoder_platform_formats_nvenc:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "2" [label="video::encoder_platform_formats_t" tooltip="video::encoder_platform_formats_t"]
    "1" [label="video::encoder_platform_formats_nvenc" tooltip="video::encoder_platform_formats_nvenc" fillcolor="#BFBFBF"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Public Functions

inline encoder_platform_formats_nvenc(const platf::mem_type_e &dev_type, const platf::pix_fmt_e &pix_fmt_8bit, const platf::pix_fmt_e &pix_fmt_10bit)#
struct encoder_platform_formats_t#

Inheritence diagram for video::encoder_platform_formats_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "2" [label="video::encoder_platform_formats_avcodec" tooltip="video::encoder_platform_formats_avcodec"]
    "1" [label="video::encoder_platform_formats_t" tooltip="video::encoder_platform_formats_t" fillcolor="#BFBFBF"]
    "3" [label="video::encoder_platform_formats_nvenc" tooltip="video::encoder_platform_formats_nvenc"]
    "2" -> "1" [dir=forward tooltip="public-inheritance"]
    "3" -> "1" [dir=forward tooltip="public-inheritance"]
}

Subclassed by video::encoder_platform_formats_avcodec, video::encoder_platform_formats_nvenc

Public Functions

virtual ~encoder_platform_formats_t() = default#

Public Members

platf::mem_type_e dev_type#
platf::pix_fmt_e pix_fmt_10bit#
platf::pix_fmt_e pix_fmt_8bit#
struct encoder_t#

Collaboration diagram for video::encoder_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "2" [label="video::encoder_t::codec_t" tooltip="video::encoder_t::codec_t"]
    "1" [label="video::encoder_t" tooltip="video::encoder_t" fillcolor="#BFBFBF"]
    "1" -> "2" [dir=forward tooltip="usage"]
}

Public Types

enum flag_e#

Values:

enumerator PASSED#
enumerator REF_FRAMES_RESTRICT#
enumerator CBR#
enumerator DYNAMIC_RANGE#
enumerator VUI_PARAMETERS#
enumerator MAX_FLAGS#

Public Members

struct video::encoder_t::codec_t av1#
uint32_t flags#
struct video::encoder_t::codec_t h264#
struct video::encoder_t::codec_t hevc#
std::string_view name#
const std::unique_ptr<const encoder_platform_formats_t> platform_formats#

Public Static Functions

static inline std::string_view from_flag(flag_e flag)#
struct codec_t#

Public Functions

inline std::bitset<MAX_FLAGS>::reference operator[](flag_e flag)#
inline bool operator[](flag_e flag) const#

Public Members

std::bitset<MAX_FLAGS> capabilities#
std::vector<option_t> common_options#
std::vector<option_t> fallback_options#
std::vector<option_t> hdr_options#
std::string name#
std::optional<option_t> qp#
std::vector<option_t> sdr_options#
struct option_t#

Public Functions

option_t &operator=(option_t&&) noexcept = default#
option_t(const option_t&) = default#
option_t(option_t&&) noexcept = default#
inline option_t(std::string &&name, decltype(value) &&value)#

Public Members

std::string name#
std::variant<int, int*, std::optional<int>*, std::function<int()>, std::string, std::string*> value#
struct hdr_info_raw_t#

Public Functions

inline explicit hdr_info_raw_t(bool enabled)#
inline explicit hdr_info_raw_t(bool enabled, const SS_HDR_METADATA &metadata)#

Public Members

bool enabled#
SS_HDR_METADATA metadata#
struct packet_raw_avcodec : public video::packet_raw_t#

Inheritence diagram for video::packet_raw_avcodec:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="video::packet_raw_avcodec" tooltip="video::packet_raw_avcodec" fillcolor="#BFBFBF"]
    "2" [label="video::packet_raw_t" tooltip="video::packet_raw_t"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for video::packet_raw_avcodec:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="video::packet_raw_avcodec" tooltip="video::packet_raw_avcodec" fillcolor="#BFBFBF"]
    "2" [label="video::packet_raw_t" tooltip="video::packet_raw_t"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Public Functions

inline virtual uint8_t *data() override#
inline virtual size_t data_size() override#
inline virtual int64_t frame_index() override#
inline virtual bool is_idr() override#
inline packet_raw_avcodec()#
inline ~packet_raw_avcodec()#

Public Members

AVPacket *av_packet#
struct packet_raw_generic : public video::packet_raw_t#

Inheritence diagram for video::packet_raw_generic:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="video::packet_raw_generic" tooltip="video::packet_raw_generic" fillcolor="#BFBFBF"]
    "2" [label="video::packet_raw_t" tooltip="video::packet_raw_t"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Collaboration diagram for video::packet_raw_generic:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "1" [label="video::packet_raw_generic" tooltip="video::packet_raw_generic" fillcolor="#BFBFBF"]
    "2" [label="video::packet_raw_t" tooltip="video::packet_raw_t"]
    "1" -> "2" [dir=forward tooltip="public-inheritance"]
}

Public Functions

inline virtual uint8_t *data() override#
inline virtual size_t data_size() override#
inline virtual int64_t frame_index() override#
inline virtual bool is_idr() override#
inline packet_raw_generic(std::vector<uint8_t> &&frame_data, int64_t frame_index, bool idr)#

Public Members

std::vector<uint8_t> frame_data#
bool idr#
int64_t index#
struct packet_raw_t#

Inheritence diagram for video::packet_raw_t:

digraph {
    graph [bgcolor="#00000000"]
    node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
    edge [color="#1414CE"]
    "3" [label="video::packet_raw_generic" tooltip="video::packet_raw_generic"]
    "2" [label="video::packet_raw_avcodec" tooltip="video::packet_raw_avcodec"]
    "1" [label="video::packet_raw_t" tooltip="video::packet_raw_t" fillcolor="#BFBFBF"]
    "3" -> "1" [dir=forward tooltip="public-inheritance"]
    "2" -> "1" [dir=forward tooltip="public-inheritance"]
}

Subclassed by video::packet_raw_avcodec, video::packet_raw_generic

Public Functions

virtual uint8_t *data() = 0#
virtual size_t data_size() = 0#
virtual int64_t frame_index() = 0#
virtual bool is_idr() = 0#
virtual ~packet_raw_t() = default#

Public Members

bool after_ref_frame_invalidation = false#
void *channel_data = nullptr#
std::optional<std::chrono::steady_clock::time_point> frame_timestamp#
std::vector<replace_t> *replacements = nullptr#
struct replace_t#

Public Functions

replace_t &operator=(replace_t&&) noexcept = default#
replace_t(replace_t&&) noexcept = default#
inline replace_t(std::string_view old, std::string_view _new) noexcept#

Public Members

std::string_view _new#
std::string_view old#