|
@@ -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;
|
|
|
+ }
|
|
|
+}
|