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: libvorbis codec headers 357913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 3637fe158a8611dd11ec0253ab1552399b780988dcGloria Wang ************************************************************************/ 377913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 387913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifndef _vorbis_codec_h_ 397913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define _vorbis_codec_h_ 407913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 417913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifdef __cplusplus 427913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern "C" 437913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang{ 447913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif /* __cplusplus */ 457913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 467913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#include "ogg.h" 477913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 487913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangstruct vorbis_dsp_state; 497913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct vorbis_dsp_state vorbis_dsp_state; 507913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 517913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct vorbis_info{ 527913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int version; 537913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int channels; 547913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long rate; 557913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 567913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang /* The below bitrate declarations are *hints*. 577913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang Combinations of the three values carry the following implications: 587913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 597913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang all three set to the same value: 607913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang implies a fixed rate bitstream 617913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang only nominal set: 627913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang implies a VBR stream that averages the nominal bitrate. No hard 637913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang upper/lower limit 647913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang upper and or lower set: 657913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang implies a VBR bitstream that obeys the bitrate limits. nominal 667913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang may also be set to give a nominal rate. 677913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang none set: 687913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang the coder does not care to speculate. 697913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang */ 707913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 717913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long bitrate_upper; 727913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long bitrate_nominal; 737913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long bitrate_lower; 747913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang long bitrate_window; 757913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 767913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang void *codec_setup; 777913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} vorbis_info; 787913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 797913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangtypedef struct vorbis_comment{ 807913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char **user_comments; 817913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int *comment_lengths; 827913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang int comments; 837913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char *vendor; 847913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 857913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} vorbis_comment; 867913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 877913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 887913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Vorbis PRIMITIVES: general ***************************************/ 897913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 907913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void vorbis_info_init(vorbis_info *vi); 917913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void vorbis_info_clear(vorbis_info *vi); 927913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int vorbis_info_blocksize(vorbis_info *vi,int zo); 937913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void vorbis_comment_init(vorbis_comment *vc); 947913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void vorbis_comment_add(vorbis_comment *vc, char *comment); 957913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void vorbis_comment_add_tag(vorbis_comment *vc, 967913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang char *tag, char *contents); 977913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern char *vorbis_comment_query(vorbis_comment *vc, char *tag, int count); 987913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern int vorbis_comment_query_count(vorbis_comment *vc, char *tag); 997913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wangextern void vorbis_comment_clear(vorbis_comment *vc); 1007913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1017913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang/* Vorbis ERRORS and return codes ***********************************/ 1027913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1037913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_FALSE -1 1047913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EOF -2 1057913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_HOLE -3 1067913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1077913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EREAD -128 1087913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EFAULT -129 1097913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EIMPL -130 1107913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EINVAL -131 1117913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_ENOTVORBIS -132 1127913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EBADHEADER -133 1137913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EVERSION -134 1147913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_ENOTAUDIO -135 1157913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EBADPACKET -136 1167913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_EBADLINK -137 1177913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#define OV_ENOSEEK -138 1187913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1197913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#ifdef __cplusplus 1207913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang} 1217913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif /* __cplusplus */ 1227913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 1237913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang#endif 1247913073ddf11ca3dd7b0439998e1b17d443bb0baGloria Wang 125