| 25 | #include "aencode.h" |
| 26 | |
| 27 | struct BitsEncoder { |
| 28 | FILE *m_outFile; // var50 | offset 0x10 |
| 29 | uint32_t m_bitData; // var4C | offset 0x14 |
| 30 | uint32_t m_bitCount; // var48 | offset 0x18 |
| 31 | |
| 32 | void WriteBits(int32_t val, uint32_t numBits) { |
| 33 | assert((numBits + m_bitCount) <= 32); |
| 34 | m_bitData |= static_cast<uint32_t>(val << m_bitCount); |
| 35 | m_bitCount += numBits; |
| 36 | |
| 37 | while (m_bitCount >= 8) { |
| 38 | uint8_t v = m_bitData & 0xFF; |
| 39 | putc(v, m_outFile); |
| 40 | |
| 41 | m_bitData >>= 8; |
| 42 | m_bitCount -= 8; |
| 43 | } |
| 44 | } |
| 45 | |
| 46 | void Flush() { |
| 47 | while (m_bitCount >= 8) { |
| 48 | uint8_t v = m_bitData & 0xFF; |
| 49 | putc(v, m_outFile); |
| 50 | |
| 51 | m_bitData >>= 8; |
| 52 | m_bitCount -= 8; |
| 53 | } |
| 54 | |
| 55 | if (m_bitCount > 0) { |
| 56 | uint8_t v = m_bitData & 0xFF; |
| 57 | putc(v, m_outFile); |
| 58 | m_bitCount = 0; |
| 59 | m_bitData = 0; |
| 60 | } |
| 61 | } |
| 62 | }; |
| 63 | |
| 64 | struct Encoder { |
| 65 | ReadSampleFunction *m_reader; // var60 | offset 0x00 |
nothing calls this directly
no outgoing calls
no test coverage detected