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