52 lines
1 KiB
C++
52 lines
1 KiB
C++
|
#include "stdafx.h"
|
||
|
#include "GifRecorder.h"
|
||
|
#include "gif.h"
|
||
|
|
||
|
GifRecorder::GifRecorder()
|
||
|
{
|
||
|
_gif.reset(new GifWriter());
|
||
|
}
|
||
|
|
||
|
GifRecorder::~GifRecorder()
|
||
|
{
|
||
|
StopRecording();
|
||
|
}
|
||
|
|
||
|
bool GifRecorder::StartRecording(string filename, uint32_t width, uint32_t height, uint32_t bpp, uint32_t audioSampleRate, double fps)
|
||
|
{
|
||
|
_outputFile = filename;
|
||
|
_recording = GifBegin(_gif.get(), filename.c_str(), width, height, 2, 8, false);
|
||
|
_frameCounter = 0;
|
||
|
return _recording;
|
||
|
}
|
||
|
|
||
|
void GifRecorder::StopRecording()
|
||
|
{
|
||
|
if(_recording) {
|
||
|
GifEnd(_gif.get());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GifRecorder::AddFrame(void* frameBuffer, uint32_t width, uint32_t height, double fps)
|
||
|
{
|
||
|
_frameCounter++;
|
||
|
|
||
|
if(fps < 55 || (_frameCounter % 6) != 0) {
|
||
|
//At 60 FPS, skip 1 of every 6 frames (max FPS for GIFs is 50fps)
|
||
|
GifWriteFrame(_gif.get(), (uint8_t*)frameBuffer, width, height, 2, 8, false);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void GifRecorder::AddSound(int16_t* soundBuffer, uint32_t sampleCount, uint32_t sampleRate)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
bool GifRecorder::IsRecording()
|
||
|
{
|
||
|
return _recording;
|
||
|
}
|
||
|
|
||
|
string GifRecorder::GetOutputFile()
|
||
|
{
|
||
|
return _outputFile;
|
||
|
}
|