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
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