2018-07-18 03:00:16 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <Limelight.h>
|
|
|
|
#include <SDL.h>
|
|
|
|
#include "settings/streamingpreferences.h"
|
|
|
|
|
|
|
|
#define SDL_CODE_FRAME_READY 0
|
|
|
|
|
|
|
|
#define MAX_SLICES 4
|
|
|
|
|
2018-09-25 07:47:59 +00:00
|
|
|
typedef struct _VIDEO_STATS {
|
|
|
|
uint32_t receivedFrames;
|
|
|
|
uint32_t decodedFrames;
|
|
|
|
uint32_t renderedFrames;
|
|
|
|
uint32_t networkDroppedFrames;
|
|
|
|
uint32_t pacerDroppedFrames;
|
|
|
|
uint32_t totalReassemblyTime;
|
|
|
|
uint32_t totalDecodeTime;
|
2018-12-25 20:09:45 +00:00
|
|
|
uint32_t totalPacerTime;
|
2018-09-25 07:47:59 +00:00
|
|
|
uint32_t totalRenderTime;
|
|
|
|
float receivedFps;
|
|
|
|
float decodedFps;
|
|
|
|
float renderedFps;
|
|
|
|
uint32_t measurementStartTimestamp;
|
|
|
|
} VIDEO_STATS, *PVIDEO_STATS;
|
|
|
|
|
2018-07-18 03:00:16 +00:00
|
|
|
class IVideoDecoder {
|
|
|
|
public:
|
|
|
|
virtual ~IVideoDecoder() {}
|
|
|
|
virtual bool initialize(StreamingPreferences::VideoDecoderSelection vds,
|
|
|
|
SDL_Window* window,
|
|
|
|
int videoFormat,
|
|
|
|
int width,
|
|
|
|
int height,
|
2018-08-21 01:19:42 +00:00
|
|
|
int frameRate,
|
2018-12-25 20:57:00 +00:00
|
|
|
bool enableVsync,
|
|
|
|
bool enableFramePacing) = 0;
|
2018-07-18 03:00:16 +00:00
|
|
|
virtual bool isHardwareAccelerated() = 0;
|
2018-08-25 19:38:04 +00:00
|
|
|
virtual int getDecoderCapabilities() = 0;
|
2018-07-18 03:00:16 +00:00
|
|
|
virtual int submitDecodeUnit(PDECODE_UNIT du) = 0;
|
|
|
|
virtual void renderFrame(SDL_UserEvent* event) = 0;
|
|
|
|
virtual void dropFrame(SDL_UserEvent* event) = 0;
|
|
|
|
|
|
|
|
virtual void queueFrame(void* data1 = nullptr,
|
|
|
|
void* data2 = nullptr)
|
|
|
|
{
|
|
|
|
SDL_Event event;
|
|
|
|
|
|
|
|
event.type = SDL_USEREVENT;
|
|
|
|
event.user.code = SDL_CODE_FRAME_READY;
|
|
|
|
event.user.data1 = data1;
|
|
|
|
event.user.data2 = data2;
|
|
|
|
|
|
|
|
SDL_PushEvent(&event);
|
|
|
|
}
|
|
|
|
};
|