00001
00002
00003
00004
00005
00006
00007
00008 #ifndef DRV_NDFileJPEG_H
00009 #define DRV_NDFileJPEG_H
00010
00011 #include "NDPluginFile.h"
00012 #include "jpeglib.h"
00013
00014 #define JPEG_BUF_SIZE 4096
00015
00017 typedef struct {
00018 struct jpeg_destination_mgr pub;
00019 class NDFileJPEG *pNDFileJPEG;
00020 } jpegDestMgr;
00021
00023 typedef enum
00024 {
00025 NDFileJPEGQuality
00026 = NDPluginFileLastParam,
00027 NDFileJPEGLastParam
00028 } NDFileJPEGParam_t;
00029
00030
00034 class NDFileJPEG : public NDPluginFile {
00035 public:
00036 NDFileJPEG(const char *portName, int queueSize, int blockingCallbacks,
00037 const char *NDArrayPort, int NDArrayAddr,
00038 int priority, int stackSize);
00039
00040 virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
00041 const char **pptypeName, size_t *psize);
00042
00043
00044 virtual asynStatus openFile(const char *fileName, NDFileOpenMode_t openMode, NDArray *pArray);
00045 virtual asynStatus readFile(NDArray **pArray);
00046 virtual asynStatus writeFile(NDArray *pArray);
00047 virtual asynStatus closeFile();
00048
00049 void initDestination();
00050 boolean emptyOutputBuffer();
00051 void termDestination();
00052
00053 private:
00054 struct jpeg_compress_struct jpegInfo;
00055 struct jpeg_error_mgr jpegErr;
00056 NDColorMode_t colorMode;
00057 FILE *outFile;
00058 JOCTET jpegBuffer[JPEG_BUF_SIZE];
00059 jpegDestMgr destMgr;
00060 };
00061
00062 #endif