/* Copyright (c) 2012 Xiph.Org Foundation
Written by Jean-Marc Valin */ /* Redistributionanduseinsourceandbinaryforms,withorwithout modification,arepermittedprovidedthatthefollowingconditions aremet:
void opus_extension_iterator_reset(OpusExtensionIterator *iter); void opus_extension_iterator_set_frame_max(OpusExtensionIterator *iter, int frame_max); int opus_extension_iterator_next(OpusExtensionIterator *iter,
opus_extension_data *ext); int opus_extension_iterator_find(OpusExtensionIterator *iter,
opus_extension_data *ext, int id);
typedefstruct ChannelLayout { int nb_channels; int nb_streams; int nb_coupled_streams; unsignedchar mapping[256];
} ChannelLayout;
struct OpusMSEncoder {
ChannelLayout layout; int arch; int lfe_stream; int application;
opus_int32 Fs; int variable_duration;
MappingType mapping_type;
opus_int32 bitrate_bps; /* Encoder states go here */ /* then opus_val32 window_mem[channels*120]; */ /* then opus_val32 preemph_mem[channels]; */
};
struct OpusMSDecoder {
ChannelLayout layout; /* Decoder states go here */
};
int opus_multistream_encoder_ctl_va_list(struct OpusMSEncoder *st, int request,
va_list ap); int opus_multistream_decoder_ctl_va_list(struct OpusMSDecoder *st, int request,
va_list ap);
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);
typedefvoid (*opus_copy_channel_in_func)(
opus_res *dst, int dst_stride, constvoid *src, int src_stride, int src_channel, int frame_size, void *user_data
);
typedefvoid (*opus_copy_channel_out_func)( void *dst, int dst_stride, int dst_channel, const opus_res *src, int src_stride, int frame_size, void *user_data
);
typedefvoid (*downmix_func)(constvoid *, opus_val32 *, int, int, int, int, int); void downmix_float(constvoid *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C); void downmix_int(constvoid *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C); void downmix_int24(constvoid *_x, opus_val32 *sub, int subframe, int offset, int c1, int c2, int C); int is_digital_silence(const opus_res* pcm, int frame_size, int channels, int lsb_depth);
void opus_pcm_soft_clip_impl(float *_x, int N, int C, float *declip_mem, int arch);
int encode_size(int size, unsignedchar *data);
opus_int32 frame_size_select(int application, opus_int32 frame_size, int variable_duration, opus_int32 Fs);
opus_int32 opus_encode_native(OpusEncoder *st, const opus_res *pcm, int frame_size, unsignedchar *data, opus_int32 out_data_bytes, int lsb_depth, constvoid *analysis_pcm, opus_int32 analysis_size, int c1, int c2, int analysis_channels, downmix_func downmix, int float_api);
int opus_decode_native(OpusDecoder *st, constunsignedchar *data, opus_int32 len,
opus_res *pcm, int frame_size, int decode_fec, int self_delimited,
opus_int32 *packet_offset, int soft_clip, const OpusDRED *dred, opus_int32 dred_offset);
/* Make sure everything is properly aligned. */ static OPUS_INLINE int align(int i)
{ struct foo {char c; union { void* p; opus_int32 i; opus_val32 v; } u;};
unsignedint alignment = offsetof(struct foo, u);
/* Optimizing compilers should optimize div and multiply into and
for all sensible alignment values. */ return ((i + alignment - 1) / alignment) * alignment;
}
int opus_packet_parse_impl(constunsignedchar *data, opus_int32 len, int self_delimited, unsignedchar *out_toc, constunsignedchar *frames[48], opus_int16 size[48], int *payload_offset, opus_int32 *packet_offset, constunsignedchar **padding, opus_int32 *padding_len);
opus_int32 opus_repacketizer_out_range_impl(OpusRepacketizer *rp, int begin, int end, unsignedchar *data, opus_int32 maxlen, int self_delimited, int pad, const opus_extension_data *extensions, int nb_extensions);
int pad_frame(unsignedchar *data, opus_int32 len, opus_int32 new_len);
int opus_multistream_encode_native
( struct OpusMSEncoder *st,
opus_copy_channel_in_func copy_channel_in, constvoid *pcm, int analysis_frame_size, unsignedchar *data,
opus_int32 max_data_bytes, int lsb_depth,
downmix_func downmix, int float_api, void *user_data
);
int opus_multistream_decode_native( struct OpusMSDecoder *st, constunsignedchar *data,
opus_int32 len, void *pcm,
opus_copy_channel_out_func copy_channel_out, int frame_size, int decode_fec, int soft_clip, void *user_data
);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.