blob: 60b24515f6c198d27fcbb61b2768d1e29f1f74aa (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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
|