From 8e1549820b3ae47969c15cb0b61f6d171cca421e Mon Sep 17 00:00:00 2001 From: jp9000 Date: Wed, 31 Dec 2014 00:29:51 -0800 Subject: [PATCH] libobs/media-io: Add frame copying function --- libobs/media-io/video-frame.c | 28 ++++++++++++++++++++++++++++ libobs/media-io/video-frame.h | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/libobs/media-io/video-frame.c b/libobs/media-io/video-frame.c index 3a828609f..81f95234a 100644 --- a/libobs/media-io/video-frame.c +++ b/libobs/media-io/video-frame.c @@ -86,3 +86,31 @@ void video_frame_init(struct video_frame *frame, enum video_format format, } } +void video_frame_copy(struct video_frame *dst, const struct video_frame *src, + enum video_format format, uint32_t cy) +{ + switch (format) { + case VIDEO_FORMAT_NONE: + return; + + case VIDEO_FORMAT_I420: + memcpy(dst->data[0], src->data[0], src->linesize[0] * cy); + memcpy(dst->data[1], src->data[1], src->linesize[1] * cy / 2); + memcpy(dst->data[2], src->data[2], src->linesize[2] * cy / 2); + break; + + case VIDEO_FORMAT_NV12: + memcpy(dst->data[0], src->data[0], src->linesize[0] * cy); + memcpy(dst->data[1], src->data[1], src->linesize[1] * cy / 2); + break; + + case VIDEO_FORMAT_YVYU: + case VIDEO_FORMAT_YUY2: + case VIDEO_FORMAT_UYVY: + case VIDEO_FORMAT_RGBA: + case VIDEO_FORMAT_BGRA: + case VIDEO_FORMAT_BGRX: + memcpy(dst->data[0], src->data[0], src->linesize[0] * cy); + break; + } +} diff --git a/libobs/media-io/video-frame.h b/libobs/media-io/video-frame.h index 64f6b5519..4620a2fdb 100644 --- a/libobs/media-io/video-frame.h +++ b/libobs/media-io/video-frame.h @@ -53,3 +53,7 @@ static inline void video_frame_destroy(struct video_frame *frame) bfree(frame); } } + +EXPORT void video_frame_copy(struct video_frame *dst, + const struct video_frame *src, enum video_format format, + uint32_t height); -- GitLab