summaryrefslogtreecommitdiffstats
path: root/postproc
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-08 14:43:18 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-08 14:43:18 +0000
commit7aaa119f4525797253a5feea5c544a3ef99acf8e (patch)
treeb5e5648df8b6d9b4baa9db05ace733a25c2e808b /postproc
parent6cda98af25843aa41e731f01a64e9e4d89186065 (diff)
downloadmpv-7aaa119f4525797253a5feea5c544a3ef99acf8e.tar.bz2
mpv-7aaa119f4525797253a5feea5c544a3ef99acf8e.tar.xz
fixing black stripe at right if width%8!=0 && stride%8==0 reported by kabi
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5534 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'postproc')
-rw-r--r--postproc/yuv2rgb_template.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/postproc/yuv2rgb_template.c b/postproc/yuv2rgb_template.c
index 4a8a54574f..f254388e82 100644
--- a/postproc/yuv2rgb_template.c
+++ b/postproc/yuv2rgb_template.c
@@ -136,6 +136,10 @@ static inline void RENAME(yuv420_rgb16) (uint8_t * image, uint8_t * py,
uint8_t *_py = py;
uint8_t *_pu = pu;
uint8_t *_pv = pv;
+ int internal_h_size= h_size;
+ int aligned_h_size= (h_size+7)&~7;
+
+ if(rgb_stride >= aligned_h_size*2) internal_h_size= aligned_h_size;
b5Dither= dither8[y&1];
g6Dither= dither4[y&1];
@@ -150,7 +154,7 @@ static inline void RENAME(yuv420_rgb16) (uint8_t * image, uint8_t * py,
: : "r" (_py), "r" (_pu), "r" (_pv));
- for (x = h_size >> 3; --x >= 0; ) {
+ for (x = internal_h_size >> 3; --x >= 0; ) {
/* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
pixels in each iteration */
@@ -237,6 +241,10 @@ static inline void RENAME(yuv420_rgb15) (uint8_t * image, uint8_t * py,
uint8_t *_py = py;
uint8_t *_pu = pu;
uint8_t *_pv = pv;
+ int internal_h_size= h_size;
+ int aligned_h_size= (h_size+7)&~7;
+
+ if(rgb_stride >= aligned_h_size*2) internal_h_size= aligned_h_size;
b5Dither= dither8[y&1];
g6Dither= dither4[y&1];
@@ -251,7 +259,7 @@ static inline void RENAME(yuv420_rgb15) (uint8_t * image, uint8_t * py,
: : "r" (_py), "r" (_pu), "r" (_pv));
- for (x = h_size >> 3; --x >= 0; ) {
+ for (x = internal_h_size >> 3; --x >= 0; ) {
/* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
pixels in each iteration */
@@ -334,6 +342,10 @@ static inline void RENAME(yuv420_rgb24) (uint8_t * image, uint8_t * py,
uint8_t *_py = py;
uint8_t *_pu = pu;
uint8_t *_pv = pv;
+ int internal_h_size= h_size;
+ int aligned_h_size= (h_size+7)&~7;
+
+ if(rgb_stride >= aligned_h_size*3) internal_h_size= aligned_h_size;
/* load data for start of next scan line */
__asm__ __volatile__ (
@@ -343,7 +355,7 @@ static inline void RENAME(yuv420_rgb24) (uint8_t * image, uint8_t * py,
: : "r" (_py), "r" (_pu), "r" (_pv));
- for (x = h_size >> 3; --x >= 0; ) {
+ for (x = internal_h_size >> 3; --x >= 0; ) {
/* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
pixels in each iteration */
@@ -489,6 +501,10 @@ static inline void RENAME(yuv420_argb32) (uint8_t * image, uint8_t * py,
uint8_t *_py = py;
uint8_t *_pu = pu;
uint8_t *_pv = pv;
+ int internal_h_size= h_size;
+ int aligned_h_size= (h_size+7)&~7;
+
+ if(rgb_stride >= aligned_h_size*4) internal_h_size= aligned_h_size;
/* load data for start of next scan line */
__asm__ __volatile__
@@ -499,7 +515,7 @@ static inline void RENAME(yuv420_argb32) (uint8_t * image, uint8_t * py,
: : "r" (_py), "r" (_pu), "r" (_pv)
);
- for (x = h_size >> 3; --x >= 0; ) {
+ for (x = internal_h_size >> 3; --x >= 0; ) {
/* this mmx assembly code deals with SINGLE scan line at a time, it convert 8
pixels in each iteration */
__asm__ __volatile__ (