From 2da8c63ec2be3b5816a5f5741c9737789afeb653 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Sat, 4 Mar 2017 12:54:39 -0800 Subject: [PATCH] DS Core: Add video recording --- include/mgba/internal/ds/ds.h | 1 + src/ds/core.c | 5 +++++ src/ds/ds.c | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/include/mgba/internal/ds/ds.h b/include/mgba/internal/ds/ds.h index 520622f56..88edf8275 100644 --- a/include/mgba/internal/ds/ds.h +++ b/include/mgba/internal/ds/ds.h @@ -111,6 +111,7 @@ struct DS { struct VFile* bios9Vf; struct VFile* firmwareVf; + struct mAVStream* stream; struct mKeyCallback* keyCallback; struct mCoreCallbacks* coreCallbacks; diff --git a/src/ds/core.c b/src/ds/core.c index d027527bf..26d97448e 100644 --- a/src/ds/core.c +++ b/src/ds/core.c @@ -162,6 +162,11 @@ static void _DSCoreSetCoreCallbacks(struct mCore* core, struct mCoreCallbacks* c } static void _DSCoreSetAVStream(struct mCore* core, struct mAVStream* stream) { + struct DS* ds = core->board; + ds->stream = stream; + if (stream && stream->videoDimensionsChanged) { + stream->videoDimensionsChanged(stream, DS_VIDEO_HORIZONTAL_PIXELS, DS_VIDEO_VERTICAL_PIXELS * 2); + } } static bool _DSCoreLoadROM(struct mCore* core, struct VFile* vf) { diff --git a/src/ds/ds.c b/src/ds/ds.c index 0813a51ca..2887d85b5 100644 --- a/src/ds/ds.c +++ b/src/ds/ds.c @@ -835,4 +835,11 @@ void DSFrameEnded(struct DS* ds) { if (callbacks && callbacks->videoFrameEnded) { callbacks->videoFrameEnded(callbacks->context); } + + if (ds->stream && ds->stream->postVideoFrame) { + const color_t* pixels; + size_t stride; + ds->video.renderer->getPixels(ds->video.renderer, &stride, (const void**) &pixels); + ds->stream->postVideoFrame(ds->stream, pixels, stride); + } }