summaryrefslogtreecommitdiffstats
path: root/lib/libebur128/ebur128/ebur128.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libebur128/ebur128/ebur128.h')
-rw-r--r--lib/libebur128/ebur128/ebur128.h426
1 files changed, 0 insertions, 426 deletions
diff --git a/lib/libebur128/ebur128/ebur128.h b/lib/libebur128/ebur128/ebur128.h
deleted file mode 100644
index 6a673c7123..0000000000
--- a/lib/libebur128/ebur128/ebur128.h
+++ /dev/null
@@ -1,426 +0,0 @@
-/* See COPYING file for copyright and license details. */
-
-#ifndef EBUR128_H_
-#define EBUR128_H_
-
-/** \file ebur128.h
- * \brief libebur128 - a library for loudness measurement according to
- * the EBU R128 standard.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define EBUR128_VERSION_MAJOR 1
-#define EBUR128_VERSION_MINOR 2
-#define EBUR128_VERSION_PATCH 4
-
-#include <stddef.h> /* for size_t */
-
-/** \enum channel
- * Use these values when setting the channel map with ebur128_set_channel().
- * See definitions in ITU R-REC-BS 1770-4
- */
-enum channel {
- EBUR128_UNUSED = 0, /**< unused channel (for example LFE channel) */
- EBUR128_LEFT = 1,
- EBUR128_Mp030 = 1, /**< itu M+030 */
- EBUR128_RIGHT = 2,
- EBUR128_Mm030 = 2, /**< itu M-030 */
- EBUR128_CENTER = 3,
- EBUR128_Mp000 = 3, /**< itu M+000 */
- EBUR128_LEFT_SURROUND = 4,
- EBUR128_Mp110 = 4, /**< itu M+110 */
- EBUR128_RIGHT_SURROUND = 5,
- EBUR128_Mm110 = 5, /**< itu M-110 */
- EBUR128_DUAL_MONO, /**< a channel that is counted twice */
- EBUR128_MpSC, /**< itu M+SC */
- EBUR128_MmSC, /**< itu M-SC */
- EBUR128_Mp060, /**< itu M+060 */
- EBUR128_Mm060, /**< itu M-060 */
- EBUR128_Mp090, /**< itu M+090 */
- EBUR128_Mm090, /**< itu M-090 */
- EBUR128_Mp135, /**< itu M+135 */
- EBUR128_Mm135, /**< itu M-135 */
- EBUR128_Mp180, /**< itu M+180 */
- EBUR128_Up000, /**< itu U+000 */
- EBUR128_Up030, /**< itu U+030 */
- EBUR128_Um030, /**< itu U-030 */
- EBUR128_Up045, /**< itu U+045 */
- EBUR128_Um045, /**< itu U-030 */
- EBUR128_Up090, /**< itu U+090 */
- EBUR128_Um090, /**< itu U-090 */
- EBUR128_Up110, /**< itu U+110 */
- EBUR128_Um110, /**< itu U-110 */
- EBUR128_Up135, /**< itu U+135 */
- EBUR128_Um135, /**< itu U-135 */
- EBUR128_Up180, /**< itu U+180 */
- EBUR128_Tp000, /**< itu T+000 */
- EBUR128_Bp000, /**< itu B+000 */
- EBUR128_Bp045, /**< itu B+045 */
- EBUR128_Bm045 /**< itu B-045 */
-};
-
-/** \enum error
- * Error return values.
- */
-enum error {
- EBUR128_SUCCESS = 0,
- EBUR128_ERROR_NOMEM,
- EBUR128_ERROR_INVALID_MODE,
- EBUR128_ERROR_INVALID_CHANNEL_INDEX,
- EBUR128_ERROR_NO_CHANGE
-};
-
-/** \enum mode
- * Use these values in ebur128_init (or'ed). Try to use the lowest possible
- * modes that suit your needs, as performance will be better.
- */
-enum mode {
- /** can call ebur128_loudness_momentary */
- EBUR128_MODE_M = (1 << 0),
- /** can call ebur128_loudness_shortterm */
- EBUR128_MODE_S = (1 << 1) | EBUR128_MODE_M,
- /** can call ebur128_loudness_global_* and ebur128_relative_threshold */
- EBUR128_MODE_I = (1 << 2) | EBUR128_MODE_M,
- /** can call ebur128_loudness_range */
- EBUR128_MODE_LRA = (1 << 3) | EBUR128_MODE_S,
- /** can call ebur128_sample_peak */
- EBUR128_MODE_SAMPLE_PEAK = (1 << 4) | EBUR128_MODE_M,
- /** can call ebur128_true_peak */
- EBUR128_MODE_TRUE_PEAK = (1 << 5) | EBUR128_MODE_M
- | EBUR128_MODE_SAMPLE_PEAK,
- /** uses histogram algorithm to calculate loudness */
- EBUR128_MODE_HISTOGRAM = (1 << 6)
-};
-
-/** forward declaration of ebur128_state_internal */
-struct ebur128_state_internal;
-
-/** \brief Contains information about the state of a loudness measurement.
- *
- * You should not need to modify this struct directly.
- */
-typedef struct {
- int mode; /**< The current mode. */
- unsigned int channels; /**< The number of channels. */
- unsigned long samplerate; /**< The sample rate. */
- struct ebur128_state_internal* d; /**< Internal state. */
-} ebur128_state;
-
-/** \brief Get library version number. Do not pass null pointers here.
- *
- * @param major major version number of library
- * @param minor minor version number of library
- * @param patch patch version number of library
- */
-void ebur128_get_version(int* major, int* minor, int* patch);
-
-/** \brief Initialize library state.
- *
- * @param channels the number of channels.
- * @param samplerate the sample rate.
- * @param mode see the mode enum for possible values.
- * @return an initialized library state, or NULL on error.
- */
-ebur128_state* ebur128_init(unsigned int channels,
- unsigned long samplerate,
- int mode);
-
-/** \brief Destroy library state.
- *
- * @param st pointer to a library state.
- */
-void ebur128_destroy(ebur128_state** st);
-
-/** \brief Set channel type.
- *
- * The default is:
- * - 0 -> EBUR128_LEFT
- * - 1 -> EBUR128_RIGHT
- * - 2 -> EBUR128_CENTER
- * - 3 -> EBUR128_UNUSED
- * - 4 -> EBUR128_LEFT_SURROUND
- * - 5 -> EBUR128_RIGHT_SURROUND
- *
- * @param st library state.
- * @param channel_number zero based channel index.
- * @param value channel type from the "channel" enum.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_CHANNEL_INDEX if invalid channel index.
- */
-int ebur128_set_channel(ebur128_state* st,
- unsigned int channel_number,
- int value);
-
-/** \brief Change library parameters.
- *
- * Note that the channel map will be reset when setting a different number of
- * channels. The current unfinished block will be lost.
- *
- * @param st library state.
- * @param channels new number of channels.
- * @param samplerate new sample rate.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_NOMEM on memory allocation error. The state will be
- * invalid and must be destroyed.
- * - EBUR128_ERROR_NO_CHANGE if channels and sample rate were not changed.
- */
-int ebur128_change_parameters(ebur128_state* st,
- unsigned int channels,
- unsigned long samplerate);
-
-/** \brief Set the maximum window duration.
- *
- * Set the maximum duration that will be used for ebur128_window_loudness().
- * Note that this destroys the current content of the audio buffer.
- *
- * @param st library state.
- * @param window duration of the window in ms.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_NOMEM on memory allocation error. The state will be
- * invalid and must be destroyed.
- * - EBUR128_ERROR_NO_CHANGE if window duration not changed.
- */
-int ebur128_set_max_window(ebur128_state* st, unsigned long window);
-
-/** \brief Set the maximum history.
- *
- * Set the maximum history that will be stored for loudness integration.
- * More history provides more accurate results, but requires more resources.
- *
- * Applies to ebur128_loudness_range() and ebur128_loudness_global() when
- * EBUR128_MODE_HISTOGRAM is not set.
- *
- * Default is ULONG_MAX (at least ~50 days).
- * Minimum is 3000ms for EBUR128_MODE_LRA and 400ms for EBUR128_MODE_M.
- *
- * @param st library state.
- * @param history duration of history in ms.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_NO_CHANGE if history not changed.
- */
-int ebur128_set_max_history(ebur128_state* st, unsigned long history);
-
-/** \brief Add frames to be processed.
- *
- * @param st library state.
- * @param src array of source frames. Channels must be interleaved.
- * @param frames number of frames. Not number of samples!
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_NOMEM on memory allocation error.
- */
-int ebur128_add_frames_short(ebur128_state* st,
- const short* src,
- size_t frames);
-/** \brief See \ref ebur128_add_frames_short */
-int ebur128_add_frames_int(ebur128_state* st,
- const int* src,
- size_t frames);
-/** \brief See \ref ebur128_add_frames_short */
-int ebur128_add_frames_float(ebur128_state* st,
- const float* src,
- size_t frames);
-/** \brief See \ref ebur128_add_frames_short */
-int ebur128_add_frames_double(ebur128_state* st,
- const double* src,
- size_t frames);
-
-/** \brief Get global integrated loudness in LUFS.
- *
- * @param st library state.
- * @param out integrated loudness in LUFS. -HUGE_VAL if result is negative
- * infinity.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_I" has not been set.
- */
-int ebur128_loudness_global(ebur128_state* st, double* out);
-/** \brief Get global integrated loudness in LUFS across multiple instances.
- *
- * @param sts array of library states.
- * @param size length of sts
- * @param out integrated loudness in LUFS. -HUGE_VAL if result is negative
- * infinity.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_I" has not been set.
- */
-int ebur128_loudness_global_multiple(ebur128_state** sts,
- size_t size,
- double* out);
-
-/** \brief Get momentary loudness (last 400ms) in LUFS.
- *
- * @param st library state.
- * @param out momentary loudness in LUFS. -HUGE_VAL if result is negative
- * infinity.
- * @return
- * - EBUR128_SUCCESS on success.
- */
-int ebur128_loudness_momentary(ebur128_state* st, double* out);
-/** \brief Get short-term loudness (last 3s) in LUFS.
- *
- * @param st library state.
- * @param out short-term loudness in LUFS. -HUGE_VAL if result is negative
- * infinity.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_S" has not been set.
- */
-int ebur128_loudness_shortterm(ebur128_state* st, double* out);
-
-/** \brief Get loudness of the specified window in LUFS.
- *
- * window must not be larger than the current window set in st.
- * The current window can be changed by calling ebur128_set_max_window().
- *
- * @param st library state.
- * @param window window in ms to calculate loudness.
- * @param out loudness in LUFS. -HUGE_VAL if result is negative infinity.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if window larger than current window in st.
- */
-int ebur128_loudness_window(ebur128_state* st,
- unsigned long window,
- double* out);
-
-/** \brief Get loudness range (LRA) of programme in LU.
- *
- * Calculates loudness range according to EBU 3342.
- *
- * @param st library state.
- * @param out loudness range (LRA) in LU. Will not be changed in case of
- * error. EBUR128_ERROR_NOMEM or EBUR128_ERROR_INVALID_MODE will be
- * returned in this case.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_NOMEM in case of memory allocation error.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_LRA" has not been set.
- */
-int ebur128_loudness_range(ebur128_state* st, double* out);
-/** \brief Get loudness range (LRA) in LU across multiple instances.
- *
- * Calculates loudness range according to EBU 3342.
- *
- * @param sts array of library states.
- * @param size length of sts
- * @param out loudness range (LRA) in LU. Will not be changed in case of
- * error. EBUR128_ERROR_NOMEM or EBUR128_ERROR_INVALID_MODE will be
- * returned in this case.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_NOMEM in case of memory allocation error.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_LRA" has not been set.
- */
-int ebur128_loudness_range_multiple(ebur128_state** sts,
- size_t size,
- double* out);
-
-/** \brief Get maximum sample peak from all frames that have been processed.
- *
- * The equation to convert to dBFS is: 20 * log10(out)
- *
- * @param st library state
- * @param channel_number channel to analyse
- * @param out maximum sample peak in float format (1.0 is 0 dBFS)
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_SAMPLE_PEAK" has not
- * been set.
- * - EBUR128_ERROR_INVALID_CHANNEL_INDEX if invalid channel index.
- */
-int ebur128_sample_peak(ebur128_state* st,
- unsigned int channel_number,
- double* out);
-
-/** \brief Get maximum sample peak from the last call to add_frames().
- *
- * The equation to convert to dBFS is: 20 * log10(out)
- *
- * @param st library state
- * @param channel_number channel to analyse
- * @param out maximum sample peak in float format (1.0 is 0 dBFS)
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_SAMPLE_PEAK" has not
- * been set.
- * - EBUR128_ERROR_INVALID_CHANNEL_INDEX if invalid channel index.
- */
-int ebur128_prev_sample_peak(ebur128_state* st,
- unsigned int channel_number,
- double* out);
-
-/** \brief Get maximum true peak from all frames that have been processed.
- *
- * Uses an implementation defined algorithm to calculate the true peak. Do not
- * try to compare resulting values across different versions of the library,
- * as the algorithm may change.
- *
- * The current implementation uses a custom polyphase FIR interpolator to
- * calculate true peak. Will oversample 4x for sample rates < 96000 Hz, 2x for
- * sample rates < 192000 Hz and leave the signal unchanged for 192000 Hz.
- *
- * The equation to convert to dBTP is: 20 * log10(out)
- *
- * @param st library state
- * @param channel_number channel to analyse
- * @param out maximum true peak in float format (1.0 is 0 dBTP)
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_TRUE_PEAK" has not
- * been set.
- * - EBUR128_ERROR_INVALID_CHANNEL_INDEX if invalid channel index.
- */
-int ebur128_true_peak(ebur128_state* st,
- unsigned int channel_number,
- double* out);
-
-/** \brief Get maximum true peak from the last call to add_frames().
- *
- * Uses an implementation defined algorithm to calculate the true peak. Do not
- * try to compare resulting values across different versions of the library,
- * as the algorithm may change.
- *
- * The current implementation uses a custom polyphase FIR interpolator to
- * calculate true peak. Will oversample 4x for sample rates < 96000 Hz, 2x for
- * sample rates < 192000 Hz and leave the signal unchanged for 192000 Hz.
- *
- * The equation to convert to dBTP is: 20 * log10(out)
- *
- * @param st library state
- * @param channel_number channel to analyse
- * @param out maximum true peak in float format (1.0 is 0 dBTP)
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_TRUE_PEAK" has not
- * been set.
- * - EBUR128_ERROR_INVALID_CHANNEL_INDEX if invalid channel index.
- */
-int ebur128_prev_true_peak(ebur128_state* st,
- unsigned int channel_number,
- double* out);
-
-/** \brief Get relative threshold in LUFS.
- *
- * @param st library state
- * @param out relative threshold in LUFS.
- * @return
- * - EBUR128_SUCCESS on success.
- * - EBUR128_ERROR_INVALID_MODE if mode "EBUR128_MODE_I" has not
- * been set.
- */
-int ebur128_relative_threshold(ebur128_state* st, double* out);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* EBUR128_H_ */