1b6775db241f5fe5e3dc2ca09fc6c9e6164d4b2afGuido van Rossum 2a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#ifndef Py_YUV_H 3a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#define Py_YUV_H 4a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#ifdef __cplusplus 5a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossumextern "C" { 6a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#endif 7a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum 86b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender/* 96b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * SVideo YUV 4:1:1 format. 106b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * 116b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * 4 consecutive quadwords describe 8 pixels on 2 lines, as depicted 126b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * below. An array of (width/4) of the below structure describes 2 136b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * scan lines. 146b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * 156b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * +-------------------+ 166b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * | 00 | 01 | 02 | 03 | . . . 176b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * +-------------------+ 186b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * | 10 | 11 | 12 | 13 | . . . 196b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * +-------------------+ 206b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender */ 216b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullenderstruct yuv411 { 22c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou struct { 23c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int dummy:8; 24c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int y0:8; 25c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int u0:2; 26c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int v0:2; 27c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int y1:8; 28c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int u1:2; 29c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int v1:2; 30c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou } v[4]; 316b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender}; 326b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender 33c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_Y00(y) (y).v[0].y0 34c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_Y01(y) (y).v[1].y0 35c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_Y02(y) (y).v[2].y0 36c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_Y03(y) (y).v[3].y0 37c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_Y10(y) (y).v[0].y1 38c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_Y11(y) (y).v[1].y1 39c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_Y12(y) (y).v[2].y1 40c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_Y13(y) (y).v[3].y1 41c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_U00(y) ((y).v[0].u0<<6|(y).v[1].u0<<4|(y).v[2].u0<<2|(y).v[3].u0) 42c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_U01(y) YUV411_U00(y) 43c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_U02(y) YUV411_U00(y) 44c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_U03(y) YUV411_U00(y) 45c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_U10(y) ((y).v[0].u1<<6|(y).v[1].u1<<4|(y).v[2].u1<<2|(y).v[3].u1) 46c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_U11(y) YUV411_U10(y) 47c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_U12(y) YUV411_U10(y) 48c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_U13(y) YUV411_U10(y) 49c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_V00(y) ((y).v[0].v0<<6|(y).v[1].v0<<4|(y).v[2].v0<<2|(y).v[3].v0) 50c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_V01(y) YUV411_V00(y) 51c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_V02(y) YUV411_V00(y) 52c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_V03(y) YUV411_V00(y) 53c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_V10(y) ((y).v[0].v1<<6|(y).v[1].v1<<4|(y).v[2].v1<<2|(y).v[3].v1) 54c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_V11(y) YUV411_V10(y) 55c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_V12(y) YUV411_V10(y) 56c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV411_V13(y) YUV411_V10(y) 576b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender 586b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender/* 596b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * Compression Library YUV 4:2:2 format. 606b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * 616b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * 1 longword describes 2 pixels. 626b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * 636b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * +-------+ 646b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * | 0 | 1 | 656b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * +-------+ 666b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender */ 676b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullenderstruct yuv422 { 68c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int u:8; 69c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int y0:8; 70c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int v:8; 71c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou unsigned int y1:8; 726b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender}; 73c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV422_Y0(y) (y).y0 74c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV422_Y1(y) (y).y1 75c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV422_U0(y) (y).u 76c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV422_U1(y) (y).u 77c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV422_V0(y) (y).v 78c83ea137d7e717f764e2f31fc2544f522de7d857Antoine Pitrou#define YUV422_V1(y) (y).v 796b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender 806b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender/* 816b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * Compression library YUV 4:2:2 Duplicate Chroma format. 826b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * 836b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * This is like the previous format, but the U and V values are 846b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * duplicated vertically (and hence there is some redundancy in the 856b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * data). With other words, lines 2*n and 2*n+1 have the same U and V 866b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * values but different Y values. 876b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender */ 886b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender 896b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender/* 906b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender * Conversion functions. 916b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullender */ 926b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullendervoid yuv_sv411_to_cl422dc(int, void *, void *, int, int); 936b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullendervoid yuv_sv411_to_cl422dc_quartersize(int, void *, void *, int, int); 946b517fdc95bdd4b199a9a1324fd6c11e51edb180Sjoerd Mullendervoid yuv_sv411_to_cl422dc_sixteenthsize(int, void *, void *, int, int); 95a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum 96a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#ifdef __cplusplus 97a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum} 98a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#endif 99a3309960a50dbadfd854299e7420223eb8718a56Guido van Rossum#endif /* !Py_YUV_H */ 100