17#if !defined(_opusfile_h)
18# define _opusfile_h (1)
103# if defined(__cplusplus)
110# include <opus_multistream.h>
115# if !defined(OP_GNUC_PREREQ)
116# if defined(__GNUC__)&&defined(__GNUC_MINOR__)
117# define OP_GNUC_PREREQ(_maj,_min) \
118 ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))
120# define OP_GNUC_PREREQ(_maj,_min) 0
124# if OP_GNUC_PREREQ(4,0)
125# pragma GCC visibility push(default)
133typedef struct OggOpusFile OggOpusFile;
136# if OP_GNUC_PREREQ(3,4)
137# define OP_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
139# define OP_WARN_UNUSED_RESULT
141# if OP_GNUC_PREREQ(3,4)
142# define OP_ARG_NONNULL(_x) __attribute__((__nonnull__(_x)))
144# define OP_ARG_NONNULL(_x)
168#define OP_EREAD (-128)
172#define OP_EFAULT (-129)
175#define OP_EIMPL (-130)
177#define OP_EINVAL (-131)
182#define OP_ENOTFORMAT (-132)
185#define OP_EBADHEADER (-133)
187#define OP_EVERSION (-134)
189#define OP_ENOTAUDIO (-135)
193#define OP_EBADPACKET (-136)
197#define OP_EBADLINK (-137)
199#define OP_ENOSEEK (-138)
201#define OP_EBADTIMESTAMP (-139)
210#define OPUS_CHANNEL_COUNT_MAX (255)
268 unsigned char mapping[OPUS_CHANNEL_COUNT_MAX];
318#define OP_PIC_FORMAT_UNKNOWN (-1)
320#define OP_PIC_FORMAT_URL (0)
322#define OP_PIC_FORMAT_JPEG (1)
324#define OP_PIC_FORMAT_PNG (2)
326#define OP_PIC_FORMAT_GIF (3)
428OP_WARN_UNUSED_RESULT
int opus_head_parse(
OpusHead *_head,
429 const unsigned char *_data,
size_t _len) OP_ARG_NONNULL(2);
445ogg_int64_t opus_granule_sample(
const OpusHead *_head,ogg_int64_t _gp)
462OP_WARN_UNUSED_RESULT
int opus_tags_parse(
OpusTags *_tags,
463 const unsigned char *_data,
size_t _len) OP_ARG_NONNULL(2);
478void opus_tags_init(
OpusTags *_tags) OP_ARG_NONNULL(1);
491int opus_tags_add(
OpusTags *_tags,
const char *_tag,
const char *_value)
492 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2) OP_ARG_NONNULL(3);
504int opus_tags_add_comment(
OpusTags *_tags,const
char *_comment)
505 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
520int opus_tags_set_binary_suffix(
OpusTags *_tags,
521 const
unsigned char *_data,
int _len) OP_ARG_NONNULL(1);
538const
char *opus_tags_query(const
OpusTags *_tags,const
char *_tag,
int _count)
539 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
548int opus_tags_query_count(const
OpusTags *_tags,const
char *_tag)
549 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
556const
unsigned char *opus_tags_get_binary_suffix(const
OpusTags *_tags,
557 int *_len) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
574int opus_tags_get_album_gain(const
OpusTags *_tags,
int *_gain_q8)
575 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
592int opus_tags_get_track_gain(const
OpusTags *_tags,
int *_gain_q8)
593 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
600void opus_tags_clear(
OpusTags *_tags) OP_ARG_NONNULL(1);
611int opus_tagcompare(const
char *_tag_name,const
char *_comment);
626int opus_tagncompare(const
char *_tag_name,
int _tag_len,const
char *_comment);
658OP_WARN_UNUSED_RESULT
int opus_picture_tag_parse(
OpusPictureTag *_pic,
659 const
char *_tag) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
665void opus_picture_tag_init(
OpusPictureTag *_pic) OP_ARG_NONNULL(1);
672void opus_picture_tag_clear(
OpusPictureTag *_pic) OP_ARG_NONNULL(1);
694#define OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST (6464)
695#define OP_HTTP_PROXY_HOST_REQUEST (6528)
696#define OP_HTTP_PROXY_PORT_REQUEST (6592)
697#define OP_HTTP_PROXY_USER_REQUEST (6656)
698#define OP_HTTP_PROXY_PASS_REQUEST (6720)
699#define OP_GET_SERVER_INFO_REQUEST (6784)
701#define OP_URL_OPT(_request) ((char *)(_request))
705#define OP_CHECK_INT(_x) ((void)((_x)==(opus_int32)0),(opus_int32)(_x))
706#define OP_CHECK_CONST_CHAR_PTR(_x) ((_x)+((_x)-(const char *)(_x)))
707#define OP_CHECK_SERVER_INFO_PTR(_x) ((_x)+((_x)-(OpusServerInfo *)(_x)))
756void opus_server_info_init(
OpusServerInfo *_info) OP_ARG_NONNULL(1);
764void opus_server_info_clear(
OpusServerInfo *_info) OP_ARG_NONNULL(1);
772#define OP_SSL_SKIP_CERTIFICATE_CHECK(_b) \
773 OP_URL_OPT(OP_SSL_SKIP_CERTIFICATE_CHECK_REQUEST),OP_CHECK_INT(_b)
783#define OP_HTTP_PROXY_HOST(_host) \
784 OP_URL_OPT(OP_HTTP_PROXY_HOST_REQUEST),OP_CHECK_CONST_CHAR_PTR(_host)
796#define OP_HTTP_PROXY_PORT(_port) \
797 OP_URL_OPT(OP_HTTP_PROXY_PORT_REQUEST),OP_CHECK_INT(_port)
809#define OP_HTTP_PROXY_USER(_user) \
810 OP_URL_OPT(OP_HTTP_PROXY_USER_REQUEST),OP_CHECK_CONST_CHAR_PTR(_user)
822#define OP_HTTP_PROXY_PASS(_pass) \
823 OP_URL_OPT(OP_HTTP_PROXY_PASS_REQUEST),OP_CHECK_CONST_CHAR_PTR(_pass)
843#define OP_GET_SERVER_INFO(_info) \
844 OP_URL_OPT(OP_GET_SERVER_INFO_REQUEST),OP_CHECK_SERVER_INFO_PTR(_info)
869typedef int (*op_read_func)(
void *_stream,
unsigned char *_ptr,
int _nbytes);
880typedef int (*op_seek_func)(
void *_stream,opus_int64 _offset,
int _whence);
884typedef opus_int64 (*op_tell_func)(
void *_stream);
890typedef int (*op_close_func)(
void *_stream);
934 const char *_path,
const char *_mode) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2)
951 int _fd,const
char *_mode) OP_ARG_NONNULL(1) OP_ARG_NONNULL(3);
973 const
char *_path,const
char *_mode,
void *_stream) OP_ARG_NONNULL(1)
974 OP_ARG_NONNULL(2) OP_ARG_NONNULL(3) OP_ARG_NONNULL(4);
987 const
unsigned char *_data,
size_t _size) OP_ARG_NONNULL(1);
1013 const
char *_url,va_list _ap) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
1035 const
char *_url,...) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
1081 const
unsigned char *_initial_data,
size_t _initial_bytes);
1092OP_WARN_UNUSED_RESULT OggOpusFile *op_open_file(const
char *_path,
int *_error)
1103OP_WARN_UNUSED_RESULT OggOpusFile *op_open_memory(const
unsigned char *_data,
1104 size_t _size,
int *_error);
1132OP_WARN_UNUSED_RESULT OggOpusFile *op_vopen_url(const
char *_url,
1133 int *_error,va_list _ap) OP_ARG_NONNULL(1);
1154OP_WARN_UNUSED_RESULT OggOpusFile *op_open_url(const
char *_url,
1155 int *_error,...) OP_ARG_NONNULL(1);
1236OP_WARN_UNUSED_RESULT OggOpusFile *op_open_callbacks(
void *_stream,
1238 size_t _initial_bytes,
int *_error) OP_ARG_NONNULL(2);
1250OP_WARN_UNUSED_RESULT OggOpusFile *op_test_file(const
char *_path,
int *_error)
1262OP_WARN_UNUSED_RESULT OggOpusFile *op_test_memory(const
unsigned char *_data,
1263 size_t _size,
int *_error);
1293OP_WARN_UNUSED_RESULT OggOpusFile *op_vtest_url(const
char *_url,
1294 int *_error,va_list _ap) OP_ARG_NONNULL(1);
1317OP_WARN_UNUSED_RESULT OggOpusFile *op_test_url(const
char *_url,
1318 int *_error,...) OP_ARG_NONNULL(1);
1385OP_WARN_UNUSED_RESULT OggOpusFile *op_test_callbacks(
void *_stream,
1387 size_t _initial_bytes,
int *_error) OP_ARG_NONNULL(2);
1415int op_test_open(OggOpusFile *_of) OP_ARG_NONNULL(1);
1419void op_free(OggOpusFile *_of);
1456int op_seekable(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1466int op_link_count(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1481opus_uint32 op_serialno(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1498int op_channel_count(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1520opus_int64 op_raw_total(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1538ogg_int64_t op_pcm_total(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1554const
OpusHead *op_head(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1572const
OpusTags *op_tags(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1589int op_current_link(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1611opus_int32 op_bitrate(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1624opus_int32 op_bitrate_instant(OggOpusFile *_of) OP_ARG_NONNULL(1);
1630opus_int64 op_raw_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1639ogg_int64_t op_pcm_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1687int op_raw_seek(OggOpusFile *_of,opus_int64 _byte_offset) OP_ARG_NONNULL(1);
1703int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1);
1751#define OP_DEC_FORMAT_SHORT (7008)
1754#define OP_DEC_FORMAT_FLOAT (7040)
1758#define OP_DEC_USE_DEFAULT (6720)
1791typedef int (*op_decode_cb_func)(
void *_ctx,OpusMSDecoder *_decoder,
void *_pcm,
1792 const ogg_packet *_op,
int _nsamples,
int _nchannels,
int _format,
int _li);
1815void op_set_decode_callback(OggOpusFile *_of,
1816 op_decode_cb_func _decode_cb,
void *_ctx) OP_ARG_NONNULL(1);
1821#define OP_HEADER_GAIN (0)
1825#define OP_ALBUM_GAIN (3007)
1829#define OP_TRACK_GAIN (3008)
1833#define OP_ABSOLUTE_GAIN (3009)
1852int op_set_gain_offset(OggOpusFile *_of,
1853 int _gain_type,opus_int32 _gain_offset_q8) OP_ARG_NONNULL(1);
1865void op_set_dither_enabled(OggOpusFile *_of,
int _enabled) OP_ARG_NONNULL(1);
1947OP_WARN_UNUSED_RESULT
int op_read(OggOpusFile *_of,
1948 opus_int16 *_pcm,
int _buf_size,
int *_li) OP_ARG_NONNULL(1);
2028OP_WARN_UNUSED_RESULT
int op_read_float(OggOpusFile *_of,
2029 float *_pcm,
int _buf_size,
int *_li) OP_ARG_NONNULL(1);
2089OP_WARN_UNUSED_RESULT
int op_read_stereo(OggOpusFile *_of,
2090 opus_int16 *_pcm,
int _buf_size) OP_ARG_NONNULL(1);
2150OP_WARN_UNUSED_RESULT
int op_read_float_stereo(OggOpusFile *_of,
2151 float *_pcm,
int _buf_size) OP_ARG_NONNULL(1);
2156# if OP_GNUC_PREREQ(4,0)
2157# pragma GCC visibility pop
2160# if defined(__cplusplus)
The callbacks used to access non-FILE stream resources.
Definition opusfile.h:901
op_close_func close
Used to close the stream when the decoder is freed.
Definition opusfile.h:913
op_tell_func tell
Used to return the current read position in the stream.
Definition opusfile.h:910
op_read_func read
Used to read data from the stream.
Definition opusfile.h:904
op_seek_func seek
Used to seek in the stream.
Definition opusfile.h:907
Ogg Opus bitstream information.
Definition opusfile.h:215
int coupled_count
The number of coupled Opus streams in each Ogg packet, in the range 0...127.
Definition opusfile.h:260
int output_gain
The gain to apply to the decoded output, in dB, as a Q8 value in the range -32768....
Definition opusfile.h:244
int stream_count
The number of Opus streams in each Ogg packet, in the range 1...255.
Definition opusfile.h:253
int mapping_family
The channel mapping family, in the range 0...255.
Definition opusfile.h:251
opus_uint32 input_sample_rate
The sampling rate of the original input.
Definition opusfile.h:237
int version
The Ogg Opus format version, in the range 0...255.
Definition opusfile.h:225
unsigned pre_skip
The number of samples that should be discarded from the beginning of the stream.
Definition opusfile.h:230
unsigned char mapping[OPUS_CHANNEL_COUNT_MAX]
The mapping from coded stream channels to output channels.
Definition opusfile.h:268
int channel_count
The number of channels, in the range 1...255.
Definition opusfile.h:227
The contents of a METADATA_BLOCK_PICTURE tag.
Definition opusfile.h:331
unsigned char * data
The binary picture data.
Definition opusfile.h:381
opus_uint32 height
The height of the picture in pixels.
Definition opusfile.h:371
opus_int32 type
The picture type according to the ID3v2 APIC frame:
Definition opusfile.h:358
opus_uint32 colors
For indexed-color pictures (e.g., GIF), the number of colors used, or 0 for non-indexed pictures.
Definition opusfile.h:377
opus_uint32 width
The width of the picture in pixels.
Definition opusfile.h:369
opus_uint32 depth
The color depth of the picture in bits-per-pixel (not bits-per-channel).
Definition opusfile.h:374
char * description
The description of the picture, in UTF-8.
Definition opusfile.h:367
opus_uint32 data_length
The length of the picture data in bytes.
Definition opusfile.h:379
int format
The format of the picture data, if known.
Definition opusfile.h:391
char * mime_type
The MIME type of the picture, in printable ASCII characters 0x20-0x7E.
Definition opusfile.h:365
HTTP/Shoutcast/Icecast server information associated with a URL.
Definition opusfile.h:712
opus_int32 bitrate_kbps
The nominal stream bitrate in kbps (icy-br/ice-bitrate).
Definition opusfile.h:739
char * genre
The genre the server falls under (icy-genre/ice-genre).
Definition opusfile.h:724
int is_ssl
Flag indicating whether the server is using HTTPS instead of HTTP.
Definition opusfile.h:749
char * content_type
The media type of the entity sent to the recepient (Content-Type).
Definition opusfile.h:735
char * name
The name of the server (icy-name/ice-name).
Definition opusfile.h:716
char * server
The software used by the origin server (Server).
Definition opusfile.h:731
char * url
The homepage for the server (icy-url/ice-url).
Definition opusfile.h:728
int is_public
Flag indicating whether the server is public (1) or not (0) (icy-pub/ice-public).
Definition opusfile.h:744
char * description
A short description of the server (icy-description/ice-description).
Definition opusfile.h:720