Browse Source

libobs/media-io: Add frame copying function

jp9000 10 years ago
parent
commit
8e1549820b
2 changed files with 32 additions and 0 deletions
  1. 28 0
      libobs/media-io/video-frame.c
  2. 4 0
      libobs/media-io/video-frame.h

+ 28 - 0
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;
+	}
+}

+ 4 - 0
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);