40 lines
945 B
C
40 lines
945 B
C
|
|
/*
|
|||
|
|
* codec/opus_codec.h — Opus encode/decode (libopus 1.6).
|
|||
|
|
*
|
|||
|
|
* Design: docs/voice.md §3–4. Per-channel AudioConfig (mono/stereo, bitrate, frame size,
|
|||
|
|
* FEC, DTX, complexity). The server relays Opus payloads unmodified (no transcode).
|
|||
|
|
*
|
|||
|
|
* STATUS: M0 stub.
|
|||
|
|
*/
|
|||
|
|
#ifndef VOICECAT_CODEC_OPUS_CODEC_H
|
|||
|
|
#define VOICECAT_CODEC_OPUS_CODEC_H
|
|||
|
|
|
|||
|
|
#include <cstdint>
|
|||
|
|
|
|||
|
|
namespace voicecat::codec {
|
|||
|
|
|
|||
|
|
struct OpusParams {
|
|||
|
|
uint32_t sample_rate = 48000;
|
|||
|
|
uint32_t bitrate_bps = 24000;
|
|||
|
|
uint32_t frame_ms = 20;
|
|||
|
|
bool stereo = false;
|
|||
|
|
bool fec = true;
|
|||
|
|
bool dtx = true;
|
|||
|
|
uint32_t complexity = 10;
|
|||
|
|
uint32_t expected_packet_loss = 0;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
class OpusEncoder {
|
|||
|
|
public:
|
|||
|
|
// TODO(M2): init(params); encode(pcm, frame) -> opus bytes.
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
class OpusDecoder {
|
|||
|
|
public:
|
|||
|
|
// TODO(M2): init(params); decode(opus, out_pcm); PLC on loss; FEC from next packet.
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
} // namespace voicecat::codec
|
|||
|
|
|
|||
|
|
#endif // VOICECAT_CODEC_OPUS_CODEC_H
|