Mercurial > mplayer.hg
annotate postproc/swscale_internal.h @ 15079:1b96e77f5c33
remove force_load_font stuff moved to sub.c
author | henry |
---|---|
date | Sat, 09 Apr 2005 22:38:41 +0000 |
parents | e85e3894520f |
children | 43e55b3d1af0 |
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 |
13564 | 26 #ifdef CONFIG_DARWIN |
27 #define AVV(x...) (x) | |
28 #else | |
29 #define AVV(x...) {x} | |
30 #endif | |
31 | |
10046 | 32 #include "../mp_msg.h" |
33 | |
34 #define MSG_WARN(args...) mp_msg(MSGT_SWS,MSGL_WARN, ##args ) | |
35 #define MSG_FATAL(args...) mp_msg(MSGT_SWS,MSGL_FATAL, ##args ) | |
36 #define MSG_ERR(args...) mp_msg(MSGT_SWS,MSGL_ERR, ##args ) | |
37 #define MSG_V(args...) mp_msg(MSGT_SWS,MSGL_V, ##args ) | |
38 #define MSG_DBG2(args...) mp_msg(MSGT_SWS,MSGL_DBG2, ##args ) | |
39 #define MSG_INFO(args...) mp_msg(MSGT_SWS,MSGL_INFO, ##args ) | |
40 | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
41 #define MAX_FILTER_SIZE 256 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
42 |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
43 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
|
44 int srcSliceH, uint8_t* dst[], int dstStride[]); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
45 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
46 /* this struct should be aligned on at least 32-byte boundary */ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
47 typedef struct SwsContext{ |
9499 | 48 /** |
49 * | |
50 * Note the src,dst,srcStride,dstStride will be copied, in the sws_scale() warper so they can freely be modified here | |
51 */ | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
52 SwsFunc swScale; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
53 int srcW, srcH, dstH; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
54 int chrSrcW, chrSrcH, chrDstW, chrDstH; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
55 int lumXInc, chrXInc; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
56 int lumYInc, chrYInc; |
9697 | 57 int dstFormat, srcFormat; ///< format 4:2:0 type is allways YV12 |
58 int origDstFormat, origSrcFormat; ///< format | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
59 int chrSrcHSubSample, chrSrcVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
60 int chrIntHSubSample, chrIntVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
61 int chrDstHSubSample, chrDstVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
62 int vChrDrop; |
13373
6bd869a18d2c
passing an array or double precission parameters for the scaling function, instead of missusing a few bits of the flags
michael
parents:
12838
diff
changeset
|
63 double param[2]; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
64 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
65 int16_t **lumPixBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
66 int16_t **chrPixBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
67 int16_t *hLumFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
68 int16_t *hLumFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
69 int16_t *hChrFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
70 int16_t *hChrFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
71 int16_t *vLumFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
72 int16_t *vLumFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
73 int16_t *vChrFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
74 int16_t *vChrFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
75 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
76 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
|
77 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
78 int hLumFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
79 int hChrFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
80 int vLumFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
81 int vChrFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
82 int vLumBufSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
83 int vChrBufSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
84 |
14625
e85e3894520f
makes funnyCode pages executable (for CPU with NX bit)
aurel
parents:
13564
diff
changeset
|
85 uint8_t *funnyYCode; |
e85e3894520f
makes funnyCode pages executable (for CPU with NX bit)
aurel
parents:
13564
diff
changeset
|
86 uint8_t *funnyUVCode; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
87 int32_t *lumMmx2FilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
88 int32_t *chrMmx2FilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
89 int16_t *lumMmx2Filter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
90 int16_t *chrMmx2Filter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
91 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
92 int canMMX2BeUsed; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
93 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
94 int lastInLumBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
95 int lastInChrBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
96 int lumBufIndex; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
97 int chrBufIndex; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
98 int dstY; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
99 int flags; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
100 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
|
101 void * table_rV[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
102 void * table_gU[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
103 int table_gV[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
104 void * table_bU[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
105 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
106 //Colorspace stuff |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
107 int contrast, brightness, saturation; // for sws_getColorspaceDetails |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
108 int srcColorspaceTable[4]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
109 int dstColorspaceTable[4]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
110 int srcRange, dstRange; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
111 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
112 #define RED_DITHER "0*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
113 #define GREEN_DITHER "1*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
114 #define BLUE_DITHER "2*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
115 #define Y_COEFF "3*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
116 #define VR_COEFF "4*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
117 #define UB_COEFF "5*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
118 #define VG_COEFF "6*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
119 #define UG_COEFF "7*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
120 #define Y_OFFSET "8*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
121 #define U_OFFSET "9*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
122 #define V_OFFSET "10*8" |
11368
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
123 #define LUM_MMX_FILTER_OFFSET "11*8" |
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
124 #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
|
125 #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
|
126 #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
|
127 #define VROUNDER_OFFSET "11*8+4*4*256*2+8" |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
128 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
129 uint64_t redDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
130 uint64_t greenDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
131 uint64_t blueDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
132 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
133 uint64_t yCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
134 uint64_t vrCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
135 uint64_t ubCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
136 uint64_t vgCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
137 uint64_t ugCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
138 uint64_t yOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
139 uint64_t uOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
140 uint64_t vOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
141 int32_t lumMmxFilter[4*MAX_FILTER_SIZE]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
142 int32_t chrMmxFilter[4*MAX_FILTER_SIZE]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
143 int dstW; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
144 int esp; |
11368
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
145 uint64_t vRounder __attribute__((aligned(8))); |
12698 | 146 |
147 #ifdef HAVE_ALTIVEC | |
148 | |
149 vector signed short CY; | |
150 vector signed short CRV; | |
151 vector signed short CBU; | |
152 vector signed short CGU; | |
153 vector signed short CGV; | |
154 vector signed short OY; | |
155 vector unsigned short CSHIFT; | |
156 | |
157 #endif | |
158 | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
159 } SwsContext; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
160 //FIXME check init (where 0) |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
161 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
162 SwsFunc yuv2rgb_get_func_ptr (SwsContext *c); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
163 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
|
164 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
165 #endif |