Sunshine/sunshine/video.h

88 lines
1.5 KiB
C
Raw Normal View History

//
// Created by loki on 6/9/19.
//
#ifndef SUNSHINE_VIDEO_H
#define SUNSHINE_VIDEO_H
#include "input.h"
2020-02-08 15:26:38 +00:00
#include "platform/common.h"
2021-05-17 19:21:57 +00:00
#include "thread_safe.h"
2020-02-08 15:26:38 +00:00
extern "C" {
#include <libavcodec/avcodec.h>
}
struct AVPacket;
namespace video {
struct packet_raw_t {
void init_packet() {
this->av_packet = av_packet_alloc();
}
2020-02-08 15:26:38 +00:00
template<class P>
explicit packet_raw_t(P *user_data) : channel_data { user_data } {
init_packet();
2020-02-08 15:26:38 +00:00
}
explicit packet_raw_t(std::nullptr_t) : channel_data { nullptr } {
init_packet();
2020-02-08 15:26:38 +00:00
}
~packet_raw_t() {
av_packet_unref(this->av_packet);
2020-02-08 15:26:38 +00:00
}
struct replace_t {
std::string_view old;
std::string_view _new;
2021-07-18 09:05:34 +00:00
KITTY_DEFAULT_CONSTR_MOVE(replace_t)
replace_t(std::string_view old, std::string_view _new) noexcept : old { std::move(old) }, _new { std::move(_new) } {}
};
AVPacket *av_packet;
std::vector<replace_t> *replacements;
2020-02-08 15:26:38 +00:00
void *channel_data;
};
using packet_t = std::unique_ptr<packet_raw_t>;
struct config_t {
int width;
int height;
int framerate;
int bitrate;
int slicesPerFrame;
int numRefFrames;
int encoderCscMode;
int videoFormat;
int dynamicRange;
};
using float4 = float[4];
using float3 = float[3];
using float2 = float[2];
struct __attribute__((__aligned__(16))) color_t {
float4 color_vec_y;
float4 color_vec_u;
float4 color_vec_v;
float2 range_y;
float2 range_uv;
};
extern color_t colors[4];
2020-02-08 15:26:38 +00:00
void capture(
safe::mail_t mail,
2020-02-08 15:26:38 +00:00
config_t config,
void *channel_data);
2020-04-13 21:15:24 +00:00
int init();
2021-05-17 19:21:57 +00:00
} // namespace video
#endif //SUNSHINE_VIDEO_H