| libopusenc 0.2.1 Stand-alone encoder library for .opus files.

opusenc.h
1 /* Copyright (c) 2017 Jean-Marc Valin */
2 /*
3 Redistribution and use in source and binary forms, with or without
4 modification, are permitted provided that the following conditions
5 are met:
6
7 - Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9
10 - Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in the
12 documentation and/or other materials provided with the distribution.
13
14 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
16 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
17 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
18 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
22 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
23 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27 #ifndef OPUSENC_H
28 # define OPUSENC_H
29
53 # if defined(__cplusplus)
54 extern "C" {
55 # endif
56
57 #include <stddef.h>
58 #include <opus.h>
59
60 #ifndef OPE_EXPORT
61 # if defined(WIN32)
62 # if defined(OPE_BUILD) && defined(DLL_EXPORT)
63 # define OPE_EXPORT __declspec(dllexport)
64 # else
65 # define OPE_EXPORT
66 # endif
67 # elif defined(__GNUC__) && defined(OPE_BUILD)
68 # define OPE_EXPORT __attribute__ ((visibility ("default")))
69 # else
70 # define OPE_EXPORT
71 # endif
72 #endif
73
83
84
85 /* Bump this when we change the API. */
87 #define OPE_API_VERSION 0
88
89 #define OPE_OK 0
90 /* Based on the relevant libopus code minus 10. */
91 #define OPE_BAD_ARG -11
92 #define OPE_INTERNAL_ERROR -13
93 #define OPE_UNIMPLEMENTED -15
94 #define OPE_ALLOC_FAIL -17
95
96 /* Specific to libopusenc. */
97 #define OPE_CANNOT_OPEN -30
98 #define OPE_TOO_LATE -31
99 #define OPE_INVALID_PICTURE -32
100 #define OPE_INVALID_ICON -33
101 #define OPE_WRITE_FAIL -34
102 #define OPE_CLOSE_FAIL -35
103
106
107
108 /* These are the "raw" request values -- they should usually not be used. */
109 #define OPE_SET_DECISION_DELAY_REQUEST 14000
110 #define OPE_GET_DECISION_DELAY_REQUEST 14001
111 #define OPE_SET_MUXING_DELAY_REQUEST 14002
112 #define OPE_GET_MUXING_DELAY_REQUEST 14003
113 #define OPE_SET_COMMENT_PADDING_REQUEST 14004
114 #define OPE_GET_COMMENT_PADDING_REQUEST 14005
115 #define OPE_SET_SERIALNO_REQUEST 14006
116 #define OPE_GET_SERIALNO_REQUEST 14007
117 #define OPE_SET_PACKET_CALLBACK_REQUEST 14008
118 /*#define OPE_GET_PACKET_CALLBACK_REQUEST 14009*/
119 #define OPE_SET_HEADER_GAIN_REQUEST 14010
120 #define OPE_GET_HEADER_GAIN_REQUEST 14011
121 #define OPE_GET_NB_STREAMS_REQUEST 14013
122 #define OPE_GET_NB_COUPLED_STREAMS_REQUEST 14015
123
126
131
132 #define OPE_SET_DECISION_DELAY(x) OPE_SET_DECISION_DELAY_REQUEST, __opus_check_int(x)
133 #define OPE_GET_DECISION_DELAY(x) OPE_GET_DECISION_DELAY_REQUEST, __opus_check_int_ptr(x)
134 #define OPE_SET_MUXING_DELAY(x) OPE_SET_MUXING_DELAY_REQUEST, __opus_check_int(x)
135 #define OPE_GET_MUXING_DELAY(x) OPE_GET_MUXING_DELAY_REQUEST, __opus_check_int_ptr(x)
136 #define OPE_SET_COMMENT_PADDING(x) OPE_SET_COMMENT_PADDING_REQUEST, __opus_check_int(x)
137 #define OPE_GET_COMMENT_PADDING(x) OPE_GET_COMMENT_PADDING_REQUEST, __opus_check_int_ptr(x)
138 #define OPE_SET_SERIALNO(x) OPE_SET_SERIALNO_REQUEST, __opus_check_int(x)
139 #define OPE_GET_SERIALNO(x) OPE_GET_SERIALNO_REQUEST, __opus_check_int_ptr(x)
140 /* FIXME: Add type-checking macros to these. */
141 #define OPE_SET_PACKET_CALLBACK(x,u) OPE_SET_PACKET_CALLBACK_REQUEST, (x), (u)
142 /*#define OPE_GET_PACKET_CALLBACK(x,u) OPE_GET_PACKET_CALLBACK_REQUEST, (x), (u)*/
143 #define OPE_SET_HEADER_GAIN(x) OPE_SET_HEADER_GAIN_REQUEST, __opus_check_int(x)
144 #define OPE_GET_HEADER_GAIN(x) OPE_GET_HEADER_GAIN_REQUEST, __opus_check_int_ptr(x)
145 #define OPE_GET_NB_STREAMS(x) OPE_GET_NB_STREAMS_REQUEST, __opus_check_int_ptr(x)
146 #define OPE_GET_NB_COUPLED_STREAMS(x) OPE_GET_NB_COUPLED_STREAMS_REQUEST, __opus_check_int_ptr(x)
147
149
152
157
166 typedef int (*ope_write_func)(void *user_data, const unsigned char *ptr, opus_int32 len);
167
174 typedef int (*ope_close_func)(void *user_data);
175
182 typedef void (*ope_packet_func)(void *user_data, const unsigned char *packet_ptr, opus_int32 packet_len, opus_uint32 flags);
183
185 typedef struct {
187 ope_write_func write;
189 ope_close_func close;
190 } OpusEncCallbacks;
193
195 typedef struct OggOpusComments OggOpusComments;
196
198 typedef struct OggOpusEnc OggOpusEnc;
199
202
207
210 OPE_EXPORT OggOpusComments *ope_comments_create(void);
211
215 OPE_EXPORT OggOpusComments *ope_comments_copy(OggOpusComments *comments);
216
219 OPE_EXPORT void ope_comments_destroy(OggOpusComments *comments);
220
227 OPE_EXPORT int ope_comments_add(OggOpusComments *comments, const char *tag, const char *val);
228
234 OPE_EXPORT int ope_comments_add_string(OggOpusComments *comments, const char *tag_and_val);
235
243 OPE_EXPORT int ope_comments_add_picture(OggOpusComments *comments, const char *filename, int picture_type, const char *description);
244
253 OPE_EXPORT int ope_comments_add_picture_from_memory(OggOpusComments *comments, const char *ptr, size_t size, int picture_type, const char *description);
254
257
260
265
275 OPE_EXPORT OggOpusEnc *ope_encoder_create_file(const char *path, OggOpusComments *comments, opus_int32 rate, int channels, int family, int *error);
276
287 OPE_EXPORT OggOpusEnc *ope_encoder_create_callbacks(const OpusEncCallbacks *callbacks, void *user_data,
288 OggOpusComments *comments, opus_int32 rate, int channels, int family, int *error);
289
299 OPE_EXPORT OggOpusEnc *ope_encoder_create_pull(OggOpusComments *comments, opus_int32 rate, int channels, int family, int *error);
300
310 OPE_EXPORT int ope_encoder_deferred_init_with_mapping(OggOpusEnc *enc, int family, int streams,
311 int coupled_streams, const unsigned char *mapping);
312
318 OPE_EXPORT int ope_encoder_write_float(OggOpusEnc *enc, const float *pcm, int samples_per_channel);
319
325 OPE_EXPORT int ope_encoder_write(OggOpusEnc *enc, const opus_int16 *pcm, int samples_per_channel);
326
333 OPE_EXPORT int ope_encoder_get_page(OggOpusEnc *enc, unsigned char **page, opus_int32 *len, int flush);
334
339 OPE_EXPORT int ope_encoder_drain(OggOpusEnc *enc);
340
344 OPE_EXPORT void ope_encoder_destroy(OggOpusEnc *enc);
345
351 OPE_EXPORT int ope_encoder_chain_current(OggOpusEnc *enc, OggOpusComments *comments);
352
359 OPE_EXPORT int ope_encoder_continue_new_file(OggOpusEnc *enc, const char *path, OggOpusComments *comments);
360
367 OPE_EXPORT int ope_encoder_continue_new_callbacks(OggOpusEnc *enc, void *user_data, OggOpusComments *comments);
368
373 OPE_EXPORT int ope_encoder_flush_header(OggOpusEnc *enc);
374
380 OPE_EXPORT int ope_encoder_ctl(OggOpusEnc *enc, int request, ...);
381
387 OPE_EXPORT const char *ope_strerror(int error);
388
391 OPE_EXPORT const char *ope_get_version_string(void);
392
395 OPE_EXPORT int ope_get_abi_version(void);
396
399
400 # if defined(__cplusplus)
401 }
402 # endif
403
404 #endif
OpusEncCallbacks
Callback functions for accessing the stream.
Definition: opusenc.h:185
OpusEncCallbacks::write
ope_write_func write
Callback for writing to the stream.
Definition: opusenc.h:187
OpusEncCallbacks::close
ope_close_func close
Callback for closing the stream.
Definition: opusenc.h:189