Sunshine/sunshine/video.h

62 lines
1.2 KiB
C
Raw Normal View History

//
// Created by loki on 6/9/19.
//
#ifndef SUNSHINE_VIDEO_H
#define SUNSHINE_VIDEO_H
2019-12-11 18:06:52 +00:00
#include "thread_safe.h"
2020-02-08 15:26:38 +00:00
#include "platform/common.h"
extern "C" {
#include <libavcodec/avcodec.h>
}
struct AVPacket;
namespace video {
void free_packet(AVPacket *packet);
2020-02-08 15:26:38 +00:00
struct packet_raw_t : public AVPacket {
template<class P>
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<packet_raw_t>;
using packet_queue_t = std::shared_ptr<safe::queue_t<packet_t>>;
2019-12-11 18:06:52 +00:00
using idr_event_t = std::shared_ptr<safe::event_t<std::pair<int64_t, int64_t>>>;
2020-02-08 15:26:38 +00:00
using img_event_t = std::shared_ptr<safe::event_t<std::shared_ptr<platf::img_t>>>;
struct config_t {
int width;
int height;
int framerate;
int bitrate;
int slicesPerFrame;
int numRefFrames;
int encoderCscMode;
int videoFormat;
int dynamicRange;
};
2020-02-08 15:26:38 +00:00
void capture(
2020-02-09 23:33:12 +00:00
safe::signal_t *shutdown_event,
2020-02-08 15:26:38 +00:00
packet_queue_t packets,
idr_event_t idr_events,
config_t config,
void *channel_data);
}
#endif //SUNSHINE_VIDEO_H