[vlc-commits] copy: add NV12 to NV12 plane copies
Steve Lhomme
git at videolan.org
Tue Apr 28 17:56:07 CEST 2015
vlc | branch: master | Steve Lhomme <robUx4 at videolabs.io> | Tue Apr 28 13:40:53 2015 +0000| [2b52b54c4a81cce2f0f45107238879deee5e80f8] | committer: Jean-Baptiste Kempf
copy: add NV12 to NV12 plane copies
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2b52b54c4a81cce2f0f45107238879deee5e80f8
---
modules/video_chroma/copy.c | 38 ++++++++++++++++++++++++++++++++++++++
modules/video_chroma/copy.h | 6 ++++++
2 files changed, 44 insertions(+)
diff --git a/modules/video_chroma/copy.c b/modules/video_chroma/copy.c
index cc98c92..ce3e39d 100644
--- a/modules/video_chroma/copy.c
+++ b/modules/video_chroma/copy.c
@@ -348,6 +348,23 @@ static void SSE_CopyFromYv12(picture_t *dst,
}
asm volatile ("emms");
}
+
+
+static void SSE_CopyFromNv12ToNv12(picture_t *dst,
+ uint8_t *src[2], size_t src_pitch[2],
+ unsigned width, 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,
+ width, height, cpu);
+ SSE_CopyPlane(dst->p[1].p_pixels, dst->p[1].i_pitch,
+ src[1], src_pitch[1],
+ cache->buffer, cache->size,
+ width, height/2, cpu);
+ asm volatile ("emms");
+}
#undef COPY64
#endif /* CAN_COMPILE_SSE2 */
@@ -400,6 +417,27 @@ void CopyFromNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
width/2, height/2);
}
+void CopyFromNv12ToNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
+ unsigned width, unsigned height,
+ copy_cache_t *cache)
+{
+#ifdef CAN_COMPILE_SSE2
+ unsigned cpu = vlc_CPU();
+ if (vlc_CPU_SSE2())
+ return SSE_CopyFromNv12ToNv12(dst, src, src_pitch, width, height,
+ cache, cpu);
+#else
+ (void) cache;
+#endif
+
+ CopyPlane(dst->p[0].p_pixels, dst->p[0].i_pitch,
+ src[0], src_pitch[0],
+ width, height);
+ CopyPlane(dst->p[1].p_pixels, dst->p[1].i_pitch,
+ src[1], src_pitch[1],
+ width, height/2);
+}
+
void CopyFromYv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
unsigned width, unsigned height,
copy_cache_t *cache)
diff --git a/modules/video_chroma/copy.h b/modules/video_chroma/copy.h
index 39dbf1e..d1e49f2 100644
--- a/modules/video_chroma/copy.h
+++ b/modules/video_chroma/copy.h
@@ -34,11 +34,17 @@ typedef struct {
int CopyInitCache(copy_cache_t *cache, unsigned width);
void CopyCleanCache(copy_cache_t *cache);
+/* Copy planes from NV12 to YV12 */
void CopyFromNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
unsigned width, unsigned height,
copy_cache_t *cache);
+/* Copy planes from YV12 to YV12 */
void CopyFromYv12(picture_t *dst, uint8_t *src[3], size_t src_pitch[3],
unsigned width, unsigned height,
copy_cache_t *cache);
+void CopyFromNv12ToNv12(picture_t *dst, uint8_t *src[2], size_t src_pitch[2],
+ unsigned width, unsigned height,
+ copy_cache_t *cache);
+
#endif
More information about the vlc-commits
mailing list