17 #if !defined(_opusfile_h) 18 # define _opusfile_h (1) 103 # if defined(__cplusplus) 109 # include <ogg/ogg.h> 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) 133 typedef 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) 160 #define OP_FALSE (-1) 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) 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) 429 const unsigned char *_data,
size_t _len) OP_ARG_NONNULL(2);
463 const unsigned char *_data,
size_t _len) OP_ARG_NONNULL(2);
492 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2) OP_ARG_NONNULL(3);
505 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
521 const
unsigned char *_data,
int _len) OP_ARG_NONNULL(1);
539 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
549 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
557 int *_len) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
575 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
593 OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
626 int opus_tagncompare(const
char *_tag_name,
int _tag_len,const
char *_comment);
659 const
char *_tag) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2);
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) ((_request)+(char *)0) 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))) 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) 869 typedef int (*
op_read_func)(
void *_stream,
unsigned char *_ptr,
int _nbytes);
880 typedef int (*
op_seek_func)(
void *_stream,opus_int64 _offset,
int _whence);
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);
1092 OP_WARN_UNUSED_RESULT OggOpusFile *
op_open_file(const
char *_path,
int *_error)
1103 OP_WARN_UNUSED_RESULT OggOpusFile *
op_open_memory(const
unsigned char *_data,
1104 size_t _size,
int *_error);
1132 OP_WARN_UNUSED_RESULT OggOpusFile *
op_vopen_url(const
char *_url,
1133 int *_error,va_list _ap) OP_ARG_NONNULL(1);
1154 OP_WARN_UNUSED_RESULT OggOpusFile *
op_open_url(const
char *_url,
1155 int *_error,...) OP_ARG_NONNULL(1);
1238 size_t _initial_bytes,
int *_error) OP_ARG_NONNULL(2);
1250 OP_WARN_UNUSED_RESULT OggOpusFile *
op_test_file(const
char *_path,
int *_error)
1262 OP_WARN_UNUSED_RESULT OggOpusFile *
op_test_memory(const
unsigned char *_data,
1263 size_t _size,
int *_error);
1293 OP_WARN_UNUSED_RESULT OggOpusFile *
op_vtest_url(const
char *_url,
1294 int *_error,va_list _ap) OP_ARG_NONNULL(1);
1317 OP_WARN_UNUSED_RESULT OggOpusFile *
op_test_url(const
char *_url,
1318 int *_error,...) OP_ARG_NONNULL(1);
1387 size_t _initial_bytes,
int *_error) OP_ARG_NONNULL(2);
1419 void op_free(OggOpusFile *_of);
1456 int op_seekable(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1466 int op_link_count(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1481 opus_uint32
op_serialno(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1520 opus_int64
op_raw_total(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1538 ogg_int64_t
op_pcm_total(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1554 const
OpusHead *
op_head(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1572 const
OpusTags *
op_tags(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1611 opus_int32
op_bitrate(const OggOpusFile *_of,
int _li) OP_ARG_NONNULL(1);
1630 opus_int64
op_raw_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1639 ogg_int64_t
op_pcm_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1);
1687 int op_raw_seek(OggOpusFile *_of,opus_int64 _byte_offset) OP_ARG_NONNULL(1);
1703 int 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) 1792 const ogg_packet *_op,
int _nsamples,
int _nchannels,
int _format,
int _li);
1821 #define OP_HEADER_GAIN (0) 1825 #define OP_ALBUM_GAIN (3007) 1829 #define OP_TRACK_GAIN (3008) 1833 #define OP_ABSOLUTE_GAIN (3009) 1853 int _gain_type,opus_int32 _gain_offset_q8) OP_ARG_NONNULL(1);
1947 OP_WARN_UNUSED_RESULT
int op_read(OggOpusFile *_of,
1948 opus_int16 *_pcm,
int _buf_size,
int *_li) OP_ARG_NONNULL(1);
2029 float *_pcm,
int _buf_size,
int *_li) OP_ARG_NONNULL(1);
2090 opus_int16 *_pcm,
int _buf_size) OP_ARG_NONNULL(1);
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)
int op_test(OpusHead *_head, const unsigned char *_initial_data, size_t _initial_bytes)
Test to see if this is an Opus stream.
int coupled_count
The number of coupled Opus streams in each Ogg packet, in the range 0...127.
Definition: opusfile.h:260
op_tell_func tell
Used to return the current read position in the stream.
Definition: opusfile.h:910
ogg_int64_t op_pcm_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1)
Obtain the PCM offset of the next sample to be read.
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(* op_seek_func)(void *_stream, opus_int64 _offset, int _whence)
Sets the position indicator for _stream.
Definition: opusfile.h:880
opus_int32 type
The picture type according to the ID3v2 APIC frame:
Definition: opusfile.h:358
int op_channel_count(const OggOpusFile *_of, int _li) OP_ARG_NONNULL(1)
Get the channel count of the given link in a (possibly-chained) Ogg Opus stream.
int(* op_decode_cb_func)(void *_ctx, OpusMSDecoder *_decoder, void *_pcm, const ogg_packet *_op, int _nsamples, int _nchannels, int _format, int _li)
Called to decode an Opus packet.
Definition: opusfile.h:1791
OP_WARN_UNUSED_RESULT int op_read_stereo(OggOpusFile *_of, opus_int16 *_pcm, int _buf_size) OP_ARG_NONNULL(1)
Reads more samples from the stream and downmixes to stereo, if necessary.
OP_WARN_UNUSED_RESULT OggOpusFile * op_vopen_url(const char *_url, int *_error, va_list _ap) OP_ARG_NONNULL(1)
Open a stream from a URL.
void op_free(OggOpusFile *_of)
Release all memory used by an OggOpusFile.
OP_WARN_UNUSED_RESULT OggOpusFile * op_test_memory(const unsigned char *_data, size_t _size, int *_error)
Partially open a stream from a memory buffer.
HTTP/Shoutcast/Icecast server information associated with a URL.
Definition: opusfile.h:712
int version
The Ogg Opus format version, in the range 0...255.
Definition: opusfile.h:225
int mapping_family
The channel mapping family, in the range 0...255.
Definition: opusfile.h:251
const OpusHead * op_head(const OggOpusFile *_of, int _li) OP_ARG_NONNULL(1)
Get the ID header information for the given link in a (possibly chained) Ogg Opus stream.
int op_current_link(const OggOpusFile *_of) OP_ARG_NONNULL(1)
Retrieve the index of the current link.
int op_test_open(OggOpusFile *_of) OP_ARG_NONNULL(1)
Finish opening a stream partially opened with op_test_callbacks() or one of the associated convenienc...
OP_WARN_UNUSED_RESULT OggOpusFile * op_open_callbacks(void *_stream, const OpusFileCallbacks *_cb, const unsigned char *_initial_data, size_t _initial_bytes, int *_error) OP_ARG_NONNULL(2)
Open a stream using the given set of callbacks to access it.
unsigned char mapping[OPUS_CHANNEL_COUNT_MAX]
The mapping from coded stream channels to output channels.
Definition: opusfile.h:268
OP_WARN_UNUSED_RESULT int op_read_float_stereo(OggOpusFile *_of, float *_pcm, int _buf_size) OP_ARG_NONNULL(1)
Reads more samples from the stream and downmixes to stereo, if necessary.
OP_WARN_UNUSED_RESULT OggOpusFile * op_open_memory(const unsigned char *_data, size_t _size, int *_error)
Open a stream from a memory buffer.
opus_uint32 depth
The color depth of the picture in bits-per-pixel (not bits-per-channel).
Definition: opusfile.h:374
char * url
The homepage for the server (icy-url/ice-url).
Definition: opusfile.h:728
opus_int64 op_raw_total(const OggOpusFile *_of, int _li) OP_ARG_NONNULL(1)
Get the total (compressed) size of the stream, or of an individual link in a (possibly-chained) Ogg O...
opus_uint32 op_serialno(const OggOpusFile *_of, int _li) OP_ARG_NONNULL(1)
Get the serial number of the given link in a (possibly-chained) Ogg Opus stream.
Ogg Opus bitstream information.
Definition: opusfile.h:215
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
opus_int32 op_bitrate_instant(OggOpusFile *_of) OP_ARG_NONNULL(1)
Compute the instantaneous bitrate, measured as the ratio of bits to playable samples decoded since a)...
int format
The format of the picture data, if known.
Definition: opusfile.h:391
const OpusTags * op_tags(const OggOpusFile *_of, int _li) OP_ARG_NONNULL(1)
Get the comment header information for the given link in a (possibly chained) Ogg Opus stream.
int is_public
Flag indicating whether the server is public (1) or not (0) (icy-pub/ice-public).
Definition: opusfile.h:744
opus_uint32 input_sample_rate
The sampling rate of the original input.
Definition: opusfile.h:237
ogg_int64_t op_pcm_total(const OggOpusFile *_of, int _li) OP_ARG_NONNULL(1)
Get the total PCM length (number of samples at 48 kHz) of the stream, or of an individual link in a (...
opus_uint32 height
The height of the picture in pixels.
Definition: opusfile.h:371
char * server
The software used by the origin server (Server).
Definition: opusfile.h:731
opus_uint32 data_length
The length of the picture data in bytes.
Definition: opusfile.h:379
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
void opus_server_info_clear(OpusServerInfo *_info) OP_ARG_NONNULL(1)
Clears the OpusServerInfo structure.
opus_int64 op_raw_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1)
Obtain the current value of the position indicator for _of.
OP_WARN_UNUSED_RESULT void * op_url_stream_create(OpusFileCallbacks *_cb, const char *_url,...) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2)
Creates a stream that reads from the given URL.
opus_uint32 width
The width of the picture in pixels.
Definition: opusfile.h:369
OP_WARN_UNUSED_RESULT void * op_fdopen(OpusFileCallbacks *_cb, int _fd, const char *_mode) OP_ARG_NONNULL(1) OP_ARG_NONNULL(3)
Opens a stream with fdopen() and fills in a set of callbacks that can be used to access it.
void opus_server_info_init(OpusServerInfo *_info) OP_ARG_NONNULL(1)
Initializes an OpusServerInfo structure.
The contents of a METADATA_BLOCK_PICTURE tag.
Definition: opusfile.h:331
OP_WARN_UNUSED_RESULT void * op_fopen(OpusFileCallbacks *_cb, const char *_path, const char *_mode) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2) OP_ARG_NONNULL(3)
Opens a stream with fopen() and fills in a set of callbacks that can be used to access it.
int op_set_gain_offset(OggOpusFile *_of, int _gain_type, opus_int32 _gain_offset_q8) OP_ARG_NONNULL(1)
Sets the gain to be used for decoded output.
The callbacks used to access non-FILE stream resources.
Definition: opusfile.h:901
char * mime_type
The MIME type of the picture, in printable ASCII characters 0x20-0x7E.
Definition: opusfile.h:365
OP_WARN_UNUSED_RESULT OggOpusFile * op_test_url(const char *_url, int *_error,...) OP_ARG_NONNULL(1)
Partially open a stream from a URL.
int op_seekable(const OggOpusFile *_of) OP_ARG_NONNULL(1)
Returns whether or not the stream being read is seekable.
char * description
The description of the picture, in UTF-8.
Definition: opusfile.h:367
OP_WARN_UNUSED_RESULT OggOpusFile * op_open_file(const char *_path, int *_error) OP_ARG_NONNULL(1)
Open a stream from the given file path.
OP_WARN_UNUSED_RESULT void * op_freopen(OpusFileCallbacks *_cb, const char *_path, const char *_mode, void *_stream) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2) OP_ARG_NONNULL(3) OP_ARG_NONNULL(4)
Opens a stream with freopen() and fills in a set of callbacks that can be used to access it.
int(* op_read_func)(void *_stream, unsigned char *_ptr, int _nbytes)
Reads up to _nbytes bytes of data from _stream.
Definition: opusfile.h:869
int op_raw_seek(OggOpusFile *_of, opus_int64 _byte_offset) OP_ARG_NONNULL(1)
Seek to a byte offset relative to the compressed data.
OP_WARN_UNUSED_RESULT void * op_url_stream_vcreate(OpusFileCallbacks *_cb, const char *_url, va_list _ap) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2)
Creates a stream that reads from the given URL.
void op_set_decode_callback(OggOpusFile *_of, op_decode_cb_func _decode_cb, void *_ctx) OP_ARG_NONNULL(1)
Sets the packet decode callback function.
op_read_func read
Used to read data from the stream.
Definition: opusfile.h:904
void op_set_dither_enabled(OggOpusFile *_of, int _enabled) OP_ARG_NONNULL(1)
Sets whether or not dithering is enabled for 16-bit decoding.
OP_WARN_UNUSED_RESULT OggOpusFile * op_test_callbacks(void *_stream, const OpusFileCallbacks *_cb, const unsigned char *_initial_data, size_t _initial_bytes, int *_error) OP_ARG_NONNULL(2)
Partially open a stream using the given set of callbacks to access it.
OP_WARN_UNUSED_RESULT OggOpusFile * op_test_file(const char *_path, int *_error) OP_ARG_NONNULL(1)
Partially open a stream from the given file path.
int op_pcm_seek(OggOpusFile *_of, ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1)
Seek to the specified PCM offset, such that decoding will begin at exactly the requested position.
op_close_func close
Used to close the stream when the decoder is freed.
Definition: opusfile.h:913
op_seek_func seek
Used to seek in the stream.
Definition: opusfile.h:907
char * content_type
The media type of the entity sent to the recepient (Content-Type).
Definition: opusfile.h:735
OP_WARN_UNUSED_RESULT void * op_mem_stream_create(OpusFileCallbacks *_cb, const unsigned char *_data, size_t _size) OP_ARG_NONNULL(1)
Creates a stream that reads from the given block of memory.
unsigned char * data
The binary picture data.
Definition: opusfile.h:381
opus_int32 op_bitrate(const OggOpusFile *_of, int _li) OP_ARG_NONNULL(1)
Computes the bitrate of the stream, or of an individual link in a (possibly-chained) Ogg Opus stream.
int stream_count
The number of Opus streams in each Ogg packet, in the range 1...255.
Definition: opusfile.h:253
OP_WARN_UNUSED_RESULT int op_read_float(OggOpusFile *_of, float *_pcm, int _buf_size, int *_li) OP_ARG_NONNULL(1)
Reads more samples from the stream.
int(* op_close_func)(void *_stream)
Closes the underlying stream.
Definition: opusfile.h:890
opus_int64(* op_tell_func)(void *_stream)
Obtains the current value of the position indicator for _stream.
Definition: opusfile.h:884
int is_ssl
Flag indicating whether the server is using HTTPS instead of HTTP.
Definition: opusfile.h:749
char * name
The name of the server (icy-name/ice-name).
Definition: opusfile.h:716
OP_WARN_UNUSED_RESULT int op_read(OggOpusFile *_of, opus_int16 *_pcm, int _buf_size, int *_li) OP_ARG_NONNULL(1)
Reads more samples from the stream.
int channel_count
The number of channels, in the range 1...255.
Definition: opusfile.h:227
OP_WARN_UNUSED_RESULT OggOpusFile * op_vtest_url(const char *_url, int *_error, va_list _ap) OP_ARG_NONNULL(1)
Partially open a stream from a URL.
OP_WARN_UNUSED_RESULT OggOpusFile * op_open_url(const char *_url, int *_error,...) OP_ARG_NONNULL(1)
Open a stream from a URL.
char * description
A short description of the server (icy-description/ice-description).
Definition: opusfile.h:720
int op_link_count(const OggOpusFile *_of) OP_ARG_NONNULL(1)
Returns the number of links in this chained stream.
unsigned pre_skip
The number of samples that should be discarded from the beginning of the stream.
Definition: opusfile.h:230