Originally committed as revision 27527 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscaletags/v0.5
| @@ -65,6 +65,9 @@ void (*yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc | |||||
| void (*yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, | void (*yuv422ptoyuy2)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, | ||||
| long width, long height, | long width, long height, | ||||
| long lumStride, long chromStride, long dstStride); | long lumStride, long chromStride, long dstStride); | ||||
| void (*yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, | |||||
| long width, long height, | |||||
| long lumStride, long chromStride, long dstStride); | |||||
| void (*yuy2toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, | void (*yuy2toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, | ||||
| long width, long height, | long width, long height, | ||||
| long lumStride, long chromStride, long srcStride); | long lumStride, long chromStride, long srcStride); | ||||
| @@ -109,6 +109,14 @@ extern void (*yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_ | |||||
| long width, long height, | long width, long height, | ||||
| long lumStride, long chromStride, long dstStride); | long lumStride, long chromStride, long dstStride); | ||||
| /** | |||||
| * | |||||
| * width should be a multiple of 16 | |||||
| */ | |||||
| extern void (*yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, | |||||
| long width, long height, | |||||
| long lumStride, long chromStride, long dstStride); | |||||
| /** | /** | ||||
| * Height should be a multiple of 2 and width should be a multiple of 2. | * Height should be a multiple of 2 and width should be a multiple of 2. | ||||
| * (If this is a problem for anyone then tell me, and I will fix it.) | * (If this is a problem for anyone then tell me, and I will fix it.) | ||||
| @@ -1755,6 +1755,16 @@ static inline void RENAME(yv12touyvy)(const uint8_t *ysrc, const uint8_t *usrc, | |||||
| RENAME(yuvPlanartouyvy)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 2); | RENAME(yuvPlanartouyvy)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 2); | ||||
| } | } | ||||
| /** | |||||
| * Width should be a multiple of 16. | |||||
| */ | |||||
| static inline void RENAME(yuv422ptouyvy)(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, | |||||
| long width, long height, | |||||
| long lumStride, long chromStride, long dstStride) | |||||
| { | |||||
| RENAME(yuvPlanartouyvy)(ysrc, usrc, vsrc, dst, width, height, lumStride, chromStride, dstStride, 1); | |||||
| } | |||||
| /** | /** | ||||
| * Width should be a multiple of 16. | * Width should be a multiple of 16. | ||||
| */ | */ | ||||
| @@ -2727,6 +2737,7 @@ static inline void RENAME(rgb2rgb_init)(void){ | |||||
| yv12toyuy2 = RENAME(yv12toyuy2); | yv12toyuy2 = RENAME(yv12toyuy2); | ||||
| yv12touyvy = RENAME(yv12touyvy); | yv12touyvy = RENAME(yv12touyvy); | ||||
| yuv422ptoyuy2 = RENAME(yuv422ptoyuy2); | yuv422ptoyuy2 = RENAME(yuv422ptoyuy2); | ||||
| yuv422ptouyvy = RENAME(yuv422ptouyvy); | |||||
| yuy2toyv12 = RENAME(yuy2toyv12); | yuy2toyv12 = RENAME(yuy2toyv12); | ||||
| // uyvytoyv12 = RENAME(uyvytoyv12); | // uyvytoyv12 = RENAME(uyvytoyv12); | ||||
| // yvu9toyv12 = RENAME(yvu9toyv12); | // yvu9toyv12 = RENAME(yvu9toyv12); | ||||
| @@ -1648,6 +1648,24 @@ static int PlanarToUyvyWrapper(SwsContext *c, uint8_t* src[], int srcStride[], i | |||||
| return srcSliceH; | return srcSliceH; | ||||
| } | } | ||||
| static int YUV422PToYuy2Wrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, | |||||
| int srcSliceH, uint8_t* dstParam[], int dstStride[]){ | |||||
| uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY; | |||||
| yuv422ptoyuy2(src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0]); | |||||
| return srcSliceH; | |||||
| } | |||||
| static int YUV422PToUyvyWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, | |||||
| int srcSliceH, uint8_t* dstParam[], int dstStride[]){ | |||||
| uint8_t *dst=dstParam[0] + dstStride[0]*srcSliceY; | |||||
| yuv422ptouyvy(src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0]); | |||||
| return srcSliceH; | |||||
| } | |||||
| /* {RGB,BGR}{15,16,24,32,32_1} -> {RGB,BGR}{15,16,24,32} */ | /* {RGB,BGR}{15,16,24,32,32_1} -> {RGB,BGR}{15,16,24,32} */ | ||||
| static int rgb2rgbWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, | static int rgb2rgbWrapper(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, | ||||
| int srcSliceH, uint8_t* dst[], int dstStride[]){ | int srcSliceH, uint8_t* dst[], int dstStride[]){ | ||||
| @@ -2233,6 +2251,14 @@ SwsContext *sws_getContext(int srcW, int srcH, int srcFormat, int dstW, int dstH | |||||
| && (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)))) | && (!needsDither || (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)))) | ||||
| c->swScale= rgb2rgbWrapper; | c->swScale= rgb2rgbWrapper; | ||||
| if (srcFormat == PIX_FMT_YUV422P) | |||||
| { | |||||
| if (dstFormat == PIX_FMT_YUYV422) | |||||
| c->swScale= YUV422PToYuy2Wrapper; | |||||
| else if (dstFormat == PIX_FMT_UYVY422) | |||||
| c->swScale= YUV422PToUyvyWrapper; | |||||
| } | |||||
| /* LQ converters if -sws 0 or -sws 4*/ | /* LQ converters if -sws 0 or -sws 4*/ | ||||
| if (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)){ | if (c->flags&(SWS_FAST_BILINEAR|SWS_POINT)){ | ||||
| /* yv12_to_yuy2 */ | /* yv12_to_yuy2 */ | ||||