// // Created by loki on 6/9/19. // #ifndef SUNSHINE_VIDEO_H #define SUNSHINE_VIDEO_H #include "input.h" #include "platform/common.h" #include "thread_safe.h" extern "C" { #include } struct AVPacket; namespace video { struct packet_raw_t : public AVPacket { void init_packet() { pts = AV_NOPTS_VALUE; dts = AV_NOPTS_VALUE; pos = -1; duration = 0; flags = 0; stream_index = 0; buf = nullptr; side_data = nullptr; side_data_elems = 0; } template explicit packet_raw_t(P *user_data) : channel_data { user_data } { init_packet(); } explicit packet_raw_t(std::nullptr_t) : channel_data { nullptr } { init_packet(); } ~packet_raw_t() { av_packet_unref(this); } void *channel_data; }; using packet_t = std::unique_ptr; using packet_queue_t = std::shared_ptr>; using idr_event_t = std::shared_ptr>>; using img_event_t = std::shared_ptr>>; 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]; void capture( safe::signal_t *shutdown_event, packet_queue_t packets, idr_event_t idr_events, config_t config, void *channel_data); int init(); } // namespace video #endif //SUNSHINE_VIDEO_H