Mercurial > mplayer.hg
annotate postproc/yuv2rgb_mlib.c @ 9494:543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
sws_scale() returns the number of outputed lines
author | michael |
---|---|
date | Sun, 23 Feb 2003 22:05:55 +0000 |
parents | eff727517e6b |
children | bc5b87370cd1 |
rev | line source |
---|---|
2732 | 1 /* |
2 * yuv2rgb_mlib.c, Software YUV to RGB coverter using mediaLib | |
3 * | |
4 * Copyright (C) 2000, Håkan Hjort <d95hjort@dtek.chalmers.se> | |
5 * All Rights Reserved. | |
6 * | |
7 * This file is part of mpeg2dec, a free MPEG-2 video decoder | |
8 * | |
9 * mpeg2dec is free software; you can redistribute it and/or modify | |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2, or (at your option) | |
12 * any later version. | |
13 * | |
14 * mpeg2dec is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU General Public License | |
20 * along with GNU Make; see the file COPYING. If not, write to | |
21 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
22 * | |
23 */ | |
24 | |
25 #include <mlib_types.h> | |
26 #include <mlib_status.h> | |
27 #include <mlib_sys.h> | |
28 #include <mlib_video.h> | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
29 #include <inttypes.h> |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
30 #include <stdlib.h> |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
31 #include <assert.h> |
2732 | 32 |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
33 #include "../libvo/img_format.h" //FIXME try to reduce dependency of such stuff |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
34 #include "swscale.h" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
35 |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
36 static int mlib_YUV2ARGB420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
37 int srcSliceH, uint8_t* dst[], int dstStride[]){ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
38 uint8_t *src[3]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
39 int srcStride[3]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
40 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
41 sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
42 if(c->srcFormat == IMGFMT_422P){ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
43 srcStride[1] *= 2; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
44 srcStride[2] *= 2; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
45 } |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
46 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
47 assert(srcStride[1] == srcStride[2]); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
48 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
49 mlib_VideoColorYUV2ARGB420(dst[0], src[0], src[1], src[2], c->dstW, |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
50 c->dstH, dstStride[0], srcStride[0], srcStride[1]); |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
51 return srcSliceH; |
2732 | 52 } |
53 | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
54 static int mlib_YUV2ABGR420_32(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
55 int srcSliceH, uint8_t* dst[], int dstStride[]){ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
56 uint8_t *src[3]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
57 int srcStride[3]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
58 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
59 sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
60 if(c->srcFormat == IMGFMT_422P){ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
61 srcStride[1] *= 2; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
62 srcStride[2] *= 2; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
63 } |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
64 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
65 assert(srcStride[1] == srcStride[2]); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
66 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
67 mlib_VideoColorYUV2ABGR420(dst[0], src[0], src[1], src[2], c->dstW, |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
68 c->dstH, dstStride[0], srcStride[0], srcStride[1]); |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
69 return srcSliceH; |
2732 | 70 } |
71 | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
72 static int mlib_YUV2RGB420_24(SwsContext *c, uint8_t* srcParam[], int srcStrideParam[], int srcSliceY, |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
73 int srcSliceH, uint8_t* dst[], int dstStride[]){ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
74 uint8_t *src[3]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
75 int srcStride[3]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
76 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
77 sws_orderYUV(c->srcFormat, src, srcStride, srcParam, srcStrideParam); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
78 if(c->srcFormat == IMGFMT_422P){ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
79 srcStride[1] *= 2; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
80 srcStride[2] *= 2; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
81 } |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
82 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
83 assert(srcStride[1] == srcStride[2]); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
84 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
85 mlib_VideoColorYUV2RGB420(dst[0], src[0], src[1], src[2], c->dstW, |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
86 c->dstH, dstStride[0], srcStride[0], srcStride[1]); |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
87 return srcSliceH; |
2732 | 88 } |
89 | |
90 | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
91 SwsFunc yuv2rgb_init_mlib(SwsContext *c) |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
92 { |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
93 switch(c->dstFormat){ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
94 case IMGFMT_RGB24: return mlib_YUV2RGB420_24; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
95 case IMGFMT_RGB32: return mlib_YUV2ARGB420_32; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
96 case IMGFMT_BGR32: return mlib_YUV2ARGB420_32; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
9392
diff
changeset
|
97 default: return NULL; |
2732 | 98 } |
99 } | |
100 |