Mercurial > mplayer.hg
comparison postproc/yuv2rgb_mlib.c @ 9476:eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
yuv2rgb deglobalize
yuv2rgb optimizations / cleanup
bugs?
author | michael |
---|---|
date | Fri, 21 Feb 2003 20:35:18 +0000 |
parents | 7bbe4bce6293 |
children | 543ab3909b78 |
comparison
equal
deleted
inserted
replaced
9475:6d4d66421b29 | 9476:eff727517e6b |
---|---|
24 | 24 |
25 #include <mlib_types.h> | 25 #include <mlib_types.h> |
26 #include <mlib_status.h> | 26 #include <mlib_status.h> |
27 #include <mlib_sys.h> | 27 #include <mlib_sys.h> |
28 #include <mlib_video.h> | 28 #include <mlib_video.h> |
29 #include <inttypes.h> | |
30 #include <stdlib.h> | |
31 #include <assert.h> | |
29 | 32 |
30 static void mlib_YUV2ARGB420_32(uint8_t* image, uint8_t* py, | 33 #include "../libvo/img_format.h" //FIXME try to reduce dependency of such stuff |
31 uint8_t* pu, uint8_t* pv, | 34 #include "swscale.h" |
32 unsigned h_size, unsigned v_size, | 35 |
33 int rgb_stride, int y_stride, int uv_stride) | 36 static void mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
34 { | 37 int srcSliceH, uint8_t* dst[], int dstStride[]){ |
35 mlib_VideoColorYUV2ARGB420(image, py, pu, pv, h_size, | 38 uint8_t *src[3]; |
36 v_size, rgb_stride, y_stride, uv_stride); | 39 int srcStride[3]; |
40 | |
41 sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam); | |
42 if(c->srcFormat == IMGFMT_422P){ | |
43 srcStride[1] *= 2; | |
44 srcStride[2] *= 2; | |
45 } | |
46 | |
47 assert(srcStride[1] == srcStride[2]); | |
48 | |
49 mlib_VideoColorYUV2ARGB420(dst[0], src[0], src[1], src[2], c->dstW, | |
50 c->dstH, dstStride[0], srcStride[0], srcStride[1]); | |
37 } | 51 } |
38 | 52 |
39 static void mlib_YUV2ABGR420_32(uint8_t* image, uint8_t* py, | 53 static void mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
40 uint8_t* pu, uint8_t* pv, | 54 int srcSliceH, uint8_t* dst[], int dstStride[]){ |
41 unsigned h_size, unsigned v_size, | 55 uint8_t *src[3]; |
42 int rgb_stride, int y_stride, int uv_stride) | 56 int srcStride[3]; |
43 { | 57 |
44 mlib_VideoColorYUV2ABGR420(image, py, pu, pv, h_size, | 58 sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam); |
45 v_size, rgb_stride, y_stride, uv_stride); | 59 if(c->srcFormat == IMGFMT_422P){ |
60 srcStride[1] *= 2; | |
61 srcStride[2] *= 2; | |
62 } | |
63 | |
64 assert(srcStride[1] == srcStride[2]); | |
65 | |
66 mlib_VideoColorYUV2ABGR420(dst[0], src[0], src[1], src[2], c->dstW, | |
67 c->dstH, dstStride[0], srcStride[0], srcStride[1]); | |
46 } | 68 } |
47 | 69 |
48 static void mlib_YUV2RGB420_24(uint8_t* image, uint8_t* py, | 70 static void mlib_YUV2RGB420_24(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
49 uint8_t* pu, uint8_t* pv, | 71 int srcSliceH, uint8_t* dst[], int dstStride[]){ |
50 unsigned h_size, unsigned v_size, | 72 uint8_t *src[3]; |
51 int rgb_stride, int y_stride, int uv_stride) | 73 int srcStride[3]; |
52 { | 74 |
53 mlib_VideoColorYUV2RGB420(image, py, pu, pv, h_size, | 75 sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam); |
54 v_size, rgb_stride, y_stride, uv_stride); | 76 if(c->srcFormat == IMGFMT_422P){ |
77 srcStride[1] *= 2; | |
78 srcStride[2] *= 2; | |
79 } | |
80 | |
81 assert(srcStride[1] == srcStride[2]); | |
82 | |
83 mlib_VideoColorYUV2RGB420(dst[0], src[0], src[1], src[2], c->dstW, | |
84 c->dstH, dstStride[0], srcStride[0], srcStride[1]); | |
55 } | 85 } |
56 | 86 |
57 | 87 |
58 yuv2rgb_fun yuv2rgb_init_mlib(unsigned bpp, int mode) | 88 SwsFunc yuv2rgb_init_mlib(SwsContext *c) |
59 { | 89 { |
60 | 90 switch(c->dstFormat){ |
61 if( bpp == 24 ) | 91 case IMGFMT_RGB24: return mlib_YUV2RGB420_24; |
62 { | 92 case IMGFMT_RGB32: return mlib_YUV2ARGB420_32; |
63 if( mode == MODE_RGB ) | 93 case IMGFMT_BGR32: return mlib_YUV2ARGB420_32; |
64 return mlib_YUV2RGB420_24; | 94 default: return NULL; |
65 } | |
66 | |
67 if( bpp == 32 ) | |
68 { | |
69 if( mode == MODE_RGB ) | |
70 return mlib_YUV2ARGB420_32; | |
71 else if( mode == MODE_BGR ) | |
72 return mlib_YUV2ABGR420_32; | |
73 } | 95 } |
74 | |
75 return NULL; | |
76 } | 96 } |
77 | 97 |