Provided by: libopus-doc_1.4-1build1_all bug

NAME

       opus_encoder - Opus Encoder

        - This page describes the process and functions used to encode Opus.

SYNOPSIS

   Typedefs
       typedef struct OpusEncoder OpusEncoder
           Opus encoder state.

   Functions
       int opus_encoder_get_size (int channels)
           Gets the size of an OpusEncoder structure.
       OpusEncoder * opus_encoder_create (opus_int32 Fs, int channels, int application, int *error)
           Allocates and initializes an encoder state.
       int opus_encoder_init (OpusEncoder *st, opus_int32 Fs, int channels, int application)
           Initializes a previously allocated encoder state The memory pointed to by st must be at least the
           size returned by opus_encoder_get_size().
       opus_int32 opus_encode (OpusEncoder *st, const opus_int16 *pcm, int frame_size, unsigned char *data,
           opus_int32 max_data_bytes)
           Encodes an Opus frame.
       opus_int32 opus_encode_float (OpusEncoder *st, const float *pcm, int frame_size, unsigned char *data,
           opus_int32 max_data_bytes)
           Encodes an Opus frame from floating point input.
       void opus_encoder_destroy (OpusEncoder *st)
           Frees an OpusEncoder allocated by opus_encoder_create().
       int opus_encoder_ctl (OpusEncoder *st, int request,...)
           Perform a CTL function on an Opus encoder.

Detailed Description

       This page describes the process and functions used to encode Opus.

       Since Opus is a stateful codec, the encoding process starts with creating an encoder state. This can be
       done with:

       int          error;
       OpusEncoder *enc;
       enc = opus_encoder_create(Fs, channels, application, &error);

       From this point, enc can be used for encoding an audio stream. An encoder state must not be used for more
       than one stream at the same time. Similarly, the encoder state must not be re-initialized for each frame.

       While opus_encoder_create() allocates memory for the state, it's also possible to initialize pre-
       allocated memory:

       int          size;
       int          error;
       OpusEncoder *enc;
       size = opus_encoder_get_size(channels);
       enc = malloc(size);
       error = opus_encoder_init(enc, Fs, channels, application);

       where opus_encoder_get_size() returns the required size for the encoder state. Note that future versions
       of this code may change the size, so no assuptions should be made about it.

       The encoder state is always continuous in memory and only a shallow copy is sufficient to copy it (e.g.
       memcpy())

       It is possible to change some of the encoder's settings using the opus_encoder_ctl() interface. All these
       settings already default to the recommended value, so they should only be changed when necessary. The
       most common settings one may want to change are:

       opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate));
       opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complexity));
       opus_encoder_ctl(enc, OPUS_SET_SIGNAL(signal_type));

       where

       •
        bitrate is in bits per second (b/s)
       •
        complexity is a value from 1 to 10, where 1 is the lowest complexity and 10 is the highest
       •
        signal_type is either OPUS_AUTO (default), OPUS_SIGNAL_VOICE, or OPUS_SIGNAL_MUSIC
       See  Encoder  related CTLs and Generic CTLs for a complete list of parameters that can be set or queried.
       Most parameters can be set or changed at any time during a stream.
       To encode a frame, opus_encode() or opus_encode_float() must be called with exactly one  frame  (2.5,  5,
       10, 20, 40 or 60 ms) of audio data:
       len = opus_encode(enc, audio_frame, frame_size, packet, max_packet);

       where
       • audio_frame is the audio data in opus_int16 (or float for opus_encode_float())
       • frame_size is the duration of the frame in samples (per channel)
       • packet is the byte array to which the compressed data is written
       • max_packet  is  the  maximum  number  of  bytes  that  can  be  written  in  the  packet (4000 bytes is
         recommended). Do not use max_packet to control VBR target bitrate,  instead  use  the  OPUS_SET_BITRATE
         CTL.
       opus_encode()  and  opus_encode_float()  return  the  number of bytes actually written to the packet. The
       return value can be negative, which indicates that an error has occurred. If the return value is 2  bytes
       or less, then the packet does not need to be transmitted (DTX).
       Once the encoder state if no longer needed, it can be destroyed with
       opus_encoder_destroy(enc);
       If  the encoder was created with opus_encoder_init() rather than opus_encoder_create(), then no action is
       required aside from potentially freeing the memory that was manually allocated for it (calling  free(enc)
       for the example above)

Typedef Documentation

   typedef struct OpusEncoder OpusEncoder
       Opus  encoder  state. This contains the complete state of an Opus encoder. It is position independent and
       can be freely copied.
       See also
           opus_encoder_create,opus_encoder_init

