blob: 13ab3b16824ddda4ff3cb5c563dc2e3538cfc651 [file] [log] [blame]
//-------------------------------------------------------------
// ____ _ _
// / ___|____ _ _ ____ ____| |__ | |
// | | / ___| | | | _ \/ ___| _ \| |
// | |___| | | |_| | | | | |___| | | ||_|
// \____|_| \_____|_| |_|\____|_| |_|(_) Media benchmarks
//
// 2006, Intel Corporation, licensed under Apache 2.0
//
// file : AsyncIO.h
// author : Scott Ettinger - scott.m.ettinger@intel.com
// description : Asynchronous image loading object. Loads all
// images and converts foreground maps to binary.
//
// modified :
//--------------------------------------------------------------
#ifndef ASYNCIO_H
#define ASYNCIO_H
#include <deque>
#include "threads/Thread.h"
#include "threads/Mutex.h"
#include "threads/Condition.h"
#include "threads/Barrier.h"
#include "FlexImage.h"
#include "BinaryImage.h"
typedef std::vector<FlexImage<Im8u,1> > ImageSet;
typedef std::vector<BinaryImage> BinaryImageSet;
//Asynchronous Image loading object
class AsyncImageLoader : public threads::Runnable {
protected:
std::deque<ImageSet > mImageBuffer; //image buffer
std::deque<BinaryImageSet > mFGBuffer; //foreground image buffer
unsigned int mNumCameras; //number of cameras (images) per frame
unsigned int mBufferSize; //max number of images in the buffer
std::string mPath; //dataset path
threads::Mutex mDataLock; //synchronization objects
threads::Mutex mLock1, mLock2;
threads::Condition mCondFull;
threads::Condition mCondEmpty;
bool mFailed; //image load failed flag
unsigned int mCurrentFrame; //current frame to be loaded
unsigned int mNumFrames; //total number of frames
//load a given set of image and foreground files
void LoadSet(std::vector<std::string> &FGFiles, BinaryImageSet &FGimages, std::vector<std::string> &ImageFiles, ImageSet &images);
public:
AsyncImageLoader() : mCondFull(mLock1), mCondEmpty(mLock2), mCurrentFrame(0), mNumCameras(0), mBufferSize(16), mFailed(false)
{ mImageBuffer.resize(0);
};
~AsyncImageLoader() {};
//thread code
void Run();
//sets / gets
void SetNumCameras(unsigned int n) { mNumCameras = n; };
void SetBufferSize(unsigned int n) { mBufferSize = n; };
void SetNumFrames(unsigned int n) { mNumFrames = n; };
void SetPath(std::string &path) { mPath = path; };
//get next set of images from
bool GetNextImageSet(ImageSet &images, BinaryImageSet &FGMaps);
};
#endif