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