Function Documentation

   opus_int32 opus_encode (OpusEncoder * st, const opus_int16 * pcm,  int  frame_size,  unsigned  char  *  data,
       opus_int32 max_data_bytes)
       Encodes an Opus frame.
       Parameters
           st OpusEncoder*: Encoder state
           pcm     opus_int16*:     Input     signal     (interleaved     if     2    channels).    length    is
           frame_size*channels*sizeof(opus_int16)
           frame_size int: Number of samples per channel in the input signal. This must be an  Opus  frame  size
           for  the encoder's sampling rate. For example, at 48 kHz the permitted values are 120, 240, 480, 960,
           1920, and 2880. Passing in a duration of less than 10 ms (480 samples at 48  kHz)  will  prevent  the
           encoder from using the LPC or hybrid modes.
           data unsigned char*: Output payload. This must contain storage for at least max_data_bytes.
           max_data_bytes  opus_int32:  Size of the allocated memory for the output payload. This may be used to
           impose an upper limit on the instant bitrate, but should not be used as the only bitrate control. Use
           OPUS_SET_BITRATE to control the bitrate.
       Returns
           The length of the encoded packet (in bytes) on success or a negative error code (see Error codes)  on
           failure.
   opus_int32  opus_encode_float  (OpusEncoder  *  st,  const float * pcm, int frame_size, unsigned char * data,
       opus_int32 max_data_bytes)
       Encodes an Opus frame from floating point input.
       Parameters
           st OpusEncoder*: Encoder state
           pcm float*: Input in float format (interleaved if 2 channels), with a normal range of +/-1.0. Samples
           with a range beyond +/-1.0 are supported but will be clipped by decoders using the  integer  API  and
           should  only  be  used  if  it  is  known that the far end supports extended dynamic range. length is
           frame_size*channels*sizeof(float)
           frame_size int: Number of samples per channel in the input signal. This must be an  Opus  frame  size
           for  the encoder's sampling rate. For example, at 48 kHz the permitted values are 120, 240, 480, 960,
           1920, and 2880. Passing in a duration of less than 10 ms (480 samples at 48  kHz)  will  prevent  the
           encoder from using the LPC or hybrid modes.
           data unsigned char*: Output payload. This must contain storage for at least max_data_bytes.
           max_data_bytes  opus_int32:  Size of the allocated memory for the output payload. This may be used to
           impose an upper limit on the instant bitrate, but should not be used as the only bitrate control. Use
           OPUS_SET_BITRATE to control the bitrate.
       Returns
           The length of the encoded packet (in bytes) on success or a negative error code (see Error codes)  on
           failure.
   OpusEncoder * opus_encoder_create (opus_int32 Fs, int channels, int application, int * error)
       Allocates and initializes an encoder state. There are three coding modes:
       OPUS_APPLICATION_VOIP  gives  best  quality  at  a given bitrate for voice signals. It enhances the input
       signal by high-pass filtering and emphasizing formants and  harmonics.  Optionally  it  includes  in-band
       forward  error  correction  to  protect against packet loss. Use this mode for typical VoIP applications.
       Because of the enhancement, even at high bitrates the output may sound different from the input.
       OPUS_APPLICATION_AUDIO gives best quality at a given bitrate for most non-voice signals like  music.  Use
       this  mode  for music and mixed (music/voice) content, broadcast, and applications requiring less than 15
       ms of coding delay.
       OPUS_APPLICATION_RESTRICTED_LOWDELAY configures low-delay mode that disables the speech-optimized mode in
       exchange for slightly reduced delay. This mode can only be set on an newly initialized or  freshly  reset
       encoder because it changes the codec delay.
       This  is  useful  when  the  caller  knows  that  the speech-optimized modes will not be needed (use with
       caution).
       Parameters
           Fs opus_int32: Sampling rate of input signal (Hz) This must be one of 8000, 12000, 16000,  24000,  or
           48000.
           channels int: Number of channels (1 or 2) in input signal
           application   int:   Coding   mode   (one   of   OPUS_APPLICATION_VOIP,   OPUS_APPLICATION_AUDIO,  or
           OPUS_APPLICATION_RESTRICTED_LOWDELAY)
           error int*: Error codes
       Note
           Regardless of the sampling rate and number channels selected, the Opus encoder can switch to a  lower
           audio  bandwidth or number of channels if the bitrate selected is too low. This also means that it is
           safe to always use 48 kHz stereo input and let the encoder optimize the encoding.
   int opus_encoder_ctl (OpusEncoder * st, int request,  ...)
       Perform a CTL function on an Opus encoder. Generally the request and subsequent arguments  are  generated
       by a convenience macro.
       Parameters
           st OpusEncoder*: Encoder state.
           request  This  and  all  remaining  parameters should be replaced by one of the convenience macros in
           Generic CTLs or Encoder related CTLs.
       See also
           Generic CTLs
           Encoder related CTLs
   void opus_encoder_destroy (OpusEncoder * st)
       Frees an OpusEncoder allocated by opus_encoder_create().
       Parameters
           st OpusEncoder*: State to be freed.
   int opus_encoder_get_size (int channels)
       Gets the size of an OpusEncoder structure.
       Parameters
           channels int: Number of channels. This must be 1 or 2.
       Returns
           The size in bytes.
   int opus_encoder_init (OpusEncoder * st, opus_int32 Fs, int channels, int application)
       Initializes a previously allocated encoder state The memory pointed to by st must be at  least  the  size
       returned  by  opus_encoder_get_size().  This  is  intended for applications which use their own allocator
       instead of malloc.
       See also
           opus_encoder_create(),opus_encoder_get_size() To  reset  a  previously  initialized  state,  use  the
           OPUS_RESET_STATE CTL.
       Parameters
           st OpusEncoder*: Encoder state
           Fs  opus_int32:  Sampling rate of input signal (Hz) This must be one of 8000, 12000, 16000, 24000, or
           48000.
           channels int: Number of channels (1 or 2) in input signal
           application  int:   Coding   mode   (one   of   OPUS_APPLICATION_VOIP,   OPUS_APPLICATION_AUDIO,   or
           OPUS_APPLICATION_RESTRICTED_LOWDELAY)
       Return values
           OPUS_OK Success or Error codes

Author

       Generated automatically by Doxygen for Opus from the source code.

Version 1.4                                  Mon Apr 8 2024 16:14:57                             opus_encoder(3)