• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

include/FCam/AsyncFile.h

Go to the documentation of this file.
00001 #ifndef FCAM_ASYNCFILE_H
00002 #define FCAM_ASYNCFILE_H
00003 
00004 #include <queue>
00005 #include <semaphore.h>
00006 #include <string>
00007 #include <pthread.h>
00008 
00009 #include "Frame.h"
00010 
00013 
00014 namespace FCam {
00015 
00016     class Lens;
00017     class Flash;
00018 
00021     class AsyncFileWriter {
00022       public:
00023         AsyncFileWriter();
00024         ~AsyncFileWriter();
00025 
00027         void saveDNG(Frame, std::string filename);
00028         void saveDNG(Image, std::string filename);
00029 
00032         void saveJPEG(Frame, std::string filename, int quality = 75);
00033         void saveJPEG(Image, std::string filename, int quality = 75);
00034 
00036         void saveDump(Frame, std::string filename);
00037         void saveDump(Image, std::string filename);
00038 
00041         int savesPending() {return pending;}        
00042 
00045         void cancel();
00046 
00047       private:
00048 
00049         friend void *launch_async_file_writer_thread_(void *);
00050         
00051         struct SaveRequest {
00052             // only one of these two things should be defined
00053             Frame frame;
00054             Image image;
00055 
00056             std::string filename;
00057             enum {DNGFrame = 0, JPEGFrame, JPEGImage, DumpFrame, DumpImage} fileType;
00058             int quality;
00059         };
00060 
00061         std::queue<SaveRequest> saveQueue;
00062         pthread_mutex_t saveQueueMutex;
00063         sem_t *saveQueueSemaphore;
00064 
00065         bool running, stop;
00066         pthread_t thread;
00067 
00068         void run();
00069 
00070         int pending;
00071     };
00072 
00073 }
00074 
00075 #endif

Generated on Mon Aug 16 2010 14:25:45 for FCam by  doxygen 1.7.1