[MPlayer-dev-eng] [PATCH 1/2] osd_template: fix possible subtitle corruption.
Reimar Döffinger
Reimar.Doeffinger at gmx.de
Sun Jun 30 23:09:34 EEST 2019
Stride padding of alpha is not guaranteed to be
zerod, which can result in some corruption on the
right border.
Change SSE2 code to fall back to C code for the
last part if width is not a multiple of 16.
---
sub/osd_template.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/sub/osd_template.c b/sub/osd_template.c
index 1e7fb8205..a0da4cf33 100644
--- a/sub/osd_template.c
+++ b/sub/osd_template.c
@@ -147,7 +147,7 @@ static inline void RENAME(vo_draw_alpha_yv12)(int w,int h, unsigned char* src, u
}
#elif HAVE_SSE2
__m128i zero = _mm_setzero_si128();
- for(x=0;x+8<w;x+=16){
+ for(x=0;x+15<w;x+=16){
__m128i mmsrc, mmdst, res;
__m128i mmsrca = _mm_load_si128((const __m128i *)(srca + x));
@@ -242,7 +242,7 @@ static inline void RENAME(vo_draw_alpha_yuy2)(int w,int h, unsigned char* src, u
__m128i zero = _mm_setzero_si128();
__m128i ymask = _mm_set1_epi16(0xff);
__m128i uvofs = _mm_set1_epi16(0x8000);
- for(x=0;x+12<w;x+=16){
+ for(x=0;x+15<w;x+=16){
__m128i mmsrc, mmsrcalo, mmsrcahi, mmdst, mmdst2, mmlow, mmhigh, mmy, mmuv, res;
__m128i mmsrca = _mm_load_si128((const __m128i *)(srca + x));
int alpha = _mm_movemask_epi8(_mm_cmpeq_epi8(mmsrca, zero));
@@ -323,7 +323,7 @@ static inline void RENAME(vo_draw_alpha_uyvy)(int w,int h, unsigned char* src, u
#if HAVE_SSE2
__m128i zero = _mm_setzero_si128();
__m128i uvofs = _mm_set1_epi16(0x80);
- for(x=0;x+12<w;x+=16){
+ for(x=0;x+15<w;x+=16){
__m128i mmsrc, mmsrcalo, mmsrcahi, mmdst, mmdst2, mmlow, mmhigh, mmy, mmuv, res;
__m128i mmsrca = _mm_load_si128((const __m128i *)(srca + x));
int alpha = _mm_movemask_epi8(_mm_cmpeq_epi8(mmsrca, zero));
@@ -459,7 +459,7 @@ static inline void RENAME(vo_draw_alpha_rgb24)(int w,int h, unsigned char* src,
#elif HAVE_SSE2
__m128i one_in_three_mask = _mm_set_epi32(0xff0000ffu, 0x0000ff00u, 0x00ff0000u, 0xff0000ffu);
__m128i zero = _mm_setzero_si128();
- for(x=0;x+14<w;x+=16){
+ for(x=0;x+15<w;x+=16){
__m128i mmsrc, mmtmp, mmtmpa, mmdst, res;
__m128i mmsrca = _mm_load_si128((const __m128i *)(srca + x));
int alpha = _mm_movemask_epi8(_mm_cmpeq_epi8(mmsrca, zero));
--
2.20.1
More information about the MPlayer-dev-eng
mailing list