00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00038 #ifndef OPUS_MULTISTREAM_H
00039 #define OPUS_MULTISTREAM_H
00040
00041 #include "opus.h"
00042
00043 typedef struct OpusMSEncoder OpusMSEncoder;
00044 typedef struct OpusMSDecoder OpusMSDecoder;
00045
00046 #define __opus_check_encstate_ptr(ptr) ((ptr) + ((ptr) - (OpusEncoder**)(ptr)))
00047 #define __opus_check_decstate_ptr(ptr) ((ptr) + ((ptr) - (OpusDecoder**)(ptr)))
00048
00049 #define OPUS_MULTISTREAM_GET_ENCODER_STATE_REQUEST 5120
00050 #define OPUS_MULTISTREAM_GET_DECODER_STATE_REQUEST 5122
00051
00052 #define OPUS_MULTISTREAM_GET_ENCODER_STATE(x,y) OPUS_MULTISTREAM_GET_ENCODER_STATE_REQUEST, __opus_check_int(x), __opus_check_encstate_ptr(y)
00053 #define OPUS_MULTISTREAM_GET_DECODER_STATE(x,y) OPUS_MULTISTREAM_GET_DECODER_STATE_REQUEST, __opus_check_int(x), __opus_check_decstate_ptr(y)
00054
00058 OPUS_EXPORT OpusMSEncoder *opus_multistream_encoder_create(
00059 opus_int32 Fs,
00060 int channels,
00061 int streams,
00062 int coupled_streams,
00063 unsigned char *mapping,
00064 int application,
00065 int *error
00066 );
00067
00069 OPUS_EXPORT int opus_multistream_encoder_init(
00070 OpusMSEncoder *st,
00071 opus_int32 Fs,
00072 int channels,
00073 int streams,
00074 int coupled_streams,
00075 unsigned char *mapping,
00076 int application
00077 );
00078
00080 OPUS_EXPORT int opus_multistream_encode(
00081 OpusMSEncoder *st,
00082 const opus_int16 *pcm,
00083 int frame_size,
00084 unsigned char *data,
00085 int max_data_bytes
00086 );
00087
00089 OPUS_EXPORT int opus_multistream_encode_float(
00090 OpusMSEncoder *st,
00091 const float *pcm,
00092 int frame_size,
00093 unsigned char *data,
00094 int max_data_bytes
00095 );
00096
00100 OPUS_EXPORT opus_int32 opus_multistream_encoder_get_size(
00101 int streams,
00102 int coupled_streams
00103 );
00104
00106 OPUS_EXPORT void opus_multistream_encoder_destroy(OpusMSEncoder *st);
00107
00109 OPUS_EXPORT int opus_multistream_encoder_ctl(OpusMSEncoder *st, int request, ...);
00110
00114 OPUS_EXPORT OpusMSDecoder *opus_multistream_decoder_create(
00115 opus_int32 Fs,
00116 int channels,
00117 int streams,
00118 int coupled_streams,
00119 unsigned char *mapping,
00120 int *error
00121 );
00122
00124 OPUS_EXPORT int opus_multistream_decoder_init(
00125 OpusMSDecoder *st,
00126 opus_int32 Fs,
00127 int channels,
00128 int streams,
00129 int coupled_streams,
00130 unsigned char *mapping
00131 );
00132
00134 OPUS_EXPORT int opus_multistream_decode(
00135 OpusMSDecoder *st,
00136 const unsigned char *data,
00137 int len,
00138 opus_int16 *pcm,
00139 int frame_size,
00140 int decode_fec
00142 );
00143
00145 OPUS_EXPORT int opus_multistream_decode_float(
00146 OpusMSDecoder *st,
00147 const unsigned char *data,
00148 int len,
00149 float *pcm,
00150 int frame_size,
00151 int decode_fec
00153 );
00154
00158 OPUS_EXPORT opus_int32 opus_multistream_decoder_get_size(
00159 int streams,
00160 int coupled_streams
00161 );
00162
00164 OPUS_EXPORT int opus_multistream_decoder_ctl(OpusMSDecoder *st, int request, ...);
00165
00167 OPUS_EXPORT void opus_multistream_decoder_destroy(OpusMSDecoder *st);
00168
00169 #endif