diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/libvp6/include/AC3.hpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/libvp6/include/AC3.hpp')
-rw-r--r-- | Src/libvp6/include/AC3.hpp | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/Src/libvp6/include/AC3.hpp b/Src/libvp6/include/AC3.hpp new file mode 100644 index 00000000..60b24515 --- /dev/null +++ b/Src/libvp6/include/AC3.hpp @@ -0,0 +1,140 @@ +#ifndef AC3_HPP +#define AC3_HPP +//______________________________________________________________________________ +// +// AC3.hpp +// + +//______________________________________________________________________________ +// + +#pragma warning(disable:4786) + +#include <windows.h> +#include <string> +#include <vector> +#include <exception> +#include <iosfwd> +#include <cstdio> +extern "C" +{ + #include "ac3.h" + #include "bitstream.h" +} + +namespace AC3 +{ + +//______________________________________________________________________________ +// + + typedef __int64 offset_t; + + //-------------------------------------- + enum + { + SamplesPerBlock = 256 * 6 + }; + + //-------------------------------------- + class FileError : public std::exception + { + public: + FileError(DWORD messageId); + FileError(const char* message); + const char* what() const; + private: + std::string m_strMessage; + }; + + //-------------------------------------- + struct Header + { + unsigned long m_nBlocks; + unsigned long m_ulSamplesPerSecond; + unsigned long m_ulSamplesPerBlock; + unsigned long m_ulBytesPerBlock; // blockAlign + }; + + std::ostream& operator<<(std::ostream& os, const Header& h); + + //-------------------------------------- + struct SyncFrame + { + syncinfo_t m_si; + bsi_t m_bsi; + }; + + std::ostream& operator<<(std::ostream& os, const SyncFrame& sf); + + //-------------------------------------- + class File + { + public: + + enum mode_t {in, out, inout}; + + typedef std::vector<SyncFrame> VectorSyncFrame; + + File(); + File(const char* szName, mode_t mode); + + ~File(); + + void open(const char* szName, mode_t mode); + void close(); + + bool isOpen() const; + bool eof() const; + + const char* name() const; + mode_t mode() const; + + unsigned long blockCount() const; + unsigned long samplesPerSecond() const; + unsigned long samplesPerBlock() const; + + int samplesPerSec() const; + + const Header& header() const; + +// const SyncFrame& syncFrame(int nSyncFrame) const; +// SyncFrame& syncFrame(int nSyncFrame); + + private: + + File(const File& rhs); // Not implemented + File& operator=(const File& rhs); // Not implemented + + int readHeader(); + + void readSyncFrame(SyncFrame& sf); + + void writeSyncFrame(const SyncFrame& sf); + + void read(void* buffer, size_t size) const; + void write(const void* data, size_t size); + + offset_t size() const; + void seekCurrent(__int64) const; + void seek(offset_t) const; + offset_t tell() const; + + + FILE* m_pFile; + int m_hFile; + bitstream_t* m_pbs; + + std::string m_strName; + mode_t m_mode; + + Header m_header; + VectorSyncFrame m_vSyncFrame; + + __int64 m_fileSize; + __int64 m_fileOffset; + }; + +} // namespace AC3 + +#endif // AC3_HPP |