aboutsummaryrefslogtreecommitdiff
path: root/src/opus_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/opus_private.h')
-rw-r--r--src/opus_private.h38
1 files changed, 35 insertions, 3 deletions
diff --git a/src/opus_private.h b/src/opus_private.h
index 52482bc..0e739eb 100644
--- a/src/opus_private.h
+++ b/src/opus_private.h
@@ -31,15 +31,29 @@
#include "arch.h"
#include "opus.h"
+#include "celt.h"
struct OpusRepacketizer {
unsigned char toc;
int nb_frames;
const unsigned char *frames[48];
- short len[48];
+ opus_int16 len[48];
int framesize;
};
+typedef struct ChannelLayout {
+ int nb_channels;
+ int nb_streams;
+ int nb_coupled_streams;
+ unsigned char mapping[256];
+} ChannelLayout;
+
+int validate_layout(const ChannelLayout *layout);
+int get_left_channel(const ChannelLayout *layout, int stream_id, int prev);
+int get_right_channel(const ChannelLayout *layout, int stream_id, int prev);
+int get_mono_channel(const ChannelLayout *layout, int stream_id, int prev);
+
+
#define MODE_SILK_ONLY 1000
#define MODE_HYBRID 1001
@@ -68,16 +82,34 @@ struct OpusRepacketizer {
#define OPUS_SET_FORCE_MODE_REQUEST 11002
#define OPUS_SET_FORCE_MODE(x) OPUS_SET_FORCE_MODE_REQUEST, __opus_check_int(x)
+typedef void (*downmix_func)(const void *, opus_val32 *, int, int, int, int, int);
+void downmix_float(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
+void downmix_int(const void *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C);
+
+int optimize_framesize(const opus_val16 *x, int len, int C, opus_int32 Fs,
+ int bitrate, opus_val16 tonality, opus_val32 *mem, int buffering,
+ downmix_func downmix);
int encode_size(int size, unsigned char *data);
+opus_int32 frame_size_select(opus_int32 frame_size, int variable_duration, opus_int32 Fs);
+
+opus_int32 compute_frame_size(const void *analysis_pcm, int frame_size,
+ int variable_duration, int C, opus_int32 Fs, int bitrate_bps,
+ int delay_compensation, downmix_func downmix, opus_val32 *subframe_mem);
+
+opus_int32 opus_encode_native(OpusEncoder *st, const opus_val16 *pcm, int frame_size,
+ unsigned char *data, opus_int32 out_data_bytes, int lsb_depth,
+ const void *analysis_pcm, opus_int32 analysis_size, int c1, int c2, int analysis_channels, downmix_func downmix);
+
int opus_decode_native(OpusDecoder *st, const unsigned char *data, opus_int32 len,
- opus_val16 *pcm, int frame_size, int decode_fec, int self_delimited, int *packet_offset);
+ opus_val16 *pcm, int frame_size, int decode_fec, int self_delimited,
+ int *packet_offset, int soft_clip);
/* Make sure everything's aligned to sizeof(void *) bytes */
static inline int align(int i)
{
- return (i+sizeof(void *)-1)&-((int)sizeof(void *));
+ return (i+(int)sizeof(void *)-1)&-(int)sizeof(void *);
}
opus_int32 opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int begin, int end, unsigned char *data, opus_int32 maxlen, int self_delimited);