libvorbis: New version 1.3.5

(cherry picked from commit 644e9076bb)
This commit is contained in:
J08nY 2016-06-19 14:50:29 +02:00 committed by Rémi Verschelde
parent c9716ebd00
commit 8d9121f0b0
35 changed files with 2085 additions and 3553 deletions

View File

@ -1,4 +1,4 @@
Copyright (c) 2002-2008 Xiph.org Foundation Copyright (c) 2002-2015 Xiph.org Foundation
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions modification, are permitted provided that the following conditions

View File

@ -11,7 +11,7 @@
******************************************************************** ********************************************************************
function: bark scale utility function: bark scale utility
last mod: $Id: barkmel.c 16037 2009-05-26 21:10:58Z xiphmont $ last mod: $Id: barkmel.c 19454 2015-03-02 22:39:28Z xiphmont $
********************************************************************/ ********************************************************************/

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: PCM data vector blocking, windowing and dis/reassembly function: PCM data vector blocking, windowing and dis/reassembly
last mod: $Id: block.c 17561 2010-10-23 10:34:24Z xiphmont $ last mod: $Id: block.c 19457 2015-03-03 00:15:29Z giles $
Handle windowing, overlap-add, etc of the PCM vectors. This is made Handle windowing, overlap-add, etc of the PCM vectors. This is made
more amusing by Vorbis' current two allowed block sizes. more amusing by Vorbis' current two allowed block sizes.
@ -31,16 +31,6 @@
#include "registry.h" #include "registry.h"
#include "misc.h" #include "misc.h"
static int ilog2(unsigned int v){
int ret=0;
if(v)--v;
while(v){
ret++;
v>>=1;
}
return(ret);
}
/* pcm accumulator examples (not exhaustive): /* pcm accumulator examples (not exhaustive):
<-------------- lW ----------------> <-------------- lW ---------------->
@ -184,14 +174,19 @@ static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){
private_state *b=NULL; private_state *b=NULL;
int hs; int hs;
if(ci==NULL) return 1; if(ci==NULL||
ci->modes<=0||
ci->blocksizes[0]<64||
ci->blocksizes[1]<ci->blocksizes[0]){
return 1;
}
hs=ci->halfrate_flag; hs=ci->halfrate_flag;
memset(v,0,sizeof(*v)); memset(v,0,sizeof(*v));
b=v->backend_state=_ogg_calloc(1,sizeof(*b)); b=v->backend_state=_ogg_calloc(1,sizeof(*b));
v->vi=vi; v->vi=vi;
b->modebits=ilog2(ci->modes); b->modebits=ov_ilog(ci->modes-1);
b->transform[0]=_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[0])); b->transform[0]=_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[0]));
b->transform[1]=_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[1])); b->transform[1]=_ogg_calloc(VI_TRANSFORMB,sizeof(*b->transform[1]));
@ -204,8 +199,14 @@ static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){
mdct_init(b->transform[1][0],ci->blocksizes[1]>>hs); mdct_init(b->transform[1][0],ci->blocksizes[1]>>hs);
/* Vorbis I uses only window type 0 */ /* Vorbis I uses only window type 0 */
b->window[0]=ilog2(ci->blocksizes[0])-6; /* note that the correct computation below is technically:
b->window[1]=ilog2(ci->blocksizes[1])-6; b->window[0]=ov_ilog(ci->blocksizes[0]-1)-6;
b->window[1]=ov_ilog(ci->blocksizes[1]-1)-6;
but since blocksizes are always powers of two,
the below is equivalent.
*/
b->window[0]=ov_ilog(ci->blocksizes[0])-7;
b->window[1]=ov_ilog(ci->blocksizes[1])-7;
if(encp){ /* encode/decode differ here */ if(encp){ /* encode/decode differ here */
@ -771,14 +772,14 @@ int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
if(v->lW){ if(v->lW){
if(v->W){ if(v->W){
/* large/large */ /* large/large */
float *w=_vorbis_window_get(b->window[1]-hs); const float *w=_vorbis_window_get(b->window[1]-hs);
float *pcm=v->pcm[j]+prevCenter; float *pcm=v->pcm[j]+prevCenter;
float *p=vb->pcm[j]; float *p=vb->pcm[j];
for(i=0;i<n1;i++) for(i=0;i<n1;i++)
pcm[i]=pcm[i]*w[n1-i-1] + p[i]*w[i]; pcm[i]=pcm[i]*w[n1-i-1] + p[i]*w[i];
}else{ }else{
/* large/small */ /* large/small */
float *w=_vorbis_window_get(b->window[0]-hs); const float *w=_vorbis_window_get(b->window[0]-hs);
float *pcm=v->pcm[j]+prevCenter+n1/2-n0/2; float *pcm=v->pcm[j]+prevCenter+n1/2-n0/2;
float *p=vb->pcm[j]; float *p=vb->pcm[j];
for(i=0;i<n0;i++) for(i=0;i<n0;i++)
@ -787,7 +788,7 @@ int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
}else{ }else{
if(v->W){ if(v->W){
/* small/large */ /* small/large */
float *w=_vorbis_window_get(b->window[0]-hs); const float *w=_vorbis_window_get(b->window[0]-hs);
float *pcm=v->pcm[j]+prevCenter; float *pcm=v->pcm[j]+prevCenter;
float *p=vb->pcm[j]+n1/2-n0/2; float *p=vb->pcm[j]+n1/2-n0/2;
for(i=0;i<n0;i++) for(i=0;i<n0;i++)
@ -796,7 +797,7 @@ int vorbis_synthesis_blockin(vorbis_dsp_state *v,vorbis_block *vb){
pcm[i]=p[i]; pcm[i]=p[i];
}else{ }else{
/* small/small */ /* small/small */
float *w=_vorbis_window_get(b->window[0]-hs); const float *w=_vorbis_window_get(b->window[0]-hs);
float *pcm=v->pcm[j]+prevCenter; float *pcm=v->pcm[j]+prevCenter;
float *p=vb->pcm[j]; float *p=vb->pcm[j];
for(i=0;i<n0;i++) for(i=0;i<n0;i++)
@ -1035,7 +1036,7 @@ int vorbis_synthesis_lapout(vorbis_dsp_state *v,float ***pcm){
} }
float *vorbis_window(vorbis_dsp_state *v,int W){ const float *vorbis_window(vorbis_dsp_state *v,int W){
vorbis_info *vi=v->vi; vorbis_info *vi=v->vi;
codec_setup_info *ci=vi->codec_setup; codec_setup_info *ci=vi->codec_setup;
int hs=ci->halfrate_flag; int hs=ci->halfrate_flag;

View File

@ -1,3 +0,0 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = coupled uncoupled floor

View File

@ -1,514 +0,0 @@
# Makefile.in generated by automake 1.10.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = lib/books
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/add_cflags.m4 \
$(top_srcdir)/m4/ogg.m4 $(top_srcdir)/m4/pkg.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
html-recursive info-recursive install-data-recursive \
install-dvi-recursive install-exec-recursive \
install-html-recursive install-info-recursive \
install-pdf-recursive install-ps-recursive install-recursive \
installcheck-recursive installdirs-recursive pdf-recursive \
ps-recursive uninstall-recursive
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
distclean-recursive maintainer-clean-recursive
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG = @DEBUG@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HTLATEX = @HTLATEX@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
PKG_CONFIG = @PKG_CONFIG@
PROFILE = @PROFILE@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
VE_LIB_AGE = @VE_LIB_AGE@
VE_LIB_CURRENT = @VE_LIB_CURRENT@
VE_LIB_REVISION = @VE_LIB_REVISION@
VF_LIB_AGE = @VF_LIB_AGE@
VF_LIB_CURRENT = @VF_LIB_CURRENT@
VF_LIB_REVISION = @VF_LIB_REVISION@
VORBIS_LIBS = @VORBIS_LIBS@
V_LIB_AGE = @V_LIB_AGE@
V_LIB_CURRENT = @V_LIB_CURRENT@
V_LIB_REVISION = @V_LIB_REVISION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
pthread_lib = @pthread_lib@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = coupled uncoupled floor
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/books/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/books/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
dot_seen=yes; \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
$(RECURSIVE_CLEAN_TARGETS):
@failcom='exit 1'; \
for f in x $$MAKEFLAGS; do \
case $$f in \
*=* | --[!k]*);; \
*k*) failcom='fail=yes';; \
esac; \
done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
*) list='$(SUBDIRS)' ;; \
esac; \
rev=''; for subdir in $$list; do \
if test "$$subdir" = "."; then :; else \
rev="$$subdir $$rev"; \
fi; \
done; \
rev="$$rev ."; \
target=`echo $@ | sed s/-recursive//`; \
for subdir in $$rev; do \
echo "Making $$target in $$subdir"; \
if test "$$subdir" = "."; then \
local_target="$$target-am"; \
else \
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|| eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ctags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
done
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
mkid -fID $$unique
tags: TAGS
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
include_option=--etags-include; \
empty_fix=.; \
else \
include_option=--include; \
empty_fix=; \
fi; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test ! -f $$subdir/TAGS || \
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d "$(distdir)/$$subdir" \
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|| exit 1; \
distdir=`$(am__cd) $(distdir) && pwd`; \
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$$top_distdir" \
distdir="$$distdir/$$subdir" \
am__remove_distdir=: \
am__skip_length_check=: \
distdir) \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-recursive
all-am: Makefile
installdirs: installdirs-recursive
installdirs-am:
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-recursive
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-recursive
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-recursive
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-recursive
dvi-am:
html: html-recursive
info: info-recursive
info-am:
install-data-am:
install-dvi: install-dvi-recursive
install-exec-am:
install-html: install-html-recursive
install-info: install-info-recursive
install-man:
install-pdf: install-pdf-recursive
install-ps: install-ps-recursive
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-recursive
pdf-am:
ps: ps-recursive
ps-am:
uninstall-am:
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
install-strip
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
all all-am check check-am clean clean-generic clean-libtool \
ctags ctags-recursive distclean distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -1,3 +0,0 @@
## Process this file with automake to produce Makefile.in
EXTRA_DIST = res_books_stereo.h res_books_51.h

View File

@ -1,356 +0,0 @@
# Makefile.in generated by automake 1.10.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = lib/books/coupled
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/add_cflags.m4 \
$(top_srcdir)/m4/ogg.m4 $(top_srcdir)/m4/pkg.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG = @DEBUG@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HTLATEX = @HTLATEX@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
PKG_CONFIG = @PKG_CONFIG@
PROFILE = @PROFILE@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
VE_LIB_AGE = @VE_LIB_AGE@
VE_LIB_CURRENT = @VE_LIB_CURRENT@
VE_LIB_REVISION = @VE_LIB_REVISION@
VF_LIB_AGE = @VF_LIB_AGE@
VF_LIB_CURRENT = @VF_LIB_CURRENT@
VF_LIB_REVISION = @VF_LIB_REVISION@
VORBIS_LIBS = @VORBIS_LIBS@
V_LIB_AGE = @V_LIB_AGE@
V_LIB_CURRENT = @V_LIB_CURRENT@
V_LIB_REVISION = @V_LIB_REVISION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
pthread_lib = @pthread_lib@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = res_books_stereo.h res_books_51.h
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/books/coupled/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/books/coupled/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +0,0 @@
## Process this file with automake to produce Makefile.in
EXTRA_DIST = floor_books.h

View File

@ -1,356 +0,0 @@
# Makefile.in generated by automake 1.10.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = lib/books/floor
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/add_cflags.m4 \
$(top_srcdir)/m4/ogg.m4 $(top_srcdir)/m4/pkg.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG = @DEBUG@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HTLATEX = @HTLATEX@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
PKG_CONFIG = @PKG_CONFIG@
PROFILE = @PROFILE@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
VE_LIB_AGE = @VE_LIB_AGE@
VE_LIB_CURRENT = @VE_LIB_CURRENT@
VE_LIB_REVISION = @VE_LIB_REVISION@
VF_LIB_AGE = @VF_LIB_AGE@
VF_LIB_CURRENT = @VF_LIB_CURRENT@
VF_LIB_REVISION = @VF_LIB_REVISION@
VORBIS_LIBS = @VORBIS_LIBS@
V_LIB_AGE = @V_LIB_AGE@
V_LIB_CURRENT = @V_LIB_CURRENT@
V_LIB_REVISION = @V_LIB_REVISION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
pthread_lib = @pthread_lib@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = floor_books.h
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/books/floor/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/books/floor/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +0,0 @@
## Process this file with automake to produce Makefile.in
EXTRA_DIST = res_books_uncoupled.h

View File

@ -1,356 +0,0 @@
# Makefile.in generated by automake 1.10.2 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
subdir = lib/books/uncoupled
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/add_cflags.m4 \
$(top_srcdir)/m4/ogg.m4 $(top_srcdir)/m4/pkg.m4 \
$(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
ALLOCA = @ALLOCA@
AMTAR = @AMTAR@
AR = @AR@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEBUG = @DEBUG@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HTLATEX = @HTLATEX@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PDFLATEX = @PDFLATEX@
PKG_CONFIG = @PKG_CONFIG@
PROFILE = @PROFILE@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
VE_LIB_AGE = @VE_LIB_AGE@
VE_LIB_CURRENT = @VE_LIB_CURRENT@
VE_LIB_REVISION = @VE_LIB_REVISION@
VF_LIB_AGE = @VF_LIB_AGE@
VF_LIB_CURRENT = @VF_LIB_CURRENT@
VF_LIB_REVISION = @VF_LIB_REVISION@
VORBIS_LIBS = @VORBIS_LIBS@
V_LIB_AGE = @V_LIB_AGE@
V_LIB_CURRENT = @V_LIB_CURRENT@
V_LIB_REVISION = @V_LIB_REVISION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
pthread_lib = @pthread_lib@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EXTRA_DIST = res_books_uncoupled.h
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/books/uncoupled/Makefile'; \
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/books/uncoupled/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile
installdirs:
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am:
html: html-am
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-exec-am:
install-html: install-html-am
install-info: install-info-am
install-man:
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am:
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

File diff suppressed because it is too large Load Diff

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: basic codebook pack/unpack/code/decode operations function: basic codebook pack/unpack/code/decode operations
last mod: $Id: codebook.c 17553 2010-10-21 17:54:26Z tterribe $ last mod: $Id: codebook.c 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -53,16 +53,16 @@ int vorbis_staticbook_pack(const static_codebook *c,oggpack_buffer *opb){
oggpack_write(opb,c->lengthlist[0]-1,5); /* 1 to 32 */ oggpack_write(opb,c->lengthlist[0]-1,5); /* 1 to 32 */
for(i=1;i<c->entries;i++){ for(i=1;i<c->entries;i++){
long this=c->lengthlist[i]; char this=c->lengthlist[i];
long last=c->lengthlist[i-1]; char last=c->lengthlist[i-1];
if(this>last){ if(this>last){
for(j=last;j<this;j++){ for(j=last;j<this;j++){
oggpack_write(opb,i-count,_ilog(c->entries-count)); oggpack_write(opb,i-count,ov_ilog(c->entries-count));
count=i; count=i;
} }
} }
} }
oggpack_write(opb,i-count,_ilog(c->entries-count)); oggpack_write(opb,i-count,ov_ilog(c->entries-count));
}else{ }else{
/* length random. Again, we don't code the codeword itself, just /* length random. Again, we don't code the codeword itself, just
@ -159,7 +159,7 @@ static_codebook *vorbis_staticbook_unpack(oggpack_buffer *opb){
s->entries=oggpack_read(opb,24); s->entries=oggpack_read(opb,24);
if(s->entries==-1)goto _eofout; if(s->entries==-1)goto _eofout;
if(_ilog(s->dim)+_ilog(s->entries)>24)goto _eofout; if(ov_ilog(s->dim)+ov_ilog(s->entries)>24)goto _eofout;
/* codeword ordering.... length ordered or unordered? */ /* codeword ordering.... length ordered or unordered? */
switch((int)oggpack_read(opb,1)){ switch((int)oggpack_read(opb,1)){
@ -203,7 +203,7 @@ static_codebook *vorbis_staticbook_unpack(oggpack_buffer *opb){
s->lengthlist=_ogg_malloc(sizeof(*s->lengthlist)*s->entries); s->lengthlist=_ogg_malloc(sizeof(*s->lengthlist)*s->entries);
for(i=0;i<s->entries;){ for(i=0;i<s->entries;){
long num=oggpack_read(opb,_ilog(s->entries-i)); long num=oggpack_read(opb,ov_ilog(s->entries-i));
if(num==-1)goto _eofout; if(num==-1)goto _eofout;
if(length>32 || num>s->entries-i || if(length>32 || num>s->entries-i ||
(num>0 && (num-1)>>(length-1)>1)){ (num>0 && (num-1)>>(length-1)>1)){
@ -312,6 +312,12 @@ STIN long decode_packed_entry_number(codebook *book, oggpack_buffer *b){
hi=book->used_entries; hi=book->used_entries;
} }
/* Single entry codebooks use a firsttablen of 1 and a
dec_maxlength of 1. If a single-entry codebook gets here (due to
failure to read one bit above), the next look attempt will also
fail and we'll correctly kick out instead of trying to walk the
underformed tree */
lok = oggpack_look(b, read); lok = oggpack_look(b, read);
while(lok<0 && read>1) while(lok<0 && read>1)
@ -367,6 +373,7 @@ long vorbis_book_decode(codebook *book, oggpack_buffer *b){
} }
/* returns 0 on OK or -1 on eof *************************************/ /* returns 0 on OK or -1 on eof *************************************/
/* decode vector / dim granularity gaurding is done in the upper layer */
long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,int n){ long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,int n){
if(book->used_entries>0){ if(book->used_entries>0){
int step=n/book->dim; int step=n/book->dim;
@ -386,6 +393,7 @@ long vorbis_book_decodevs_add(codebook *book,float *a,oggpack_buffer *b,int n){
return(0); return(0);
} }
/* decode vector / dim granularity gaurding is done in the upper layer */
long vorbis_book_decodev_add(codebook *book,float *a,oggpack_buffer *b,int n){ long vorbis_book_decodev_add(codebook *book,float *a,oggpack_buffer *b,int n){
if(book->used_entries>0){ if(book->used_entries>0){
int i,j,entry; int i,j,entry;
@ -431,6 +439,9 @@ long vorbis_book_decodev_add(codebook *book,float *a,oggpack_buffer *b,int n){
return(0); return(0);
} }
/* unlike the others, we guard against n not being an integer number
of <dim> internally rather than in the upper layer (called only by
floor0) */
long vorbis_book_decodev_set(codebook *book,float *a,oggpack_buffer *b,int n){ long vorbis_book_decodev_set(codebook *book,float *a,oggpack_buffer *b,int n){
if(book->used_entries>0){ if(book->used_entries>0){
int i,j,entry; int i,j,entry;
@ -440,15 +451,15 @@ long vorbis_book_decodev_set(codebook *book,float *a,oggpack_buffer *b,int n){
entry = decode_packed_entry_number(book,b); entry = decode_packed_entry_number(book,b);
if(entry==-1)return(-1); if(entry==-1)return(-1);
t = book->valuelist+entry*book->dim; t = book->valuelist+entry*book->dim;
for (j=0;j<book->dim;) for (j=0;i<n && j<book->dim;){
a[i++]=t[j++]; a[i++]=t[j++];
}
} }
}else{ }else{
int i,j; int i;
for(i=0;i<n;){ for(i=0;i<n;){
for (j=0;j<book->dim;) a[i++]=0.f;
a[i++]=0.f;
} }
} }
return(0); return(0);

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: basic shared codebook operations function: basic shared codebook operations
last mod: $Id: codebook.h 17030 2010-03-25 06:52:55Z xiphmont $ last mod: $Id: codebook.h 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -34,14 +34,14 @@
*/ */
typedef struct static_codebook{ typedef struct static_codebook{
long dim; /* codebook dimensions (elements per vector) */ long dim; /* codebook dimensions (elements per vector) */
long entries; /* codebook entries */ long entries; /* codebook entries */
long *lengthlist; /* codeword lengths in bits */ char *lengthlist; /* codeword lengths in bits */
/* mapping ***************************************************************/ /* mapping ***************************************************************/
int maptype; /* 0=none int maptype; /* 0=none
1=implicitly populated values from map column 1=implicitly populated values from map column
2=listed arbitrary values */ 2=listed arbitrary values */
/* The below does a linear, single monotonic sequence mapping. */ /* The below does a linear, single monotonic sequence mapping. */
long q_min; /* packed 32 bit float; quant value 0 maps to minval */ long q_min; /* packed 32 bit float; quant value 0 maps to minval */
@ -89,7 +89,6 @@ extern float *_book_logdist(const static_codebook *b,float *vals);
extern float _float32_unpack(long val); extern float _float32_unpack(long val);
extern long _float32_pack(float val); extern long _float32_pack(float val);
extern int _best(codebook *book, float *a, int step); extern int _best(codebook *book, float *a, int step);
extern int _ilog(unsigned int v);
extern long _book_maptype1_quantvals(const static_codebook *b); extern long _book_maptype1_quantvals(const static_codebook *b);
extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul); extern int vorbis_book_besterror(codebook *book,float *a,int step,int addmul);

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: floor backend 0 implementation function: floor backend 0 implementation
last mod: $Id: floor0.c 17558 2010-10-22 00:24:41Z tterribe $ last mod: $Id: floor0.c 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -147,6 +147,9 @@ static vorbis_look_floor *floor0_look(vorbis_dsp_state *vd,
vorbis_info_floor *i){ vorbis_info_floor *i){
vorbis_info_floor0 *info=(vorbis_info_floor0 *)i; vorbis_info_floor0 *info=(vorbis_info_floor0 *)i;
vorbis_look_floor0 *look=_ogg_calloc(1,sizeof(*look)); vorbis_look_floor0 *look=_ogg_calloc(1,sizeof(*look));
(void)vd;
look->m=info->order; look->m=info->order;
look->ln=info->barkmap; look->ln=info->barkmap;
look->vi=info; look->vi=info;
@ -165,7 +168,7 @@ static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){
if(ampraw>0){ /* also handles the -1 out of data case */ if(ampraw>0){ /* also handles the -1 out of data case */
long maxval=(1<<info->ampbits)-1; long maxval=(1<<info->ampbits)-1;
float amp=(float)ampraw/maxval*info->ampdB; float amp=(float)ampraw/maxval*info->ampdB;
int booknum=oggpack_read(&vb->opb,_ilog(info->numbooks)); int booknum=oggpack_read(&vb->opb,ov_ilog(info->numbooks));
if(booknum!=-1 && booknum<info->numbooks){ /* be paranoid */ if(booknum!=-1 && booknum<info->numbooks){ /* be paranoid */
codec_setup_info *ci=vb->vd->vi->codec_setup; codec_setup_info *ci=vb->vd->vi->codec_setup;
@ -177,10 +180,9 @@ static void *floor0_inverse1(vorbis_block *vb,vorbis_look_floor *i){
vector */ vector */
float *lsp=_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+b->dim+1)); float *lsp=_vorbis_block_alloc(vb,sizeof(*lsp)*(look->m+b->dim+1));
for(j=0;j<look->m;j+=b->dim) if(vorbis_book_decodev_set(b,lsp,&vb->opb,look->m)==-1)goto eop;
if(vorbis_book_decodev_set(b,lsp+j,&vb->opb,b->dim)==-1)goto eop;
for(j=0;j<look->m;){ for(j=0;j<look->m;){
for(k=0;k<b->dim;k++,j++)lsp[j]+=last; for(k=0;j<look->m && k<b->dim;k++,j++)lsp[j]+=last;
last=lsp[j-1]; last=lsp[j-1];
} }

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: floor backend 1 implementation function: floor backend 1 implementation
last mod: $Id: floor1.c 17555 2010-10-21 18:14:51Z tterribe $ last mod: $Id: floor1.c 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -72,25 +72,6 @@ static void floor1_free_look(vorbis_look_floor *i){
} }
} }
static int ilog(unsigned int v){
int ret=0;
while(v){
ret++;
v>>=1;
}
return(ret);
}
static int ilog2(unsigned int v){
int ret=0;
if(v)--v;
while(v){
ret++;
v>>=1;
}
return(ret);
}
static void floor1_pack (vorbis_info_floor *i,oggpack_buffer *opb){ static void floor1_pack (vorbis_info_floor *i,oggpack_buffer *opb){
vorbis_info_floor1 *info=(vorbis_info_floor1 *)i; vorbis_info_floor1 *info=(vorbis_info_floor1 *)i;
int j,k; int j,k;
@ -117,8 +98,10 @@ static void floor1_pack (vorbis_info_floor *i,oggpack_buffer *opb){
/* save out the post list */ /* save out the post list */
oggpack_write(opb,info->mult-1,2); /* only 1,2,3,4 legal now */ oggpack_write(opb,info->mult-1,2); /* only 1,2,3,4 legal now */
oggpack_write(opb,ilog2(maxposit),4); /* maxposit cannot legally be less than 1; this is encode-side, we
rangebits=ilog2(maxposit); can assume our setup is OK */
oggpack_write(opb,ov_ilog(maxposit-1),4);
rangebits=ov_ilog(maxposit-1);
for(j=0,k=0;j<info->partitions;j++){ for(j=0,k=0;j<info->partitions;j++){
count+=info->class_dim[info->partitionclass[j]]; count+=info->class_dim[info->partitionclass[j]];
@ -167,6 +150,7 @@ static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){
for(j=0,k=0;j<info->partitions;j++){ for(j=0,k=0;j<info->partitions;j++){
count+=info->class_dim[info->partitionclass[j]]; count+=info->class_dim[info->partitionclass[j]];
if(count>VIF_POSIT) goto err_out;
for(;k<count;k++){ for(;k<count;k++){
int t=info->postlist[k+2]=oggpack_read(opb,rangebits); int t=info->postlist[k+2]=oggpack_read(opb,rangebits);
if(t<0 || t>=(1<<rangebits)) if(t<0 || t>=(1<<rangebits))
@ -202,6 +186,8 @@ static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,
vorbis_look_floor1 *look=_ogg_calloc(1,sizeof(*look)); vorbis_look_floor1 *look=_ogg_calloc(1,sizeof(*look));
int i,j,n=0; int i,j,n=0;
(void)vd;
look->vi=info; look->vi=info;
look->n=info->postlist[1]; look->n=info->postlist[1];
@ -851,9 +837,9 @@ int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
/* beginning/end post */ /* beginning/end post */
look->frames++; look->frames++;
look->postbits+=ilog(look->quant_q-1)*2; look->postbits+=ov_ilog(look->quant_q-1)*2;
oggpack_write(opb,out[0],ilog(look->quant_q-1)); oggpack_write(opb,out[0],ov_ilog(look->quant_q-1));
oggpack_write(opb,out[1],ilog(look->quant_q-1)); oggpack_write(opb,out[1],ov_ilog(look->quant_q-1));
/* partition by partition */ /* partition by partition */
@ -869,7 +855,9 @@ int floor1_encode(oggpack_buffer *opb,vorbis_block *vb,
/* generate the partition's first stage cascade value */ /* generate the partition's first stage cascade value */
if(csubbits){ if(csubbits){
int maxval[8]; int maxval[8]={0,0,0,0,0,0,0,0}; /* gcc's static analysis
issues a warning without
initialization */
for(k=0;k<csub;k++){ for(k=0;k<csub;k++){
int booknum=info->class_subbook[class][k]; int booknum=info->class_subbook[class][k];
if(booknum<0){ if(booknum<0){
@ -977,8 +965,8 @@ static void *floor1_inverse1(vorbis_block *vb,vorbis_look_floor *in){
if(oggpack_read(&vb->opb,1)==1){ if(oggpack_read(&vb->opb,1)==1){
int *fit_value=_vorbis_block_alloc(vb,(look->posts)*sizeof(*fit_value)); int *fit_value=_vorbis_block_alloc(vb,(look->posts)*sizeof(*fit_value));
fit_value[0]=oggpack_read(&vb->opb,ilog(look->quant_q-1)); fit_value[0]=oggpack_read(&vb->opb,ov_ilog(look->quant_q-1));
fit_value[1]=oggpack_read(&vb->opb,ilog(look->quant_q-1)); fit_value[1]=oggpack_read(&vb->opb,ov_ilog(look->quant_q-1));
/* partition by partition */ /* partition by partition */
for(i=0,j=2;i<info->partitions;i++){ for(i=0,j=2;i<info->partitions;i++){

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: maintain the info structure, info <-> header packets function: maintain the info structure, info <-> header packets
last mod: $Id: info.c 17584 2010-11-01 19:26:16Z xiphmont $ last mod: $Id: info.c 19441 2015-01-21 01:17:41Z xiphmont $
********************************************************************/ ********************************************************************/
@ -31,20 +31,10 @@
#include "misc.h" #include "misc.h"
#include "os.h" #include "os.h"
#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.2" #define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.5"
#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20101101 (Schaufenugget)" #define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20150105 (⛄⛄⛄⛄)"
/* helpers */ /* helpers */
static int ilog2(unsigned int v){
int ret=0;
if(v)--v;
while(v){
ret++;
v>>=1;
}
return(ret);
}
static void _v_writestring(oggpack_buffer *o,const char *s, int bytes){ static void _v_writestring(oggpack_buffer *o,const char *s, int bytes){
while(bytes--){ while(bytes--){
@ -272,7 +262,6 @@ static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){
static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){ static int _vorbis_unpack_books(vorbis_info *vi,oggpack_buffer *opb){
codec_setup_info *ci=vi->codec_setup; codec_setup_info *ci=vi->codec_setup;
int i; int i;
if(!ci)return(OV_EFAULT);
/* codebooks */ /* codebooks */
ci->books=oggpack_read(opb,8)+1; ci->books=oggpack_read(opb,8)+1;
@ -411,6 +400,10 @@ int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op)
/* um... we didn't get the initial header */ /* um... we didn't get the initial header */
return(OV_EBADHEADER); return(OV_EBADHEADER);
} }
if(vc->vendor!=NULL){
/* previously initialized comment header */
return(OV_EBADHEADER);
}
return(_vorbis_unpack_comment(vc,&opb)); return(_vorbis_unpack_comment(vc,&opb));
@ -419,6 +412,14 @@ int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op)
/* um... we didn;t get the initial header or comments yet */ /* um... we didn;t get the initial header or comments yet */
return(OV_EBADHEADER); return(OV_EBADHEADER);
} }
if(vi->codec_setup==NULL){
/* improperly initialized vorbis_info */
return(OV_EFAULT);
}
if(((codec_setup_info *)vi->codec_setup)->books>0){
/* previously initialized setup header */
return(OV_EBADHEADER);
}
return(_vorbis_unpack_books(vi,&opb)); return(_vorbis_unpack_books(vi,&opb));
@ -436,7 +437,11 @@ int vorbis_synthesis_headerin(vorbis_info *vi,vorbis_comment *vc,ogg_packet *op)
static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){ static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){
codec_setup_info *ci=vi->codec_setup; codec_setup_info *ci=vi->codec_setup;
if(!ci)return(OV_EFAULT); if(!ci||
ci->blocksizes[0]<64||
ci->blocksizes[1]<ci->blocksizes[0]){
return(OV_EFAULT);
}
/* preamble */ /* preamble */
oggpack_write(opb,0x01,8); oggpack_write(opb,0x01,8);
@ -451,8 +456,8 @@ static int _vorbis_pack_info(oggpack_buffer *opb,vorbis_info *vi){
oggpack_write(opb,vi->bitrate_nominal,32); oggpack_write(opb,vi->bitrate_nominal,32);
oggpack_write(opb,vi->bitrate_lower,32); oggpack_write(opb,vi->bitrate_lower,32);
oggpack_write(opb,ilog2(ci->blocksizes[0]),4); oggpack_write(opb,ov_ilog(ci->blocksizes[0]-1),4);
oggpack_write(opb,ilog2(ci->blocksizes[1]),4); oggpack_write(opb,ov_ilog(ci->blocksizes[1]-1),4);
oggpack_write(opb,1,1); oggpack_write(opb,1,1);
return(0); return(0);
@ -550,7 +555,10 @@ int vorbis_commentheader_out(vorbis_comment *vc,
oggpack_buffer opb; oggpack_buffer opb;
oggpack_writeinit(&opb); oggpack_writeinit(&opb);
if(_vorbis_pack_comment(&opb,vc)) return OV_EIMPL; if(_vorbis_pack_comment(&opb,vc)){
oggpack_writeclear(&opb);
return OV_EIMPL;
}
op->packet = _ogg_malloc(oggpack_bytes(&opb)); op->packet = _ogg_malloc(oggpack_bytes(&opb));
memcpy(op->packet, opb.buffer, oggpack_bytes(&opb)); memcpy(op->packet, opb.buffer, oggpack_bytes(&opb));
@ -561,6 +569,7 @@ int vorbis_commentheader_out(vorbis_comment *vc,
op->granulepos=0; op->granulepos=0;
op->packetno=1; op->packetno=1;
oggpack_writeclear(&opb);
return 0; return 0;
} }
@ -574,7 +583,7 @@ int vorbis_analysis_headerout(vorbis_dsp_state *v,
oggpack_buffer opb; oggpack_buffer opb;
private_state *b=v->backend_state; private_state *b=v->backend_state;
if(!b){ if(!b||vi->channels<=0){
ret=OV_EFAULT; ret=OV_EFAULT;
goto err_out; goto err_out;
} }

View File

@ -11,7 +11,7 @@
******************************************************************** ********************************************************************
function: LSP (also called LSF) conversion routines function: LSP (also called LSF) conversion routines
last mod: $Id: lsp.c 17538 2010-10-15 02:52:29Z tterribe $ last mod: $Id: lsp.c 19453 2015-03-02 22:35:34Z xiphmont $
The LSP generation code is taken (with minimal modification and a The LSP generation code is taken (with minimal modification and a
few bugfixes) from "On the Computation of the LSP Frequencies" by few bugfixes) from "On the Computation of the LSP Frequencies" by
@ -309,7 +309,6 @@ static int comp(const void *a,const void *b){
#define EPSILON 10e-7 #define EPSILON 10e-7
static int Laguerre_With_Deflation(float *a,int ord,float *r){ static int Laguerre_With_Deflation(float *a,int ord,float *r){
int i,m; int i,m;
double lastdelta=0.f;
double *defl=alloca(sizeof(*defl)*(ord+1)); double *defl=alloca(sizeof(*defl)*(ord+1));
for(i=0;i<=ord;i++)defl[i]=a[i]; for(i=0;i<=ord;i++)defl[i]=a[i];
@ -346,7 +345,6 @@ static int Laguerre_With_Deflation(float *a,int ord,float *r){
if(delta<0.f)delta*=-1; if(delta<0.f)delta*=-1;
if(fabs(delta/new)<10e-12)break; if(fabs(delta/new)<10e-12)break;
lastdelta=delta;
} }
r[m-1]=new; r[m-1]=new;

View File

@ -11,7 +11,7 @@
******************************************************************** ********************************************************************
function: channel mapping 0 implementation function: channel mapping 0 implementation
last mod: $Id: mapping0.c 17022 2010-03-25 03:45:42Z xiphmont $ last mod: $Id: mapping0.c 19441 2015-01-21 01:17:41Z xiphmont $
********************************************************************/ ********************************************************************/
@ -45,16 +45,6 @@ static void mapping0_free_info(vorbis_info_mapping *i){
} }
} }
static int ilog(unsigned int v){
int ret=0;
if(v)--v;
while(v){
ret++;
v>>=1;
}
return(ret);
}
static void mapping0_pack(vorbis_info *vi,vorbis_info_mapping *vm, static void mapping0_pack(vorbis_info *vi,vorbis_info_mapping *vm,
oggpack_buffer *opb){ oggpack_buffer *opb){
int i; int i;
@ -78,8 +68,8 @@ static void mapping0_pack(vorbis_info *vi,vorbis_info_mapping *vm,
oggpack_write(opb,info->coupling_steps-1,8); oggpack_write(opb,info->coupling_steps-1,8);
for(i=0;i<info->coupling_steps;i++){ for(i=0;i<info->coupling_steps;i++){
oggpack_write(opb,info->coupling_mag[i],ilog(vi->channels)); oggpack_write(opb,info->coupling_mag[i],ov_ilog(vi->channels-1));
oggpack_write(opb,info->coupling_ang[i],ilog(vi->channels)); oggpack_write(opb,info->coupling_ang[i],ov_ilog(vi->channels-1));
} }
}else }else
oggpack_write(opb,0,1); oggpack_write(opb,0,1);
@ -104,6 +94,7 @@ static vorbis_info_mapping *mapping0_unpack(vorbis_info *vi,oggpack_buffer *opb)
vorbis_info_mapping0 *info=_ogg_calloc(1,sizeof(*info)); vorbis_info_mapping0 *info=_ogg_calloc(1,sizeof(*info));
codec_setup_info *ci=vi->codec_setup; codec_setup_info *ci=vi->codec_setup;
memset(info,0,sizeof(*info)); memset(info,0,sizeof(*info));
if(vi->channels<=0)goto err_out;
b=oggpack_read(opb,1); b=oggpack_read(opb,1);
if(b<0)goto err_out; if(b<0)goto err_out;
@ -119,8 +110,11 @@ static vorbis_info_mapping *mapping0_unpack(vorbis_info *vi,oggpack_buffer *opb)
info->coupling_steps=oggpack_read(opb,8)+1; info->coupling_steps=oggpack_read(opb,8)+1;
if(info->coupling_steps<=0)goto err_out; if(info->coupling_steps<=0)goto err_out;
for(i=0;i<info->coupling_steps;i++){ for(i=0;i<info->coupling_steps;i++){
int testM=info->coupling_mag[i]=oggpack_read(opb,ilog(vi->channels)); /* vi->channels > 0 is enforced in the caller */
int testA=info->coupling_ang[i]=oggpack_read(opb,ilog(vi->channels)); int testM=info->coupling_mag[i]=
oggpack_read(opb,ov_ilog(vi->channels-1));
int testA=info->coupling_ang[i]=
oggpack_read(opb,ov_ilog(vi->channels-1));
if(testM<0 || if(testM<0 ||
testA<0 || testA<0 ||

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: miscellaneous prototypes function: miscellaneous prototypes
last mod: $Id: misc.h 16227 2009-07-08 06:58:46Z xiphmont $ last mod: $Id: misc.h 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -21,6 +21,7 @@
extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes); extern void *_vorbis_block_alloc(vorbis_block *vb,long bytes);
extern void _vorbis_block_ripcord(vorbis_block *vb); extern void _vorbis_block_ripcord(vorbis_block *vb);
extern int ov_ilog(ogg_uint32_t v);
#ifdef ANALYSIS #ifdef ANALYSIS
extern int analysis_noisy; extern int analysis_noisy;

View File

@ -11,7 +11,7 @@
******************************************************************** ********************************************************************
function: toplevel residue templates for 32/44.1/48kHz uncoupled function: toplevel residue templates for 32/44.1/48kHz uncoupled
last mod: $Id$ last mod: $Id: residue_44p51.h 19013 2013-11-12 04:04:50Z giles $
********************************************************************/ ********************************************************************/

View File

@ -11,7 +11,7 @@
******************************************************************** ********************************************************************
function: toplevel settings for 44.1/48kHz 5.1 surround modes function: toplevel settings for 44.1/48kHz 5.1 surround modes
last mod: $Id$ last mod: $Id: setup_44p51.h 19013 2013-11-12 04:04:50Z giles $
********************************************************************/ ********************************************************************/

View File

@ -7,13 +7,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: #ifdef jail to whip a few platforms into the UNIX ideal. function: #ifdef jail to whip a few platforms into the UNIX ideal.
last mod: $Id: os.h 16227 2009-07-08 06:58:46Z xiphmont $ last mod: $Id: os.h 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -119,8 +119,9 @@ static inline int vorbis_ftoi(double f){ /* yes, double! Otherwise,
/* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the /* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the
* 64 bit compiler */ * 64 bit compiler and doesn't work on arm. */
#if defined(_MSC_VER) && !defined(_WIN64) && !defined(_WIN32_WCE) && !defined(WINDOWSPHONE_ENABLED) #if defined(_MSC_VER) && !defined(_WIN64) && \
!defined(_WIN32_WCE) && !defined(_M_ARM)
# define VORBIS_FPU_CONTROL # define VORBIS_FPU_CONTROL
typedef ogg_int16_t vorbis_fpu_control; typedef ogg_int16_t vorbis_fpu_control;
@ -135,9 +136,11 @@ static __inline int vorbis_ftoi(double f){
} }
static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){ static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
(void)fpu;
} }
static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
(void)fpu;
} }
#endif /* Special MSVC 32 bit implementation */ #endif /* Special MSVC 32 bit implementation */
@ -156,9 +159,11 @@ static __inline int vorbis_ftoi(double f){
} }
static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){ static __inline void vorbis_fpu_setround(vorbis_fpu_control *fpu){
(void)fpu;
} }
static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
(void)fpu;
} }
#endif /* Special MSVC x64 implementation */ #endif /* Special MSVC x64 implementation */

View File

@ -11,7 +11,7 @@
******************************************************************** ********************************************************************
function: psychoacoustics not including preecho function: psychoacoustics not including preecho
last mod: $Id: psy.c 17569 2010-10-26 17:09:47Z xiphmont $ last mod: $Id: psy.c 18077 2011-09-02 02:49:00Z giles $
********************************************************************/ ********************************************************************/
@ -1020,7 +1020,9 @@ void _vp_couple_quantize_normalize(int blobno,
int limit = g->coupling_pointlimit[p->vi->blockflag][blobno]; int limit = g->coupling_pointlimit[p->vi->blockflag][blobno];
float prepoint=stereo_threshholds[g->coupling_prepointamp[blobno]]; float prepoint=stereo_threshholds[g->coupling_prepointamp[blobno]];
float postpoint=stereo_threshholds[g->coupling_postpointamp[blobno]]; float postpoint=stereo_threshholds[g->coupling_postpointamp[blobno]];
#if 0
float de=0.1*p->m_val; /* a blend of the AoTuV M2 and M3 code here and below */ float de=0.1*p->m_val; /* a blend of the AoTuV M2 and M3 code here and below */
#endif
/* mdct is our raw mdct output, floor not removed. */ /* mdct is our raw mdct output, floor not removed. */
/* inout passes in the ifloor, passes back quantized result */ /* inout passes in the ifloor, passes back quantized result */
@ -1154,27 +1156,28 @@ void _vp_couple_quantize_normalize(int blobno,
reM[j] += reA[j]; reM[j] += reA[j];
qeM[j] = fabs(reM[j]); qeM[j] = fabs(reM[j]);
}else{ }else{
#if 0
/* AoTuV */ /* AoTuV */
/** @ M2 ** /** @ M2 **
The boost problem by the combination of noise normalization and point stereo is eased. The boost problem by the combination of noise normalization and point stereo is eased.
However, this is a temporary patch. However, this is a temporary patch.
by Aoyumi @ 2004/04/18 by Aoyumi @ 2004/04/18
*/ */
/*float derate = (1.0 - de*((float)(j-limit+i) / (float)(n-limit))); */ float derate = (1.0 - de*((float)(j-limit+i) / (float)(n-limit)));
/* elliptical /* elliptical */
if(reM[j]+reA[j]<0){ if(reM[j]+reA[j]<0){
reM[j] = - (qeM[j] = (fabs(reM[j])+fabs(reA[j]))*derate*derate); reM[j] = - (qeM[j] = (fabs(reM[j])+fabs(reA[j]))*derate*derate);
}else{ }else{
reM[j] = (qeM[j] = (fabs(reM[j])+fabs(reA[j]))*derate*derate); reM[j] = (qeM[j] = (fabs(reM[j])+fabs(reA[j]))*derate*derate);
}*/ }
#else
/* elliptical */ /* elliptical */
if(reM[j]+reA[j]<0){ if(reM[j]+reA[j]<0){
reM[j] = - (qeM[j] = fabs(reM[j])+fabs(reA[j])); reM[j] = - (qeM[j] = fabs(reM[j])+fabs(reA[j]));
}else{ }else{
reM[j] = (qeM[j] = fabs(reM[j])+fabs(reA[j])); reM[j] = (qeM[j] = fabs(reM[j])+fabs(reA[j]));
} }
#endif
} }
reA[j]=qeA[j]=0.f; reA[j]=qeA[j]=0.f;

View File

@ -11,7 +11,7 @@
******************************************************************** ********************************************************************
function: residue backend 0, 1 and 2 implementation function: residue backend 0, 1 and 2 implementation
last mod: $Id: res0.c 17556 2010-10-21 18:25:19Z tterribe $ last mod: $Id: res0.c 19441 2015-01-21 01:17:41Z xiphmont $
********************************************************************/ ********************************************************************/
@ -152,15 +152,6 @@ void res0_free_look(vorbis_look_residue *i){
} }
} }
static int ilog(unsigned int v){
int ret=0;
while(v){
ret++;
v>>=1;
}
return(ret);
}
static int icount(unsigned int v){ static int icount(unsigned int v){
int ret=0; int ret=0;
while(v){ while(v){
@ -186,7 +177,7 @@ void res0_pack(vorbis_info_residue *vr,oggpack_buffer *opb){
bitmask of one indicates this partition class has bits to write bitmask of one indicates this partition class has bits to write
this pass */ this pass */
for(j=0;j<info->partitions;j++){ for(j=0;j<info->partitions;j++){
if(ilog(info->secondstages[j])>3){ if(ov_ilog(info->secondstages[j])>3){
/* yes, this is a minor hack due to not thinking ahead */ /* yes, this is a minor hack due to not thinking ahead */
oggpack_write(opb,info->secondstages[j],3); oggpack_write(opb,info->secondstages[j],3);
oggpack_write(opb,1,1); oggpack_write(opb,1,1);
@ -284,7 +275,7 @@ vorbis_look_residue *res0_look(vorbis_dsp_state *vd,
look->partbooks=_ogg_calloc(look->parts,sizeof(*look->partbooks)); look->partbooks=_ogg_calloc(look->parts,sizeof(*look->partbooks));
for(j=0;j<look->parts;j++){ for(j=0;j<look->parts;j++){
int stages=ilog(info->secondstages[j]); int stages=ov_ilog(info->secondstages[j]);
if(stages){ if(stages){
if(stages>maxstage)maxstage=stages; if(stages>maxstage)maxstage=stages;
look->partbooks[j]=_ogg_calloc(stages,sizeof(*look->partbooks[j])); look->partbooks[j]=_ogg_calloc(stages,sizeof(*look->partbooks[j]));
@ -390,8 +381,13 @@ static int local_book_besterror(codebook *book,int *a){
return(index); return(index);
} }
#ifdef TRAIN_RES
static int _encodepart(oggpack_buffer *opb,int *vec, int n, static int _encodepart(oggpack_buffer *opb,int *vec, int n,
codebook *book,long *acc){ codebook *book,long *acc){
#else
static int _encodepart(oggpack_buffer *opb,int *vec, int n,
codebook *book){
#endif
int i,bits=0; int i,bits=0;
int dim=book->dim; int dim=book->dim;
int step=n/dim; int step=n/dim;
@ -534,12 +530,18 @@ static long **_2class(vorbis_block *vb,vorbis_look_residue *vl,int **in,
} }
static int _01forward(oggpack_buffer *opb, static int _01forward(oggpack_buffer *opb,
vorbis_block *vb,vorbis_look_residue *vl, vorbis_look_residue *vl,
int **in,int ch, int **in,int ch,
long **partword, long **partword,
#ifdef TRAIN_RES
int (*encode)(oggpack_buffer *,int *,int, int (*encode)(oggpack_buffer *,int *,int,
codebook *,long *), codebook *,long *),
int submap){ int submap
#else
int (*encode)(oggpack_buffer *,int *,int,
codebook *)
#endif
){
long i,j,k,s; long i,j,k,s;
vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl; vorbis_look_residue0 *look=(vorbis_look_residue0 *)vl;
vorbis_info_residue0 *info=look->info; vorbis_info_residue0 *info=look->info;
@ -609,9 +611,8 @@ static int _01forward(oggpack_buffer *opb,
codebook *statebook=look->partbooks[partword[j][i]][s]; codebook *statebook=look->partbooks[partword[j][i]][s];
if(statebook){ if(statebook){
int ret; int ret;
long *accumulator=NULL;
#ifdef TRAIN_RES #ifdef TRAIN_RES
long *accumulator=NULL;
accumulator=look->training_data[s][partword[j][i]]; accumulator=look->training_data[s][partword[j][i]];
{ {
int l; int l;
@ -623,10 +624,12 @@ static int _01forward(oggpack_buffer *opb,
look->training_max[s][partword[j][i]]=samples[l]; look->training_max[s][partword[j][i]]=samples[l];
} }
} }
#endif
ret=encode(opb,in[j]+offset,samples_per_partition, ret=encode(opb,in[j]+offset,samples_per_partition,
statebook,accumulator); statebook,accumulator);
#else
ret=encode(opb,in[j]+offset,samples_per_partition,
statebook);
#endif
look->postbits+=ret; look->postbits+=ret;
resbits[partword[j][i]]+=ret; resbits[partword[j][i]]+=ret;
@ -637,19 +640,6 @@ static int _01forward(oggpack_buffer *opb,
} }
} }
/*{
long total=0;
long totalbits=0;
fprintf(stderr,"%d :: ",vb->mode);
for(k=0;k<possible_partitions;k++){
fprintf(stderr,"%ld/%1.2g, ",resvals[k],(float)resbits[k]/resvals[k]);
total+=resvals[k];
totalbits+=resbits[k];
}
fprintf(stderr,":: %ld:%1.2g\n",total,(double)totalbits/total);
}*/
return(0); return(0);
} }
@ -729,12 +719,18 @@ int res0_inverse(vorbis_block *vb,vorbis_look_residue *vl,
int res1_forward(oggpack_buffer *opb,vorbis_block *vb,vorbis_look_residue *vl, int res1_forward(oggpack_buffer *opb,vorbis_block *vb,vorbis_look_residue *vl,
int **in,int *nonzero,int ch, long **partword, int submap){ int **in,int *nonzero,int ch, long **partword, int submap){
int i,used=0; int i,used=0;
(void)vb;
for(i=0;i<ch;i++) for(i=0;i<ch;i++)
if(nonzero[i]) if(nonzero[i])
in[used++]=in[i]; in[used++]=in[i];
if(used){ if(used){
return _01forward(opb,vb,vl,in,used,partword,_encodepart,submap); #ifdef TRAIN_RES
return _01forward(opb,vl,in,used,partword,_encodepart,submap);
#else
(void)submap;
return _01forward(opb,vl,in,used,partword,_encodepart);
#endif
}else{ }else{
return(0); return(0);
} }
@ -795,7 +791,12 @@ int res2_forward(oggpack_buffer *opb,
} }
if(used){ if(used){
return _01forward(opb,vb,vl,&work,1,partword,_encodepart,submap); #ifdef TRAIN_RES
return _01forward(opb,vl,&work,1,partword,_encodepart,submap);
#else
(void)submap;
return _01forward(opb,vl,&work,1,partword,_encodepart);
#endif
}else{ }else{
return(0); return(0);
} }

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: basic shared codebook operations function: basic shared codebook operations
last mod: $Id: sharedbook.c 17030 2010-03-25 06:52:55Z xiphmont $ last mod: $Id: sharedbook.c 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -26,13 +26,11 @@
#include "scales.h" #include "scales.h"
/**** pack/unpack helpers ******************************************/ /**** pack/unpack helpers ******************************************/
int _ilog(unsigned int v){
int ret=0; int ov_ilog(ogg_uint32_t v){
while(v){ int ret;
ret++; for(ret=0;v;ret++)v>>=1;
v>>=1; return ret;
}
return(ret);
} }
/* 32 bit float (not IEEE; nonnormalized mantissa + /* 32 bit float (not IEEE; nonnormalized mantissa +
@ -70,7 +68,7 @@ float _float32_unpack(long val){
/* given a list of word lengths, generate a list of codewords. Works /* given a list of word lengths, generate a list of codewords. Works
for length ordered or unordered, always assigns the lowest valued for length ordered or unordered, always assigns the lowest valued
codewords first. Extended to handle unused entries (length 0) */ codewords first. Extended to handle unused entries (length 0) */
ogg_uint32_t *_make_words(long *l,long n,long sparsecount){ ogg_uint32_t *_make_words(char *l,long n,long sparsecount){
long i,j,count=0; long i,j,count=0;
ogg_uint32_t marker[33]; ogg_uint32_t marker[33];
ogg_uint32_t *r=_ogg_malloc((sparsecount?sparsecount:n)*sizeof(*r)); ogg_uint32_t *r=_ogg_malloc((sparsecount?sparsecount:n)*sizeof(*r));
@ -125,16 +123,15 @@ ogg_uint32_t *_make_words(long *l,long n,long sparsecount){
if(sparsecount==0)count++; if(sparsecount==0)count++;
} }
/* sanity check the huffman tree; an underpopulated tree must be /* any underpopulated tree must be rejected. */
rejected. The only exception is the one-node pseudo-nil tree, /* Single-entry codebooks are a retconned extension to the spec.
which appears to be underpopulated because the tree doesn't They have a single codeword '0' of length 1 that results in an
really exist; there's only one possible 'codeword' or zero bits, underpopulated tree. Shield that case from the underformed tree check. */
but the above tree-gen code doesn't mark that. */ if(!(count==1 && marker[2]==2)){
if(sparsecount != 1){
for(i=1;i<33;i++) for(i=1;i<33;i++)
if(marker[i] & (0xffffffffUL>>(32-i))){ if(marker[i] & (0xffffffffUL>>(32-i))){
_ogg_free(r); _ogg_free(r);
return(NULL); return(NULL);
} }
} }
@ -313,9 +310,10 @@ static int sort32a(const void *a,const void *b){
int vorbis_book_init_decode(codebook *c,const static_codebook *s){ int vorbis_book_init_decode(codebook *c,const static_codebook *s){
int i,j,n=0,tabn; int i,j,n=0,tabn;
int *sortindex; int *sortindex;
memset(c,0,sizeof(*c)); memset(c,0,sizeof(*c));
/* count actually used entries */ /* count actually used entries and find max length */
for(i=0;i<s->entries;i++) for(i=0;i<s->entries;i++)
if(s->lengthlist[i]>0) if(s->lengthlist[i]>0)
n++; n++;
@ -325,7 +323,6 @@ int vorbis_book_init_decode(codebook *c,const static_codebook *s){
c->dim=s->dim; c->dim=s->dim;
if(n>0){ if(n>0){
/* two different remappings go on here. /* two different remappings go on here.
First, we collapse the likely sparse codebook down only to First, we collapse the likely sparse codebook down only to
@ -361,7 +358,6 @@ int vorbis_book_init_decode(codebook *c,const static_codebook *s){
c->codelist[sortindex[i]]=codes[i]; c->codelist[sortindex[i]]=codes[i];
_ogg_free(codes); _ogg_free(codes);
c->valuelist=_book_unquantize(s,n,sortindex); c->valuelist=_book_unquantize(s,n,sortindex);
c->dec_index=_ogg_malloc(n*sizeof(*c->dec_index)); c->dec_index=_ogg_malloc(n*sizeof(*c->dec_index));
@ -370,51 +366,62 @@ int vorbis_book_init_decode(codebook *c,const static_codebook *s){
c->dec_index[sortindex[n++]]=i; c->dec_index[sortindex[n++]]=i;
c->dec_codelengths=_ogg_malloc(n*sizeof(*c->dec_codelengths)); c->dec_codelengths=_ogg_malloc(n*sizeof(*c->dec_codelengths));
for(n=0,i=0;i<s->entries;i++)
if(s->lengthlist[i]>0)
c->dec_codelengths[sortindex[n++]]=s->lengthlist[i];
c->dec_firsttablen=_ilog(c->used_entries)-4; /* this is magic */
if(c->dec_firsttablen<5)c->dec_firsttablen=5;
if(c->dec_firsttablen>8)c->dec_firsttablen=8;
tabn=1<<c->dec_firsttablen;
c->dec_firsttable=_ogg_calloc(tabn,sizeof(*c->dec_firsttable));
c->dec_maxlength=0; c->dec_maxlength=0;
for(n=0,i=0;i<s->entries;i++)
for(i=0;i<n;i++){ if(s->lengthlist[i]>0){
if(c->dec_maxlength<c->dec_codelengths[i]) c->dec_codelengths[sortindex[n++]]=s->lengthlist[i];
c->dec_maxlength=c->dec_codelengths[i]; if(s->lengthlist[i]>c->dec_maxlength)
if(c->dec_codelengths[i]<=c->dec_firsttablen){ c->dec_maxlength=s->lengthlist[i];
ogg_uint32_t orig=bitreverse(c->codelist[i]);
for(j=0;j<(1<<(c->dec_firsttablen-c->dec_codelengths[i]));j++)
c->dec_firsttable[orig|(j<<c->dec_codelengths[i])]=i+1;
} }
}
/* now fill in 'unused' entries in the firsttable with hi/lo search if(n==1 && c->dec_maxlength==1){
hints for the non-direct-hits */ /* special case the 'single entry codebook' with a single bit
{ fastpath table (that always returns entry 0 )in order to use
ogg_uint32_t mask=0xfffffffeUL<<(31-c->dec_firsttablen); unmodified decode paths. */
long lo=0,hi=0; c->dec_firsttablen=1;
c->dec_firsttable=_ogg_calloc(2,sizeof(*c->dec_firsttable));
c->dec_firsttable[0]=c->dec_firsttable[1]=1;
for(i=0;i<tabn;i++){ }else{
ogg_uint32_t word=i<<(32-c->dec_firsttablen); c->dec_firsttablen=ov_ilog(c->used_entries)-4; /* this is magic */
if(c->dec_firsttable[bitreverse(word)]==0){ if(c->dec_firsttablen<5)c->dec_firsttablen=5;
while((lo+1)<n && c->codelist[lo+1]<=word)lo++; if(c->dec_firsttablen>8)c->dec_firsttablen=8;
while( hi<n && word>=(c->codelist[hi]&mask))hi++;
/* we only actually have 15 bits per hint to play with here. tabn=1<<c->dec_firsttablen;
In order to overflow gracefully (nothing breaks, efficiency c->dec_firsttable=_ogg_calloc(tabn,sizeof(*c->dec_firsttable));
just drops), encode as the difference from the extremes. */
{
unsigned long loval=lo;
unsigned long hival=n-hi;
if(loval>0x7fff)loval=0x7fff; for(i=0;i<n;i++){
if(hival>0x7fff)hival=0x7fff; if(c->dec_codelengths[i]<=c->dec_firsttablen){
c->dec_firsttable[bitreverse(word)]= ogg_uint32_t orig=bitreverse(c->codelist[i]);
0x80000000UL | (loval<<15) | hival; for(j=0;j<(1<<(c->dec_firsttablen-c->dec_codelengths[i]));j++)
c->dec_firsttable[orig|(j<<c->dec_codelengths[i])]=i+1;
}
}
/* now fill in 'unused' entries in the firsttable with hi/lo search
hints for the non-direct-hits */
{
ogg_uint32_t mask=0xfffffffeUL<<(31-c->dec_firsttablen);
long lo=0,hi=0;
for(i=0;i<tabn;i++){
ogg_uint32_t word=i<<(32-c->dec_firsttablen);
if(c->dec_firsttable[bitreverse(word)]==0){
while((lo+1)<n && c->codelist[lo+1]<=word)lo++;
while( hi<n && word>=(c->codelist[hi]&mask))hi++;
/* we only actually have 15 bits per hint to play with here.
In order to overflow gracefully (nothing breaks, efficiency
just drops), encode as the difference from the extremes. */
{
unsigned long loval=lo;
unsigned long hival=n-hi;
if(loval>0x7fff)loval=0x7fff;
if(hival>0x7fff)hival=0x7fff;
c->dec_firsttable[bitreverse(word)]=
0x80000000UL | (loval<<15) | hival;
}
} }
} }
} }

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: single-block PCM synthesis function: single-block PCM synthesis
last mod: $Id: synthesis.c 17474 2010-09-30 03:41:41Z gmaxwell $ last mod: $Id: synthesis.c 19441 2015-01-21 01:17:41Z xiphmont $
********************************************************************/ ********************************************************************/
@ -145,6 +145,11 @@ long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
oggpack_buffer opb; oggpack_buffer opb;
int mode; int mode;
if(ci==NULL || ci->modes<=0){
/* codec setup not properly intialized */
return(OV_EFAULT);
}
oggpack_readinit(&opb,op->packet,op->bytes); oggpack_readinit(&opb,op->packet,op->bytes);
/* Check the packet type */ /* Check the packet type */
@ -153,18 +158,9 @@ long vorbis_packet_blocksize(vorbis_info *vi,ogg_packet *op){
return(OV_ENOTAUDIO); return(OV_ENOTAUDIO);
} }
{ /* read our mode and pre/post windowsize */
int modebits=0; mode=oggpack_read(&opb,ov_ilog(ci->modes-1));
int v=ci->modes; if(mode==-1 || !ci->mode_param[mode])return(OV_EBADPACKET);
while(v>1){
modebits++;
v>>=1;
}
/* read our mode and pre/post windowsize */
mode=oggpack_read(&opb,modebits);
}
if(mode==-1)return(OV_EBADPACKET);
return(ci->blocksizes[ci->mode_param[mode]->blockflag]); return(ci->blocksizes[ci->mode_param[mode]->blockflag]);
} }

View File

@ -3,10 +3,6 @@
#include <math.h> #include <math.h>
#include <string.h> #include <string.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
void usage(){ void usage(){
fprintf(stderr,"tone <frequency_Hz>,[<amplitude>] [<frequency_Hz>,[<amplitude>]...]\n"); fprintf(stderr,"tone <frequency_Hz>,[<amplitude>] [<frequency_Hz>,[<amplitude>]...]\n");
exit(1); exit(1);

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: simple programmatic interface for encoder mode setup function: simple programmatic interface for encoder mode setup
last mod: $Id: vorbisenc.c 17028 2010-03-25 05:22:15Z xiphmont $ last mod: $Id: vorbisenc.c 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -903,8 +903,12 @@ int vorbis_encode_setup_vbr(vorbis_info *vi,
long channels, long channels,
long rate, long rate,
float quality){ float quality){
codec_setup_info *ci=vi->codec_setup; codec_setup_info *ci;
highlevel_encode_setup *hi=&ci->hi; highlevel_encode_setup *hi;
if(rate<=0) return OV_EINVAL;
ci=vi->codec_setup;
hi=&ci->hi;
quality+=.0000001; quality+=.0000001;
if(quality>=1.)quality=.9999; if(quality>=1.)quality=.9999;
@ -948,9 +952,14 @@ int vorbis_encode_setup_managed(vorbis_info *vi,
long nominal_bitrate, long nominal_bitrate,
long min_bitrate){ long min_bitrate){
codec_setup_info *ci=vi->codec_setup; codec_setup_info *ci;
highlevel_encode_setup *hi=&ci->hi; highlevel_encode_setup *hi;
double tnominal=nominal_bitrate; double tnominal;
if(rate<=0) return OV_EINVAL;
ci=vi->codec_setup;
hi=&ci->hi;
tnominal=nominal_bitrate;
if(nominal_bitrate<=0.){ if(nominal_bitrate<=0.){
if(max_bitrate>0.){ if(max_bitrate>0.){

View File

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation http://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: stdio-based convenience library for opening/seeking/decoding function: stdio-based convenience library for opening/seeking/decoding
last mod: $Id: vorbisfile.c 17573 2010-10-27 14:53:59Z xiphmont $ last mod: $Id: vorbisfile.c 19457 2015-03-03 00:15:29Z giles $
********************************************************************/ ********************************************************************/
@ -80,11 +80,14 @@ static long _get_data(OggVorbis_File *vf){
/* save a tiny smidge of verbosity to make the code more readable */ /* save a tiny smidge of verbosity to make the code more readable */
static int _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){ static int _seek_helper(OggVorbis_File *vf,ogg_int64_t offset){
if(vf->datasource){ if(vf->datasource){
if(!(vf->callbacks.seek_func)|| /* only seek if the file position isn't already there */
(vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET) == -1) if(vf->offset != offset){
return OV_EREAD; if(!(vf->callbacks.seek_func)||
vf->offset=offset; (vf->callbacks.seek_func)(vf->datasource, offset, SEEK_SET) == -1)
ogg_sync_reset(&vf->oy); return OV_EREAD;
vf->offset=offset;
ogg_sync_reset(&vf->oy);
}
}else{ }else{
/* shouldn't happen unless someone writes a broken callback */ /* shouldn't happen unless someone writes a broken callback */
return OV_EFAULT; return OV_EFAULT;
@ -138,14 +141,12 @@ static ogg_int64_t _get_next_page(OggVorbis_File *vf,ogg_page *og,
} }
} }
/* find the latest page beginning before the current stream cursor /* find the latest page beginning before the passed in position. Much
position. Much dirtier than the above as Ogg doesn't have any dirtier than the above as Ogg doesn't have any backward search
backward search linkage. no 'readp' as it will certainly have to linkage. no 'readp' as it will certainly have to read. */
read. */
/* returns offset or OV_EREAD, OV_FAULT */ /* returns offset or OV_EREAD, OV_FAULT */
static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_page *og){ static ogg_int64_t _get_prev_page(OggVorbis_File *vf,ogg_int64_t begin,ogg_page *og){
ogg_int64_t begin=vf->offset; ogg_int64_t end = begin;
ogg_int64_t end=begin;
ogg_int64_t ret; ogg_int64_t ret;
ogg_int64_t offset=-1; ogg_int64_t offset=-1;
@ -220,11 +221,10 @@ static int _lookup_page_serialno(ogg_page *og, long *serialno_list, int n){
info of last page of the matching serial number instead of the very info of last page of the matching serial number instead of the very
last page. If no page of the specified serialno is seen, it will last page. If no page of the specified serialno is seen, it will
return the info of last page and alter *serialno. */ return the info of last page and alter *serialno. */
static ogg_int64_t _get_prev_page_serial(OggVorbis_File *vf, static ogg_int64_t _get_prev_page_serial(OggVorbis_File *vf, ogg_int64_t begin,
long *serial_list, int serial_n, long *serial_list, int serial_n,
int *serialno, ogg_int64_t *granpos){ int *serialno, ogg_int64_t *granpos){
ogg_page og; ogg_page og;
ogg_int64_t begin=vf->offset;
ogg_int64_t end=begin; ogg_int64_t end=begin;
ogg_int64_t ret; ogg_int64_t ret;
@ -438,9 +438,11 @@ static ogg_int64_t _initial_pcmoffset(OggVorbis_File *vf, vorbis_info *vi){
while((result=ogg_stream_packetout(&vf->os,&op))){ while((result=ogg_stream_packetout(&vf->os,&op))){
if(result>0){ /* ignore holes */ if(result>0){ /* ignore holes */
long thisblock=vorbis_packet_blocksize(vi,&op); long thisblock=vorbis_packet_blocksize(vi,&op);
if(lastblock!=-1) if(thisblock>=0){
accumulated+=(lastblock+thisblock)>>2; if(lastblock!=-1)
lastblock=thisblock; accumulated+=(lastblock+thisblock)>>2;
lastblock=thisblock;
}
} }
} }
@ -494,10 +496,10 @@ static int _bisect_forward_serialno(OggVorbis_File *vf,
down to (or just started with) a single link. Now we need to down to (or just started with) a single link. Now we need to
find the last vorbis page belonging to the first vorbis stream find the last vorbis page belonging to the first vorbis stream
for this link. */ for this link. */
searched = end;
while(endserial != serialno){ while(endserial != serialno){
endserial = serialno; endserial = serialno;
vf->offset=_get_prev_page_serial(vf,currentno_list,currentnos,&endserial,&endgran); searched=_get_prev_page_serial(vf,searched,currentno_list,currentnos,&endserial,&endgran);
} }
vf->links=m+1; vf->links=m+1;
@ -518,10 +520,15 @@ static int _bisect_forward_serialno(OggVorbis_File *vf,
}else{ }else{
/* last page is not in the starting stream's serial number list,
so we have multiple links. Find where the stream that begins
our bisection ends. */
long *next_serialno_list=NULL; long *next_serialno_list=NULL;
int next_serialnos=0; int next_serialnos=0;
vorbis_info vi; vorbis_info vi;
vorbis_comment vc; vorbis_comment vc;
int testserial = serialno+1;
/* the below guards against garbage seperating the last and /* the below guards against garbage seperating the last and
first pages of two links. */ first pages of two links. */
@ -534,10 +541,8 @@ static int _bisect_forward_serialno(OggVorbis_File *vf,
bisect=(searched+endsearched)/2; bisect=(searched+endsearched)/2;
} }
if(bisect != vf->offset){ ret=_seek_helper(vf,bisect);
ret=_seek_helper(vf,bisect); if(ret)return(ret);
if(ret)return(ret);
}
last=_get_next_page(vf,&og,-1); last=_get_next_page(vf,&og,-1);
if(last==OV_EREAD)return(OV_EREAD); if(last==OV_EREAD)return(OV_EREAD);
@ -550,28 +555,22 @@ static int _bisect_forward_serialno(OggVorbis_File *vf,
} }
/* Bisection point found */ /* Bisection point found */
/* for the time being, fetch end PCM offset the simple way */ /* for the time being, fetch end PCM offset the simple way */
{ searched = next;
int testserial = serialno+1; while(testserial != serialno){
vf->offset = next; testserial = serialno;
while(testserial != serialno){ searched = _get_prev_page_serial(vf,searched,currentno_list,currentnos,&testserial,&searchgran);
testserial = serialno;
vf->offset=_get_prev_page_serial(vf,currentno_list,currentnos,&testserial,&searchgran);
}
} }
if(vf->offset!=next){ ret=_seek_helper(vf,next);
ret=_seek_helper(vf,next); if(ret)return(ret);
if(ret)return(ret);
}
ret=_fetch_headers(vf,&vi,&vc,&next_serialno_list,&next_serialnos,NULL); ret=_fetch_headers(vf,&vi,&vc,&next_serialno_list,&next_serialnos,NULL);
if(ret)return(ret); if(ret)return(ret);
serialno = vf->os.serialno; serialno = vf->os.serialno;
dataoffset = vf->offset; dataoffset = vf->offset;
/* this will consume a page, however the next bistection always /* this will consume a page, however the next bisection always
starts with a raw seek */ starts with a raw seek */
pcmoffset = _initial_pcmoffset(vf,&vi); pcmoffset = _initial_pcmoffset(vf,&vi);
@ -638,11 +637,11 @@ static int _open_seekable2(OggVorbis_File *vf){
/* Get the offset of the last page of the physical bitstream, or, if /* Get the offset of the last page of the physical bitstream, or, if
we're lucky the last vorbis page of this link as most OggVorbis we're lucky the last vorbis page of this link as most OggVorbis
files will contain a single logical bitstream */ files will contain a single logical bitstream */
end=_get_prev_page_serial(vf,vf->serialnos+2,vf->serialnos[1],&endserial,&endgran); end=_get_prev_page_serial(vf,vf->end,vf->serialnos+2,vf->serialnos[1],&endserial,&endgran);
if(end<0)return(end); if(end<0)return(end);
/* now determine bitstream structure recursively */ /* now determine bitstream structure recursively */
if(_bisect_forward_serialno(vf,0,dataoffset,vf->offset,endgran,endserial, if(_bisect_forward_serialno(vf,0,dataoffset,end,endgran,endserial,
vf->serialnos+2,vf->serialnos[1],0)<0)return(OV_EREAD); vf->serialnos+2,vf->serialnos[1],0)<0)return(OV_EREAD);
vf->offsets[0]=0; vf->offsets[0]=0;
@ -1055,7 +1054,11 @@ int ov_halfrate_p(OggVorbis_File *vf){
/* Only partially open the vorbis file; test for Vorbisness, and load /* Only partially open the vorbis file; test for Vorbisness, and load
the headers for the first chain. Do not seek (although test for the headers for the first chain. Do not seek (although test for
seekability). Use ov_test_open to finish opening the file, else seekability). Use ov_test_open to finish opening the file, else
ov_clear to close/free it. Same return codes as open. */ ov_clear to close/free it. Same return codes as open.
Note that vorbisfile does _not_ take ownership of the file if the
call fails; the calling applicaiton is responsible for closing the file
if this call returns an error. */
int ov_test_callbacks(void *f,OggVorbis_File *vf, int ov_test_callbacks(void *f,OggVorbis_File *vf,
const char *initial,long ibytes,ov_callbacks callbacks) const char *initial,long ibytes,ov_callbacks callbacks)
@ -1417,22 +1420,41 @@ int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
if(pos>=total)break; if(pos>=total)break;
} }
/* search within the logical bitstream for the page with the highest /* Search within the logical bitstream for the page with the highest
pcm_pos preceding (or equal to) pos. There is a danger here; pcm_pos preceding pos. If we're looking for a position on the
missing pages or incorrect frame number information in the first page, bisection will halt without finding our position as
bitstream could make our task impossible. Account for that (it it's before the first explicit granulepos fencepost. That case is
would be an error condition) */ handled separately below.
There is a danger here; missing pages or incorrect frame number
information in the bitstream could make our task impossible.
Account for that (it would be an error condition) */
/* new search algorithm originally by HB (Nicholas Vinen) */
/* new search algorithm by HB (Nicholas Vinen) */
{ {
ogg_int64_t end=vf->offsets[link+1]; ogg_int64_t end=vf->offsets[link+1];
ogg_int64_t begin=vf->offsets[link]; ogg_int64_t begin=vf->dataoffsets[link];
ogg_int64_t begintime = vf->pcmlengths[link*2]; ogg_int64_t begintime = vf->pcmlengths[link*2];
ogg_int64_t endtime = vf->pcmlengths[link*2+1]+begintime; ogg_int64_t endtime = vf->pcmlengths[link*2+1]+begintime;
ogg_int64_t target=pos-total+begintime; ogg_int64_t target=pos-total+begintime;
ogg_int64_t best=begin; ogg_int64_t best=-1;
int got_page=0;
ogg_page og; ogg_page og;
/* if we have only one page, there will be no bisection. Grab the page here */
if(begin==end){
result=_seek_helper(vf,begin);
if(result) goto seek_error;
result=_get_next_page(vf,&og,1);
if(result<0) goto seek_error;
got_page=1;
}
/* bisection loop */
while(begin<end){ while(begin<end){
ogg_int64_t bisect; ogg_int64_t bisect;
@ -1447,51 +1469,80 @@ int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
bisect=begin; bisect=begin;
} }
if(bisect!=vf->offset){ result=_seek_helper(vf,bisect);
result=_seek_helper(vf,bisect); if(result) goto seek_error;
if(result) goto seek_error;
}
/* read loop within the bisection loop */
while(begin<end){ while(begin<end){
result=_get_next_page(vf,&og,end-vf->offset); result=_get_next_page(vf,&og,end-vf->offset);
if(result==OV_EREAD) goto seek_error; if(result==OV_EREAD) goto seek_error;
if(result<0){ if(result<0){
/* there is no next page! */
if(bisect<=begin+1) if(bisect<=begin+1)
end=begin; /* found it */ /* No bisection left to perform. We've either found the
best candidate already or failed. Exit loop. */
end=begin;
else{ else{
/* We tried to load a fraction of the last page; back up a
bit and try to get the whole last page */
if(bisect==0) goto seek_error; if(bisect==0) goto seek_error;
bisect-=CHUNKSIZE; bisect-=CHUNKSIZE;
/* don't repeat/loop on a read we've already performed */
if(bisect<=begin)bisect=begin+1; if(bisect<=begin)bisect=begin+1;
/* seek and cntinue bisection */
result=_seek_helper(vf,bisect); result=_seek_helper(vf,bisect);
if(result) goto seek_error; if(result) goto seek_error;
} }
}else{ }else{
ogg_int64_t granulepos; ogg_int64_t granulepos;
got_page=1;
/* got a page. analyze it */
/* only consider pages from primary vorbis stream */
if(ogg_page_serialno(&og)!=vf->serialnos[link]) if(ogg_page_serialno(&og)!=vf->serialnos[link])
continue; continue;
/* only consider pages with the granulepos set */
granulepos=ogg_page_granulepos(&og); granulepos=ogg_page_granulepos(&og);
if(granulepos==-1)continue; if(granulepos==-1)continue;
if(granulepos<target){ if(granulepos<target){
/* this page is a successful candidate! Set state */
best=result; /* raw offset of packet with granulepos */ best=result; /* raw offset of packet with granulepos */
begin=vf->offset; /* raw offset of next page */ begin=vf->offset; /* raw offset of next page */
begintime=granulepos; begintime=granulepos;
/* if we're before our target but within a short distance,
don't bisect; read forward */
if(target-begintime>44100)break; if(target-begintime>44100)break;
bisect=begin; /* *not* begin + 1 */
bisect=begin; /* *not* begin + 1 as above */
}else{ }else{
if(bisect<=begin+1)
end=begin; /* found it */ /* This is one of our pages, but the granpos is
else{ post-target; it is not a bisection return
if(end==vf->offset){ /* we're pretty close - we'd be stuck in */ candidate. (The only way we'd use it is if it's the
first page in the stream; we handle that case later
outside the bisection) */
if(bisect<=begin+1){
/* No bisection left to perform. We've either found the
best candidate already or failed. Exit loop. */
end=begin;
}else{
if(end==vf->offset){
/* bisection read to the end; use the known page
boundary (result) to update bisection, back up a
little bit, and try again */
end=result; end=result;
bisect-=CHUNKSIZE; /* an endless loop otherwise. */ bisect-=CHUNKSIZE;
if(bisect<=begin)bisect=begin+1; if(bisect<=begin)bisect=begin+1;
result=_seek_helper(vf,bisect); result=_seek_helper(vf,bisect);
if(result) goto seek_error; if(result) goto seek_error;
}else{ }else{
/* Normal bisection */
end=bisect; end=bisect;
endtime=granulepos; endtime=granulepos;
break; break;
@ -1502,9 +1553,46 @@ int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
} }
} }
/* found our page. seek to it, update pcm offset. Easier case than /* Out of bisection: did it 'fail?' */
raw_seek, don't keep packets preceding granulepos. */ if(best == -1){
{
/* Check the 'looking for data in first page' special case;
bisection would 'fail' because our search target was before the
first PCM granule position fencepost. */
if(got_page &&
begin == vf->dataoffsets[link] &&
ogg_page_serialno(&og)==vf->serialnos[link]){
/* Yes, this is the beginning-of-stream case. We already have
our page, right at the beginning of PCM data. Set state
and return. */
vf->pcm_offset=total;
if(link!=vf->current_link){
/* Different link; dump entire decode machine */
_decode_clear(vf);
vf->current_link=link;
vf->current_serialno=vf->serialnos[link];
vf->ready_state=STREAMSET;
}else{
vorbis_synthesis_restart(&vf->vd);
}
ogg_stream_reset_serialno(&vf->os,vf->current_serialno);
ogg_stream_pagein(&vf->os,&og);
}else
goto seek_error;
}else{
/* Bisection found our page. seek to it, update pcm offset. Easier case than
raw_seek, don't keep packets preceding granulepos. */
ogg_page og; ogg_page og;
ogg_packet op; ogg_packet op;
@ -1534,23 +1622,23 @@ int ov_pcm_seek_page(OggVorbis_File *vf,ogg_int64_t pos){
while(1){ while(1){
result=ogg_stream_packetpeek(&vf->os,&op); result=ogg_stream_packetpeek(&vf->os,&op);
if(result==0){ if(result==0){
/* !!! the packet finishing this page originated on a /* No packet returned; we exited the bisection with 'best'
preceding page. Keep fetching previous pages until we pointing to a page with a granule position, so the packet
get one with a granulepos or without the 'continued' flag finishing this page ('best') originated on a preceding
set. Then just use raw_seek for simplicity. */ page. Keep fetching previous pages until we get one with
a granulepos or without the 'continued' flag set. Then
result=_seek_helper(vf,best); just use raw_seek for simplicity. */
if(result<0) goto seek_error; /* Do not rewind past the beginning of link data; if we do,
it's either a bug or a broken stream */
while(1){ result=best;
result=_get_prev_page(vf,&og); while(result>vf->dataoffsets[link]){
result=_get_prev_page(vf,result,&og);
if(result<0) goto seek_error; if(result<0) goto seek_error;
if(ogg_page_serialno(&og)==vf->current_serialno && if(ogg_page_serialno(&og)==vf->current_serialno &&
(ogg_page_granulepos(&og)>-1 || (ogg_page_granulepos(&og)>-1 ||
!ogg_page_continued(&og))){ !ogg_page_continued(&og))){
return ov_raw_seek(vf,result); return ov_raw_seek(vf,result);
} }
vf->offset=result;
} }
} }
if(result<0){ if(result<0){
@ -2054,14 +2142,14 @@ long ov_read_float(OggVorbis_File *vf,float ***pcm_channels,int length,
} }
} }
extern float *vorbis_window(vorbis_dsp_state *v,int W); extern const float *vorbis_window(vorbis_dsp_state *v,int W);
static void _ov_splice(float **pcm,float **lappcm, static void _ov_splice(float **pcm,float **lappcm,
int n1, int n2, int n1, int n2,
int ch1, int ch2, int ch1, int ch2,
float *w1, float *w2){ const float *w1, const float *w2){
int i,j; int i,j;
float *w=w1; const float *w=w1;
int n=n1; int n=n1;
if(n1>n2){ if(n1>n2){
@ -2169,7 +2257,7 @@ int ov_crosslap(OggVorbis_File *vf1, OggVorbis_File *vf2){
vorbis_info *vi1,*vi2; vorbis_info *vi1,*vi2;
float **lappcm; float **lappcm;
float **pcm; float **pcm;
float *w1,*w2; const float *w1,*w2;
int n1,n2,i,ret,hs1,hs2; int n1,n2,i,ret,hs1,hs2;
if(vf1==vf2)return(0); /* degenerate case */ if(vf1==vf2)return(0); /* degenerate case */
@ -2223,7 +2311,7 @@ static int _ov_64_seek_lap(OggVorbis_File *vf,ogg_int64_t pos,
vorbis_info *vi; vorbis_info *vi;
float **lappcm; float **lappcm;
float **pcm; float **pcm;
float *w1,*w2; const float *w1,*w2;
int n1,n2,ch1,ch2,hs; int n1,n2,ch1,ch2,hs;
int i,ret; int i,ret;
@ -2284,7 +2372,7 @@ static int _ov_d_seek_lap(OggVorbis_File *vf,double pos,
vorbis_info *vi; vorbis_info *vi;
float **lappcm; float **lappcm;
float **pcm; float **pcm;
float *w1,*w2; const float *w1,*w2;
int n1,n2,ch1,ch2,hs; int n1,n2,ch1,ch2,hs;
int i,ret; int i,ret;

View File

@ -11,7 +11,7 @@
******************************************************************** ********************************************************************
function: window functions function: window functions
last mod: $Id: window.c 16227 2009-07-08 06:58:46Z xiphmont $ last mod: $Id: window.c 19028 2013-12-02 23:23:39Z tterribe $
********************************************************************/ ********************************************************************/
@ -19,6 +19,7 @@
#include <math.h> #include <math.h>
#include "os.h" #include "os.h"
#include "misc.h" #include "misc.h"
#include "window.h"
static const float vwin64[32] = { static const float vwin64[32] = {
0.0009460463F, 0.0085006468F, 0.0235352254F, 0.0458950567F, 0.0009460463F, 0.0085006468F, 0.0235352254F, 0.0458950567F,

View File

@ -11,14 +11,14 @@
******************************************************************** ********************************************************************
function: window functions function: window functions
last mod: $Id: window.h 13293 2007-07-24 00:09:47Z xiphmont $ last mod: $Id: window.h 19028 2013-12-02 23:23:39Z tterribe $
********************************************************************/ ********************************************************************/
#ifndef _V_WINDOW_ #ifndef _V_WINDOW_
#define _V_WINDOW_ #define _V_WINDOW_
extern float *_vorbis_window_get(int n); extern const float *_vorbis_window_get(int n);
extern void _vorbis_apply_window(float *d,int *winno,long *blocksizes, extern void _vorbis_apply_window(float *d,int *winno,long *blocksizes,
int lW,int W,int nW); int lW,int W,int nW);