Mercurial > mplayer.hg
annotate postproc/swscale_internal.h @ 9981:99b58133c376
memleak fix by Raindel Shachar <raindel@techunix.technion.ac.il>
author | alex |
---|---|
date | Thu, 24 Apr 2003 19:07:46 +0000 |
parents | 5025150738eb |
children | 99aec27d3618 |
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 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
22 #define MAX_FILTER_SIZE 256 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
23 |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
24 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
|
25 int srcSliceH, uint8_t* dst[], int dstStride[]); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
26 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
27 /* this struct should be aligned on at least 32-byte boundary */ |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
28 typedef struct SwsContext{ |
9499 | 29 /** |
30 * | |
31 * Note the src,dst,srcStride,dstStride will be copied, in the sws_scale() warper so they can freely be modified here | |
32 */ | |
9494
543ab3909b78
sws_ prefix, more seperation between internal & external swscaler API
michael
parents:
9476
diff
changeset
|
33 SwsFunc swScale; |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
34 int srcW, srcH, dstH; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
35 int chrSrcW, chrSrcH, chrDstW, chrDstH; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
36 int lumXInc, chrXInc; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
37 int lumYInc, chrYInc; |
9697 | 38 int dstFormat, srcFormat; ///< format 4:2:0 type is allways YV12 |
39 int origDstFormat, origSrcFormat; ///< format | |
9476
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
40 int chrSrcHSubSample, chrSrcVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
41 int chrIntHSubSample, chrIntVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
42 int chrDstHSubSample, chrDstVSubSample; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
43 int vChrDrop; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
44 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
45 int16_t **lumPixBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
46 int16_t **chrPixBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
47 int16_t *hLumFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
48 int16_t *hLumFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
49 int16_t *hChrFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
50 int16_t *hChrFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
51 int16_t *vLumFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
52 int16_t *vLumFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
53 int16_t *vChrFilter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
54 int16_t *vChrFilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
55 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
56 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
|
57 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
58 int hLumFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
59 int hChrFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
60 int vLumFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
61 int vChrFilterSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
62 int vLumBufSize; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
63 int vChrBufSize; |
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 __attribute__((aligned(32))) funnyYCode[10000]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
66 uint8_t __attribute__((aligned(32))) funnyUVCode[10000]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
67 int32_t *lumMmx2FilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
68 int32_t *chrMmx2FilterPos; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
69 int16_t *lumMmx2Filter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
70 int16_t *chrMmx2Filter; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
71 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
72 int canMMX2BeUsed; |
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 int lastInLumBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
75 int lastInChrBuf; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
76 int lumBufIndex; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
77 int chrBufIndex; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
78 int dstY; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
79 int flags; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
80 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
|
81 void * table_rV[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
82 void * table_gU[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
83 int table_gV[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
84 void * table_bU[256]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
85 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
86 //Colorspace stuff |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
87 int contrast, brightness, saturation; // for sws_getColorspaceDetails |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
88 int srcColorspaceTable[4]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
89 int dstColorspaceTable[4]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
90 int srcRange, dstRange; |
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 #define RED_DITHER "0*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
93 #define GREEN_DITHER "1*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
94 #define BLUE_DITHER "2*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
95 #define Y_COEFF "3*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
96 #define VR_COEFF "4*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
97 #define UB_COEFF "5*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
98 #define VG_COEFF "6*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
99 #define UG_COEFF "7*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
100 #define Y_OFFSET "8*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
101 #define U_OFFSET "9*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
102 #define V_OFFSET "10*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
103 #define LUM_MMX_FILTER_OFFSET "11*8" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
104 #define CHR_MMX_FILTER_OFFSET "11*8+4*4*256" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
105 #define DSTW_OFFSET "11*8+4*4*256*2" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
106 #define ESP_OFFSET "11*8+4*4*256*2+4" |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
107 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
108 uint64_t redDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
109 uint64_t greenDither __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
110 uint64_t blueDither __attribute__((aligned(8))); |
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 uint64_t yCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
113 uint64_t vrCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
114 uint64_t ubCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
115 uint64_t vgCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
116 uint64_t ugCoeff __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
117 uint64_t yOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
118 uint64_t uOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
119 uint64_t vOffset __attribute__((aligned(8))); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
120 int32_t lumMmxFilter[4*MAX_FILTER_SIZE]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
121 int32_t chrMmxFilter[4*MAX_FILTER_SIZE]; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
122 int dstW; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
123 int esp; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
124 } SwsContext; |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
125 //FIXME check init (where 0) |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
126 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
127 SwsFunc yuv2rgb_get_func_ptr (SwsContext *c); |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
128 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
|
129 |
eff727517e6b
yuv2rgb brightness/contrast/saturation/different colorspaces support finished
michael
parents:
diff
changeset
|
130 #endif |