opus_decoderctls(3)

okay bestie, sit down, hydrate, because we're talking about decoder CTLs from the Opus manual, page opus_decoderctls(3). this is the little collection of macros that let you poke at a decoder and ask it questions (or tell it things). it's giving ✨ remote control energy ✨. no cap.


✨ SYNOPSIS ✨

πŸŽ€ Macros πŸŽ€

  • #define OPUS_SET_GAIN(x) β€” Configures decoder gain adjustment.
  • #define OPUS_GET_GAIN(x) β€” Gets the decoder's configured gain adjustment.
  • #define OPUS_GET_LAST_PACKET_DURATION(x) β€” Gets the duration (in samples) of the last packet successfully decoded or concealed.
  • #define OPUS_GET_PITCH(x) β€” Gets the pitch of the last decoded frame, if available.
  • #define OPUS_SET_OSCE_BWE(x) β€” Enables blind bandwidth extension for wideband signals if decoding sampling rate is 48 kHz.
  • #define OPUS_GET_OSCE_BWE(x) β€” Gets blind bandwidth extension flag for wideband signals if decoding sampling rate is 48 kHz.
  • #define OPUS_SET_IGNORE_EXTENSIONS(x) β€” If set to 1, the decoder will ignore all extensions found in the padding area (does not affect DRED, which is decoded separately).
  • #define OPUS_GET_IGNORE_EXTENSIONS(x) β€” Gets whether the decoder is ignoring extensions.

🌸 Detailed Description 🌸

also go peek at Generic CTLs, Encoder related CTLs, and Opus Decoder β€” they're the besties of this page 🫢

πŸ‘‘ Macro Definition Documentation πŸ‘‘

πŸ’… #define OPUS_GET_GAIN( x)

Gets the decoder's configured gain adjustment.

See also: OPUS_SET_GAIN

Parameters:

  • x opus_int32 *: Amount to scale PCM signal by in Q8 dB units.

πŸ’… #define OPUS_GET_IGNORE_EXTENSIONS( x)

Gets whether the decoder is ignoring extensions.


πŸ’… #define OPUS_GET_LAST_PACKET_DURATION( x)

Gets the duration (in samples) of the last packet successfully decoded or concealed.

Parameters:

  • x opus_int32 *: Number of samples (at current sampling rate).

πŸ’… #define OPUS_GET_OSCE_BWE( x)

Gets blind bandwidth extension flag for wideband signals if decoding sampling rate is 48 kHz.

Parameters:

  • x opus_int32 *: 1 if bwe enabled, 0 if disabled.

πŸ’… #define OPUS_GET_PITCH( x)

Gets the pitch of the last decoded frame, if available. This can be used for any post-processing algorithm requiring the use of pitch, e.g. time stretching/shortening. If the last frame was not voiced, or if the pitch was not coded in the frame, then zero is returned.

This CTL is only implemented for decoder instances.

Parameters:

  • x opus_int32 *: pitch period at 48 kHz (or 0 if not available)

πŸ’… #define OPUS_SET_GAIN( x)

Configures decoder gain adjustment. Scales the decoded output by a factor specified in Q8 dB units. This has a maximum range of -32768 to 32767 inclusive, and returns OPUS_BAD_ARG otherwise. The default is zero indicating no adjustment. This setting survives decoder reset.

gain = pow(10, x/(20.0*256))

Parameters:

  • x opus_int32: Amount to scale PCM signal by in Q8 dB units.
heads up bestie: step outside that -32768 to 32767 range and it's a whole OPUS_BAD_ARG situation 😭 so stay in your lane with the numbers, fr fr.

πŸ’… #define OPUS_SET_IGNORE_EXTENSIONS( x)

If set to 1, the decoder will ignore all extensions found in the padding area (does not affect DRED, which is decoded separately).


πŸ’… #define OPUS_SET_OSCE_BWE( x)

Enables blind bandwidth extension for wideband signals if decoding sampling rate is 48 kHz.

Parameters:

  • x opus_int32 : 1 enables bandwidth extension, 0 disables it. The default is 0.

✍️ Author ✍️

Generated automatically by Doxygen for Opus from the source code.


and that's the whole page, bestie πŸ’– Version 1.6.1, born Thu Jan 29 2026 14:35:32, and it ate, no crumbs. go forth and control your decoders, main character πŸŽ€πŸ¦‹βœ¨

πŸ“¦ where this page comes from