123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #ifndef VID_HPP
- #define VID_HPP
- #pragma warning (disable:4786)
- #include <windows.h>
- #include <cstdlib>
- #include <string>
- #include <map>
- #include <exception>
- namespace Vid
- {
- const enum Format { uyvy }; // format = uyvy;
- enum { rate = 2997, scale = 100 };
- class FileError : public exception
- {
- public:
- explicit FileError(const char* message);
- explicit FileError(DWORD id);
- const char* what() const;
- private:
- std::string message;
- };
- bool nameIsOK(const char* name);
- typedef __int64 offset_type;
- typedef unsigned __int64 size_type;
- class File
- {
- public:
- static const Format format;
- enum mode_t {in, out};
- File();
- File(const char* name, mode_t mode, int iWidth = 0, int iHeight = 0);
- ~File();
- void open(
- const char* name,
- mode_t mode,
- DWORD flags = FILE_ATTRIBUTE_NORMAL);
- void close();
- void reset(int frameNum) const;
- void advance(int count) const;
- void read(void* frame) const;
- void write(const void* frame);
- bool isOpen() const;
- bool eof() const;
- mode_t mode() const;
- const char* name() const;
- int frameNum() const;
- int frameCount() const;
- size_type size() const;
- void dimensions(int iWidth, int iHeight);
- int width() const;
- int height() const;
- int frameSize() const;
- private:
- File& operator=(const File&);
- File(const File&);
- HANDLE m_handle;
- // When opening for write with FILE_FLAG_OVERLAPPED
- HANDLE m_hEvent;
- OVERLAPPED m_overlapped;
- mutable int frameNum_;
- int frameCount_;
- char name_[_MAX_PATH];
- mode_t mode_;
- int m_iWidth;
- int m_iHeight;
- int m_iFrameSize;
- };
- class MappedFile
- {
- public:
- //For now, just implement read-only.
- MappedFile();
- MappedFile(const char* name, int iWidth = 0, int iHeight = 0);
- ~MappedFile();
- void open(const char* name);
- void close();
- const char* name() const;
- int frameCount() const;
- void* map(int frameNum) const;
- void unmap(int frameNum) const;
- void unmap() const;
- bool isMapped(int frameNum) const;
- int mapCount() const;
- void dimensions(int iWidth, int iHeight);
- int width() const;
- int height() const;
- int frameSize() const;
- private:
- MappedFile(const MappedFile&);
- MappedFile& operator=(const MappedFile&);
- void init(int iWidth = 0, int iHeight = 0);
- HANDLE file;
- HANDLE mapping;
- DWORD allocationGranularity;
- int m_frameCount;
- struct ViewInfo
- {
- void* view;
- void* frame;
- };
- typedef std::map<int, ViewInfo> Views;
- mutable Views views;
- std::string m_name;
- int m_iWidth;
- int m_iHeight;
- int m_iFrameSize;
- };
- }
- #endif
|