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];
: : "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 */
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];
: : "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 */
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__ (
: : "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 */
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__
: : "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__ (