Do not crash to assertion failure on unknown audio codec
[deb_shairplay.git] / src / lib / raop_buffer.h
1 /**
2 * Copyright (C) 2011-2012 Juho Vähä-Herttua
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 */
14
15 #ifndef RAOP_BUFFER_H
16 #define RAOP_BUFFER_H
17
18 typedef struct raop_buffer_s raop_buffer_t;
19
20 /* From ALACMagicCookieDescription.txt at http://http://alac.macosforge.org/ */
21 typedef struct {
22 unsigned int frameLength;
23 unsigned char compatibleVersion;
24 unsigned char bitDepth;
25 unsigned char pb;
26 unsigned char mb;
27 unsigned char kb;
28 unsigned char numChannels;
29 unsigned short maxRun;
30 unsigned int maxFrameBytes;
31 unsigned int avgBitRate;
32 unsigned int sampleRate;
33 } ALACSpecificConfig;
34
35 typedef int (*raop_resend_cb_t)(void *opaque, unsigned short seqno, unsigned short count);
36
37 raop_buffer_t *raop_buffer_init(const char *rtpmap,
38 const char *fmtp,
39 const unsigned char *aeskey,
40 const unsigned char *aesiv);
41
42 const ALACSpecificConfig *raop_buffer_get_config(raop_buffer_t *raop_buffer);
43 int raop_buffer_queue(raop_buffer_t *raop_buffer, unsigned char *data, unsigned short datalen, int use_seqnum);
44 const void *raop_buffer_dequeue(raop_buffer_t *raop_buffer, int *length, int no_resend);
45 void raop_buffer_handle_resends(raop_buffer_t *raop_buffer, raop_resend_cb_t resend_cb, void *opaque);
46 void raop_buffer_flush(raop_buffer_t *raop_buffer, int next_seq);
47
48 void raop_buffer_destroy(raop_buffer_t *raop_buffer);
49
50 #endif