Mercurial > mplayer.hg
annotate postproc/swscale_internal.h @ 13367:81ca72fd45f6
runtime aspect switching, patch by Aurelien Jacobs <aurel at gnuage . org>
author | diego |
---|---|
date | Fri, 17 Sep 2004 15:38:59 +0000 |
parents | 1d6892e87a2c |
children | 6bd869a18d2c |
rev | line source |
---|---|
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
1 /* |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
2 Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at> |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
3 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
4 This program is free software; you can redistribute it and/or modify |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
5 it under the terms of the GNU General Public License as published by |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
6 the Free Software Foundation; either version 2 of the License, or |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
7 (at your option) any later version. |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
8 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
9 This program is distributed in the hope that it will be useful, |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
12 GNU General Public License for more details. |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
13 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
14 You should have received a copy of the GNU General Public License |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
15 along with this program; if not, write to the Free Software |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
17 */ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
18 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
19 #ifndef SWSCALE_INTERNAL_H |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
20 #define SWSCALE_INTERNAL_H |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
21 |
12838
1d6892e87a2c
fix altivec.h inclusion (vector keyword in structure)
alex
parents:
12698
diff
changeset
|
22 #ifdef HAVE_ALTIVEC_H |
1d6892e87a2c
fix altivec.h inclusion (vector keyword in structure)
alex
parents:
12698
diff
changeset
|
23 #include <altivec.h> |
1d6892e87a2c
fix altivec.h inclusion (vector keyword in structure)
alex
parents:
12698
diff
changeset
|
24 #endif |
1d6892e87a2c
fix altivec.h inclusion (vector keyword in structure)
alex
parents:
12698
diff
changeset
|
25 |
10046 | 26 #include "../mp_msg.h" |
27 | |
28 #define MSG_WARN(args...) mp_msg(MSGT_SWS,MSGL_WARN, ##args ) | |
29 #define MSG_FATAL(args...) mp_msg(MSGT_SWS,MSGL_FATAL, ##args ) | |
30 #define MSG_ERR(args...) mp_msg(MSGT_SWS,MSGL_ERR, ##args ) | |
31 #define MSG_V(args...) mp_msg(MSGT_SWS,MSGL_V, ##args ) | |
32 #define MSG_DBG2(args...) mp_msg(MSGT_SWS,MSGL_DBG2, ##args ) | |
33 #define MSG_INFO(args...) mp_msg(MSGT_SWS,MSGL_INFO, ##args ) | |
34 | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
35 #define MAX_FILTER_SIZE 256 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
36 |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
37 typedef int (*SwsFunc)(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY, |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
38 int srcSliceH, uint8_t* dst[], int dstStride[]); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
39 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
40 /* this struct should be aligned on at least 32-byte boundary */ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
41 typedef struct SwsContext{ |
9499 | 42 /** |
43 * | |
44 * Note the src,dst,srcStride,dstStride will be copied, in the sws_scale() warper so they can freely be modified here | |
45 */ | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
46 SwsFunc swScale; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
47 int srcW, srcH, dstH; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
48 int chrSrcW, chrSrcH, chrDstW, chrDstH; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
49 int lumXInc, chrXInc; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
50 int lumYInc, chrYInc; |
9697 | 51 int dstFormat, srcFormat; ///< format 4:2:0 type is allways YV12 |
52 int origDstFormat, origSrcFormat; ///< format | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
53 int chrSrcHSubSample, chrSrcVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
54 int chrIntHSubSample, chrIntVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
55 int chrDstHSubSample, chrDstVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
56 int vChrDrop; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
57 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
58 int16_t **lumPixBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
59 int16_t **chrPixBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
60 int16_t *hLumFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
61 int16_t *hLumFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
62 int16_t *hChrFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
63 int16_t *hChrFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
64 int16_t *vLumFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
65 int16_t *vLumFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
66 int16_t *vChrFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
67 int16_t *vChrFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
68 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
69 uint8_t formatConvBuffer[4000]; //FIXME dynamic alloc, but we have to change alot of code for this to be usefull |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
70 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
71 int hLumFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
72 int hChrFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
73 int vLumFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
74 int vChrFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
75 int vLumBufSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
76 int vChrBufSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
77 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
78 uint8_t __attribute__((aligned(32))) funnyYCode[10000]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
79 uint8_t __attribute__((aligned(32))) funnyUVCode[10000]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
80 int32_t *lumMmx2FilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
81 int32_t *chrMmx2FilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
82 int16_t *lumMmx2Filter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
83 int16_t *chrMmx2Filter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
84 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
85 int canMMX2BeUsed; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
86 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
87 int lastInLumBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
88 int lastInChrBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
89 int lumBufIndex; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
90 int chrBufIndex; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
91 int dstY; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
92 int flags; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
93 void * yuvTable; // pointer to the yuv->rgb table start so it can be freed() |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
94 void * table_rV[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
95 void * table_gU[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
96 int table_gV[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
97 void * table_bU[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
98 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
99 //Colorspace stuff |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
100 int contrast, brightness, saturation; // for sws_getColorspaceDetails |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
101 int srcColorspaceTable[4]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
102 int dstColorspaceTable[4]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
103 int srcRange, dstRange; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
104 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
105 #define RED_DITHER "0*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
106 #define GREEN_DITHER "1*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
107 #define BLUE_DITHER "2*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
108 #define Y_COEFF "3*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
109 #define VR_COEFF "4*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
110 #define UB_COEFF "5*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
111 #define VG_COEFF "6*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
112 #define UG_COEFF "7*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
113 #define Y_OFFSET "8*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
114 #define U_OFFSET "9*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
115 #define V_OFFSET "10*8" |
11368
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
116 #define LUM_MMX_FILTER_OFFSET "11*8" |
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
117 #define CHR_MMX_FILTER_OFFSET "11*8+4*4*256" |
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
118 #define DSTW_OFFSET "11*8+4*4*256*2" //do not change, its hardcoded in the asm |
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
119 #define ESP_OFFSET "11*8+4*4*256*2+4" |
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
120 #define VROUNDER_OFFSET "11*8+4*4*256*2+8" |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
121 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
122 uint64_t redDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
123 uint64_t greenDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
124 uint64_t blueDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
125 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
126 uint64_t yCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
127 uint64_t vrCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
128 uint64_t ubCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
129 uint64_t vgCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
130 uint64_t ugCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
131 uint64_t yOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
132 uint64_t uOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
133 uint64_t vOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
134 int32_t lumMmxFilter[4*MAX_FILTER_SIZE]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
135 int32_t chrMmxFilter[4*MAX_FILTER_SIZE]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
136 int dstW; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
137 int esp; |
11368
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
138 uint64_t vRounder __attribute__((aligned(8))); |
12698 | 139 |
140 #ifdef HAVE_ALTIVEC | |
141 | |
142 vector signed short CY; | |
143 vector signed short CRV; | |
144 vector signed short CBU; | |
145 vector signed short CGU; | |
146 vector signed short CGV; | |
147 vector signed short OY; | |
148 vector unsigned short CSHIFT; | |
149 | |
150 #endif | |
151 | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
152 } SwsContext; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
153 //FIXME check init (where 0) |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
154 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
155 SwsFunc yuv2rgb_get_func_ptr (SwsContext *c); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
156 int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
157 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
158 #endif |