137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang/************************************************************************
22da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Copyright (C) 2002-2009, Xiph.org Foundation
32da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Copyright (C) 2010, Robin Watts for Pinknoise Productions Ltd
437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * All rights reserved.
537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *
637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * Redistribution and use in source and binary forms, with or without
72da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * modification, are permitted provided that the following conditions
82da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * are met:
937fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *
1037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *     * Redistributions of source code must retain the above copyright
1137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * notice, this list of conditions and the following disclaimer.
1237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *     * Redistributions in binary form must reproduce the above
1337fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * copyright notice, this list of conditions and the following disclaimer
1437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * in the documentation and/or other materials provided with the
1537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * distribution.
162da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang *     * Neither the names of the Xiph.org Foundation nor Pinknoise
172da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * Productions Ltd nor the names of its contributors may be used to
182da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * endorse or promote products derived from this software without
192da723a953a18e3c7fec194cec1216cf31130c86Gloria Wang * specific prior written permission.
2037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang *
2137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2337fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2437fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2537fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2737fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2837fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2937fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3037fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3137fe158a8611dd11ec0253ab1552399b780988dcGloria Wang * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3237fe158a8611dd11ec0253ab1552399b780988dcGloria Wang ************************************************************************
337913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
347913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang function: subsumed libogg includes
357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
3637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang ************************************************************************/
377913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifndef _OGG_H
387913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define _OGG_H
397913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
407913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifdef __cplusplus
417913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern "C" {
427913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif
437913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
447913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#include "os_types.h"
457913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
467913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifndef ONLY_C
477913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define ARM_LITTLE_ENDIAN
487913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif
497913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
507913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct ogg_buffer_state{
517913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  struct ogg_buffer    *unused_buffers;
527913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  struct ogg_reference *unused_references;
537913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int                   outstanding;
547913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int                   shutdown;
557913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} ogg_buffer_state;
567913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
577913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct ogg_buffer {
587913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  unsigned char      *data;
597913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long                size;
607913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int                 refcount;
617913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
627913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  union {
637913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    ogg_buffer_state  *owner;
647913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang    struct ogg_buffer *next;
657913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  } ptr;
667913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} ogg_buffer;
677913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
687913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct ogg_reference {
697913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_buffer    *buffer;
707913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           begin;
717913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           length;
727913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
737913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  struct ogg_reference *next;
747913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} ogg_reference;
757913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
767913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct oggpack_buffer {
777913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifdef ARM_LITTLE_ENDIAN
787913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            bitsLeftInSegment;
797913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_uint32_t  *ptr;
807913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           bitsLeftInWord;
817913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#else
827913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            headbit;
837913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  unsigned char *headptr;
847913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           headend;
857913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif /* ARM_LITTLE_ENDIAN */
867913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  /* memory management */
877913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *head;
887913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *tail;
897913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
907913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  /* render the byte/bit counter API constant time */
917913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long              count; /* doesn't count the tail */
927913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} oggpack_buffer;
937913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
947913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct oggbyte_buffer {
957913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *baseref;
967913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
977913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *ref;
987913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  unsigned char *ptr;
997913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           pos;
1007913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           end;
1017913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} oggbyte_buffer;
1027913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1037913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct ogg_sync_state {
1047913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  /* decode memory management pool */
1057913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_buffer_state *bufferpool;
1067913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1077913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  /* stream buffers */
1087913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference    *fifo_head;
1097913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference    *fifo_tail;
1107913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long              fifo_fill;
1117913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1127913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  /* stream sync management */
1137913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int               unsynced;
1147913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int               headerbytes;
1157913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int               bodybytes;
1167913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1177913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} ogg_sync_state;
1187913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1197913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct ogg_stream_state {
1207913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *header_head;
1217913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *header_tail;
1227913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *body_head;
1237913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *body_tail;
1247913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1257913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            e_o_s;    /* set when we have buffered the last
1267913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                              packet in the logical bitstream */
1277913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            b_o_s;    /* set after we've written the initial page
1287913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                              of a logical bitstream */
1297913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           serialno;
1307913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           pageno;
1317913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_int64_t    packetno; /* sequence number for decode; the framing
1327913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                              knows where there's a hole in the data,
1337913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                              but we need coupling so that the codec
1347913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                              (which is in a seperate abstraction
1357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                              layer) also knows about the gap */
1367913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_int64_t    granulepos;
1377913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1387913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            lacing_fill;
1397913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_uint32_t   body_fill;
1407913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1417913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  /* decode-side state data */
1427913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            holeflag;
1437913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            spanflag;
1447913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            clearflag;
1457913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            laceptr;
1467913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_uint32_t   body_fill_next;
1477913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1487913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} ogg_stream_state;
1497913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1507913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct {
1517913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *packet;
1527913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           bytes;
1537913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           b_o_s;
1547913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           e_o_s;
1557913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_int64_t    granulepos;
1567913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_int64_t    packetno;     /* sequence number for decode; the framing
1577913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                                  knows where there's a hole in the data,
1587913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                                  but we need coupling so that the codec
1597913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                                  (which is in a seperate abstraction
1607913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang                                  layer) also knows about the gap */
1617913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} ogg_packet;
1627913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1637913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct {
1647913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *header;
1657913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  int            header_len;
1667913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  ogg_reference *body;
1677913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang  long           body_len;
1687913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} ogg_page;
1697913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1707913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/
1717913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1727913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void  oggpack_readinit(oggpack_buffer *b,ogg_reference *r);
1737913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern long  oggpack_look(oggpack_buffer *b,int bits);
1747913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void  oggpack_adv(oggpack_buffer *b,int bits);
1757913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern long  oggpack_read(oggpack_buffer *b,int bits);
1767913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern long  oggpack_bytes(oggpack_buffer *b);
1777913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern long  oggpack_bits(oggpack_buffer *b);
1787913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int   oggpack_eop(oggpack_buffer *b);
1797913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1807913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang// Quick hack
1817913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define oggpack_bytesleft(B)  (((B)->bitsLeftInSegment+7)/8)
1827913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1837913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Ogg BITSTREAM PRIMITIVES: decoding **************************/
1847913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1857913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void     ogg_sync_init(ogg_sync_state *oy);
1867913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern ogg_sync_state *ogg_sync_create(void);
1877913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_sync_clear(ogg_sync_state *oy);
1887913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_sync_destroy(ogg_sync_state *oy);
1897913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_sync_reset(ogg_sync_state *oy);
1907913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1917913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern unsigned char *ogg_sync_bufferin(ogg_sync_state *oy, long size);
1927913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_sync_wrote(ogg_sync_state *oy, long bytes);
1937913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern long     ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og);
1947913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og);
1957913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_stream_pagein(ogg_stream_state *os, ogg_page *og);
1967913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op);
1977913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op);
1987913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
1997913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Ogg BITSTREAM PRIMITIVES: general ***************************/
2007913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2017913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void     ogg_stream_init(ogg_stream_state *os, int serialno);
2027913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern ogg_stream_state *ogg_stream_create(int serialno);
2037913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_stream_destroy(ogg_stream_state *os);
2047913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_stream_clear(ogg_stream_state *os);
2057913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_stream_reset(ogg_stream_state *os);
2067913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_stream_reset_serialno(ogg_stream_state *os,int serialno);
2077913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_stream_eos(ogg_stream_state *os);
2087913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2097913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_page_checksum_set(ogg_page *og);
2107913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2117913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_page_version(ogg_page *og);
2127913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_page_continued(ogg_page *og);
2137913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_page_bos(ogg_page *og);
2147913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_page_eos(ogg_page *og);
2157913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern ogg_int64_t  ogg_page_granulepos(ogg_page *og);
2167913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern ogg_uint32_t ogg_page_serialno(ogg_page *og);
2177913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern ogg_uint32_t ogg_page_pageno(ogg_page *og);
2187913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_page_packets(ogg_page *og);
2197913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_page_getbuffer(ogg_page *og, unsigned char **buffer);
2207913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2217913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_packet_release(ogg_packet *op);
2227913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int      ogg_page_release(ogg_page *og);
2237913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2247913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void     ogg_page_dup(ogg_page *d, ogg_page *s);
2257913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2267913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Ogg BITSTREAM PRIMITIVES: return codes ***************************/
2277913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2287913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define  OGG_SUCCESS   0
2297913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2307913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define  OGG_HOLE     -10
2317913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define  OGG_SPAN     -11
2327913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define  OGG_EVERSION -12
2337913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define  OGG_ESERIAL  -13
2347913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define  OGG_EINVAL   -14
2357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define  OGG_EEOS     -15
2367913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2377913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2387913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifdef __cplusplus
2397913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang}
2407913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif
2417913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang
2427913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif  /* _OGG_H */
243