1f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels/******************************************************************** 2f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * * 3f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * THIS FILE IS PART OF THE OggVorbis SOFTWARE CODEC SOURCE CODE. * 4f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS * 5f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * 6f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * 7f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * * 8f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 * 9f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * by the Xiph.Org Foundation http://www.xiph.org/ * 10f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels * * 11f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels ******************************************************************** 12f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 13f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels function: toplevel libogg include 14f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels last mod: $Id: ogg.h 16051 2009-05-27 05:00:06Z xiphmont $ 15f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 16f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels ********************************************************************/ 17f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#ifndef _OGG_H 18f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#define _OGG_H 19f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 20f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#ifdef __cplusplus 21f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern "C" { 22f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#endif 23f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 24f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#include <stddef.h> 25f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#include <ogg/os_types.h> 26f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 27f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelstypedef struct { 28f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels void *iov_base; 29f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels size_t iov_len; 30f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels} ogg_iovec_t; 31f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 32f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelstypedef struct { 33f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long endbyte; 34f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int endbit; 35f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 36f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels unsigned char *buffer; 37f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels unsigned char *ptr; 38f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long storage; 39f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels} oggpack_buffer; 40f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 41f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels/* ogg_page is used to encapsulate the data in one Ogg bitstream page *****/ 42f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 43f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelstypedef struct { 44f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels unsigned char *header; 45f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long header_len; 46f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels unsigned char *body; 47f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long body_len; 48f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels} ogg_page; 49f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 50f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels/* ogg_stream_state contains the current encode/decode state of a logical 51f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels Ogg bitstream **********************************************************/ 52f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 53f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelstypedef struct { 54f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels unsigned char *body_data; /* bytes from packet bodies */ 55f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long body_storage; /* storage elements allocated */ 56f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long body_fill; /* elements stored; fill mark */ 57f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long body_returned; /* elements of fill returned */ 58f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 59f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 60f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int *lacing_vals; /* The values that will go to the segment table */ 61f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels ogg_int64_t *granule_vals; /* granulepos values for headers. Not compact 62f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels this way, but it is simple coupled to the 63f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels lacing fifo */ 64f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long lacing_storage; 65f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long lacing_fill; 66f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long lacing_packet; 67f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long lacing_returned; 68f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 69f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels unsigned char header[282]; /* working space for header encode */ 70f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int header_fill; 71f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 72f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int e_o_s; /* set when we have buffered the last packet in the 73f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels logical bitstream */ 74f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int b_o_s; /* set after we've written the initial page 75f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels of a logical bitstream */ 76f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long serialno; 77f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long pageno; 78f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels ogg_int64_t packetno; /* sequence number for decode; the framing 79f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels knows where there's a hole in the data, 80f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels but we need coupling so that the codec 81f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels (which is in a seperate abstraction 82f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels layer) also knows about the gap */ 83f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels ogg_int64_t granulepos; 84f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 85f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels} ogg_stream_state; 86f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 87f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels/* ogg_packet is used to encapsulate the data and metadata belonging 88f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels to a single raw Ogg/Vorbis packet *************************************/ 89f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 90f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelstypedef struct { 91f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels unsigned char *packet; 92f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long bytes; 93f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long b_o_s; 94f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels long e_o_s; 95f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 96f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels ogg_int64_t granulepos; 97f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 98f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels ogg_int64_t packetno; /* sequence number for decode; the framing 99f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels knows where there's a hole in the data, 100f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels but we need coupling so that the codec 101f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels (which is in a seperate abstraction 102f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels layer) also knows about the gap */ 103f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels} ogg_packet; 104f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 105f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelstypedef struct { 106f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels unsigned char *data; 107f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int storage; 108f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int fill; 109f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int returned; 110f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 111f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int unsynced; 112f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int headerbytes; 113f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int bodybytes; 114f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels} ogg_sync_state; 115f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 116f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels/* Ogg BITSTREAM PRIMITIVES: bitstream ************************/ 117f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 118f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_writeinit(oggpack_buffer *b); 119f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int oggpack_writecheck(oggpack_buffer *b); 120f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_writetrunc(oggpack_buffer *b,long bits); 121f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_writealign(oggpack_buffer *b); 122f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_writecopy(oggpack_buffer *b,void *source,long bits); 123f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_reset(oggpack_buffer *b); 124f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_writeclear(oggpack_buffer *b); 125f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); 126f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_write(oggpack_buffer *b,unsigned long value,int bits); 127f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpack_look(oggpack_buffer *b,int bits); 128f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpack_look1(oggpack_buffer *b); 129f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_adv(oggpack_buffer *b,int bits); 130f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpack_adv1(oggpack_buffer *b); 131f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpack_read(oggpack_buffer *b,int bits); 132f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpack_read1(oggpack_buffer *b); 133f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpack_bytes(oggpack_buffer *b); 134f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpack_bits(oggpack_buffer *b); 135f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern unsigned char *oggpack_get_buffer(oggpack_buffer *b); 136f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 137f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_writeinit(oggpack_buffer *b); 138f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int oggpackB_writecheck(oggpack_buffer *b); 139f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_writetrunc(oggpack_buffer *b,long bits); 140f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_writealign(oggpack_buffer *b); 141f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_writecopy(oggpack_buffer *b,void *source,long bits); 142f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_reset(oggpack_buffer *b); 143f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_writeclear(oggpack_buffer *b); 144f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_readinit(oggpack_buffer *b,unsigned char *buf,int bytes); 145f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_write(oggpack_buffer *b,unsigned long value,int bits); 146f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpackB_look(oggpack_buffer *b,int bits); 147f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpackB_look1(oggpack_buffer *b); 148f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_adv(oggpack_buffer *b,int bits); 149f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void oggpackB_adv1(oggpack_buffer *b); 150f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpackB_read(oggpack_buffer *b,int bits); 151f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpackB_read1(oggpack_buffer *b); 152f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpackB_bytes(oggpack_buffer *b); 153f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long oggpackB_bits(oggpack_buffer *b); 154f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern unsigned char *oggpackB_get_buffer(oggpack_buffer *b); 155f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 156f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels/* Ogg BITSTREAM PRIMITIVES: encoding **************************/ 157f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 158f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_packetin(ogg_stream_state *os, ogg_packet *op); 159f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov, 160f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels int count, long e_o_s, ogg_int64_t granulepos); 161f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_pageout(ogg_stream_state *os, ogg_page *og); 162f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_flush(ogg_stream_state *os, ogg_page *og); 163f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 164f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels/* Ogg BITSTREAM PRIMITIVES: decoding **************************/ 165f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 166f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_sync_init(ogg_sync_state *oy); 167f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_sync_clear(ogg_sync_state *oy); 168f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_sync_reset(ogg_sync_state *oy); 169f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_sync_destroy(ogg_sync_state *oy); 170f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_sync_check(ogg_sync_state *oy); 171f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 172f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern char *ogg_sync_buffer(ogg_sync_state *oy, long size); 173f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_sync_wrote(ogg_sync_state *oy, long bytes); 174f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long ogg_sync_pageseek(ogg_sync_state *oy,ogg_page *og); 175f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_sync_pageout(ogg_sync_state *oy, ogg_page *og); 176f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og); 177f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_packetout(ogg_stream_state *os,ogg_packet *op); 178f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_packetpeek(ogg_stream_state *os,ogg_packet *op); 179f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 180f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels/* Ogg BITSTREAM PRIMITIVES: general ***************************/ 181f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 182f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_init(ogg_stream_state *os,int serialno); 183f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_clear(ogg_stream_state *os); 184f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_reset(ogg_stream_state *os); 185f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_reset_serialno(ogg_stream_state *os,int serialno); 186f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_destroy(ogg_stream_state *os); 187f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_check(ogg_stream_state *os); 188f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_stream_eos(ogg_stream_state *os); 189f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 190f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void ogg_page_checksum_set(ogg_page *og); 191f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 192f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_page_version(const ogg_page *og); 193f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_page_continued(const ogg_page *og); 194f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_page_bos(const ogg_page *og); 195f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_page_eos(const ogg_page *og); 196f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern ogg_int64_t ogg_page_granulepos(const ogg_page *og); 197f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_page_serialno(const ogg_page *og); 198f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern long ogg_page_pageno(const ogg_page *og); 199f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern int ogg_page_packets(const ogg_page *og); 200f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 201f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckelsextern void ogg_packet_clear(ogg_packet *op); 202f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 203f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 204f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#ifdef __cplusplus 205f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels} 206f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#endif 207f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels 208f869a6f5f794dddc9bee2a9fdddecf41d99035aeLucas Eckels#endif /* _OGG_H */ 209