@@ -294,9 +294,33 @@ static inline __m128i sse41_yuv2b(const __m128i Y[2], __m128i U, __m128i V)
294
294
return sse41_yuv2x (Y , U , V , 475 , 0 );
295
295
}
296
296
297
+ static inline void print_single (const char * prefix , const uint8_t * array , size_t len ) {
298
+ printf ("%s={" , prefix );
299
+ for (size_t x = 0 ;x < len ;x ++ ) {
300
+ printf ("0x%02" PRIx8 ", " , array [x ]);
301
+ }
302
+ printf ("}\n" );
303
+ }
304
+ static inline void print_values (
305
+ const uint8_t * y ,
306
+ const uint8_t * u ,
307
+ const uint8_t * v
308
+ )
309
+ {
310
+ print_single ("Y" , y , 16 );
311
+ print_single ("U" , u , 16 );
312
+ print_single ("V" , v , 16 );
313
+ fflush (stdout );
314
+ }
315
+
297
316
static inline void sse41_BGRX_fillRGB_pixel (BYTE * WINPR_RESTRICT pRGB , __m128i Y , __m128i U ,
298
317
__m128i V )
299
318
{
319
+ //print_values(&Y, &U, &V);
320
+ Y = mm_set_epu8 (0x31 , 0x8f , 0x29 , 0x00 , 0x50 , 0x59 , 0x6a , 0xa2 , 0xe7 , 0x46 , 0x64 , 0x73 , 0x85 , 0x8c , 0x07 , 0x30 );
321
+ U = mm_set_epu8 (0x73 , 0x3c , 0xd0 , 0x45 , 0x2e , 0xff , 0x29 , 0xcb , 0x22 , 0xe7 , 0x88 , 0x04 , 0x94 , 0x81 , 0xeb , 0xe1 );
322
+ V = mm_set_epu8 (0x15 , 0x0d , 0xb6 , 0x95 , 0x8e , 0xb9 , 0xb7 , 0x7c , 0xb2 , 0xfd , 0xef , 0x54 , 0xd2 , 0x22 , 0xe2 , 0xaa );
323
+
300
324
const __m128i zero = _mm_set1_epi8 (0 );
301
325
/* Y * 256 */
302
326
const __m128i yY [] = { _mm_unpackhi_epi8 (zero , Y ), _mm_unpacklo_epi8 (zero , Y ) };
@@ -319,6 +343,29 @@ static inline void sse41_BGRX_fillRGB_pixel(BYTE* WINPR_RESTRICT pRGB, __m128i Y
319
343
_mm_maskmoveu_si128 (bgrx2 , mask , (char * )& rgb [2 ]);
320
344
const __m128i bgrx3 = _mm_unpacklo_epi16 (bg [1 ], rx [1 ]);
321
345
_mm_maskmoveu_si128 (bgrx3 , mask , (char * )& rgb [3 ]);
346
+
347
+ uint8_t cmprgb [16 * 4 ] = { 0 };
348
+ const char * py = & Y ;
349
+ const char * pu = & U ;
350
+ const char * pv = & V ;
351
+ for (size_t x = 0 ; x < 16 ; x ++ ) {
352
+ uint8_t y = py [x ];
353
+ uint8_t u = pu [x ];
354
+ uint8_t v = pv [x ];
355
+ uint8_t r = YUV2R (y , u , v );
356
+ uint8_t g = YUV2G (y , u , v );
357
+ uint8_t b = YUV2B (y , u , v );
358
+
359
+ cmprgb [4 * x + 0 ] = b ;
360
+ cmprgb [4 * x + 1 ] = g ;
361
+ cmprgb [4 * x + 2 ] = r ;
362
+ }
363
+
364
+ if (memcmp (cmprgb , pRGB , sizeof (cmprgb )) != 0 ) {
365
+ WLog_WARN ("ccc" , "xxxx:" );
366
+ print_single ("cmp" , cmprgb , sizeof (cmprgb ));
367
+ print_single ("rgb" , pRGB , sizeof (cmprgb ));
368
+ }
322
369
}
323
370
324
371
static void sse41_BGRX_fillRGB (BYTE * WINPR_RESTRICT pRGB [2 ], const __m128i pY [2 ],
0 commit comments