Mercurial > mplayer.hg
annotate postproc/swscale_internal.h @ 11742:13eea50c9ce7
synchronization
author | paszczi |
---|---|
date | Sun, 04 Jan 2004 12:38:01 +0000 |
parents | 7fb6dbfbc7da |
children | d2aef091743c |
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 |
10046 | 22 #include "../mp_msg.h" |
23 | |
24 #define MSG_WARN(args...) mp_msg(MSGT_SWS,MSGL_WARN, ##args ) | |
25 #define MSG_FATAL(args...) mp_msg(MSGT_SWS,MSGL_FATAL, ##args ) | |
26 #define MSG_ERR(args...) mp_msg(MSGT_SWS,MSGL_ERR, ##args ) | |
27 #define MSG_V(args...) mp_msg(MSGT_SWS,MSGL_V, ##args ) | |
28 #define MSG_DBG2(args...) mp_msg(MSGT_SWS,MSGL_DBG2, ##args ) | |
29 #define MSG_INFO(args...) mp_msg(MSGT_SWS,MSGL_INFO, ##args ) | |
30 | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
31 #define MAX_FILTER_SIZE 256 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
32 |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
33 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
|
34 int srcSliceH, uint8_t* dst[], int dstStride[]); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
35 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
36 /* this struct should be aligned on at least 32-byte boundary */ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
37 typedef struct SwsContext{ |
9499 | 38 /** |
39 * | |
40 * Note the src,dst,srcStride,dstStride will be copied, in the sws_scale() warper so they can freely be modified here | |
41 */ | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
42 SwsFunc swScale; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
43 int srcW, srcH, dstH; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
44 int chrSrcW, chrSrcH, chrDstW, chrDstH; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
45 int lumXInc, chrXInc; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
46 int lumYInc, chrYInc; |
9697 | 47 int dstFormat, srcFormat; ///< format 4:2:0 type is allways YV12 |
48 int origDstFormat, origSrcFormat; ///< format | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
49 int chrSrcHSubSample, chrSrcVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
50 int chrIntHSubSample, chrIntVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
51 int chrDstHSubSample, chrDstVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
52 int vChrDrop; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
53 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
54 int16_t **lumPixBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
55 int16_t **chrPixBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
56 int16_t *hLumFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
57 int16_t *hLumFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
58 int16_t *hChrFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
59 int16_t *hChrFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
60 int16_t *vLumFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
61 int16_t *vLumFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
62 int16_t *vChrFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
63 int16_t *vChrFilterPos; |
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 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
|
66 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
67 int hLumFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
68 int hChrFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
69 int vLumFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
70 int vChrFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
71 int vLumBufSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
72 int vChrBufSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
73 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
74 uint8_t __attribute__((aligned(32))) funnyYCode[10000]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
75 uint8_t __attribute__((aligned(32))) funnyUVCode[10000]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
76 int32_t *lumMmx2FilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
77 int32_t *chrMmx2FilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
78 int16_t *lumMmx2Filter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
79 int16_t *chrMmx2Filter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
80 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
81 int canMMX2BeUsed; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
82 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
83 int lastInLumBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
84 int lastInChrBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
85 int lumBufIndex; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
86 int chrBufIndex; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
87 int dstY; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
88 int flags; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
89 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
|
90 void * table_rV[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
91 void * table_gU[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
92 int table_gV[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
93 void * table_bU[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
94 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
95 //Colorspace stuff |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
96 int contrast, brightness, saturation; // for sws_getColorspaceDetails |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
97 int srcColorspaceTable[4]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
98 int dstColorspaceTable[4]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
99 int srcRange, dstRange; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
100 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
101 #define RED_DITHER "0*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
102 #define GREEN_DITHER "1*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
103 #define BLUE_DITHER "2*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
104 #define Y_COEFF "3*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
105 #define VR_COEFF "4*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
106 #define UB_COEFF "5*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
107 #define VG_COEFF "6*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
108 #define UG_COEFF "7*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
109 #define Y_OFFSET "8*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
110 #define U_OFFSET "9*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
111 #define V_OFFSET "10*8" |
11368
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
112 #define LUM_MMX_FILTER_OFFSET "11*8" |
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
113 #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
|
114 #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
|
115 #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
|
116 #define VROUNDER_OFFSET "11*8+4*4*256*2+8" |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
117 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
118 uint64_t redDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
119 uint64_t greenDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
120 uint64_t blueDither __attribute__((aligned(8))); |
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 yCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
123 uint64_t vrCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
124 uint64_t ubCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
125 uint64_t vgCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
126 uint64_t ugCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
127 uint64_t yOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
128 uint64_t uOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
129 uint64_t vOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
130 int32_t lumMmxFilter[4*MAX_FILTER_SIZE]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
131 int32_t chrMmxFilter[4*MAX_FILTER_SIZE]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
132 int dstW; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
133 int esp; |
11368
7fb6dbfbc7da
10l (forgot that the dstW offset is hardcoded in the asm)
michael
parents:
11122
diff
changeset
|
134 uint64_t vRounder __attribute__((aligned(8))); |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
135 } SwsContext; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
136 //FIXME check init (where 0) |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
137 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
138 SwsFunc yuv2rgb_get_func_ptr (SwsContext *c); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
139 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
|
140 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
141 #endif |