blob: 699b5a40133e76a1a9a9c269d2193adcda604ca9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/*-----------------------------------------------------------------
LOG
GEM - Graphics Environment for Multimedia
Base class for pix class gem objects
Copyright (c) 1997-1999 Mark Danks. mark@danks.org
Copyright (c) Günther Geiger. geiger@epy.co.at
Copyright (c) 2001-2011 IOhannes m zmölnig. forum::für::umläute. IEM. zmoelnig@iem.at
For information on usage and redistribution, and for a DISCLAIMER OF ALL
WARRANTIES, see the file, "GEM.LICENSE.TERMS" in this distribution.
-----------------------------------------------------------------*/
#ifndef _INCLUDE__GEM_BASE_GEMPIXOBJ_H_
#define _INCLUDE__GEM_BASE_GEMPIXOBJ_H_
#include "Base/GemBase.h"
#include "Gem/Image.h"
#include "stdlib.h"
#include "string.h"
#include "math.h"
/*-----------------------------------------------------------------
-------------------------------------------------------------------
CLASS
GemPixObj
Base class for pix class gem objects
DESCRIPTION
-----------------------------------------------------------------*/
class GEM_EXTERN GemPixObj : public GemBase
{
public:
//////////
// Constructor
GemPixObj();
protected:
//////////
// Destructor
virtual ~GemPixObj() { }
//////////
// The derived class should override this if it provides
// processing independent of the image.format
// This is called whenever a new image comes through.
// The default is to output an error
virtual void processImage(imageStruct &image);
//////////
// The derived class should override this.
// This is called whenever a new RGB image comes through.
// The default is to call processImage().
virtual void processRGBImage(imageStruct &image);
//////////
// The derived class should override this.
// This is called whenever a new RGBA image comes through.
// The default is to call processImage().
virtual void processRGBAImage(imageStruct &image);
// SIMD-optimized functions: by default the non-optimized function is called
virtual void processRGBAMMX(imageStruct &image);
virtual void processRGBASSE2(imageStruct &image);
virtual void processRGBAAltivec(imageStruct &image);
//////////
// The derived class should override this.
// This is called whenever a new gray8 image comes through.
// The default is to call processImage().
virtual void processGrayImage(imageStruct &image);
// SIMD-optimized functions: by default the non-optimized function is called
virtual void processGrayMMX(imageStruct &image);
virtual void processGraySSE2(imageStruct &image);
virtual void processGrayAltivec(imageStruct &image);
//////////
// The derived class should override this.
// This is called whenever a new YUV422 image comes through.
// The default is to call processImage().
virtual void processYUVImage(imageStruct &image);
// SIMD-optimized functions: by default the non-optimized function is called
virtual void processYUVMMX(imageStruct &image);
virtual void processYUVSSE2(imageStruct &image);
virtual void processYUVAltivec(imageStruct &image);
//////////
// If the derived class needs the image resent.
// This sets the dirty bit on the pixBlock.
void setPixModified();
//////////
// Turn on/off processing
void processOnOff(int on);
//////////
// the pixBlock-cache
pixBlock cachedPixBlock;
pixBlock *orgPixBlock;
//////////
int m_processOnOff;
int m_simd;
//////////
// creation callback
static void real_obj_setupCallback(t_class *classPtr) {
GemBase::real_obj_setupCallback(classPtr);
GemPixObj::obj_setupCallback(classPtr);
}
//////////
// The derived class should NOT override this unless they have some
// very special behavior.
// Do the rendering, which calls processImage or processGrayImage, etc...
// save the image-information
virtual void render(GemState *state);
// turn the pointer back to the old data after rendering
virtual void postrender(GemState *state);
void startRendering(void) {
//post("start rendering");
setPixModified();
}
private:
static inline GemPixObj *GetMyClass(void *data) {return((GemPixObj *)((Obj_header *)data)->data);}
//////////
// static member functions
static void obj_setupCallback(t_class *classPtr);
static void floatMessCallback(void *data, float n);
static void simdMessCallback(void *data, float n);
};
#endif // for header file
|