Fixed multiple bugs in the repacketizer
[opus.git] / src / opus.h
index 48e5fbd..9bdb2f3 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef OPUS_H
 #define OPUS_H
 
+#include "opus_types.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -61,8 +63,6 @@ extern "C" {
 /** Memory allocation has failed */
 #define OPUS_ALLOC_FAIL       -7
 
-#define OPUS_TEST_RANGE_CODER_STATE     1
-
 #define OPUS_BITRATE_AUTO       -1
 
 #define OPUS_APPLICATION_VOIP        2000
@@ -145,19 +145,24 @@ extern "C" {
 #define OPUS_GET_SIGNAL_REQUEST 25
 #define OPUS_GET_SIGNAL(x) OPUS_GET_SIGNAL_REQUEST, __check_int_ptr(x)
 
+#define OPUS_GET_LOOKAHEAD_REQUEST 27
+#define OPUS_GET_LOOKAHEAD(x) OPUS_GET_LOOKAHEAD_REQUEST, __check_int_ptr(x)
+
 typedef struct OpusEncoder OpusEncoder;
 typedef struct OpusDecoder OpusDecoder;
 
-/* 
- * There are two 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. 
+/*
+ * There are two 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.
  */
 
 /* Returns initialized encoder state */
@@ -177,7 +182,7 @@ OPUS_EXPORT OpusEncoder *opus_encoder_init(
 /* Returns length of the data payload (in bytes) */
 OPUS_EXPORT int opus_encode(
     OpusEncoder *st,            /* Encoder state */
-    const short *pcm,           /* Input signal (interleaved if 2 channels). length is frame_size*channels */
+    const opus_int16 *pcm,      /* Input signal (interleaved if 2 channels). length is frame_size*channels */
     int frame_size,             /* Number of samples per frame of input signal */
     unsigned char *data,        /* Output payload (no more than max_data_bytes long) */
     int max_data_bytes          /* Allocated memory for payload; don't use for controlling bitrate */
@@ -192,7 +197,7 @@ OPUS_EXPORT OpusDecoder *opus_decoder_create(
     int channels                /* Number of channels (1/2) in output signal */
 );
 
-OPUS_EXPORT OpusDecoder *opus_decoder_init(OpusDecoder *st, 
+OPUS_EXPORT OpusDecoder *opus_decoder_init(OpusDecoder *st,
     int Fs,                     /* Sampling rate of output signal (Hz) */
     int channels                /* Number of channels (1/2) in output signal */
 );
@@ -202,7 +207,7 @@ OPUS_EXPORT int opus_decode(
     OpusDecoder *st,            /* Decoder state */
     const unsigned char *data,  /* Input payload. Use a NULL pointer to indicate packet loss */
     int len,                    /* Number of bytes in payload */
-    short *pcm,                 /* Output signal (interleaved if 2 channels). length is frame_size*channels */
+    opus_int16 *pcm,            /* Output signal (interleaved if 2 channels). length is frame_size*channels */
     int frame_size,             /* Number of samples per frame of input signal */
     int decode_fec              /* Flag (0/1) to request that any in-band forward error correction data be */
                                 /* decoded. If no such data is available the frame is decoded as if it were lost. */
@@ -212,6 +217,10 @@ OPUS_EXPORT int opus_decoder_ctl(OpusDecoder *st, int request, ...);
 
 OPUS_EXPORT void opus_decoder_destroy(OpusDecoder *st);
 
+OPUS_EXPORT int opus_packet_parse(const unsigned char *data, int len,
+      unsigned char *out_toc, const unsigned char *frames[48],
+      short size[48], const unsigned char **payload);
+
 OPUS_EXPORT int opus_packet_get_bandwidth(const unsigned char *data);
 OPUS_EXPORT int opus_packet_get_samples_per_frame(const unsigned char *data, int Fs);
 OPUS_EXPORT int opus_packet_get_nb_channels(const unsigned char *data);
@@ -220,13 +229,33 @@ OPUS_EXPORT int opus_decoder_get_nb_samples(const OpusDecoder *dec, const unsign
 
 OPUS_EXPORT const char *opus_strerror(int error);
 
-/* For testing purposes: the encoder and decoder state should always be identical after coding a payload */
-#if OPUS_TEST_RANGE_CODER_STATE
+OPUS_EXPORT const char *opus_get_version_string(void);
+
+/* For testing purposes: the encoder and decoder state should
+   always be identical after coding a payload */
 OPUS_EXPORT int opus_encoder_get_final_range(OpusEncoder *st);
 OPUS_EXPORT int opus_decoder_get_final_range(OpusDecoder *st);
-#endif
 
 
+/* Repacketizer */
+typedef struct OpusRepacketizer OpusRepacketizer;
+
+OPUS_EXPORT int opus_repacketizer_get_size(void);
+
+OPUS_EXPORT OpusRepacketizer *opus_repacketizer_init(OpusRepacketizer *rp);
+
+OPUS_EXPORT OpusRepacketizer *opus_repacketizer_create(void);
+
+OPUS_EXPORT void opus_repacketizer_destroy(OpusRepacketizer *rp);
+
+OPUS_EXPORT int opus_repacketizer_cat(OpusRepacketizer *rp, const unsigned char *data, int len);
+
+OPUS_EXPORT int opus_repacketizer_out_range(OpusRepacketizer *rp, int begin, int end, unsigned char *data, int maxlen);
+
+OPUS_EXPORT int opus_repacketizer_get_nb_frames(OpusRepacketizer *rp);
+
+OPUS_EXPORT int opus_repacketizer_out(OpusRepacketizer *rp, unsigned char *data, int maxlen);
+
 #ifdef __cplusplus
 }
 #endif