diff options
Diffstat (limited to 'Src/libvp6/include/WAV.hpp')
-rw-r--r-- | Src/libvp6/include/WAV.hpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/Src/libvp6/include/WAV.hpp b/Src/libvp6/include/WAV.hpp new file mode 100644 index 00000000..5db3d4bd --- /dev/null +++ b/Src/libvp6/include/WAV.hpp @@ -0,0 +1,130 @@ +#ifndef WAV_HPP +#define WAV_HPP + +#include "FourCC.hpp" +#include <io.h> +#include <exception> +#include <string> +#include <iosfwd> +#include <vector> + + +namespace WAV +{ + class FileError : public exception + { + public: + explicit FileError(const char* message); + const char* what() const; + private: + const std::string message; + }; + + + struct Format + { + unsigned short formatTag; + unsigned short nChannels; + unsigned long samplesPerSec; + unsigned long avgBytesPerSec; + unsigned short blockAlign; + unsigned short bitsPerSample; + + typedef std::vector<unsigned char> ByteArray; + ByteArray extra; + }; + + std::ostream& operator<<(std::ostream&, const Format&); + + typedef __int64 offset_t; + + + class File + { + public: + + enum mode_t { in, out, inout }; + + File(); + File(const char* name, mode_t mode); + + ~File(); + + void open(const char* name, mode_t mode); + void close(); + + bool isOpen() const; + bool eof() const; + + //size_t sampleNum() const; + //size_t sampleCount() const; + + //void seekSample(size_t sampleNum) const; + + offset_t offset() const; + void seekOffset(offset_t) const; + + size_t read(void* buffer, size_t size) const; + void write(const void* buffer, size_t size); + + mode_t mode() const; + const char* name() const; + + const Format& format() const; + Format& format(); + + void seekFormat() const; + + //void readFormat() const; + void readFormatChunk() const; + + void readFactChunk() const; + + void setFactSize(size_t); + size_t factSize() const; + + void seekFact() const; + + void writeFact(const void*, size_t); + void readFact(void* buffer, size_t size) const; + + void writeFormat(); + void writeFormatChunk(); + + size_t dataSize() const; + + private: + + File(const File&); + File& operator=(const File&); + + void init(); + + void seek(__int64, int) const; + + const FourCC queryId() const; + const FourCC readId() const; + + void writeId(const char* id); + + void writeSize(size_t size); + size_t readSize() const; + + int handle_; + + __int64 dataPosn; + size_t m_dataSize; + + //size_t m_sampleCount; + + char name_[_MAX_PATH]; + mode_t mode_; + + mutable Format format_; + + mutable size_t m_factSize; + }; + +} + +#endif |