vl/util: add copy func for yv12image to nv12surface v2

Add function to copy from yv12 image to nv12 surface for VAAPI putimage call.
We need this function in VaPutImage call where copying from yv12 image to nv12
surface for encoding. Existing function can't be used because it only work for
copying from yv12 surface to nv12 image in Vaapi.

v2: cleanup variable types and commit message

Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
Boyuan Zhang 2016-07-21 19:40:15 -04:00 committed by Christian König
parent 5bcaa1b9e9
commit 23b4ab1738
1 changed files with 37 additions and 0 deletions

View File

@ -129,6 +129,43 @@ u_copy_yv12_to_nv12(void *const *destination_data,
}
}
static inline void
u_copy_yv12_img_to_nv12_surf(ubyte *const *src,
ubyte *dst,
unsigned width,
unsigned height,
unsigned src_stride,
unsigned dst_stride,
int field)
{
if (field == 0) {
ubyte *src_0 = src[field];
for (int i = 0; i < height ; i++) {
memcpy(dst, src_0, width);
dst += dst_stride;
src_0 += src_stride;
}
} else if (field == 1) {
const ubyte *src_1 = src[field];
const ubyte *src_2 = src[field+1];
bool odd = false;
for (unsigned i = 0; i < height ; i++) {
for (unsigned j = 0; j < width*2 ; j++) {
if (odd == false) {
dst[j] = src_1[j/2];
odd = true;
} else {
dst[j] = src_2[j/2];
odd = false;
}
}
dst += dst_stride;
src_1 += src_stride;
src_2 += src_stride;
}
}
}
static inline void
u_copy_swap422_packed(void *const *destination_data,
uint32_t const *destination_pitches,