Opus support: Fix all sorts of mistakes
This commit is contained in:
parent
0c711d4c6c
commit
a88ae3a8a3
2 changed files with 138 additions and 59 deletions
|
@ -22,7 +22,7 @@ template<typename T> struct generic_eget
|
|||
{
|
||||
typedef T erettype;
|
||||
T operator()(encoder& e) const;
|
||||
T errordefault();
|
||||
T errordefault() const;
|
||||
};
|
||||
|
||||
template<typename T> struct generic_get
|
||||
|
@ -31,14 +31,14 @@ template<typename T> struct generic_get
|
|||
typedef T erettype;
|
||||
T operator()(decoder& e) const;
|
||||
T operator()(encoder& e) const;
|
||||
T errordefault();
|
||||
T errordefault() const;
|
||||
};
|
||||
|
||||
template<typename T> struct generic_dget
|
||||
{
|
||||
typedef T drettype;
|
||||
T operator()(decoder& e) const;
|
||||
static T errordefault;
|
||||
T errordefault() const;
|
||||
};
|
||||
|
||||
struct samplerate
|
||||
|
@ -52,19 +52,19 @@ struct samplerate
|
|||
operator int32_t() { return fs; }
|
||||
typedef samplerate erettype;
|
||||
samplerate operator()(encoder& e) const;
|
||||
samplerate errordefault() { return samplerate(0); }
|
||||
samplerate errordefault() const { return samplerate(0); }
|
||||
private:
|
||||
int32_t fs;
|
||||
};
|
||||
|
||||
struct compexity
|
||||
struct complexity
|
||||
{
|
||||
compexity(int32_t _c) { c = _c; }
|
||||
complexity(int32_t _c) { c = _c; }
|
||||
operator int32_t() { return c; }
|
||||
typedef generic_eget<compexity> get;
|
||||
static generic_eget<complexity> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t c;
|
||||
};
|
||||
|
@ -75,10 +75,10 @@ struct bitrate
|
|||
static bitrate _auto;
|
||||
static bitrate max;
|
||||
operator int32_t() { return b; }
|
||||
typedef generic_eget<bitrate> get;
|
||||
static generic_eget<bitrate> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t b;
|
||||
};
|
||||
|
@ -89,10 +89,10 @@ struct vbr
|
|||
static vbr cbr;
|
||||
static vbr _vbr;
|
||||
operator bool() { return v; }
|
||||
typedef generic_eget<vbr> get;
|
||||
static generic_eget<vbr> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
bool v;
|
||||
};
|
||||
|
@ -103,10 +103,10 @@ struct vbr_constraint
|
|||
static vbr_constraint unconstrained;
|
||||
static vbr_constraint constrained;
|
||||
operator bool() { return c; }
|
||||
typedef generic_eget<vbr_constraint> get;
|
||||
static generic_eget<vbr_constraint> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
bool c;
|
||||
};
|
||||
|
@ -118,10 +118,10 @@ struct force_channels
|
|||
static force_channels mono;
|
||||
static force_channels stereo;
|
||||
operator int32_t() { return f; }
|
||||
typedef generic_eget<force_channels> get;
|
||||
static generic_eget<force_channels> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t f;
|
||||
};
|
||||
|
@ -135,10 +135,10 @@ struct max_bandwidth
|
|||
static max_bandwidth superwide;
|
||||
static max_bandwidth full;
|
||||
operator int32_t() { return bw; }
|
||||
typedef generic_eget<max_bandwidth> get;
|
||||
static generic_eget<max_bandwidth> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t bw;
|
||||
};
|
||||
|
@ -153,10 +153,10 @@ struct bandwidth
|
|||
static bandwidth superwide;
|
||||
static bandwidth full;
|
||||
operator int32_t() { return bw; }
|
||||
typedef generic_get<bandwidth> get;
|
||||
static generic_get<bandwidth> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t bw;
|
||||
};
|
||||
|
@ -168,10 +168,10 @@ struct signal
|
|||
static signal music;
|
||||
static signal voice;
|
||||
operator int32_t() { return s; }
|
||||
typedef generic_eget<signal> get;
|
||||
static generic_eget<signal> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t s;
|
||||
};
|
||||
|
@ -183,10 +183,10 @@ struct application
|
|||
static application voice;
|
||||
static application lowdelay;
|
||||
operator int32_t() { return app; }
|
||||
typedef generic_eget<application> get;
|
||||
static generic_eget<application> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t app;
|
||||
};
|
||||
|
@ -198,7 +198,7 @@ struct _lookahead
|
|||
operator int32_t() { return l; }
|
||||
typedef _lookahead erettype;
|
||||
_lookahead operator()(encoder& e) const;
|
||||
_lookahead errordefault() { return _lookahead(0);}
|
||||
_lookahead errordefault() const { return _lookahead(0);}
|
||||
private:
|
||||
int32_t l;
|
||||
};
|
||||
|
@ -210,10 +210,10 @@ struct fec
|
|||
static fec disabled;
|
||||
static fec enabled;
|
||||
operator bool() { return f; }
|
||||
typedef generic_eget<fec> get;
|
||||
static generic_eget<fec> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
bool f;
|
||||
};
|
||||
|
@ -222,10 +222,10 @@ struct lossperc
|
|||
{
|
||||
lossperc(int32_t _loss) { loss = _loss; };
|
||||
operator int32_t() { return loss; }
|
||||
typedef generic_eget<lossperc> get;
|
||||
static generic_eget<lossperc> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t loss;
|
||||
};
|
||||
|
@ -236,10 +236,10 @@ struct dtx
|
|||
static dtx disabled;
|
||||
static dtx enabled;
|
||||
operator bool() { return d; }
|
||||
typedef generic_eget<dtx> get;
|
||||
static generic_eget<dtx> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
bool d;
|
||||
};
|
||||
|
@ -251,10 +251,10 @@ struct lsbdepth
|
|||
static lsbdepth d16;
|
||||
static lsbdepth d24;
|
||||
operator int32_t() { return depth; }
|
||||
typedef generic_eget<lsbdepth> get;
|
||||
static generic_eget<lsbdepth> get;
|
||||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t depth;
|
||||
};
|
||||
|
@ -266,7 +266,7 @@ struct _pktduration
|
|||
operator int32_t() { return d; }
|
||||
typedef _pktduration erettype;
|
||||
_pktduration operator()(encoder& e) const;
|
||||
_pktduration errordefault() { return _pktduration(0); }
|
||||
_pktduration errordefault() const { return _pktduration(0); }
|
||||
private:
|
||||
int32_t d;
|
||||
};
|
||||
|
@ -278,7 +278,7 @@ struct _reset
|
|||
typedef void erettype;
|
||||
void operator()(decoder& e) const;
|
||||
void operator()(encoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
};
|
||||
extern _reset reset;
|
||||
|
||||
|
@ -291,7 +291,7 @@ struct _finalrange
|
|||
typedef _finalrange erettype;
|
||||
_finalrange operator()(decoder& e) const;
|
||||
_finalrange operator()(encoder& e) const;
|
||||
_finalrange errordefault() { return _finalrange(0); }
|
||||
_finalrange errordefault() const { return _finalrange(0); }
|
||||
private:
|
||||
uint32_t f;
|
||||
};
|
||||
|
@ -306,7 +306,7 @@ struct _pitch
|
|||
typedef _pitch erettype;
|
||||
_pitch operator()(encoder& e) const;
|
||||
_pitch operator()(decoder& e) const;
|
||||
_pitch errordefault() { return _pitch(0); }
|
||||
_pitch errordefault() const { return _pitch(0); }
|
||||
private:
|
||||
int32_t p;
|
||||
};
|
||||
|
@ -316,10 +316,10 @@ struct gain
|
|||
{
|
||||
gain(int32_t _g) { g = _g; };
|
||||
operator int32_t() { return g; }
|
||||
typedef generic_dget<gain> get;
|
||||
static generic_dget<gain> get;
|
||||
typedef void drettype;
|
||||
void operator()(decoder& d) const;
|
||||
gain errordefault() { return gain(0); }
|
||||
gain errordefault() const { return gain(0); }
|
||||
private:
|
||||
int32_t g;
|
||||
};
|
||||
|
@ -331,7 +331,7 @@ struct set_control_int
|
|||
typedef void erettype;
|
||||
void operator()(encoder& e) const;
|
||||
void operator()(decoder& e) const;
|
||||
void errordefault() {}
|
||||
void errordefault() const {}
|
||||
private:
|
||||
int32_t ctl;
|
||||
int32_t val;
|
||||
|
@ -344,7 +344,7 @@ struct get_control_int
|
|||
typedef int32_t erettype;
|
||||
int32_t operator()(encoder& e) const;
|
||||
int32_t operator()(decoder& e) const;
|
||||
int32_t errordefault() { return -1; }
|
||||
int32_t errordefault() const { return -1; }
|
||||
private:
|
||||
int32_t ctl;
|
||||
};
|
||||
|
|
|
@ -110,9 +110,9 @@ int32_t throwex(int32_t ret)
|
|||
throw std::runtime_error(s.str());
|
||||
}
|
||||
|
||||
template<typename T> struct get_ctlnum { const static int32_t num; };
|
||||
template<typename T> struct get_ctlnum { const static int32_t num; static T errordefault(); };
|
||||
|
||||
template<> const int32_t get_ctlnum<compexity>::num = OPUS_GET_COMPLEXITY_REQUEST;
|
||||
template<> const int32_t get_ctlnum<complexity>::num = OPUS_GET_COMPLEXITY_REQUEST;
|
||||
template<> const int32_t get_ctlnum<bitrate>::num = OPUS_GET_BITRATE_REQUEST;
|
||||
template<> const int32_t get_ctlnum<vbr>::num = OPUS_GET_VBR_REQUEST;
|
||||
template<> const int32_t get_ctlnum<vbr_constraint>::num = OPUS_GET_VBR_CONSTRAINT_REQUEST;
|
||||
|
@ -127,6 +127,22 @@ template<> const int32_t get_ctlnum<dtx>::num = OPUS_GET_DTX_REQUEST;
|
|||
template<> const int32_t get_ctlnum<lsbdepth>::num = OPUS_GET_LSB_DEPTH_REQUEST;
|
||||
template<> const int32_t get_ctlnum<gain>::num = OPUS_GET_GAIN_REQUEST;
|
||||
|
||||
template<> complexity get_ctlnum<complexity>::errordefault() { return complexity(10); }
|
||||
template<> bitrate get_ctlnum<bitrate>::errordefault() { return bitrate::_auto; }
|
||||
template<> vbr get_ctlnum<vbr>::errordefault() { return vbr::_vbr; }
|
||||
template<> vbr_constraint get_ctlnum<vbr_constraint>::errordefault() { return vbr_constraint::unconstrained; }
|
||||
template<> force_channels get_ctlnum<force_channels>::errordefault() { return force_channels::_auto; }
|
||||
template<> max_bandwidth get_ctlnum<max_bandwidth>::errordefault() { return max_bandwidth::full; }
|
||||
template<> bandwidth get_ctlnum<bandwidth>::errordefault() { return bandwidth::_auto; }
|
||||
template<> signal get_ctlnum<signal>::errordefault() { return signal::_auto; }
|
||||
template<> application get_ctlnum<application>::errordefault() { return application::audio; }
|
||||
template<> fec get_ctlnum<fec>::errordefault() { return fec::disabled; }
|
||||
template<> lossperc get_ctlnum<lossperc>::errordefault() { return lossperc(0); }
|
||||
template<> dtx get_ctlnum<dtx>::errordefault() { return dtx::disabled; }
|
||||
template<> lsbdepth get_ctlnum<lsbdepth>::errordefault() { return lsbdepth(24); }
|
||||
template<> gain get_ctlnum<gain>::errordefault() { return gain(0); }
|
||||
|
||||
|
||||
OpusEncoder* E(encoder& e) { return reinterpret_cast<OpusEncoder*>(e.getmem()); }
|
||||
OpusDecoder* D(decoder& d) { return reinterpret_cast<OpusDecoder*>(d.getmem()); }
|
||||
OpusRepacketizer* R(repacketizer& r) { return reinterpret_cast<OpusRepacketizer*>(r.getmem()); }
|
||||
|
@ -186,56 +202,90 @@ template<typename T> T generic_get<T>::operator()(encoder& e) const
|
|||
return do_generic_get<T>(e);
|
||||
}
|
||||
|
||||
template<typename T> T generic_eget<T>::errordefault() const
|
||||
{
|
||||
return get_ctlnum<T>::errordefault();
|
||||
}
|
||||
|
||||
template<typename T> T generic_dget<T>::errordefault() const
|
||||
{
|
||||
return get_ctlnum<T>::errordefault();
|
||||
}
|
||||
|
||||
template<typename T> T generic_get<T>::errordefault() const
|
||||
{
|
||||
return get_ctlnum<T>::errordefault();
|
||||
}
|
||||
|
||||
|
||||
samplerate samplerate::operator()(encoder& e) const
|
||||
{
|
||||
return samplerate(generic_ctl<int32_t>(e, OPUS_GET_SAMPLE_RATE_REQUEST));
|
||||
}
|
||||
|
||||
void compexity::operator()(encoder& e) const
|
||||
void complexity::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_COMPLEXITY_REQUEST, c);
|
||||
}
|
||||
|
||||
generic_eget<complexity> complexity::get;
|
||||
|
||||
void bitrate::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_BITRATE_REQUEST, b);
|
||||
}
|
||||
|
||||
generic_eget<bitrate> bitrate::get;
|
||||
|
||||
void vbr::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl<int32_t>(e, OPUS_SET_VBR_REQUEST, v ? 1 : 0);
|
||||
}
|
||||
|
||||
generic_eget<vbr> vbr::get;
|
||||
|
||||
void vbr_constraint::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl<int32_t>(e, OPUS_SET_VBR_CONSTRAINT_REQUEST, c ? 1 : 0);
|
||||
}
|
||||
|
||||
generic_eget<vbr_constraint> vbr_constraint::get;
|
||||
|
||||
void force_channels::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_FORCE_CHANNELS_REQUEST, f);
|
||||
}
|
||||
|
||||
generic_eget<force_channels> force_channels::get;
|
||||
|
||||
void max_bandwidth::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_MAX_BANDWIDTH_REQUEST, bw);
|
||||
}
|
||||
|
||||
generic_eget<max_bandwidth> max_bandwidth::get;
|
||||
|
||||
void bandwidth::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_BANDWIDTH_REQUEST, bw);
|
||||
}
|
||||
|
||||
generic_get<bandwidth> bandwidth::get;
|
||||
|
||||
void signal::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_SIGNAL_REQUEST, s);
|
||||
}
|
||||
|
||||
generic_eget<signal> signal::get;
|
||||
|
||||
void application::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_APPLICATION_REQUEST, app);
|
||||
}
|
||||
|
||||
generic_eget<application> application::get;
|
||||
|
||||
_lookahead _lookahead::operator()(encoder& e) const
|
||||
{
|
||||
return _lookahead(generic_ctl<int32_t>(e, OPUS_GET_LOOKAHEAD_REQUEST));
|
||||
|
@ -246,21 +296,29 @@ void fec::operator()(encoder& e) const
|
|||
generic_ctl<int32_t>(e, OPUS_SET_INBAND_FEC_REQUEST, f ? 1 : 0);
|
||||
}
|
||||
|
||||
generic_eget<fec> fec::get;
|
||||
|
||||
void lossperc::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_PACKET_LOSS_PERC_REQUEST, loss);
|
||||
}
|
||||
|
||||
generic_eget<lossperc> lossperc::get;
|
||||
|
||||
void dtx::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl<int32_t>(e, OPUS_SET_DTX_REQUEST, d ? 1 : 0);
|
||||
}
|
||||
|
||||
generic_eget<dtx> dtx::get;
|
||||
|
||||
void lsbdepth::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, OPUS_SET_LSB_DEPTH_REQUEST, depth);
|
||||
}
|
||||
|
||||
generic_eget<lsbdepth> lsbdepth::get;
|
||||
|
||||
_pktduration _pktduration::operator()(encoder& e) const
|
||||
{
|
||||
return _pktduration(generic_ctl<int32_t>(e, OPUS_GET_LAST_PACKET_DURATION_REQUEST));
|
||||
|
@ -301,6 +359,8 @@ void gain::operator()(decoder& d) const
|
|||
generic_ctl(d, OPUS_SET_GAIN_REQUEST, g);
|
||||
}
|
||||
|
||||
generic_dget<gain> gain::get;
|
||||
|
||||
void set_control_int::operator()(encoder& e) const
|
||||
{
|
||||
generic_ctl(e, ctl, val);
|
||||
|
@ -325,21 +385,40 @@ void force_instantiate()
|
|||
{
|
||||
encoder e(samplerate::r48k, true, application::audio);
|
||||
decoder d(samplerate::r48k, true);
|
||||
compexity::get()(e);
|
||||
bitrate::get()(e);
|
||||
vbr::get()(e);
|
||||
vbr_constraint::get()(e);
|
||||
force_channels::get()(e);
|
||||
max_bandwidth::get()(e);
|
||||
bandwidth::get()(e);
|
||||
bandwidth::get()(d);
|
||||
signal::get()(e);
|
||||
application::get()(e);
|
||||
fec::get()(e);
|
||||
lossperc::get()(e);
|
||||
dtx::get()(e);
|
||||
lsbdepth::get()(e);
|
||||
gain::get()(d);
|
||||
complexity::get(e);
|
||||
bitrate::get(e);
|
||||
vbr::get(e);
|
||||
vbr_constraint::get(e);
|
||||
force_channels::get(e);
|
||||
max_bandwidth::get(e);
|
||||
bandwidth::get(e);
|
||||
bandwidth::get(d);
|
||||
signal::get(e);
|
||||
application::get(e);
|
||||
fec::get(e);
|
||||
lossperc::get(e);
|
||||
dtx::get(e);
|
||||
lsbdepth::get(e);
|
||||
gain::get(d);
|
||||
|
||||
complexity::get.errordefault();
|
||||
bitrate::get.errordefault();
|
||||
vbr::get.errordefault();
|
||||
vbr_constraint::get.errordefault();
|
||||
force_channels::get.errordefault();
|
||||
max_bandwidth::get.errordefault();
|
||||
bandwidth::get.errordefault();
|
||||
signal::get.errordefault();
|
||||
application::get.errordefault();
|
||||
fec::get.errordefault();
|
||||
lossperc::get.errordefault();
|
||||
dtx::get.errordefault();
|
||||
lsbdepth::get.errordefault();
|
||||
gain::get.errordefault();
|
||||
|
||||
e.ctl_quiet(opus::reset);
|
||||
e.ctl_quiet(opus::finalrange);
|
||||
e.ctl_quiet(opus::signal::get);
|
||||
}
|
||||
|
||||
encoder::~encoder()
|
||||
|
|
Loading…
Add table
Reference in a new issue