vlc | branch: master | Thomas Guillem <[email protected]> | Wed Nov 15 09:36:39 2017 +0100| [a7762313fd64f4ef4921f9e209771e96f02d22e3] | committer: 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. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a7762313fd64f4ef4921f9e209771e96f02d22e3 --- modules/codec/omxil/utils.c | 9 +-- modules/hw/vaapi/chroma.c | 25 +++---- modules/video_chroma/copy.c | 127 ++++++++++++++--------------------- modules/video_chroma/copy.h | 44 ++++++++---- modules/video_chroma/d3d11_surface.c | 24 ++++--- modules/video_chroma/dxa9.c | 24 +++---- modules/video_chroma/i420_10_p010.c | 4 +- modules/video_chroma/i420_nv12.c | 10 +-- 8 files changed, 129 insertions(+), 138 deletions(-) diff --git a/modules/codec/omxil/utils.c b/modules/codec/omxil/utils.c index 2b34c5b9ac..bdb8e445ce 100644 --- a/modules/codec/omxil/utils.c +++ b/modules/codec/omxil/utils.c @@ -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 diff --git a/modules/hw/vaapi/chroma.c b/modules/hw/vaapi/chroma.c index 66bd7a6930..bec714efb7 100644 --- a/modules/hw/vaapi/chroma.c +++ b/modules/hw/vaapi/chroma.c @@ -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: diff --git a/modules/video_chroma/copy.c b/modules/video_chroma/copy.c index 6c20c132b0..6c601b17c1 100644 --- a/modules/video_chroma/copy.c +++ b/modules/video_chroma/copy.c @@ -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 */ diff --git a/modules/video_chroma/copy.h b/modules/video_chroma/copy.h index 9b9dbd1f66..77278615d5 100644 --- a/modules/video_chroma/copy.h +++ b/modules/video_chroma/copy.h @@ -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 diff --git a/modules/video_chroma/d3d11_surface.c b/modules/video_chroma/d3d11_surface.c index d2b5ad15e4..f6b98f7fe2 100644 --- a/modules/video_chroma/d3d11_surface.c +++ b/modules/video_chroma/d3d11_surface.c @@ -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); } diff --git a/modules/video_chroma/dxa9.c b/modules/video_chroma/dxa9.c index e15ea86b0b..281465ac34 100644 --- a/modules/video_chroma/dxa9.c +++ b/modules/video_chroma/dxa9.c @@ -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); } diff --git a/modules/video_chroma/i420_10_p010.c b/modules/video_chroma/i420_10_p010.c index cde4813aef..079e831bb9 100644 --- a/modules/video_chroma/i420_10_p010.c +++ b/modules/video_chroma/i420_10_p010.c @@ -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, diff --git a/modules/video_chroma/i420_nv12.c b/modules/video_chroma/i420_nv12.c index 4a1a606a6c..6a55616879 100644 --- a/modules/video_chroma/i420_nv12.c +++ b/modules/video_chroma/i420_nv12.c @@ -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 ); } /***************************************************************************** _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
