Commit a7762313 authored by Thomas Guillem's avatar Thomas Guillem

chroma: copy: rename YUV420 copy functions

Use more generic functions name that can work with more than one chroma. For
example, CopyFromYv12ToYv12 is renamed to Copy420_P_to_P (planar to planar).

Add picture_SwapUV(): just swap U, V planes of a tri-planar picture.

Remove CopyFromNv12ToYv12 (replaced by Copy420_SP_to_P() and picture_SwapUV()).

Add const qualifiers to all sources parameters in all functions.
parent 94065d38
......@@ -221,10 +221,11 @@ void CopyOmxPicture( int i_color_format, picture_t *p_pic,
&& vlc_CPU_SSE2() && p_architecture_specific && p_architecture_specific->data )
{
copy_cache_t *p_surface_cache = (copy_cache_t*)p_architecture_specific->data;
uint8_t *ppi_src_pointers[2] = { p_src, p_src + i_src_stride * i_slice_height };
size_t pi_src_strides[2] = { i_src_stride, i_src_stride };
CopyFromNv12ToYv12( p_pic, ppi_src_pointers, pi_src_strides,
i_slice_height, p_surface_cache );
const uint8_t *ppi_src_pointers[2] = { p_src, p_src + i_src_stride * i_slice_height };
const size_t pi_src_strides[2] = { i_src_stride, i_src_stride };
Copy420_SP_to_P( p_pic, ppi_src_pointers, pi_src_strides,
i_slice_height, p_surface_cache );
picture_SwapUV( p_pic );
return;
}
#endif
......
......@@ -88,9 +88,9 @@ static inline void
FillPictureFromVAImage(picture_t *dest,
VAImage *src_img, uint8_t *src_buf, copy_cache_t *cache)
{
uint8_t * src_planes[2] = { src_buf + src_img->offsets[0],
const uint8_t * src_planes[2] = { src_buf + src_img->offsets[0],
src_buf + src_img->offsets[1] };
size_t src_pitches[2] = { src_img->pitches[0],
const size_t src_pitches[2] = { src_img->pitches[0],
src_img->pitches[1] };
switch (src_img->format.fourcc)
......@@ -98,15 +98,12 @@ FillPictureFromVAImage(picture_t *dest,
case VA_FOURCC_NV12:
{
assert(dest->format.i_chroma == VLC_CODEC_I420);
CopyFromNv12ToI420(dest, src_planes, src_pitches,
src_img->height, cache);
Copy420_SP_to_P(dest, src_planes, src_pitches, src_img->height, cache);
break;
}
case VA_FOURCC_P010:
assert(dest->format.i_chroma == VLC_CODEC_P010);
/* P010ToP010 is the same than Nv12ToNV12 */
CopyFromNv12ToNv12(dest, src_planes, src_pitches,
src_img->height, cache);
Copy420_SP_to_SP(dest, src_planes, src_pitches, src_img->height, cache);
break;
default:
vlc_assert_unreachable();
......@@ -191,10 +188,10 @@ FillVAImageFromPicture(VAImage *dest_img, uint8_t *dest_buf,
case VLC_CODEC_I420:
{
assert(dest_pic->format.i_chroma == VLC_CODEC_VAAPI_420);
uint8_t * src_planes[3] = { src->p[Y_PLANE].p_pixels,
const uint8_t * src_planes[3] = { src->p[Y_PLANE].p_pixels,
src->p[U_PLANE].p_pixels,
src->p[V_PLANE].p_pixels };
size_t src_pitches[3] = { src->p[Y_PLANE].i_pitch,
const size_t src_pitches[3] = { src->p[Y_PLANE].i_pitch,
src->p[U_PLANE].i_pitch,
src->p[V_PLANE].i_pitch };
void *const tmp[2] = { dest_pic->p[0].p_pixels,
......@@ -205,7 +202,7 @@ FillVAImageFromPicture(VAImage *dest_img, uint8_t *dest_buf,
dest_pic->p[0].i_pitch = dest_img->pitches[0];
dest_pic->p[1].i_pitch = dest_img->pitches[1];
CopyFromI420ToNv12(dest_pic, src_planes, src_pitches,
Copy420_P_to_SP(dest_pic, src_planes, src_pitches,
src->format.i_height, cache);
dest_pic->p[0].p_pixels = tmp[0];
......@@ -216,12 +213,12 @@ FillVAImageFromPicture(VAImage *dest_img, uint8_t *dest_buf,
case VLC_CODEC_P010:
{
assert(dest_pic->format.i_chroma == VLC_CODEC_VAAPI_420_10BPP);
uint8_t * src_planes[2] = { src->p[0].p_pixels,
const uint8_t * src_planes[2] = { src->p[0].p_pixels,
src->p[1].p_pixels };
size_t src_pitches[2] = { src->p[0].i_pitch,
const size_t src_pitches[2] = { src->p[0].i_pitch,
src->p[1].i_pitch };
CopyFromNv12ToNv12(dest_pic, src_planes, src_pitches,
src->format.i_height, cache);
Copy420_SP_to_SP(dest_pic, src_planes, src_pitches,
src->format.i_height, cache);
break;
}
default:
......
......@@ -399,8 +399,8 @@ static void SSE_CopyPlane(uint8_t *dst, size_t dst_pitch,
static void
SSE_InterleavePlanes(uint8_t *dst, size_t dst_pitch,
uint8_t *srcu, size_t srcu_pitch,
uint8_t *srcv, size_t srcv_pitch,
const uint8_t *srcu, size_t srcu_pitch,
const uint8_t *srcv, size_t srcv_pitch,
uint8_t *cache, size_t cache_size,
unsigned int height,
unsigned int cpu)
......@@ -459,27 +459,9 @@ static void SSE_SplitPlanes(uint8_t *dstu, size_t dstu_pitch,
}
}
static void SSE_CopyFromNv12ToYv12(picture_t *dst,
uint8_t *src[2], size_t src_pitch[2],
unsigned height,
copy_cache_t *cache, unsigned cpu)
{
SSE_CopyPlane(dst->p[0].p_pixels, dst->p[0].i_pitch,
src[0], src_pitch[0],
cache->buffer, cache->size,
height, cpu);
SSE_SplitPlanes(dst->p[2].p_pixels, dst->p[2].i_pitch,
dst->p[1].p_pixels, dst->p[1].i_pitch,
src[1], src_pitch[1],
cache->buffer, cache->size,
(height+1)/2, cpu);
asm volatile ("emms");
}
static void SSE_CopyFromYv12ToYv12(picture_t *dst,
uint8_t *src[3], size_t src_pitch[3],
unsigned height,
copy_cache_t *cache, unsigned cpu)
static void SSE_Copy420_P_to_P(picture_t *dst, const uint8_t *src[static 3],
const size_t src_pitch[static 3], unsigned height,
const copy_cache_t *cache, unsigned cpu)
{
for (unsigned n = 0; n < 3; n++) {
const unsigned d = n > 0 ? 2 : 1;
......@@ -492,10 +474,9 @@ static void SSE_CopyFromYv12ToYv12(picture_t *dst,
}
static void SSE_CopyFromNv12ToNv12(picture_t *dst,
uint8_t *src[2], size_t src_pitch[2],
unsigned height,
copy_cache_t *cache, unsigned cpu)
static void SSE_Copy420_SP_to_SP(picture_t *dst, const uint8_t *src[static 2],
const size_t src_pitch[static 2], unsigned height,
const copy_cache_t *cache, unsigned cpu)
{
SSE_CopyPlane(dst->p[0].p_pixels, dst->p[0].i_pitch,
src[0], src_pitch[0],
......@@ -509,9 +490,9 @@ static void SSE_CopyFromNv12ToNv12(picture_t *dst,
}
static void
SSE_CopyFromNv12ToI420(picture_t *dest, uint8_t *src[2],
size_t src_pitch[2], unsigned int height,
copy_cache_t *cache, unsigned int cpu)
SSE_Copy420_SP_to_P(picture_t *dest, const uint8_t *src[static 2],
const size_t src_pitch[static 2], unsigned int height,
const copy_cache_t *cache, unsigned int cpu)
{
SSE_CopyPlane(dest->p[0].p_pixels, dest->p[0].i_pitch,
src[0], src_pitch[0], cache->buffer, cache->size,
......@@ -523,10 +504,10 @@ SSE_CopyFromNv12ToI420(picture_t *dest, uint8_t *src[2],
asm volatile ("emms");
}
static void SSE_CopyFromI420ToNv12(picture_t *dst,
uint8_t *src[3], size_t src_pitch[3],
unsigned height,
copy_cache_t *cache, unsigned cpu)
static void SSE_Copy420_P_to_SP(picture_t *dst, const uint8_t *src[static 3],
const size_t src_pitch[static 3],
unsigned height, const copy_cache_t *cache,
unsigned cpu)
{
SSE_CopyPlane(dst->p[0].p_pixels, dst->p[0].i_pitch,
src[0], src_pitch[0],
......@@ -571,32 +552,15 @@ static void SplitPlanes(uint8_t *dstu, size_t dstu_pitch,
}
}
void CopyFromNv12ToYv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
unsigned height, copy_cache_t *cache)
{
#ifdef CAN_COMPILE_SSE2
unsigned cpu = vlc_CPU();
if (vlc_CPU_SSE2())
return SSE_CopyFromNv12ToYv12(dst, src, src_pitch, height, cache, cpu);
#else
(void) cache;
#endif
CopyPlane(dst->p[0].p_pixels, dst->p[0].i_pitch,
src[0], src_pitch[0], height);
SplitPlanes(dst->p[2].p_pixels, dst->p[2].i_pitch,
dst->p[1].p_pixels, dst->p[1].i_pitch,
src[1], src_pitch[1], height/2);
}
void CopyFromNv12ToNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
unsigned height, copy_cache_t *cache)
void Copy420_SP_to_SP(picture_t *dst, const uint8_t *src[static 2],
const size_t src_pitch[static 2], unsigned height,
const copy_cache_t *cache)
{
#ifdef CAN_COMPILE_SSE2
unsigned cpu = vlc_CPU();
if (vlc_CPU_SSE2())
return SSE_CopyFromNv12ToNv12(dst, src, src_pitch, height,
cache, cpu);
return SSE_Copy420_SP_to_SP(dst, src, src_pitch, height,
cache, cpu);
#else
(void) cache;
#endif
......@@ -607,14 +571,15 @@ void CopyFromNv12ToNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
src[1], src_pitch[1], height/2);
}
void CopyFromNv12ToI420(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
unsigned height, copy_cache_t *cache)
void Copy420_SP_to_P(picture_t *dst, const uint8_t *src[static 2],
const size_t src_pitch[static 2], unsigned height,
const copy_cache_t *cache)
{
#ifdef CAN_COMPILE_SSE2
unsigned cpu = vlc_CPU();
if (vlc_CPU_SSE2())
return SSE_CopyFromNv12ToI420(dst, src, src_pitch, height, cache, cpu);
return SSE_Copy420_SP_to_P(dst, src, src_pitch, height, cache, cpu);
#else
VLC_UNUSED(cache);
#endif
......@@ -626,14 +591,14 @@ void CopyFromNv12ToI420(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
src[1], src_pitch[1], height/2);
}
void CopyFromI420ToNv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
unsigned height, copy_cache_t *cache)
void Copy420_P_to_SP(picture_t *dst, const uint8_t *src[static 3],
const size_t src_pitch[static 3], unsigned height,
const copy_cache_t *cache)
{
#ifdef CAN_COMPILE_SSE2
unsigned cpu = vlc_CPU();
if (vlc_CPU_SSE2())
return SSE_CopyFromI420ToNv12(dst, src, src_pitch, height,
cache, cpu);
return SSE_Copy420_P_to_SP(dst, src, src_pitch, height, cache, cpu);
#else
(void) cache;
#endif
......@@ -649,8 +614,8 @@ void CopyFromI420ToNv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
const int i_extra_pitch_v = src_pitch[V_PLANE] - copy_pitch;
uint8_t *dstUV = dst->p[1].p_pixels;
uint8_t *srcU = src[U_PLANE];
uint8_t *srcV = src[V_PLANE];
const uint8_t *srcU = src[U_PLANE];
const uint8_t *srcV = src[V_PLANE];
for ( unsigned int line = 0; line < copy_lines; line++ )
{
for ( unsigned int col = 0; col < copy_pitch; col++ )
......@@ -664,15 +629,16 @@ void CopyFromI420ToNv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
}
}
void CopyFromI420_10ToP010(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
unsigned height, copy_cache_t *cache)
void CopyFromI420_10ToP010(picture_t *dst, const uint8_t *src[static 3],
const size_t src_pitch[static 3],
unsigned height, const copy_cache_t *cache)
{
(void) cache;
const int i_extra_pitch_dst_y = (dst->p[0].i_pitch - src_pitch[0]) / 2;
const int i_extra_pitch_src_y = (src_pitch[Y_PLANE] - src_pitch[0]) / 2;
uint16_t *dstY = dst->p[0].p_pixels;
uint16_t *srcY = src[Y_PLANE];
uint16_t *dstY = (uint16_t *) dst->p[0].p_pixels;
const uint16_t *srcY = (const uint16_t *) src[Y_PLANE];
for (unsigned y = 0; y < height; y++) {
for (unsigned x = 0; x < (src_pitch[0] / 2); x++) {
*dstY++ = *srcY++ << 6;
......@@ -688,9 +654,9 @@ void CopyFromI420_10ToP010(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
const int i_extra_pitch_u = src_pitch[U_PLANE] / 2 - copy_pitch;
const int i_extra_pitch_v = src_pitch[V_PLANE] / 2 - copy_pitch;
uint16_t *dstUV = dst->p[1].p_pixels;
uint16_t *srcU = src[U_PLANE];
uint16_t *srcV = src[V_PLANE];
uint16_t *dstUV = (uint16_t *) dst->p[1].p_pixels;
const uint16_t *srcU = (const uint16_t *) src[U_PLANE];
const uint16_t *srcV = (const uint16_t *) src[V_PLANE];
for ( unsigned int line = 0; line < copy_lines; line++ )
{
for ( unsigned int col = 0; col < copy_pitch; col++ )
......@@ -704,14 +670,14 @@ void CopyFromI420_10ToP010(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
}
}
void CopyFromYv12ToYv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
unsigned height, copy_cache_t *cache)
void Copy420_P_to_P(picture_t *dst, const uint8_t *src[static 3],
const size_t src_pitch[static 3], unsigned height,
const copy_cache_t *cache)
{
#ifdef CAN_COMPILE_SSE2
unsigned cpu = vlc_CPU();
if (vlc_CPU_SSE2())
return SSE_CopyFromYv12ToYv12(dst, src, src_pitch, height, cache, cpu);
return SSE_Copy420_P_to_P(dst, src, src_pitch, height, cache, cpu);
#else
(void) cache;
#endif
......@@ -724,6 +690,15 @@ void CopyFromYv12ToYv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
src[2], src_pitch[2], height / 2);
}
void picture_SwapUV(picture_t *picture)
{
assert(picture->i_planes == 3);
plane_t tmp_plane = picture->p[1];
picture->p[1] = picture->p[2];
picture->p[2] = tmp_plane;
}
int picture_UpdatePlanes(picture_t *picture, uint8_t *data, unsigned pitch)
{
/* fill in buffer info in first plane */
......
......@@ -24,6 +24,8 @@
#ifndef VLC_VIDEOCHROMA_COPY_H_
#define VLC_VIDEOCHROMA_COPY_H_
#include <assert.h>
typedef struct {
# ifdef CAN_COMPILE_SSE2
uint8_t *buffer;
......@@ -34,24 +36,38 @@ typedef struct {
int CopyInitCache(copy_cache_t *cache, unsigned width);
void CopyCleanCache(copy_cache_t *cache);
/* Copy planes from NV12 to YV12 */
void CopyFromNv12ToYv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
unsigned height, copy_cache_t *cache);
/* Copy planes from YV12 to YV12 */
void CopyFromYv12ToYv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
unsigned height, copy_cache_t *cache);
/* Copy planes from NV12/NV21 to NV12/NV21 */
void Copy420_SP_to_SP(picture_t *dst, const uint8_t *src[static 2],
const size_t src_pitch[static 2], unsigned height,
const copy_cache_t *cache);
/* Copy planes from I420/YV12 to I420/YV12 */
void Copy420_P_to_P(picture_t *dst, const uint8_t *src[static 3],
const size_t src_pitch[static 3], unsigned height,
const copy_cache_t *cache);
/* Copy planes from I420/YV12 to NV12/NV21 */
void Copy420_P_to_SP(picture_t *dst, const uint8_t *src[static 3],
const size_t src_pitch[static 3], unsigned height,
const copy_cache_t *cache);
void CopyFromNv12ToNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
unsigned height, copy_cache_t *cache);
/* Copy planes from NV12/NV21 to I420/YV12 */
void Copy420_SP_to_P(picture_t *dst, const uint8_t *src[static 2],
const size_t src_pitch[static 2], unsigned height,
const copy_cache_t *cache);
void CopyFromNv12ToI420(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
unsigned height, copy_cache_t *cache);
void CopyFromI420ToNv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
unsigned height, copy_cache_t *cache);
/* XXX: Not optimized copy (no SEE) */
void CopyFromI420_10ToP010(picture_t *dst, const uint8_t *src[static 3],
const size_t src_pitch[static 3],
unsigned height, const copy_cache_t *cache);
void CopyFromI420_10ToP010(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
unsigned height, copy_cache_t *cache);
/**
* Swap UV planes of a Tri Planars picture.
*
* It just swap the planes information without doing any copy.
*/
void picture_SwapUV(picture_t *picture);
/**
* This functions sets the internal plane pointers/dimensions for the given
......
......@@ -360,32 +360,34 @@ static void D3D11_YUY2(filter_t *p_filter, picture_t *src, picture_t *dst)
if (desc.Format == DXGI_FORMAT_YUY2) {
size_t chroma_pitch = (lock.RowPitch / 2);
size_t pitch[3] = {
const size_t pitch[3] = {
lock.RowPitch,
chroma_pitch,
chroma_pitch,
};
uint8_t *plane[3] = {
const uint8_t *plane[3] = {
(uint8_t*)lock.pData,
(uint8_t*)lock.pData + pitch[0] * desc.Height,
(uint8_t*)lock.pData + pitch[0] * desc.Height
+ pitch[1] * desc.Height / 2,
};
CopyFromYv12ToYv12(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, &sys->cache);
Copy420_P_to_P(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset,
&sys->cache);
} else if (desc.Format == DXGI_FORMAT_NV12) {
uint8_t *plane[2] = {
const uint8_t *plane[2] = {
lock.pData,
(uint8_t*)lock.pData + lock.RowPitch * desc.Height
};
size_t pitch[2] = {
const size_t pitch[2] = {
lock.RowPitch,
lock.RowPitch,
};
CopyFromNv12ToYv12(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, &sys->cache);
Copy420_SP_to_P(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, &sys->cache);
picture_SwapUV(dst);
} else {
msg_Err(p_filter, "Unsupported D3D11VA conversion from 0x%08X to YV12", desc.Format);
}
......@@ -485,7 +487,7 @@ static void D3D11_NV12(filter_t *p_filter, picture_t *src, picture_t *dst)
ID3D11Texture2D_GetDesc(sys->staging, &desc);
if (desc.Format == DXGI_FORMAT_NV12) {
uint8_t *plane[2] = {
const uint8_t *plane[2] = {
lock.pData,
(uint8_t*)lock.pData + lock.RowPitch * desc.Height
};
......@@ -493,8 +495,8 @@ static void D3D11_NV12(filter_t *p_filter, picture_t *src, picture_t *dst)
lock.RowPitch,
lock.RowPitch,
};
CopyFromNv12ToNv12(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, &sys->cache);
Copy420_SP_to_SP(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, &sys->cache);
} else {
msg_Err(p_filter, "Unsupported D3D11VA conversion from 0x%08X to NV12", desc.Format);
}
......
......@@ -89,13 +89,13 @@ static void DXA9_YV12(filter_t *p_filter, picture_t *src, picture_t *dst)
bool imc3 = desc.Format == MAKEFOURCC('I','M','C','3');
size_t chroma_pitch = imc3 ? lock.Pitch : (lock.Pitch / 2);
size_t pitch[3] = {
const size_t pitch[3] = {
lock.Pitch,
chroma_pitch,
chroma_pitch,
};
uint8_t *plane[3] = {
const uint8_t *plane[3] = {
(uint8_t*)lock.pBits,
(uint8_t*)lock.pBits + pitch[0] * desc.Height,
(uint8_t*)lock.pBits + pitch[0] * desc.Height
......@@ -103,23 +103,23 @@ static void DXA9_YV12(filter_t *p_filter, picture_t *src, picture_t *dst)
};
if (imc3) {
uint8_t *V = plane[1];
const uint8_t *V = plane[1];
plane[1] = plane[2];
plane[2] = V;
}
CopyFromYv12ToYv12(dst, plane, pitch,
src->format.i_height, p_copy_cache);
Copy420_P_to_P(dst, plane, pitch, src->format.i_height, p_copy_cache);
} else if (desc.Format == MAKEFOURCC('N','V','1','2')) {
uint8_t *plane[2] = {
const uint8_t *plane[2] = {
lock.pBits,
(uint8_t*)lock.pBits + lock.Pitch * desc.Height
};
size_t pitch[2] = {
const size_t pitch[2] = {
lock.Pitch,
lock.Pitch,
};
CopyFromNv12ToYv12(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, p_copy_cache);
Copy420_SP_to_P(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, p_copy_cache);
picture_SwapUV(dst);
} else {
msg_Err(p_filter, "Unsupported DXA9 conversion from 0x%08X to YV12", desc.Format);
}
......@@ -145,7 +145,7 @@ static void DXA9_NV12(filter_t *p_filter, picture_t *src, picture_t *dst)
return;
if (desc.Format == MAKEFOURCC('N','V','1','2')) {
uint8_t *plane[2] = {
const uint8_t *plane[2] = {
lock.pBits,
(uint8_t*)lock.pBits + lock.Pitch * desc.Height
};
......@@ -153,8 +153,8 @@ static void DXA9_NV12(filter_t *p_filter, picture_t *src, picture_t *dst)
lock.Pitch,
lock.Pitch,
};
CopyFromNv12ToNv12(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, p_copy_cache);
Copy420_SP_to_SP(dst, plane, pitch,
src->format.i_visible_height + src->format.i_y_offset, p_copy_cache);
} else {
msg_Err(p_filter, "Unsupported DXA9 conversion from 0x%08X to NV12", desc.Format);
}
......
......@@ -107,13 +107,13 @@ static void I420_10_P010( filter_t *p_filter, picture_t *p_src,
p_dst->format.i_x_offset = p_src->format.i_x_offset;
p_dst->format.i_y_offset = p_src->format.i_y_offset;
size_t pitch[3] = {
const size_t pitch[3] = {
p_src->p[Y_PLANE].i_pitch,
p_src->p[U_PLANE].i_pitch,
p_src->p[V_PLANE].i_pitch,
};
uint8_t *plane[3] = {
const uint8_t *plane[3] = {
(uint8_t*)p_src->p[Y_PLANE].p_pixels,
(uint8_t*)p_src->p[U_PLANE].p_pixels,
(uint8_t*)p_src->p[V_PLANE].p_pixels,
......
......@@ -120,21 +120,21 @@ static void I420_YUV( filter_sys_t *p_sys, picture_t *p_src, picture_t *p_dst, b
const size_t u_plane = invertUV ? V_PLANE : U_PLANE;
const size_t v_plane = invertUV ? U_PLANE : V_PLANE;
size_t pitch[3] = {
const size_t pitch[3] = {
p_src->p[Y_PLANE].i_pitch,
p_src->p[u_plane].i_pitch,
p_src->p[v_plane].i_pitch,
};
uint8_t *plane[3] = {
const uint8_t *plane[3] = {
(uint8_t*)p_src->p[Y_PLANE].p_pixels,
(uint8_t*)p_src->p[u_plane].p_pixels,
(uint8_t*)p_src->p[v_plane].p_pixels,
};
CopyFromI420ToNv12( p_dst, plane, pitch,
p_src->format.i_y_offset + p_src->format.i_visible_height,
&p_sys->cache );
Copy420_P_to_SP( p_dst, plane, pitch,
p_src->format.i_y_offset + p_src->format.i_visible_height,
&p_sys->cache );
}
/*****************************************************************************
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment