// // Created by loki on 6/9/19. // #ifndef SUNSHINE_VIDEO_H #define SUNSHINE_VIDEO_H #include "thread_safe.h" #include "platform/common.h" extern "C" { #include } struct AVPacket; namespace video { void free_packet(AVPacket *packet); struct packet_raw_t : public AVPacket { template explicit packet_raw_t(P *user_data) : channel_data { user_data } { av_init_packet(this); } explicit packet_raw_t(std::nullptr_t null) : channel_data { nullptr } { av_init_packet(this); } ~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; }; void capture( safe::signal_t *shutdown_event, packet_queue_t packets, idr_event_t idr_events, config_t config, void *channel_data); } #endif //SUNSHINE_VIDEO_H