00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined SOCUDASEISMIC_H
00024 #define SOCUDASEISMIC_H
00025
00026 #include <Inventor/SbString.h>
00027
00028 #include <Inventor/STL/vector>
00029
00030 #include <Inventor/algorithms/SoSeismic.h>
00031 #include <Inventor/cuda/algorithms/SoCudaAlgorithmsDefs.h>
00032
00033 class SoBufferObject;
00034 class SoCudaBufferObject;
00035 class SoCudaHandle;
00036 class SoCudaConvolution;
00037
00058 class SoCudaSeismic : public SoSeismic
00059 {
00060 private:
00062 static void initClass();
00063
00065 static void exitClass();
00066
00068 virtual ~SoCudaSeismic();
00069
00070 public:
00072 SoCudaSeismic();
00073
00088 virtual int computeInstPhase( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00089 int traceSize, int numTrace );
00090
00105 virtual int computeEnvelope( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00106 int traceSize, int numTrace );
00107
00117 virtual int computeHilbert( SoBufferObject* sourceBufferObject, SoBufferObject* targetBufferObject,
00118 int width, int height );
00119
00126 int computeInstPhase( SoCudaBufferObject* sourceBufferObject, SoCudaBufferObject* targetBufferObject,
00127 int traceSize, int numTrace );
00128
00135 int computeEnvelope( SoCudaBufferObject* sourceBufferObject, SoCudaBufferObject* targetBufferObject,
00136 int traceSize, int numTrace );
00137
00144 int computeHilbert( SoCudaBufferObject* sourceBufferObject, SoCudaBufferObject* targetBufferObject,
00145 int width, int height );
00146
00147 private:
00148
00155 static void genHilbert( float* kernel, unsigned int k_radius );
00156
00157 private:
00158
00159
00160 SoCudaHandle* m_cuInstEnvelopeHandle;
00161
00162
00163 SoCudaHandle* m_cuInstPhaseHandle;
00164
00165
00166 SoCudaConvolution *m_cudaConvolutionInterface;
00167 };
00168
00169 #endif //SOCUDASEISMIC_H
00170
00171