added Thearo library

This commit is contained in:
Jacker 2015-09-30 11:21:16 +03:00
parent 2ba2795ac7
commit 4563911811
330 changed files with 151762 additions and 1 deletions

View file

@ -487,7 +487,7 @@ elseif(UNIX)
# OGG Vorbis File
set(CFLAGS "${CFLAGS} -I${CMAKE_CURRENT_LIST_DIR}/ogg/include")
set(LDFLAGS "${LDFLAGS} -L${CMAKE_CURRENT_LIST_DIR}/ogg/src/.libs")
# the above set of CFLAGS and LDFLAGS don't trigger on some systems
# ensure vorbis configure uses our bundled ogg see --with-ogg-includes & --with-ogg-libraries
add_custom_command(
@ -541,6 +541,37 @@ if(BUNDLED_FREETYPE)
set(BUNDLED_FREETYPE_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/freetype/include")
endif(BUNDLED_FREETYPE)
if(BUNDLED_THEORA)
FILE(GLOB THEORA_SRC
"${CMAKE_CURRENT_LIST_DIR}/theora/lib/*.c"
"${CMAKE_CURRENT_LIST_DIR}/theora/lib/*.h"
)
if(32BITS)
add_definitions("-DOC_X86_ASM")
if(MSVC)
FILE(GLOB THEORA_ASM_SRC
"${CMAKE_CURRENT_LIST_DIR}/theora/lib/x86_vc/*.c"
"${CMAKE_CURRENT_LIST_DIR}/theora/lib/x86_vc/*.h"
)
else()
FILE(GLOB THEORA_ASM_SRC
"${CMAKE_CURRENT_LIST_DIR}/theora/lib/x86/*.c"
"${CMAKE_CURRENT_LIST_DIR}/theora/lib/x86/*.h"
)
endif()
LIST(APPEND THEORA_SRC ${THEORA_ASM_SRC})
endif()
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_LIST_DIR}/theora/include")
add_library(bundled_theora STATIC ${THEORA_SRC})
set(THEORA_BUNDLED_LIBRARIES bundled_theora)
set(THEORA_BUNDLED_INCLUDE_DIR "${CMAKE_CURRENT_LIST_DIR}/theora/include")
endif()
#-----------------------------------------------------------------
# Build bundled JANSSON library
#-----------------------------------------------------------------

49
theora/AUTHORS Normal file
View file

@ -0,0 +1,49 @@
Monty <monty@xiph.org>
- Original VP3 port
Ralph Giles
Timothy B. Terriberry
Monty
- Ongoing development
Dan B. Miller
- Pre alpha3 development
Rudolf Marek
Wim Tayman
Dan Lenski
Nils Pipenbrinck
Monty
- MMX optimized functions
Aaron Colwell
Thomas Vander Stichele
Jan Gerber
Conrad Parker
Cristian Adam
Sebastian Pippin
Simon Hosie
- Bug fixes, enhancements, build systems.
Mauricio Piacentini
- Original win32 projects and example ports
- VP3->Theora transcoder
Silvia Pfeiffer
- Figures for the spec
Michael Smith
Andre Pang
calc
Chris Cheney
Brendan Cully
Edward Hervey
Adam Moss
Colin Ward
Jeremy C. Reed
Arc Riley
Rodolphe Ortalo
- Bug fixes
and other Xiph.org contributors

231
theora/CHANGES Normal file
View file

@ -0,0 +1,231 @@
libtheora 1.1.1 (2009 October 1)
- Fix problems with MSVC inline assembly
- Add the missing encoder_disabled.c to the distribution
- build updates: autogen.sh should work better after switching systems
and the MSVC project now defaults to the dynamic runtime library
- Namespace some variables to avoid conflicts on wince.
libtheora 1.1.0 (2009 September 24)
- Fix various small issues with the example and telemetry code
- Fix handing a zero-byte packet as the first frame
- Documentation cleanup
- Two minor build fixes
libtheora 1.1beta3 (2009 August 22)
- Rate control fixes to smooth quality
- MSVC build now exports all of the 1.0 api
- Assorted small bug fixes
libtheora 1.1beta2 (2009 August 12)
- Fix a rate control problem with difficult input
- Build fixes for OpenBSD and Apple Xcode
- Examples now all use the 1.0 api
- TH_ENCCTL_SET_SPLEVEL works again
- Various bug fixes and source tree rearrangement
libtheora 1.1beta1 (2009 August 5)
- Support for two-pass encoding
- Performance optimization of both encoder and decoder
- Encoder supports dynamic adjustment of quality and
bitrate targets
- Encoder is generally more configurable, and all
rate control modes perform better
- Encoder now accepts 4:2:2 and 4:4:4 chroma sampling
- Decoder telemetry output shows quantization choice
and a breakdown of bitrate usage in the frame
- MSVC assembly optimizations up to date and functional
libtheora 1.1alpha2 (2009 May 26)
- Reduce lambda for small quantizers.
- New encoder fDCT does better on smooth gradients
- Use SATD for mode decisions (1-2% bitrate reduction)
- Assembly rewrite for new features and general speed up
- Share code between the encoder and decoder for performance
- Fix 4:2:2 decoding and telemetry
- MSVC project files updated, but assembly is disabled.
- New configure option --disable-spec to work around toolchain
detection failures.
- Limit symbol exports on MacOS X.
- Port remaining unit tests from the 1.0 release.
libtheora 1.1alpha1 (2009 March 27)
- Encoder rewrite with much improved vbr quality/bitrate and
better tracking of the target rate in cbr mode.
- MSVC project files do not work in this release.
libtheora 1.0 (2008 November 3)
- Merge x86 assembly for forward DCT from Thusnelda branch.
- Update 32 bit MMX with loop filter fix.
- Check for an uninitialized state before dereferencing in propagating
decode calls.
- Remove all TH_DEBUG statements.
- Rename the bitpacker source files copied from libogg to avoid
confusing simple build systems using both libraries.
- Declare bitfield entries to be explicitly signed for Solaris cc.
- Set quantization parameters to default values when an empty buffer is
passed with TH_ENCCTL_SET_QUANT_PARAMS.
- Split encoder and decoder tests depending on configure settings.
- Return lstylex.sty to the distribution.
- Disable inline assembly on gcc versions prior to 3.1.
- Remove extern references for OC_*_QUANT_MIN.
- Make various data tables static const so they can be read-only.
- Remove ENCCTL codes from the old encoder API.
- Implement TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE ctl.
- Fix segfault when exactly one of the width or height is not a multiple
of 16, but the other is.
- Compute the correct vertical offset for chroma.
- cpuid assembly fix for MSVC.
- Add VS2008 project files.
- Build updates for 64-bit platforms, Mingw32, VS and XCode.
- Do not clobber the cropping rectangle.
- Declare ourselves 1.0final to pkg-config to sort after beta releases.
- Fix the scons build to include asm in libtheoradec/enc.
libtheora 1.0beta3 (2008 April 16)
- Build new libtheoradec and libtheoraenc libraries
supporting the new API from theora-exp. This API should
not be considered stable yet.
- Change granule_frame() to return an index as documented.
This is a change of behaviour from 1.0beta1.
- Document that granule_time() returns the end of the
presentation interval.
- Use a custom copy of the libogg bitpacker in the decoder
to avoid function call overhead.
- MMX code improved and ported to MSVC.
- Fix a problem with the MMX code on SELinux.
- Fix a problem with decoder quantizer initialization.
- Fix a page queue problem with png2theora.
- Improved robustness.
- Updated VS2005 project files.
- Dropped build support for Microsoft VS2003.
- Dropped build support for the unreleased libogg2.
- Added the specification to the autotools build.
- Specification corrections.
libtheora 1.0beta2 (2007 October 12)
- Fix a crash bug on char-is-unsigned architectures (PowerPC)
- Fix a buffer sizing issue that caused rare encoder crashes
- Fix a buffer alignment issue
- Build fixes for MingW32, MSVC
- Improved format documentation.
libtheora 1.0beta1 (2007 September 22)
- Granulepos scheme modified to match other codecs. This bumps
the bitstream revision to 3.2.1. Bitstreams marked 3.2.0 are
handled correctly by this decoder. Older decoders will show
a one frame sync error in the less noticable direction.
libtheora 1.0alpha8 (2007 September 18)
- Switch to new spec compliant decoder from theora-exp branch.
Written by Dr. Timothy Terriberry.
- Add support to the encoder for using quantization settings
provided by the application.
- more assembly optimizations
libtheora 1.0alpha7 (2006 June 20)
- Enable mmx assembly by default
- Avoid some relocations that caused problems on SELinux
- Other build fixes
- time testing mode (-f) for the dump_video example
libtheora 1.0alpha6 (2006 May 30)
* Merge theora-mmx simd acceleration (x86_32 and x86_64)
* Major RTP payload specification update
* Minor format specification updates
* Fix some spurious calls to free() instead of _ogg_free()
* Fix invalid array indexing in PixelLineSearch()
* Improve robustness against invalid input
* General warning cleanup
* The offset_y member now means what every application thought it meant
(offset from the top). This will mean some old files (those with a
non-centered image created with a buggy encoder) will display differently.
libtheora 1.0alpha5 (2005 August 20)
* Fixed bitrate management bugs that caused popping and encode
errors
* Fixed a crash problem with the theora_state internals not
being intialized properly.
* new utility function:
- theora_granule_shift()
* dump_video example now makes YUV4MPEG files by default, so
the results can be fed back to encoder_example and similar
tools. The old behavior is restored through the '-r' switch.
* ./configure now prints a summary
* simple unit test of the comment api under 'make check'
* misc code cleanup, warning and leak fixes
libtheora 1.0alpha4 (2004 December 15)
* first draft of the Theora I Format Specification
* API documentation generated from theora.h with Doxygen
* fix a double-update bug in the motion analysis
* apply the loop filter before filling motion vector border
in the reference frame
* new utility functions:
- theora_packet_isheader(),
- theora_packet_iskeyframe()
- theora_granule_frame()
* optional support for building without floating point
* optional support for building without encode support
* various build and packaging fixes
* pkg-config support
* SymbianOS build support
libtheora 1.0alpha3 (2004 March 20)
UPDATE: on 2004 July 1 the Theora I bitstream format was frozen. Files
produced by the libtheora 1.0alpha3 reference encoder will always be
decodable by the Theora I spec.
* Bitstream info header FORMAT CHANGES:
- move the granulepos shift field to maintain byte alignment longer.
- reserve 5 additional bits for subsampling and interlace flags.
* Bitstream setup header FORMAT CHANGES:
- support for a range of interpolated quant matricies.
- include the in-loop block filter coeff.
* Bitsteam data packet FORMAT CHANGES:
- Reserve a bit for per-block Q index selection.
- Flip the coded image orientation for compatibility with VP3.
This allows lossless transcoding of VP3 content, but files
encoded with earlier theora releases would play upside down.
* example VP3 lossless transcoder
* optional support for libogg2
* timing improvements in the example player
* packaging and build system updates and fixes
libtheora 1.0alpha2 (2003 June 9)
* bitstream FORMAT CHANGES:
- store the quant tables in a third setup header for
future encoder flexibility
- store the huffman tables in the third setup header
- add a field for marking the colorspace to the info header
- add crop parameters for non-multiple-of-16 frame sizes
- add a second vorbiscomment-style metadata header
* API changes to handle multiple headers with a single
theora_decode_header() call, like libvorbis
* code cleanup and minor fixes
* new dump_video code example/utility
* experimental win32 code examples
libtheora 1.0alpha1 (2002 September 25)
* First release of the theora reference implementation
* Port of the newly opened VP3 code to the Ogg container
* Rewrite of the code for portability and to use the libogg bitpacker

28
theora/COPYING Normal file
View file

@ -0,0 +1,28 @@
Copyright (C) 2002-2009 Xiph.org Foundation
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of the Xiph.org Foundation nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

18
theora/LICENSE Normal file
View file

@ -0,0 +1,18 @@
Please see the file COPYING for the copyright license for this software.
In addition to and irrespective of the copyright license associated
with this software, On2 Technologies, Inc. makes the following statement
regarding technology used in this software:
On2 represents and warrants that it shall not assert any rights
relating to infringement of On2's registered patents, nor initiate
any litigation asserting such rights, against any person who, or
entity which utilizes the On2 VP3 Codec Software, including any
use, distribution, and sale of said Software; which make changes,
modifications, and improvements in said Software; and to use,
distribute, and sell said changes as well as applications for other
fields of use.
This reference implementation is originally derived from the On2 VP3
Codec Software, and the Theora video format is essentially compatible
with the VP3 video format, consisting of a backward-compatible superset.

35
theora/Makefile.am Normal file
View file

@ -0,0 +1,35 @@
## Process this file with automake to produce Makefile.in
AUTOMAKE_OPTIONS = foreign 1.6 dist-zip dist-bzip2
if THEORA_ENABLE_EXAMPLES
EXAMPLES_DIR = examples
else
EXAMPLES_DIR =
endif
SUBDIRS = lib include doc tests m4 $(EXAMPLES_DIR)
# we include the whole debian/ dir in EXTRA_DIST because there's a problem
# with autotools and HFS+ MacOSX file systems that caused debian/Makefile.am
# to pick up on the lowercase changelog file and add ChangeLog to DIST_COMMON
# because of it, breaking make dist. This works just as well.
EXTRA_DIST = \
README CHANGES COPYING LICENSE \
autogen.sh win32 macosx symbian SConstruct \
libtheora.spec libtheora.spec.in \
theora-uninstalled.pc.in
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = theora.pc theoradec.pc theoraenc.pc
# Remove the .svn folders included in the tarball
dist-hook:
find $(distdir) -type d -name '.svn' | xargs rm -rf
debug:
$(MAKE) all CFLAGS="@DEBUG@"
profile:
$(MAKE) all CFLAGS="@PROFILE@"

597
theora/Makefile.in Normal file
View file

@ -0,0 +1,597 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# 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@
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
AMTAR = @AMTAR@
AR = @AR@
ARGZ_H = @ARGZ_H@
AS = @AS@
AWK = @AWK@
BUILDABLE_EXAMPLES = @BUILDABLE_EXAMPLES@
CAIRO_CFLAGS = @CAIRO_CFLAGS@
CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CPP = @CPP@
CXX = @CXX@
CXXCPP = @CXXCPP@
DEBUG = @DEBUG@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
F77 = @F77@
GCJ = @GCJ@
GCJFLAGS = @GCJFLAGS@
GETOPT_OBJS = @GETOPT_OBJS@
GREP = @GREP@
HAVE_BIBTEX = @HAVE_BIBTEX@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_PDFLATEX = @HAVE_PDFLATEX@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_TRANSFIG = @HAVE_TRANSFIG@
HAVE_VALGRIND = @HAVE_VALGRIND@
INCLTDL = @INCLTDL@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LIBADD_DL = @LIBADD_DL@
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
LIBADD_DLOPEN = @LIBADD_DLOPEN@
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
LIBLTDL = @LIBLTDL@
LIBM = @LIBM@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTDLDEPS = @LTDLDEPS@
LTDLINCL = @LTDLINCL@
LTDLOPEN = @LTDLOPEN@
LT_CONFIG_H = @LT_CONFIG_H@
LT_DLLOADERS = @LT_DLLOADERS@
LT_DLPREOPEN = @LT_DLPREOPEN@
MAINT = @MAINT@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OSS_LIBS = @OSS_LIBS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PKG_CONFIG = @PKG_CONFIG@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
PROFILE = @PROFILE@
RANLIB = @RANLIB@
RC = @RC@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SED = @SED@
STRIP = @STRIP@
THDEC_LIB_AGE = @THDEC_LIB_AGE@
THDEC_LIB_CURRENT = @THDEC_LIB_CURRENT@
THDEC_LIB_REVISION = @THDEC_LIB_REVISION@
THENC_LIB_AGE = @THENC_LIB_AGE@
THENC_LIB_CURRENT = @THENC_LIB_CURRENT@
THENC_LIB_REVISION = @THENC_LIB_REVISION@
THEORADEC_LDFLAGS = @THEORADEC_LDFLAGS@
THEORAENC_LDFLAGS = @THEORAENC_LDFLAGS@
THEORA_LDFLAGS = @THEORA_LDFLAGS@
TH_LIB_AGE = @TH_LIB_AGE@
TH_LIB_CURRENT = @TH_LIB_CURRENT@
TH_LIB_REVISION = @TH_LIB_REVISION@
VALGRIND_ENVIRONMENT = @VALGRIND_ENVIRONMENT@
VERSION = @VERSION@
VORBISENC_LIBS = @VORBISENC_LIBS@
VORBISFILE_LIBS = @VORBISFILE_LIBS@
VORBIS_CFLAGS = @VORBIS_CFLAGS@
VORBIS_LIBS = @VORBIS_LIBS@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
lt_ECHO = @lt_ECHO@
ltdl_LIBOBJS = @ltdl_LIBOBJS@
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
sys_symbol_underscore = @sys_symbol_underscore@
AUTOMAKE_OPTIONS = foreign 1.6 dist-zip dist-bzip2
@THEORA_ENABLE_EXAMPLES_TRUE@EXAMPLES_DIR = examples
@THEORA_ENABLE_EXAMPLES_FALSE@EXAMPLES_DIR =
SUBDIRS = lib include doc tests m4 $(EXAMPLES_DIR)
# we include the whole debian/ dir in EXTRA_DIST because there's a problem
# with autotools and HFS+ MacOSX file systems that caused debian/Makefile.am
# to pick up on the lowercase changelog file and add ChangeLog to DIST_COMMON
# because of it, breaking make dist. This works just as well.
EXTRA_DIST = \
README CHANGES COPYING LICENSE \
autogen.sh win32 macosx symbian SConstruct \
libtheora.spec libtheora.spec.in \
theora-uninstalled.pc.in
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = theora.pc theoradec.pc theoraenc.pc
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = libtheora.spec theora.pc theora-uninstalled.pc \
theoradec.pc theoradec-uninstalled.pc theoraenc.pc \
theoraenc-uninstalled.pc
DIST_SOURCES =
DATA = $(pkgconfig_DATA)
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
uninstall-info-recursive all-recursive install-data-recursive \
install-exec-recursive installdirs-recursive install-recursive \
uninstall-recursive check-recursive installcheck-recursive
DIST_COMMON = README AUTHORS COPYING Makefile.am Makefile.in aclocal.m4 \
compile config.guess config.h.in config.sub configure \
configure.ac depcomp install-sh libtheora.spec.in ltmain.sh \
missing mkinstalldirs theora-uninstalled.pc.in theora.pc.in \
theoradec-uninstalled.pc.in theoradec.pc.in \
theoraenc-uninstalled.pc.in theoraenc.pc.in
DIST_SUBDIRS = lib include doc tests m4 examples
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
.SUFFIXES:
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --foreign Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.ac
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.h: stamp-h1
@if test ! -f $@; then \
rm -f stamp-h1; \
$(MAKE) stamp-h1; \
else :; fi
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && $(AUTOHEADER)
touch $(srcdir)/config.h.in
distclean-hdr:
-rm -f config.h stamp-h1
libtheora.spec: $(top_builddir)/config.status libtheora.spec.in
cd $(top_builddir) && $(SHELL) ./config.status $@
theora.pc: $(top_builddir)/config.status theora.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
theora-uninstalled.pc: $(top_builddir)/config.status theora-uninstalled.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
theoradec.pc: $(top_builddir)/config.status theoradec.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
theoradec-uninstalled.pc: $(top_builddir)/config.status theoradec-uninstalled.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
theoraenc.pc: $(top_builddir)/config.status theoraenc.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
theoraenc-uninstalled.pc: $(top_builddir)/config.status theoraenc-uninstalled.pc.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
pkgconfigDATA_INSTALL = $(INSTALL_DATA)
install-pkgconfigDATA: $(pkgconfig_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
@list='$(pkgconfig_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(pkgconfigDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f"; \
$(pkgconfigDATA_INSTALL) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f; \
done
uninstall-pkgconfigDATA:
@$(NORMAL_UNINSTALL)
@list='$(pkgconfig_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(pkgconfigdir)/$$f"; \
rm -f $(DESTDIR)$(pkgconfigdir)/$$f; \
done
# 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):
@set fnord $$MAKEFLAGS; amf=$$2; \
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) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
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) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ETAGS = etags
ETAGSFLAGS =
tags: TAGS
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; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
fi; \
done; \
list='$(SOURCES) $(HEADERS) config.h.in $(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; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_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
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .
distdir = $(PACKAGE)-$(VERSION)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
GZIP_ENV = --best
distcleancheck_listfiles = find . -type f -print
distdir: $(DISTFILES)
$(am__remove_distdir)
mkdir $(distdir)
$(mkinstalldirs) $(distdir)/. $(distdir)/doc
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
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 $(distdir)/$$subdir \
|| exit 1; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" \
distdir=../$(distdir)/$$subdir \
distdir) \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="${top_distdir}" distdir="$(distdir)" \
dist-hook
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist-gzip: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
dist-bzip2: distdir
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
$(am__remove_distdir)
dist-zip: distdir
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
dist dist-all: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
-rm -f $(distdir).zip
zip -rq $(distdir).zip $(distdir)
$(am__remove_distdir)
# This target untars the dist file and tries a VPATH configuration. Then
# it guarantees that the distribution is self-contained by making another
# tarfile.
distcheck: dist
$(am__remove_distdir)
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
chmod a-w $(distdir)
dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \
&& cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
find $$dc_install_base -type f -print ; \
exit 1; } >&2 ) \
&& $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
&& rm -f $(distdir).tar.gz \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
$(am__remove_distdir)
@echo "$(distdir).tar.gz is ready for distribution" | \
sed 'h;s/./=/g;p;x;p;x'
distcleancheck: distclean
if test '$(srcdir)' = . ; then \
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
exit 1 ; \
fi
test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|| { echo "ERROR: files left after distclean:" ; \
$(distcleancheck_listfiles) ; \
exit 1; } >&2
check-am: all-am
check: check-recursive
all-am: Makefile $(DATA) config.h
installdirs: installdirs-recursive
installdirs-am:
$(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
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_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(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 $(am__CONFIG_DISTCLEAN_FILES)
distclean-am: clean-am distclean-generic distclean-hdr distclean-libtool \
distclean-tags
dvi: dvi-recursive
dvi-am:
info: info-recursive
info-am:
install-data-am: install-pkgconfigDATA
install-exec-am:
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf autom4te.cache
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
uninstall-am: uninstall-info-am uninstall-pkgconfigDATA
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
clean-generic clean-libtool clean-recursive dist dist-all \
dist-bzip2 dist-gzip dist-zip distcheck distclean \
distclean-generic distclean-hdr distclean-libtool \
distclean-recursive distclean-tags distcleancheck distdir dvi \
dvi-am dvi-recursive info info-am info-recursive install \
install-am install-data install-data-am install-data-recursive \
install-exec install-exec-am install-exec-recursive \
install-info install-info-am install-info-recursive install-man \
install-pkgconfigDATA install-recursive install-strip \
installcheck installcheck-am installdirs installdirs-am \
installdirs-recursive maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-libtool mostlyclean-recursive tags tags-recursive \
uninstall uninstall-am uninstall-info-am \
uninstall-info-recursive uninstall-pkgconfigDATA \
uninstall-recursive
# Remove the .svn folders included in the tarball
dist-hook:
find $(distdir) -type d -name '.svn' | xargs rm -rf
debug:
$(MAKE) all CFLAGS="@DEBUG@"
profile:
$(MAKE) all CFLAGS="@PROFILE@"
# 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:

152
theora/README Normal file
View file

@ -0,0 +1,152 @@
-------------------------------------------------------------------------
The Xiph.org Foundation's libtheora 1.1
-------------------------------------------------------------------------
*** What is Theora?
Theora is Xiph.Org's first publicly released video codec, intended
for use within the Foundation's Ogg multimedia streaming system.
Theora is derived directly from On2's VP3 codec, adds new features
while allow it a longer useful lifetime as an competitive codec.
The 1.0 release decoder supported all the new features, but the
encoder is nearly identical to the VP3 code.
The 1.1 release features a completely rewritten encoder, offering
better performance and compression, and making more complete use
of the format's feature set. Files produced by both encoders can
be decoded by either release.
*** Where is Theora?
Theora's main site is www.theora.org. Theora and related libraries
can be gotten from www.theora.org or the main Xiph.Org site at
www.xiph.org. Development source is kept in an open subversion
repository, see http://theora.org/svn/ for instructions.
-------------------------------------------------------------------------
Getting started with the code
-------------------------------------------------------------------------
*** What do I need to build the source?
Requirements summary:
For libtheora:
libogg 1.1 or newer.
For example encoder:
as above,
libvorbis and libvorbisenc 1.0.1 or newer.
For creating a source distribution package:
as above,
Doxygen to build the API documentation,
pdflatex and fig2dev to build the format specification
(transfig package in Ubuntu).
For the player only:
as above,
SDL (Simple Direct media Layer) libraries and headers,
OSS audio driver and development headers.
The provided build system is the GNU automake/autoconf system, and
the main library, libtheora, should already build smoothly on any
system. Failure of libtheora to build on a GNU-enabled system is
considered a bug; please report problems to theora-dev@xiph.org.
Windows build support is included in the win32 directory.
Project files for Apple XCode are included in the macosx directory.
There is also an experimental scons build.
*** How do I use the sample encoder?
The sample encoder takes raw video in YUV4MPEG2 format, as used by
lavtools, mjpeg-tools and other packages. The encoder expects audio,
if any, in a separate wave WAV file. Try 'encoder_example -h' for a
complete list of options.
An easy way to get raw video and audio files is to use MPlayer as an
export utility. The options " -ao pcm -vo yuv4mpeg " will export a
wav file named audiodump.wav and a YUV video file in the correct
format for encoder_example as stream.yuv. Be careful when exporting
video alone; MPlayer may drop frames to 'keep up' with the audio
timer. The example encoder can't properly synchronize input audio and
video file that aren't in sync to begin with.
The encoder will also take video or audio on stdin if '-' is specified
as the input file name.
There is also a 'png2theora' example which accepts a set of image
files in that format.
*** How do I use the sample player?
The sample player takes an Ogg file on standard in; the file may be
audio alone, video alone or video with audio.
*** What other tools are available?
The programs in the examples directory are intended as tutorial source
for developers using the library. As such they sacrifice features and
robustness in the interests of comprehension and should not be
considered serious applications.
If you're wanting to just use theora, consider the programs linked
from http://www.theora.org/. There is playback support in a number
of common free players, and plugins for major media frameworks.
Jan Gerber's ffmpeg2theora is an excellent encoding front end.
-------------------------------------------------------------------------
Troubleshooting the build process
-------------------------------------------------------------------------
*** Compile error, such as:
encoder_internal.h:664: parse error before `ogg_uint16_t'
This means you have version of libogg prior to 1.1. A *complete* new Ogg
install, libs and headers is needed.
Also be sure that there aren't multiple copies of Ogg installed in
/usr and /usr/local; an older one might be first on the search path
for libs and headers.
*** Link error, such as:
undefined reference to `oggpackB_stream'
See above; you need libogg 1.1 or later.
*** Link error, such as:
undefined reference to `vorbis_granule_time'
You need libvorbis and libvorbisenc from the 1.0.1 release or later.
*** Link error, such as:
/usr/lib/libSDL.a(SDL_esdaudio.lo): In function `ESD_OpenAudio':
SDL_esdaudio.lo(.text+0x25d): undefined reference to `esd_play_stream'
Be sure to use an SDL that's built to work with OSS. If you use an
SDL that is also built with ESD and/or ALSA support, it will try to
suck in all those extra libraries at link time too. That will only
work if the extra libraries are also installed.
*** Link warning, such as:
libtool: link: warning: library `/usr/lib/libogg.la' was moved.
libtool: link: warning: library `/usr/lib/libogg.la' was moved.
Re-run theora/autogen.sh after an Ogg or Vorbis rebuild/reinstall

225
theora/SConstruct Normal file
View file

@ -0,0 +1,225 @@
# see http://www.scons.org if you do not have this tool
from os.path import join
import SCons
# TODO: should use lamda and map to work on python 1.5
def path(prefix, list): return [join(prefix, x) for x in list]
encoder_sources = """
apiwrapper.c
fragment.c
idct.c
internal.c
state.c
quant.c
analyze.c
encfrag.c
encapiwrapper.c
encinfo.c
encode.c
enquant.c
fdct.c
huffenc.c
mathops.c
mcenc.c
rate.c
tokenize.c
"""
decoder_sources = """
apiwrapper.c
bitpack.c
decapiwrapper.c
decinfo.c
decode.c
dequant.c
fragment.c
huffdec.c
idct.c
info.c
internal.c
quant.c
state.c
"""
env = Environment()
if env['CC'] == 'gcc':
env.Append(CCFLAGS=["-g", "-O2", "-Wall", "-Wno-parentheses"])
def CheckPKGConfig(context, version):
context.Message( 'Checking for pkg-config... ' )
ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
context.Result( ret )
return ret
def CheckPKG(context, name):
context.Message( 'Checking for %s... ' % name )
ret = context.TryAction('pkg-config --exists %s' % name)[0]
context.Result( ret )
return ret
def CheckSDL(context):
name = "sdl-config"
context.Message( 'Checking for %s... ' % name )
ret = SCons.Util.WhereIs('sdl-config')
context.Result( ret )
return ret
# check for appropriate inline asm support
host_x86_32_test = """
int main(int argc, char **argv) {
#if !defined(__i386__)
#error not an x86 host: preprocessor macro __i386__ not defined
#endif
return 0;
}
"""
def CheckHost_x86_32(context):
context.Message('Checking for an x86 host...')
result = context.TryCompile(host_x86_32_test, '.c')
context.Result(result)
return result
host_x86_64_test = """
int main(int argc, char **argv) {
#if !defined(__x86_64__)
#error not an x86_64 host: preprocessor macro __x86_64__ not defined
#endif
return 0;
}
"""
def CheckHost_x86_64(context):
context.Message('Checking for an x86_64 host...')
result = context.TryCompile(host_x86_64_test, '.c')
context.Result(result)
return result
conf = Configure(env, custom_tests = {
'CheckPKGConfig' : CheckPKGConfig,
'CheckPKG' : CheckPKG,
'CheckSDL' : CheckSDL,
'CheckHost_x86_32' : CheckHost_x86_32,
'CheckHost_x86_64' : CheckHost_x86_64,
})
if not conf.CheckPKGConfig('0.15.0'):
print 'pkg-config >= 0.15.0 not found.'
Exit(1)
if not conf.CheckPKG('ogg'):
print 'libogg not found.'
Exit(1)
if conf.CheckPKG('vorbis vorbisenc'):
have_vorbis=True
else:
have_vorbis=False
if conf.CheckPKG('libpng'):
have_libpng=True
else:
have_libpng=False
build_player_example=True
if not conf.CheckHeader('sys/soundcard.h'):
build_player_example=False
if build_player_example and not conf.CheckSDL():
build_player_example=False
if conf.CheckHost_x86_32():
env.Append(CPPDEFINES='OC_X86_ASM')
decoder_sources += """
x86/mmxidct.c
x86/mmxfrag.c
x86/mmxstate.c
x86/x86state.c
"""
encoder_sources += """
x86/mmxencfrag.c
x86/mmxfdct.c
x86/x86enc.c
x86/mmxfrag.c
x86/mmxidct.c
x86/mmxstate.c
x86/x86state.c
"""
elif conf.CheckHost_x86_64():
env.Append(CPPDEFINES=['OC_X86_ASM', 'OC_X86_64_ASM'])
decoder_sources += """
x86/mmxidct.c
x86/mmxfrag.c
x86/mmxstate.c
x86/x86state.c
"""
encoder_sources += """
x86/mmxencfrag.c
x86/mmxfdct.c
x86/x86enc.c
x86/sse2fdct.c
x86/mmxfrag.c
x86/mmxidct.c
x86/mmxstate.c
x86/x86state.c
"""
env = conf.Finish()
env.Append(CPPPATH=['include'])
env.ParseConfig('pkg-config --cflags --libs ogg')
libtheoradec_Sources = Split(decoder_sources)
libtheoraenc_Sources = Split(encoder_sources)
libtheoradec_a = env.Library('lib/theoradec',
path('lib', libtheoradec_Sources))
libtheoradec_so = env.SharedLibrary('lib/theoradec',
path('lib', libtheoradec_Sources))
libtheoraenc_a = env.Library('lib/theoraenc',
path('lib', libtheoraenc_Sources))
libtheoraenc_so = env.SharedLibrary('lib/theoraenc',
path('lib', libtheoraenc_Sources) + [libtheoradec_so])
#installing
prefix='/usr'
lib_dir = prefix + '/lib'
env.Alias('install', prefix)
env.Install(lib_dir, [libtheoradec_a, libtheoradec_so])
env.Install(lib_dir, [libtheoraenc_a, libtheoraenc_so])
# example programs
dump_video = env.Clone()
dump_video_Sources = Split("""dump_video.c ../lib/libtheoradec.a""")
dump_video.Program('examples/dump_video', path('examples', dump_video_Sources))
dump_psnr = env.Clone()
dump_psnr.Append(LIBS='m')
dump_psnr_Sources = Split("""dump_psnr.c ../lib/libtheoradec.a""")
dump_psnr.Program('examples/dump_psnr', path('examples', dump_psnr_Sources))
if have_vorbis:
encex = dump_video.Clone()
encex.ParseConfig('pkg-config --cflags --libs vorbisenc vorbis')
encex_Sources = Split("""
encoder_example.c
../lib/libtheoraenc.a
../lib/libtheoradec.a
""")
encex.Program('examples/encoder_example', path('examples', encex_Sources))
if build_player_example:
plyex = encex.Clone()
plyex_Sources = Split("""
player_example.c
../lib/libtheoradec.a
""")
plyex.ParseConfig('sdl-config --cflags --libs')
plyex.Program('examples/player_example', path('examples', plyex_Sources))
png2theora = env.Clone()
png2theora_Sources = Split("""png2theora.c
../lib/libtheoraenc.a
../lib/libtheoradec.a
""")
png2theora.ParseConfig('pkg-config --cflags --libs libpng')
png2theora.Program('examples/png2theora', path('examples', png2theora_Sources))

10370
theora/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load diff

129
theora/autogen.sh Normal file
View file

@ -0,0 +1,129 @@
#!/bin/sh
# Run this to set up the build system: configure, makefiles, etc.
# (based on the version in enlightenment's cvs)
package="theora"
ACLOCAL_FLAGS="-I m4"
olddir=`pwd`
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
cd "$srcdir"
DIE=0
echo "checking for autoconf... "
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "You must have autoconf installed to compile $package."
echo "Download the appropriate package for your distribution,"
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
DIE=1
}
VERSIONGREP="sed -e s/.*[^0-9\.]\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/"
VERSIONMKMAJ="sed -e s/\([0-9][0-9]*\)[^0-9].*/\\1/"
VERSIONMKMIN="sed -e s/.*[0-9][0-9]*\.//"
# do we need automake?
if test -r Makefile.am; then
AM_OPTIONS=`fgrep AUTOMAKE_OPTIONS Makefile.am`
AM_NEEDED=`echo $AM_OPTIONS | $VERSIONGREP`
if test x"$AM_NEEDED" = "x$AM_OPTIONS"; then
AM_NEEDED=""
fi
if test -z $AM_NEEDED; then
echo -n "checking for automake... "
AUTOMAKE=automake
ACLOCAL=aclocal
if ($AUTOMAKE --version < /dev/null > /dev/null 2>&1); then
echo "yes"
else
echo "no"
AUTOMAKE=
fi
else
echo -n "checking for automake $AM_NEEDED or later... "
majneeded=`echo $AM_NEEDED | $VERSIONMKMAJ`
minneeded=`echo $AM_NEEDED | $VERSIONMKMIN`
for am in automake-$AM_NEEDED automake$AM_NEEDED \
automake automake-1.7 automake-1.8 automake-1.9 automake-1.10; do
($am --version < /dev/null > /dev/null 2>&1) || continue
ver=`$am --version < /dev/null | head -n 1 | $VERSIONGREP`
maj=`echo $ver | $VERSIONMKMAJ`
min=`echo $ver | $VERSIONMKMIN`
if test $maj -eq $majneeded -a $min -ge $minneeded; then
AUTOMAKE=$am
echo $AUTOMAKE
break
fi
done
test -z $AUTOMAKE && echo "no"
echo -n "checking for aclocal $AM_NEEDED or later... "
for ac in aclocal-$AM_NEEDED aclocal$AM_NEEDED \
aclocal aclocal-1.7 aclocal-1.8 aclocal-1.9 aclocal-1.10; do
($ac --version < /dev/null > /dev/null 2>&1) || continue
ver=`$ac --version < /dev/null | head -n 1 | $VERSIONGREP`
maj=`echo $ver | $VERSIONMKMAJ`
min=`echo $ver | $VERSIONMKMIN`
if test $maj -eq $majneeded -a $min -ge $minneeded; then
ACLOCAL=$ac
echo $ACLOCAL
break
fi
done
test -z $ACLOCAL && echo "no"
fi
test -z $AUTOMAKE || test -z $ACLOCAL && {
echo
echo "You must have automake installed to compile $package."
echo "Download the appropriate package for your distribution,"
echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
exit 1
}
fi
echo -n "checking for libtool... "
for LIBTOOLIZE in libtoolize glibtoolize nope; do
($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 && break
done
if test x$LIBTOOLIZE = xnope; then
echo "nope."
LIBTOOLIZE=libtoolize
else
echo $LIBTOOLIZE
fi
($LIBTOOLIZE --version) < /dev/null > /dev/null 2>&1 || {
echo
echo "You must have libtool installed to compile $package."
echo "Download the appropriate package for your system,"
echo "or get the source from one of the GNU ftp sites"
echo "listed in http://www.gnu.org/order/ftp.html"
DIE=1
}
if test "$DIE" -eq 1; then
exit 1
fi
if test -z "$*"; then
echo "I am going to run ./configure with no arguments - if you wish "
echo "to pass any to it, please specify them on the $0 command line."
fi
echo "Generating configuration files for $package, please wait...."
echo " $ACLOCAL $ACLOCAL_FLAGS"
$ACLOCAL $ACLOCAL_FLAGS || exit 1
echo " $LIBTOOLIZE --automake --force"
$LIBTOOLIZE --automake --force || exit 1
echo " autoheader"
autoheader || exit 1
echo " $AUTOMAKE --add-missing $AUTOMAKE_FLAGS"
$AUTOMAKE --add-missing $AUTOMAKE_FLAGS || exit 1
echo " autoconf"
autoconf || exit 1
cd $olddir
$srcdir/configure --enable-maintainer-mode "$@" && echo

99
theora/compile Normal file
View file

@ -0,0 +1,99 @@
#! /bin/sh
# Wrapper for compilers which do not understand `-c -o'.
# Copyright 1999, 2000 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Usage:
# compile PROGRAM [ARGS]...
# `-o FOO.o' is removed from the args passed to the actual compile.
prog=$1
shift
ofile=
cfile=
args=
while test $# -gt 0; do
case "$1" in
-o)
# configure might choose to run compile as `compile cc -o foo foo.c'.
# So we do something ugly here.
ofile=$2
shift
case "$ofile" in
*.o | *.obj)
;;
*)
args="$args -o $ofile"
ofile=
;;
esac
;;
*.c)
cfile=$1
args="$args $1"
;;
*)
args="$args $1"
;;
esac
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no `-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# `.c' file was seen then we are probably linking. That is also
# ok.
exec "$prog" $args
fi
# Name of file we expect compiler to create.
cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
# Create the lock directory.
# Note: use `[/.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
while true; do
if mkdir $lockdir > /dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir $lockdir; exit 1" 1 2 15
# Run the compile.
"$prog" $args
status=$?
if test -f "$cofile"; then
mv "$cofile" "$ofile"
fi
rmdir $lockdir
exit $status

1354
theora/config.guess vendored Normal file

File diff suppressed because it is too large Load diff

86
theora/config.h.in Normal file
View file

@ -0,0 +1,86 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* libcairo is available for visual debugging output */
#undef HAVE_CAIRO
/* Define to 1 if you have the <dlfcn.h> header file. */
#undef HAVE_DLFCN_H
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the <machine/soundcard.h> header file. */
#undef HAVE_MACHINE_SOUNDCARD_H
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the <soundcard.h> header file. */
#undef HAVE_SOUNDCARD_H
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/soundcard.h> header file. */
#undef HAVE_SYS_SOUNDCARD_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#undef LT_OBJDIR
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
/* make use of x86_64 asm optimization */
#undef OC_X86_64_ASM
/* make use of x86 asm optimization */
#undef OC_X86_ASM
/* Name of package */
#undef PACKAGE
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define to exclude encode support from the build */
#undef THEORA_DISABLE_ENCODE
/* Define to exclude floating point code from the build */
#undef THEORA_DISABLE_FLOAT
/* Version number of package */
#undef VERSION

1460
theora/config.sub vendored Normal file

File diff suppressed because it is too large Load diff

16495
theora/configure vendored Normal file

File diff suppressed because it is too large Load diff

516
theora/configure.ac Normal file
View file

@ -0,0 +1,516 @@
dnl Process this file with autoconf to produce a configure script
dnl ------------------------------------------------
dnl Initialization and Versioning
dnl ------------------------------------------------
AC_INIT(libtheora,[1.1.1])
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
AM_CONFIG_HEADER([config.h])
AC_CONFIG_SRCDIR([lib/fdct.c])
AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE
dnl Library versioning
dnl CURRENT, REVISION, AGE
dnl - library source changed -> increment REVISION
dnl - interfaces added/removed/changed -> increment CURRENT, REVISION = 0
dnl - interfaces added -> increment AGE
dnl - interfaces removed -> AGE = 0
TH_LIB_CURRENT=3
TH_LIB_REVISION=10
TH_LIB_AGE=3
AC_SUBST(TH_LIB_CURRENT)
AC_SUBST(TH_LIB_REVISION)
AC_SUBST(TH_LIB_AGE)
THDEC_LIB_CURRENT=2
THDEC_LIB_REVISION=4
THDEC_LIB_AGE=1
AC_SUBST(THDEC_LIB_CURRENT)
AC_SUBST(THDEC_LIB_REVISION)
AC_SUBST(THDEC_LIB_AGE)
THENC_LIB_CURRENT=2
THENC_LIB_REVISION=2
THENC_LIB_AGE=1
AC_SUBST(THENC_LIB_CURRENT)
AC_SUBST(THENC_LIB_REVISION)
AC_SUBST(THENC_LIB_AGE)
dnl Extra linker options (for version script)
THEORA_LDFLAGS=""
dnl --------------------------------------------------
dnl Check for programs
dnl --------------------------------------------------
dnl save $CFLAGS since AC_PROG_CC likes to insert "-g -O2"
dnl if $CFLAGS is blank
cflags_save="$CFLAGS"
AC_PROG_CC
AC_PROG_CPP
CFLAGS="$cflags_save"
AM_PROG_CC_C_O
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
dnl Add parameters for aclocal
AC_SUBST(ACLOCAL_AMFLAGS, "-I m4")
dnl Check for doxygen
AC_CHECK_PROG(HAVE_DOXYGEN, doxygen, true, false)
AM_CONDITIONAL(HAVE_DOXYGEN,$HAVE_DOXYGEN)
if test $HAVE_DOXYGEN = "false"; then
AC_MSG_WARN([*** doxygen not found, API documentation will not be built])
fi
dnl Check for tools used to build the format specification
BUILD_SPEC="false"
ac_build_spec=yes
AC_ARG_ENABLE(spec,
[ --disable-spec do not build spec ],
[
if test "x$enableval" = "xno"; then
ac_build_spec=$enableval
fi
], [
ac_build_spec=yes
] )
if test "x$ac_build_spec" = "xyes"; then
AC_CHECK_PROG(HAVE_PDFLATEX, pdflatex, yes)
AC_CHECK_PROG(HAVE_BIBTEX, bibtex, yes)
AC_CHECK_PROG(HAVE_TRANSFIG, fig2dev, yes)
if test -r doc/spec/spec.tex; then
if test "x$HAVE_PDFLATEX" = "xyes"; then
if test "x$HAVE_BIBTEX" = "xyes"; then
if test "x$HAVE_TRANSFIG" = "xyes"; then
tex_pkg_list=`fgrep usepackage doc/spec/spec.tex | grep \{ | grep -v ltablex`
tex_pkg_ok="yes"
for pkg_line in $tex_pkg_list; do
pkg_name=`echo $pkg_line | sed -e 's/.*{\(.*\)}.*/\1/'`
AC_MSG_CHECKING([for Tex package $pkg_name])
cat >conftest.tex <<_ACEOF
\\documentclass{book}
$pkg_line
\\begin{document}
Hello World.
\\end{document}
_ACEOF
if pdflatex -interaction batchmode -halt-on-error conftest < /dev/null > /dev/null 2>&1; then
AC_MSG_RESULT([ok])
else
tex_pkg_ok="no"
AC_MSG_RESULT([no])
fi
done
if test -w conftest.tex; then rm conftest.tex; fi
if test -w conftest.tex; then rm conftest.aux; fi
if test -w conftest.pdf; then rm conftest.pdf; fi
if test "x$tex_pkg_ok" = "xyes"; then
BUILD_SPEC="true"
fi
fi
fi
fi
fi
fi
AM_CONDITIONAL(BUILD_SPEC, $BUILD_SPEC)
if test $BUILD_SPEC = "false"; then
AC_MSG_WARN([*** Format Specification will not built.])
fi
dnl Check for valgrind
VALGRIND_ENVIRONMENT=""
ac_enable_valgrind=no
AC_ARG_ENABLE(valgrind-testing,
[ --enable-valgrind-testing enable running of tests inside Valgrind ], [ ac_enable_valgrind=yes ], [ ac_enable_valgrind=no] )
if test "x${ac_enable_valgrind}" = xyes ; then
if test "x${enable_shared}" = xyes ; then
VALGRIND_ENVIRONMENT="libtool --mode=execute "
fi
AC_CHECK_PROG(HAVE_VALGRIND, valgrind, yes, no)
if test "x$HAVE_VALGRIND" = xyes ; then
VALGRIND_ENVIRONMENT="$VALGRIND_ENVIRONMENT valgrind -q --leak-check=yes --show-reachable=yes --num-callers=100"
AC_SUBST(VALGRIND_ENVIRONMENT)
TESTS_INFO="Type 'make check' to run test suite. Tests will be run under:
${VALGRIND_ENVIRONMENT}"
else
TESTS_INFO="Type 'make check' to run test suite (Valgrind not found)"
fi
else
TESTS_INFO="Type 'make check' to run test suite (Valgrind testing not enabled)"
fi
dnl --------------------------------------------------
dnl Set build flags based on environment
dnl --------------------------------------------------
dnl Set some target options
cflags_save="$CFLAGS"
if test -z "$GCC"; then
case $host in
*)
DEBUG="-g -DDEBUG"
CFLAGS="-O"
PROFILE="-g -p -DDEBUG" ;;
esac
else
case $host in
*)
DEBUG="-g -Wall -Wno-parentheses -DDEBUG -D__NO_MATH_INLINES"
CFLAGS="-Wall -Wno-parentheses -O3 -fforce-addr -fomit-frame-pointer -finline-functions -funroll-loops"
PROFILE="-Wall -Wno-parentheses -pg -g -O3 -fno-inline-functions -DDEBUG";;
esac
fi
CFLAGS="$CFLAGS $cflags_save"
cpu_x86_64=no
cpu_x86_32=no
AC_ARG_ENABLE(asm,
[ --disable-asm disable assembly optimizations ],
[ ac_enable_asm=$enableval ], [ ac_enable_asm=yes] )
if test "x${ac_enable_asm}" = xyes; then
cpu_optimization="no optimization for your platform, please send a patch"
case $target_cpu in
i[[3456]]86)
cpu_x86_32=yes
cpu_optimization="32 bit x86"
AC_DEFINE([OC_X86_ASM], [], [make use of x86 asm optimization])
if test "x$target_vendor" = "xapple"; then
THEORA_LDFLAGS="$THEORA_LDFLAGS -Wl,-read_only_relocs,suppress"
fi
;;
x86_64)
cpu_x86_64=yes
cpu_optimization="64 bit x86"
AC_DEFINE([OC_X86_ASM], [], [make use of x86 asm optimization])
AC_DEFINE([OC_X86_64_ASM], [], [make use of x86_64 asm optimization])
;;
esac
else
cpu_optimization="disabled"
fi
AM_CONDITIONAL([CPU_x86_64], [test x$cpu_x86_64 = xyes])
AM_CONDITIONAL([CPU_x86_32], [test x$cpu_x86_32 = xyes])
# Test whenever ld supports -version-script
AC_PROG_LD
AC_PROG_LD_GNU
AC_MSG_CHECKING([how to control symbol export])
THDEC_VERSION_ARG=""
THENC_VERSION_ARG=""
TH_VERSION_ARG=""
if test "x$lt_cv_prog_gnu_ld" = "xyes"; then
case "$target_os" in
*mingw*)
THEORA_LDFLAGS="$THEORA_LDFLAGS -no-undefined"
THDEC_VERSION_ARG="-export-symbols \$(top_srcdir)/win32/xmingw32/libtheoradec-all.def"
THENC_VERSION_ARG="-export-symbols \$(top_srcdir)/win32/xmingw32/libtheoraenc-all.def"
THENC_VERSION_ARG="$THENC_VERSION_ARG -ltheoradec"
THC_VERSION_ARG="-export-symbols \$(top_srcdir)/win32/libtheora.def"
AC_MSG_RESULT([-export-symbols])
;;
linux* | solaris* )
THDEC_VERSION_ARG='-Wl,--version-script=$(srcdir)/Version_script-dec'
THENC_VERSION_ARG='-Wl,--version-script=$(srcdir)/Version_script-enc'
TH_VERSION_ARG='-Wl,--version-script=$(srcdir)/Version_script'
AC_MSG_RESULT([--version-script])
;;
*)
# build without versioning
AC_MSG_RESULT([no])
;;
esac
else
case "$target_os" in
darwin*)
THDEC_VERSION_ARG='-Wl,-exported_symbols_list,$(srcdir)/theoradec.exp'
THENC_VERSION_ARG='-Wl,-exported_symbols_list,$(srcdir)/theoraenc.exp'
TH_VERSION_ARG='-Wl,-exported_symbols_list,$(srcdir)/theora.exp'
AC_MSG_RESULT([-exported_symbols_list])
;;
*)
# build without versioning
AC_MSG_RESULT([no])
;;
esac
fi
THEORADEC_LDFLAGS="$THEORA_LDFLAGS $THDEC_VERSION_ARG"
THEORAENC_LDFLAGS="$THEORA_LDFLAGS $THENC_VERSION_ARG"
THEORA_LDFLAGS="$THEORA_LDFLAGS $TH_VERSION_ARG"
AC_SUBST(THEORADEC_LDFLAGS)
AC_SUBST(THEORAENC_LDFLAGS)
AC_SUBST(THEORA_LDFLAGS)
dnl --------------------------------------------------
dnl Checks for support libraries and headers
dnl --------------------------------------------------
dnl check for Ogg
HAVE_OGG=no
dnl first check through pkg-config since it's more flexible
dnl check for pkg-config itself so we don't try the m4 macro without pkg-config
AC_CHECK_PROG(HAVE_PKG_CONFIG, pkg-config, yes)
if test "x$HAVE_PKG_CONFIG" = "xyes"
then
PKG_CHECK_MODULES(OGG, ogg >= 1.1, HAVE_OGG=yes, HAVE_OGG=no)
fi
if test "x$HAVE_OGG" = "xno"
then
dnl fall back to the old school test
XIPH_PATH_OGG(, AC_MSG_ERROR([
libogg is required to build this package!
please see http://www.xiph.org/ for how to
obtain a copy.
]))
cflags_save=$CFLAGS
libs_save=$LIBS
CFLAGS="$CFLAGS $OGG_CFLAGS"
LIBS="$LIBS $OGG_LIBS"
AC_CHECK_FUNC(oggpackB_read, , [
AC_MSG_ERROR([newer libogg version (1.1 or later) required])
])
CFLAGS=$cflags_save
LIBS=$libs_save
fi
dnl check for Vorbis
HAVE_VORBIS=no
dnl first check through pkg-config since it's more flexible
if test "x$HAVE_PKG_CONFIG" = "xyes"
then
PKG_CHECK_MODULES(VORBIS, vorbis >= 1.0.1, HAVE_VORBIS=yes, HAVE_VORBIS=no)
dnl also set VORBISENC_LIBS since an examples needs it
dnl the old .m4 sets this to a value to use on top of VORBIS_LIBS,
dnl so we do the same here.
VORBISENC_LIBS="-lvorbisenc"
AC_SUBST(VORBISENC_LIBS)
fi
if test "x$HAVE_VORBIS" = "xno"
then
dnl fall back to the old school test
XIPH_PATH_VORBIS(HAVE_VORBIS=yes, HAVE_VORBIS=no)
fi
dnl check for SDL
HAVE_SDL=no
AM_PATH_SDL(,[
HAVE_SDL=yes
SDL_LIBS=`$SDL_CONFIG --libs`
],AC_MSG_WARN([*** Unable to find SDL -- Not compiling example players ***]))
dnl check for OSS
HAVE_OSS=no
AC_CHECK_HEADERS([sys/soundcard.h soundcard.h machine/soundcard.h],[
HAVE_OSS=yes
break
])
if test x$HAVE_OSS != xyes; then
AC_MSG_WARN([OSS audio support not found -- not compiling player_example])
fi
dnl OpenBSD needs -lossaudio to use the oss interface
OSS_LIBS=
case "$target_os" in
openbsd*)
OSS_LIBS='-lossaudio'
;;
esac
AC_SUBST(OSS_LIBS)
dnl check for libpng
HAVE_PNG=no
if test "x$HAVE_PKG_CONFIG" = "xyes"
then
PKG_CHECK_MODULES(PNG, libpng, HAVE_PNG=yes, HAVE_PNG=no)
fi
AC_SUBST(PNG_CFLAGS)
AC_SUBST(PNG_LIBS)
dnl check for libcairo
HAVE_CAIRO=no
AC_ARG_ENABLE(telemetry,
[ --enable-telemetry enable debugging output controls ],
[ ac_enable_telemetry=$enableval ], [ ac_enable_telemetry=no] )
if test "x${ac_enable_telemetry}" = xyes; then
if test "x$HAVE_PKG_CONFIG" = "xyes"
then
PKG_CHECK_MODULES(CAIRO, cairo, HAVE_CAIRO=yes, HAVE_CAIRO=no)
AC_DEFINE([HAVE_CAIRO], [], [libcairo is available for visual debugging output])
fi
if test x$HAVE_CAIRO != xyes; then
AC_MSG_WARN([libcairo not found -- not compiling telemetry output support ])
fi
AC_SUBST(CAIRO_CFLAGS)
AC_SUBST(CAIRO_LIBS)
fi
dnl --------------------------------------------------
dnl Overall build configuration options
dnl --------------------------------------------------
dnl Configuration option for building of floating point code.
ac_enable_float=yes
AC_ARG_ENABLE(float,
[ --disable-float disable use of floating point code ],
[ ac_enable_float=$enableval ], [ ac_enable_float=yes] )
if test "x${ac_enable_float}" != xyes ; then
AC_DEFINE([THEORA_DISABLE_FLOAT], [],
[Define to exclude floating point code from the build])
fi
AM_CONDITIONAL(THEORA_DISABLE_FLOAT, [test "x${ac_enable_float}" != xyes])
dnl Configuration option for building of encoding support.
ac_enable_encode=yes
AC_ARG_ENABLE(encode,
[ --disable-encode disable encoding support ],
[ ac_enable_encode=$enableval ], [ ac_enable_encode=yes] )
if test "x${ac_enable_encode}" != xyes ; then
AC_DEFINE([THEORA_DISABLE_ENCODE], [],
[Define to exclude encode support from the build])
else
if test x$HAVE_VORBIS = xyes; then
BUILDABLE_EXAMPLES="$BUILDABLE_EXAMPLES encoder_example\$(EXEEXT)"
else
AC_MSG_NOTICE([Vorbis missing, cannot build example encoder])
fi
fi
AM_CONDITIONAL(THEORA_DISABLE_ENCODE, [test "x${ac_enable_encode}" != xyes])
dnl Configuration option for examples
ac_enable_examples=yes
AC_ARG_ENABLE(examples,
[ --disable-examples disable examples ],
[ ac_enable_examples=$enableval ], [ ac_enable_examples=yes] )
AM_CONDITIONAL(THEORA_ENABLE_EXAMPLES, [test "x${ac_enable_examples}" != xno])
dnl --------------------------------------------------
dnl Check for headers
dnl --------------------------------------------------
dnl none here
dnl --------------------------------------------------
dnl Check for typedefs, structures, etc
dnl --------------------------------------------------
dnl none
dnl --------------------------------------------------
dnl Check for library functions
dnl --------------------------------------------------
dnl OpenBSD needs -lcompat for ftime() used by dump_video.c
AC_SEARCH_LIBS([ftime], [compat])
dnl substitute the included getopt if the system doesn't support long options
AC_CHECK_FUNC(getopt_long,
[GETOPT_OBJS=''],
[GETOPT_OBJS='getopt.$(OBJEXT) getopt1.$(OBJEXT)'])
AC_SUBST(GETOPT_OBJS)
if test x$HAVE_SDL = xyes -a x$HAVE_OSS = xyes -a x$HAVE_VORBIS = xyes; then
BUILDABLE_EXAMPLES="$BUILDABLE_EXAMPLES player_example\$(EXEEXT)"
fi
if test x$HAVE_PNG = xyes; then
BUILDABLE_EXAMPLES="$BUILDABLE_EXAMPLES png2theora\$(EXEEXT)"
fi
AC_SUBST(BUILDABLE_EXAMPLES)
dnl --------------------------------------------------
dnl Do substitutions
dnl --------------------------------------------------
AC_SUBST(DEBUG)
AC_SUBST(PROFILE)
AC_OUTPUT([
Makefile
lib/Makefile
include/Makefile include/theora/Makefile
examples/Makefile
doc/Makefile doc/Doxyfile doc/spec/Makefile
tests/Makefile
m4/Makefile
libtheora.spec
theora.pc
theora-uninstalled.pc
theoradec.pc
theoradec-uninstalled.pc
theoraenc.pc
theoraenc-uninstalled.pc
])
AS_AC_EXPAND(LIBDIR, ${libdir})
AS_AC_EXPAND(INCLUDEDIR, ${includedir})
AS_AC_EXPAND(BINDIR, ${bindir})
AS_AC_EXPAND(DOCDIR, ${datadir}/doc)
if test $HAVE_DOXYGEN = "false"; then
doc_build="no"
else
doc_build="yes"
fi
if test $BUILD_SPEC = "false"; then
spec_build="no"
else
spec_build="yes"
fi
AC_MSG_RESULT([
------------------------------------------------------------------------
$PACKAGE $VERSION: Automatic configuration OK.
General configuration:
Encoding support: ........... ${ac_enable_encode}
Floating point support: ..... ${ac_enable_float}
Assembly optimization: ...... ${cpu_optimization}
Debugging telemetry: ........ ${ac_enable_telemetry}
Build example code: ......... ${ac_enable_examples}
API Documentation: .......... ${doc_build}
Format Documentation: ....... ${spec_build}
Installation paths:
libtheora: ................... ${LIBDIR}
C header files: .............. ${INCLUDEDIR}/theora
Documentation: ............... ${DOCDIR}/$PACKAGE
Building:
Type 'make' to compile $PACKAGE.
Type 'make install' to install $PACKAGE.
${TESTS_INFO}
Example programs will be built but not installed.
------------------------------------------------------------------------
])

423
theora/depcomp Normal file
View file

@ -0,0 +1,423 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
# Copyright 1999, 2000 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
echo "depcomp: Variables source, object and depmode must be set" 1>&2
exit 1
fi
# `libtool' can also be set to `yes' or `no'.
if test -z "$depfile"; then
base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
dir=`echo "$object" | sed 's,/.*$,/,'`
if test "$dir" = "$object"; then
dir=
fi
# FIXME: should be _deps on DOS.
depfile="$dir.deps/$base"
fi
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
rm -f "$tmpdepfile"
# Some modes work just like other modes, but use different flags. We
# parameterize here, but still list the modes in the big case below,
# to make depend.m4 easier to write. Note that we *cannot* use a case
# here, because this file can only contain one case statement.
if test "$depmode" = hp; then
# HP compiler uses -M and no extra arg.
gccflag=-M
depmode=gcc
fi
if test "$depmode" = dashXmstdout; then
# This is just like dashmstdout with a different argument.
dashmflag=-xM
depmode=dashmstdout
fi
case "$depmode" in
gcc3)
## gcc 3 implements dependency tracking that does exactly what
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
## it if -MD -MP comes after the -MF stuff. Hmm.
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
mv "$tmpdepfile" "$depfile"
;;
gcc)
## There are various ways to get dependency output from gcc. Here's
## why we pick this rather obscure method:
## - Don't want to use -MD because we'd like the dependencies to end
## up in a subdir. Having to rename by hand is ugly.
## (We might end up doing this anyway to support other compilers.)
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
## -MM, not -M (despite what the docs say).
## - Using -M directly means running the compiler twice (even worse
## than renaming).
if test -z "$gccflag"; then
gccflag=-MD,
fi
"$@" -Wp,"$gccflag$tmpdepfile"
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
echo "$object : \\" > "$depfile"
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
## The second -e expression handles DOS-style file names with drive letters.
sed -e 's/^[^:]*: / /' \
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
## This next piece of magic avoids the `deleted header file' problem.
## The problem is that when a header file which appears in a .P file
## is deleted, the dependency causes make to die (because there is
## typically no way to rebuild the header). We avoid this by adding
## dummy dependencies for each header file. Too bad gcc doesn't do
## this for us directly.
tr ' ' '
' < "$tmpdepfile" |
## Some versions of gcc put a space before the `:'. On the theory
## that the space means something, we add a space to the output as
## well.
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
hp)
# This case exists only to let depend.m4 do its work. It works by
# looking at the text of this script. This case will never be run,
# since it is checked for above.
exit 1
;;
sgi)
if test "$libtool" = yes; then
"$@" "-Wp,-MDupdate,$tmpdepfile"
else
"$@" -MDupdate "$tmpdepfile"
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
rm -f "$depfile"
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
echo "$object : \\" > "$depfile"
# Clip off the initial element (the dependent). Don't try to be
# clever and replace this with sed code, as IRIX sed won't handle
# lines with more than a fixed number of characters (4096 in
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
# the IRIX cc adds comments like `#:fec' to the end of the
# dependency line.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
tr '
' ' ' >> $depfile
echo >> $depfile
# The second pass generates a dummy entry for each header file.
tr ' ' '
' < "$tmpdepfile" \
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
>> $depfile
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
aix)
# The C for AIX Compiler uses -M and outputs the dependencies
# in a .u file. This file always lives in the current directory.
# Also, the AIX compiler puts `$object:' at the start of each line;
# $object doesn't have directory information.
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
outname="$stripped.o"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
else
# The sourcefile does not contain any dependencies, so just
# store a dummy comment line, to avoid errors with the Makefile
# "include basename.Plo" scheme.
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
tru64)
# The Tru64 compiler uses -MD to generate dependencies as a side
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
# dependencies in `foo.d' instead, so we check for that too.
# Subdirectories are respected.
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
test "x$dir" = "x$object" && dir=
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
tmpdepfile1="$dir.libs/$base.lo.d"
tmpdepfile2="$dir.libs/$base.d"
"$@" -Wc,-MD
else
tmpdepfile1="$dir$base.o.d"
tmpdepfile2="$dir$base.d"
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
if test -f "$tmpdepfile1"; then
tmpdepfile="$tmpdepfile1"
else
tmpdepfile="$tmpdepfile2"
fi
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a space and a tab in the [].
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
else
echo "#dummy" > "$depfile"
fi
rm -f "$tmpdepfile"
;;
#nosideeffect)
# This comment above is used by automake to tell side-effect
# dependency tracking mechanisms from slower ones.
dashmstdout)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'. We will use -o /dev/null later,
# however we can't do the remplacement now because
# `-o $object' might simply not be used
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
test -z "$dashmflag" && dashmflag=-M
"$@" -o /dev/null $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tr ' ' '
' < "$tmpdepfile" | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
dashXmstdout)
# This case only exists to satisfy depend.m4. It is never actually
# run, as this mode is specially recognized in the preamble.
exit 1
;;
makedepend)
"$@" || exit $?
# X makedepend
shift
cleared=no
for arg in "$@"; do
case $cleared in
no)
set ""; shift
cleared=yes ;;
esac
case "$arg" in
-D*|-I*)
set fnord "$@" "$arg"; shift ;;
-*)
;;
*)
set fnord "$@" "$arg"; shift ;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
sed '1,2d' "$tmpdepfile" | tr ' ' '
' | \
## Some versions of the HPUX 10.20 sed can't process this invocation
## correctly. Breaking it into two sed invocations is a workaround.
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
rm -f "$tmpdepfile" "$tmpdepfile".bak
;;
cpp)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout.
"$@" || exit $?
# Remove the call to Libtool.
if test "$libtool" = yes; then
while test $1 != '--mode=compile'; do
shift
done
shift
fi
# Remove `-o $object'.
IFS=" "
for arg
do
case $arg in
-o)
shift
;;
$object)
shift
;;
*)
set fnord "$@" "$arg"
shift # fnord
shift # $arg
;;
esac
done
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
cat < "$tmpdepfile" >> "$depfile"
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
rm -f "$tmpdepfile"
;;
msvisualcpp)
# Important note: in order to support this mode, a compiler *must*
# always write the proprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
"$@" || exit $?
IFS=" "
for arg
do
case "$arg" in
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
set fnord "$@"
shift
shift
;;
*)
set fnord "$@" "$arg"
shift
shift
;;
esac
done
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
echo " " >> "$depfile"
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
rm -f "$tmpdepfile"
;;
none)
exec "$@"
;;
*)
echo "Unknown depmode $depmode" 1>&2
exit 1
;;
esac
exit 0

1142
theora/doc/Doxyfile.in Normal file

File diff suppressed because it is too large Load diff

74
theora/doc/Makefile.am Normal file
View file

@ -0,0 +1,74 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = spec
docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION)
static_docs = vp3-format.txt color.html \
draft-ietf-avt-rtp-theora-00.xml \
draft-ietf-avt-rtp-theora-00.txt
doc_DATA = $(static_docs) doxygen-build.stamp
EXTRA_DIST = $(static_docs) Doxyfile.in
if HAVE_DOXYGEN
doxygen-build.stamp: Doxyfile $(top_srcdir)/include/theora/*.h
doxygen
touch doxygen-build.stamp
else
doxygen-build.stamp:
echo "*** Warning: Doxygen not found; documentation will not be built."
touch doxygen-build.stamp
endif
dist_docdir = $(distdir)/libtheora
dist-hook:
if test -d libtheora; then \
mkdir $(dist_docdir); \
echo -n "copying built documenation..."; \
for dir in libtheora/*; do \
b=`basename $$dir`; \
if test $$b != ".svn"; then \
if test -d $$dir; then \
mkdir $(dist_docdir)/$$b; \
for f in $$dir/*; do \
cp -p $$f $(dist_docdir)/$$b; \
done; \
fi; \
fi; \
done; \
echo "OK"; \
fi
for item in $(EXTRA_DIST); do \
if test -d $$item; then \
echo -n "cleaning $$item dir for distribution..."; \
rm -rf `find $(distdir)/$$item -name .svn`; \
echo "OK"; \
fi; \
done
install-data-local: doxygen-build.stamp
$(mkinstalldirs) $(DESTDIR)$(docdir)
if test -d libtheora; then \
for dir in libtheora/*; do \
if test -d $$dir; then \
b=`basename $$dir`; \
$(mkinstalldirs) $(DESTDIR)$(docdir)/$$b; \
for f in $$dir/*; do \
$(INSTALL_DATA) $$f $(DESTDIR)$(docdir)/$$b; \
done \
fi \
done \
fi
uninstall-local:
rm -rf $(DESTDIR)$(docdir)
clean-local:
if test -d libtheora; then rm -rf libtheora; fi
if test -f doxygen-build.stamp; then rm -f doxygen-build.stamp; fi

508
theora/doc/Makefile.in Normal file
View file

@ -0,0 +1,508 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# 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@
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
AMTAR = @AMTAR@
AR = @AR@
ARGZ_H = @ARGZ_H@
AS = @AS@
AWK = @AWK@
BUILDABLE_EXAMPLES = @BUILDABLE_EXAMPLES@
CAIRO_CFLAGS = @CAIRO_CFLAGS@
CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CPP = @CPP@
CXX = @CXX@
CXXCPP = @CXXCPP@
DEBUG = @DEBUG@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
F77 = @F77@
GCJ = @GCJ@
GCJFLAGS = @GCJFLAGS@
GETOPT_OBJS = @GETOPT_OBJS@
GREP = @GREP@
HAVE_BIBTEX = @HAVE_BIBTEX@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_PDFLATEX = @HAVE_PDFLATEX@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_TRANSFIG = @HAVE_TRANSFIG@
HAVE_VALGRIND = @HAVE_VALGRIND@
INCLTDL = @INCLTDL@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LIBADD_DL = @LIBADD_DL@
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
LIBADD_DLOPEN = @LIBADD_DLOPEN@
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
LIBLTDL = @LIBLTDL@
LIBM = @LIBM@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTDLDEPS = @LTDLDEPS@
LTDLINCL = @LTDLINCL@
LTDLOPEN = @LTDLOPEN@
LT_CONFIG_H = @LT_CONFIG_H@
LT_DLLOADERS = @LT_DLLOADERS@
LT_DLPREOPEN = @LT_DLPREOPEN@
MAINT = @MAINT@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OSS_LIBS = @OSS_LIBS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PKG_CONFIG = @PKG_CONFIG@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
PROFILE = @PROFILE@
RANLIB = @RANLIB@
RC = @RC@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SED = @SED@
STRIP = @STRIP@
THDEC_LIB_AGE = @THDEC_LIB_AGE@
THDEC_LIB_CURRENT = @THDEC_LIB_CURRENT@
THDEC_LIB_REVISION = @THDEC_LIB_REVISION@
THENC_LIB_AGE = @THENC_LIB_AGE@
THENC_LIB_CURRENT = @THENC_LIB_CURRENT@
THENC_LIB_REVISION = @THENC_LIB_REVISION@
THEORADEC_LDFLAGS = @THEORADEC_LDFLAGS@
THEORAENC_LDFLAGS = @THEORAENC_LDFLAGS@
THEORA_LDFLAGS = @THEORA_LDFLAGS@
TH_LIB_AGE = @TH_LIB_AGE@
TH_LIB_CURRENT = @TH_LIB_CURRENT@
TH_LIB_REVISION = @TH_LIB_REVISION@
VALGRIND_ENVIRONMENT = @VALGRIND_ENVIRONMENT@
VERSION = @VERSION@
VORBISENC_LIBS = @VORBISENC_LIBS@
VORBISFILE_LIBS = @VORBISFILE_LIBS@
VORBIS_CFLAGS = @VORBIS_CFLAGS@
VORBIS_LIBS = @VORBIS_LIBS@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
lt_ECHO = @lt_ECHO@
ltdl_LIBOBJS = @ltdl_LIBOBJS@
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
sys_symbol_underscore = @sys_symbol_underscore@
SUBDIRS = spec
docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION)
static_docs = vp3-format.txt color.html \
draft-ietf-avt-rtp-theora-00.xml \
draft-ietf-avt-rtp-theora-00.txt
doc_DATA = $(static_docs) doxygen-build.stamp
EXTRA_DIST = $(static_docs) Doxyfile.in
dist_docdir = $(distdir)/libtheora
subdir = doc
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = Doxyfile
DIST_SOURCES =
DATA = $(doc_DATA)
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
uninstall-info-recursive all-recursive install-data-recursive \
install-exec-recursive installdirs-recursive install-recursive \
uninstall-recursive check-recursive installcheck-recursive
DIST_COMMON = Doxyfile.in Makefile.am Makefile.in
DIST_SUBDIRS = $(SUBDIRS)
all: all-recursive
.SUFFIXES:
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
Doxyfile: $(top_builddir)/config.status Doxyfile.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
docDATA_INSTALL = $(INSTALL_DATA)
install-docDATA: $(doc_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(docdir)
@list='$(doc_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(docDATA_INSTALL) $$d$$p $(DESTDIR)$(docdir)/$$f"; \
$(docDATA_INSTALL) $$d$$p $(DESTDIR)$(docdir)/$$f; \
done
uninstall-docDATA:
@$(NORMAL_UNINSTALL)
@list='$(doc_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(docdir)/$$f"; \
rm -f $(DESTDIR)$(docdir)/$$f; \
done
# 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):
@set fnord $$MAKEFLAGS; amf=$$2; \
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) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
fi; test -z "$$fail"
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
@set fnord $$MAKEFLAGS; amf=$$2; \
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) \
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
done
ETAGS = etags
ETAGSFLAGS =
tags: TAGS
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; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -f $$subdir/TAGS && tags="$$tags -i $$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; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_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
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
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='$(SUBDIRS)'; for subdir in $$list; do \
if test "$$subdir" = .; then :; else \
test -d $(distdir)/$$subdir \
|| mkdir $(distdir)/$$subdir \
|| exit 1; \
(cd $$subdir && \
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" \
distdir=../$(distdir)/$$subdir \
distdir) \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="${top_distdir}" distdir="$(distdir)" \
dist-hook
check-am: all-am
check: check-recursive
all-am: Makefile $(DATA)
installdirs: installdirs-recursive
installdirs-am:
$(mkinstalldirs) $(DESTDIR)$(docdir)
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_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(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 clean-local mostlyclean-am
distclean: distclean-recursive
distclean-am: clean-am distclean-generic distclean-libtool \
distclean-tags
dvi: dvi-recursive
dvi-am:
info: info-recursive
info-am:
install-data-am: install-data-local install-docDATA
install-exec-am:
install-info: install-info-recursive
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-recursive
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-recursive
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
uninstall-am: uninstall-docDATA uninstall-info-am uninstall-local
uninstall-info: uninstall-info-recursive
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
clean-generic clean-libtool clean-local clean-recursive \
distclean distclean-generic distclean-libtool \
distclean-recursive distclean-tags distdir dvi dvi-am \
dvi-recursive info info-am info-recursive install install-am \
install-data install-data-am install-data-local \
install-data-recursive install-docDATA install-exec \
install-exec-am install-exec-recursive install-info \
install-info-am install-info-recursive install-man \
install-recursive install-strip installcheck installcheck-am \
installdirs installdirs-am installdirs-recursive \
maintainer-clean maintainer-clean-generic \
maintainer-clean-recursive mostlyclean mostlyclean-generic \
mostlyclean-libtool mostlyclean-recursive tags tags-recursive \
uninstall uninstall-am uninstall-docDATA uninstall-info-am \
uninstall-info-recursive uninstall-local uninstall-recursive
@HAVE_DOXYGEN_TRUE@doxygen-build.stamp: Doxyfile $(top_srcdir)/include/theora/*.h
@HAVE_DOXYGEN_TRUE@ doxygen
@HAVE_DOXYGEN_TRUE@ touch doxygen-build.stamp
@HAVE_DOXYGEN_FALSE@doxygen-build.stamp:
@HAVE_DOXYGEN_FALSE@ echo "*** Warning: Doxygen not found; documentation will not be built."
@HAVE_DOXYGEN_FALSE@ touch doxygen-build.stamp
dist-hook:
if test -d libtheora; then \
mkdir $(dist_docdir); \
echo -n "copying built documenation..."; \
for dir in libtheora/*; do \
b=`basename $$dir`; \
if test $$b != ".svn"; then \
if test -d $$dir; then \
mkdir $(dist_docdir)/$$b; \
for f in $$dir/*; do \
cp -p $$f $(dist_docdir)/$$b; \
done; \
fi; \
fi; \
done; \
echo "OK"; \
fi
for item in $(EXTRA_DIST); do \
if test -d $$item; then \
echo -n "cleaning $$item dir for distribution..."; \
rm -rf `find $(distdir)/$$item -name .svn`; \
echo "OK"; \
fi; \
done
install-data-local: doxygen-build.stamp
$(mkinstalldirs) $(DESTDIR)$(docdir)
if test -d libtheora; then \
for dir in libtheora/*; do \
if test -d $$dir; then \
b=`basename $$dir`; \
$(mkinstalldirs) $(DESTDIR)$(docdir)/$$b; \
for f in $$dir/*; do \
$(INSTALL_DATA) $$f $(DESTDIR)$(docdir)/$$b; \
done \
fi \
done \
fi
uninstall-local:
rm -rf $(DESTDIR)$(docdir)
clean-local:
if test -d libtheora; then rm -rf libtheora; fi
if test -f doxygen-build.stamp; then rm -f doxygen-build.stamp; fi
# 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:

602
theora/doc/color.html Normal file
View file

@ -0,0 +1,602 @@
<HTML>
<HEAD><TITLE>xiph.org: Ogg Theora documentation</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#202020" LINK="#006666" VLINK="#000000">
<H1><FONT COLOR="#000070">
Ogg Theora I specification: color space conventions
</FONT></H1>
<H1>Overview</H1>
<P>
There are a large number of different color standards used in digital video.
Since Theora is a lossy codec, it restricts itself to only a few of them to
simplify playback.
Unlike the alternate method of describing all the parameters of the color
model, this allows a few dedicated routines for color conversion to be written
and heavily optimized in a decoder.
More flexible conversion functions should instead be specified in an encoder,
where additional computational complexity is more easily tolerated.
The color spaces were selected to give a fair representation of color standards
in use around the world today.
Most of the standards that do not exactly match one of these can be converted
to one fairly easily.
</P>
<P>
The Theora codec identification header contains an 8-bit value that describes
the color space.
This merely selects one of the color spaces available from an enumerated list.
Currently, only two color spaces are defined, with a third possibility that
indicates the color space is "unknown".
All of them are Y'C<SUB>b</SUB>C<SUB>r</SUB> color spaces with one luma channel
and two chroma channels.
Each channel contains 8-bit discrete values in the range 0-255, which represent
non-linear gamma pre-corrected signals.
</P>
<H2>color space parameters</H2>
<P>
The parameters which describe each color space are listed below.
These are the parameters needed to map colors from the encoded
Y'C<SUB>b</SUB>C<SUB>r</SUB> representation to the device-independent color
space CIE XYZ (1931).
</P>
<DL>
<DT>Y'C<SUB>b</SUB>C<SUB>r</SUB> to Y'P<SUB>b</SUB>P<SUB>r</SUB></DT>
<DD>
<P>
This conversion takes 8-bit discrete values in the range 0-255 and maps them to
real values in the range [0,1] for Y and [-1/2,1/2] for P<SUB>b</SUB>
and P<SUB>r</SUB>.
Because some values may fall outside the offset and excursion defined for each
channel in the Y'C<SUB>b</SUB>C<SUB>r</SUB> space, the results may fall
outside these ranges in Y'P<SUB>b</SUB>P<SUB>r</SUB> space.
No clamping should be done at this stage.
</P>
<P>
Parameters: <EM>Offset<SUB>Y,C<SUB>b</SUB>,C<SUB>r</SUB></SUB></EM>,
<EM>Excursion<SUB>Y,C<SUB>b</SUB>,C<SUB>r</SUB>,</SUB></EM>
</P>
<TABLE>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">Y'<SUB>out</SUB></TD>
<TD>=</TD>
<TD ALIGN="LEFT">
(Y'<SUB>in</SUB>-<EM>Offset<SUB>Y</SUB></EM>)/
<EM>Excursion<SUB>Y</SUB></EM>
</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">P<SUB>b</SUB></TD>
<TD>=</TD>
<TD ALIGN="LEFT">
(C<SUB>b</SUB>-<EM>Offset<SUB>C<SUB>b</SUB></SUB></EM>)/
<EM>Excursion<SUB>C<SUB>b</SUB></SUB></EM>
</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">P<SUB>r</SUB></TD>
<TD>=</TD>
<TD ALIGN="LEFT">
(C<SUB>r</SUB>-<EM>Offset<SUB>C<SUB>r</SUB></SUB></EM>)/
<EM>Excursion<SUB>C<SUB>r</SUB></SUB></EM>
</TD>
</TR>
</TABLE>
</DD>
<DT>Y'P<SUB>b</SUB>P<SUB>r</SUB> to R'G'B'</DT>
<DD>
<P>
This conversion takes the one luma and two chroma channel representation and
maps it to the non-linear R'G'B' space used to drive actual output devices.
Values should be clamped into the range [0,1] after this stage.
<P>
Parameters: <EM>K<SUB>b</SUB></EM>, <EM>K<SUB>r</SUB></EM>
</P>
<TABLE>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">R'</TD>
<TD>=</TD>
<TD ALIGN="LEFT">Y' + 2(1-<EM>K<SUB>r</SUB></EM>)P<SUB>r</SUB></TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">G'</TD>
<TD>=</TD>
<TD ALIGN="LEFT">
Y' +
2((<EM>K<SUB>b</SUB></EM>-1)<EM>K<SUB>b</SUB></EM>/
(1-<EM>K<SUB>b</SUB></EM>-<EM>K<SUB>r</SUB></EM>))P<SUB>b</SUB> +
2((<EM>K<SUB>r</SUB></EM>-1)<EM>K<SUB>r</SUB></EM>/
(1-<EM>K<SUB>b</SUB></EM>-<EM>K<SUB>r</SUB></EM>))P<SUB>r</SUB>
</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">B'</TD>
<TD>=</TD>
<TD ALIGN="LEFT">Y' + 2(1-<EM>K<SUB>b</SUB></EM>)P<SUB>b</SUB></TD>
</TR>
</TABLE>
</DD>
<DT>R'G'B' to RGB (Output device gamma correction)</DT>
<DD>
<P>
This conversion takes the non-linear R'G'B' voltage levels and maps it to the
linear light levels produced by the actual output device.
Note that this conversion is only that of the output device, and its inverse is
<EM>not</EM> that used by the input device.
Because a dim viewing environment is assumed in most television standards, the
overall gamma between the input and output devices is usually around 1.1 to
1.2, and not a strict 1.0.
</P>
<P>
For calibration with actual output devices, the model
<TABLE>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">L</TD>
<TD>=</TD>
<TD ALIGN="LEFT">(E'+&Delta;)<SUP><EM>&gamma;</EM></SUP></TD>
</TR>
</TABLE>
should be used, with &Delta; the free parameter and <EM>&gamma;</EM> held
fixed to the value specified in this document.
The conversion function presented here is an idealized version with &Delta;=0.
</P>
<P>
Parameters: <EM>&gamma;</EM>
</P>
<TABLE>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">R</TD>
<TD>=</TD>
<TD ALIGN="LEFT">R'<SUP><EM>&gamma;</EM></SUP></TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">G</TD>
<TD>=</TD>
<TD ALIGN="LEFT">G'<SUP><EM>&gamma;</EM></SUP></TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">B</TD>
<TD>=</TD>
<TD ALIGN="LEFT">B'<SUP><EM>&gamma;</EM></SUP></TD>
</TR>
</TABLE>
</DD>
<DT>RGB to R'G'B' (Input device gamma correction)</DT>
<DD>
<P>
This conversion takes linear light levels and maps them to the non-linear
voltage levels used to drive the actual output device.
This information is merely informative.
It is not required for building a decoder or for converting between the various
formats and the actual output capabilities of a particular device.
</P>
<P>
A linear segment is introduced on the low end to reduce noise in dark areas of
the image.
The rest of the scale is adjusted so that the power segment of the curve
intersects the linear segment with the proper slope, and so that it still maps
0 to 0 and 1 to 1.
</P>
<P>
Parameters: <EM>&beta;</EM>, <EM>&alpha;</EM>, <EM>&delta;</EM>,
<EM>&epsilon;</EM>
</P>
<TABLE>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">R'</TD>
<TD>=</TD>
<TD ALIGN="LEFT">
(1+<EM>&epsilon;</EM>)R<SUP>&beta;</SUP>-<EM>&epsilon;</EM>
</TD>
<TD>for <EM>&delta;</EM> &le; R &le; 1</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">R'</TD>
<TD>=</TD>
<TD ALIGN="LEFT"><EM>&alpha;</EM>R</TD>
<TD>for 0 &le; R &lt; <EM>&delta;</EM></TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">G'</TD>
<TD>=</TD>
<TD ALIGN="LEFT">
(1+<EM>&epsilon;</EM>)G<SUP>&beta;</SUP>-<EM>&epsilon;</EM>
</TD>
<TD>for <EM>&delta;</EM> &le; G &le; 1</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">G'</TD>
<TD>=</TD>
<TD ALIGN="LEFT"><EM>&alpha;</EM>G</TD>
<TD>for 0 &le; G &lt; <EM>&delta;</EM></TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">B'</TD>
<TD>=</TD>
<TD ALIGN="LEFT">
(1+<EM>&epsilon;</EM>)B<SUP>&beta;</SUP>-<EM>&epsilon;</EM>
</TD>
<TD>for <EM>&delta;</EM> &le; B &le; 1</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">B'</TD>
<TD>=</TD>
<TD ALIGN="LEFT"><EM>&alpha;</EM>B</TD>
<TD>for 0 &le; B &lt; <EM>&delta;</EM></TD>
</TR>
</TABLE>
</DD>
<DT>RGB to CIE XYZ (1931)</DT>
<DD>
<P>
This conversion maps a device-dependent linear RGB space to the
device-independent linear CIE XYZ space.
The parameters are the CIE chromaticity coordinates of the three primaries,
red, green, and blue, as well as the chromaticity coordinates of the white
point of the device.
This is how hardware manufacturers and standards typically describe a
particular RGB space.
The math required to convert these parameters into a useful transformation
matrix is reproduced below.
</P>
<P>
Parameters: <EM>x<SUB>r,g,b,w</SUB></EM>, <EM>y<SUB>r,g,b,w</SUB></EM>
</P>
<TABLE>
<TR>
<TD ALIGN="RIGHT">F</TD>
<TD>=</TD>
<TD ALIGN="LEFT"><TABLE><TR>
<TD><FONT SIZE="300%">(</FONT></TD>
<TD><TABLE>
<TR>
<TD ALIGN="CENTER"><EM>x<SUB>r</SUB></EM>/<EM>y<SUB>r</SUB></EM></TD>
<TD ALIGN="CENTER"><EM>x<SUB>g</SUB></EM>/<EM>y<SUB>g</SUB></EM></TD>
<TD ALIGN="CENTER"><EM>x<SUB>b</SUB></EM>/<EM>y<SUB>b</SUB></EM></TD>
</TR>
<TR>
<TD ALIGN="CENTER">1</TD>
<TD ALIGN="CENTER">1</TD>
<TD ALIGN="CENTER">1</TD>
</TR>
<TR>
<TD ALIGN="CENTER">
(1-<EM>x<SUB>r</SUB></EM>-<EM>y<SUB>r</SUB></EM>)/<EM>y<SUB>r</SUB></EM>
</TD>
<TD ALIGN="CENTER">
(1-<EM>x<SUB>g</SUB></EM>-<EM>y<SUB>g</SUB></EM>)/<EM>y<SUB>g</SUB></EM>
</TD>
<TD ALIGN="CENTER">
(1-<EM>x<SUB>b</SUB></EM>-<EM>y<SUB>b</SUB></EM>)/<EM>y<SUB>b</SUB></EM>
</TD>
</TR>
</TABLE></TD>
<TD<FONT SIZE="300%">)</FONT></TD>
</TR></TABLE></TD>
</TR>
<TR>
<TD ALIGN="RIGHT"><TABLE><TR>
<TD><FONT SIZE="300%">(</FONT></TD>
<TD><TABLE>
<TR><TD ALIGN="CENTER">s<SUB>r</SUB></TD></TR>
<TR><TD ALIGN="CENTER">s<SUB>g</SUB></TD></TR>
<TR><TD ALIGN="CENTER">s<SUB>b</SUB></TD></TR>
</TABLE></TD>
<TD><FONT SIZE="300%">)</FONT></TD>
</TR></TABLE></TD>
<TD>=</TD>
<TD ALIGN="LEFT"><TABLE><TR>
<TD>F<SUP>-1</SUP><FONT SIZE="300%">(</FONT></TD>
<TD><TABLE>
<TR><TD ALIGN="CENTER"><EM>x<SUB>w</SUB></EM>/<EM>y<SUB>w</SUB></EM></TD></TR>
<TR><TD ALIGN="CENTER">1</TD></TR>
<TR><TD ALIGN="CENTER">
(1-<EM>x<SUB>w</SUB></EM>-<EM>y<SUB>w</SUB></EM>)/<EM>y<SUB>w</SUB></EM>
</TD></TR>
</TABLE></TD>
<TD><FONT SIZE="300%">)</FONT></TD>
</TR></TABLE></TD>
</TR>
<TR>
<TD ALIGN="RIGHT"><TABLE><TR>
<TD><FONT SIZE="300%">(</FONT></TD>
<TD><TABLE>
<TR><TD ALIGN="CENTER">X</TD></TR>
<TR><TD ALIGN="CENTER">Y</TD></TR>
<TR><TD ALIGN="CENTER">Z</TD></TR>
</TABLE></TD>
<TD><FONT SIZE="300%">)</FONT></TD>
</TR></TABLE></TD>
<TD>=</TD>
<TD ALIGN="LEFT"><TABLE><TR>
<TD>F<FONT SIZE="300%">(</FONT></TD>
<TD><TABLE>
<TR><TD ALIGN="CENTER">s<SUB>r</SUB>R</TD></TR>
<TR><TD ALIGN="CENTER">s<SUB>g</SUB>G</TD></TR>
<TR><TD ALIGN="CENTER">s<SUB>b</SUB>B</TD></TR>
</TABLE></TD>
<TD><FONT SIZE="300%">)</FONT></TD>
</TR></TABLE></TD>
</TR>
</TABLE>
</DD>
</DL>
<H2>available color spaces</H2>
<P>
These are the color spaces currently defined for use by Ogg Theora video.
Each one has a short name, with which it is referred to in this document, and
a more detailed specification of the standards from which its parameters are
derived.
Some standards do not specify all the parameters necessary.
For these unspecified parameters, this document serves as the definition of
what should be used when encoding or decoding Ogg Theora video.
<H3>Rec 470M (Rec. ITU-R BT.470-6 System M/NTSC with Rec. ITU-R BT.601-5)</H3>
<P>
This color space is used by broadcast television and DVDs in much of the
Americas, Japan, Korea, and the Union of Myanmar
[<A HREF="#Rec470">Rec470</A>].
This color space may also be used for System M/PAL (Brazil), with an
appropriate conversion supplied by the encoder to compensate for the
different gamma value.
See the Rec 470BG section for an appropriate gamma value to assume for M/PAL
input.
</P>
<P>
In the US, studio monitors are adjusted to a D65 white point
(<EM>x<SUB>w</SUB></EM>,<EM>y<SUB>w</SUB></EM>=0.313,0.329).
In Japan, studio monitors are adjusted to a D white of 9300K
(<EM>x<SUB>w</SUB></EM>,<EM>y<SUB>w</SUB></EM>=0.285,0.293).
</P>
<P>
Rec 470 does not specify a digital encoding of the color signals.
For Ogg Theora, Rec. ITU-R BT.601-5 is used, starting from the R'G'B' signals
specified by Rec 470 [<A HREF="#Rec601">Rec601</A>].
</P>
<P>
<P>
Rec 470 does not specify an input gamma function.
For Ogg Theora, the Rec 709 input function is used.
This is the same as that specified by SMPTE 170M, which claims to reflect
modern practice in the creation of NTSC signals (c. 1994)
[<A HREF="#SMPTE170M">SMPTE170M</A>].
</P>
<H4>parameters</H4>
<TABLE>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>Offset<SUB>Y,C<SUB>b</SUB>,C<SUB>r</SUB></SUB></EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT" COLSPAN="2">(16,128,128)</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">
<EM>Excursion<SUB>Y,C<SUB>b</SUB>,C<SUB>r</SUB></SUB></EM>
</TD>
<TD>=</TD>
<TD ALIGN="LEFT" COLSPAN="2">(219,224,224)</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>K<SUB>b</SUB></EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT" COLSPAN="2">0.114</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>K<SUB>r</SUB></EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT" COLSPAN="2">0.299</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&gamma;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">2.2</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&beta;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">0.45</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&alpha;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">4.5</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&delta;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">0.018</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&epsilon;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">0.099</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>x<SUB>r</SUB></EM>,<EM>y<SUB>r</SUB></EM></TD>
<TD>=</TD>
<TD>0.67,</TD>
<TD>0.33</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>x<SUB>g</SUB></EM>,<EM>y<SUB>g</SUB></EM></TD>
<TD>=</TD>
<TD>0.21,</TD>
<TD>0.71</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>x<SUB>b</SUB></EM>,<EM>y<SUB>b</SUB></EM></TD>
<TD>=</TD>
<TD>0.14,</TD>
<TD>0.08</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">
(Illuminant C) <EM>x<SUB>w</SUB></EM>,<EM>y<SUB>w</SUB></EM>
</TD>
<TD>=</TD>
<TD>0.310,</TD>
<TD>0.316</TD>
</TR>
</TABLE>
<H3>
Rec 470BG (Rec. ITU-R BT.470-6 Systems B and G with Rec. ITU-R BT.601-5)
</H3>
<P>
This color space is used by the PAL and SECAM systems in much of the rest of
the world [<A HREF="#Rec470">Rec470</A>].
This can be used directly by systems (B, B1, D, D1, G, H, I, K, N)/PAL and (B,
D, G, H, K, K1, L)/SECAM.
</P>
<P>
Note that the Rec 470BG chromaticity values are different from those specified
in Rec 470M.
When PAL and SECAM systems were first designed, they were based upon the same
primaries as NTSC.
However, as methods of making color picture tubes have changed, the primaries
used have changed as well.
The US recommends using correction circuitry to approximate the existing,
standard NTSC primaries.
Current PAL and SECAM systems have standardized on primaries in accord with
more recent technology.
</P>
<P>
Rec 470 provisionally permits the use of the NTSC chromaticity values (given
above) with legacy PAL and SECAM equipment.
In Ogg Theora, material must be decoded assuming the new PAL and SECAM
primaries.
Material intended for display on old legacy devices should be converted by the
decoder.
</P>
<P>
The official Rec 470BG specifies a gamma value of <EM>&gamma;</EM>=2.8.
However, in practice this value is unrealistically high
[<A HREF="#RefPoy97">Poy97</A>].
Rec 470BG states that the overall system gamma should be approximately
<EM>&gamma;</EM>/<EM>&beta;</EM>=1.2.
However, most cameras pre-correct with a gamma value of <EM>&beta;</EM>=0.45,
which suggests an output device gamma of approximately <EM>&gamma;</EM>=2.67.
This is the value recommended for use with PAL systems in Ogg Theora.
</P>
<P>
Rec 470 does not specify a digital encoding of the color signals.
For Ogg Theora, Rec. ITU-R BT.601-5 is used, starting from the R'G'B' signals
specified by Rec 470 [<A HREF="#Rec601">Rec601</A>].
</P>
<P>
Rec 470 does not specify an input gamma function.
For Ogg Theora, the Rec 709 input function is used.
</P>
<H4>parameters</H4>
<TABLE>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>Offset<SUB>Y,C<SUB>b</SUB>,C<SUB>r</SUB></SUB></EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT" COLSPAN="2">(16,128,128)</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">
<EM>Excursion<SUB>Y,C<SUB>b</SUB>,C<SUB>r</SUB></SUB></EM>
</TD>
<TD>=</TD>
<TD ALIGN="LEFT" COLSPAN="2">(219,224,224)</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>K<SUB>b</SUB></EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT" COLSPAN="2">0.114</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>K<SUB>r</SUB></EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT" COLSPAN="2">0.299</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&gamma;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">2.67</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&beta;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">0.45</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&alpha;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">4.5</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&delta;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">0.018</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>&epsilon;</EM></TD>
<TD>=</TD>
<TD ALIGN="LEFT">0.099</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>x<SUB>r</SUB></EM>,<EM>y<SUB>r</SUB></EM></TD>
<TD>=</TD>
<TD>0.64,</TD>
<TD>0.33</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>x<SUB>g</SUB></EM>,<EM>y<SUB>g</SUB></EM></TD>
<TD>=</TD>
<TD>0.29,</TD>
<TD>0.60</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT"><EM>x<SUB>b</SUB></EM>,<EM>y<SUB>b</SUB></EM></TD>
<TD>=</TD>
<TD>0.15,</TD>
<TD>0.06</TD>
</TR>
<TR VALIGN="BOTTOM">
<TD ALIGN="RIGHT">
(D65) <EM>x<SUB>w</SUB></EM>,<EM>y<SUB>w</SUB></EM>
</TD>
<TD>=</TD>
<TD>0.313,</TD>
<TD>0.329</TD>
</TR>
</TABLE>
<H2>references</H2>
<DL>
<DT>[<A NAME="Poy97">Poy97</A>]</DT>
<DD>
Poynton, Charles, <I>Frequently-Asked Questions about Gamma</I>.
<A HREF="http://www.poynton.com/GammaFAQ.html">http://www.poynton.com/GammaFAQ/html</A>,
Feb. 1997.
</DD>
<DT>[<A NAME="Rec470">Rec470</A>]</DT>
<DD>
Recommendation ITU-R BT.470-6, <I>Conventional Television Systems</I>
(1970, revised 1998). International Telecommunications Union, 1211 Geneva 20,
Switzerland.
</DD>
<DT>[<A NAME="Rec601">Rec601</A>]</DT>
<DD>
Recommendation ITU-R BT.601-5, <I>Studio Encoding Parameters of
Digital Television for Standard 4:3 and Wide-Screen 16:9 Aspect Ratios</I>
(1982, revised 1995). International Telecommunications Union, 1211 Geneva 20,
Switzerland.
</DD>
<DT>[<A NAME="Rec709">Rec709</A>]</DT>
<DD>
Recommendation ITU-R BT.709-5, <I>Parameter values for the
HDTV standards for production and international programme exchange</I>
(1990, revised 2002). International Telecommunications Union, 1211 Geneva 20,
Switzerland.
</DD>
<DT>[<A NAME="SMPTE170M">SMPTE170M</A>]</DT>
<DD>
Society of Motion Picture and Television Engineers, <I>Television &mdash;
Composite Analog Video Signal &mdash; NTSC for Studio Applications</I>.
SMPTE-170M, 1994
</DD>
<DT>[<A NAME="SMPTE240M">SMPTE240M</A>]</DT>
<DD>
Society of Motion Picture and Television Engineers, <I>Television &mdash;
Signal Parameters &mdash; 1125-Line High-Definition Production</I>.
SMPTE-240M, 1999.
</DD>
</DL>
</BODY>
</HTML>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,46 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Structures</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Data Structures</h1>Here are the data structures with brief descriptions:<table>
<tr><td class="indexkey"><a class="el" href="structth__comment.html">th_comment</a></td><td class="indexvalue">The comment information </td></tr>
<tr><td class="indexkey"><a class="el" href="structth__huff__code.html">th_huff_code</a></td><td class="indexvalue">A Huffman code for a Theora DCT token </td></tr>
<tr><td class="indexkey"><a class="el" href="structth__img__plane.html">th_img_plane</a></td><td class="indexvalue">A buffer for a single color plane in an uncompressed image </td></tr>
<tr><td class="indexkey"><a class="el" href="structth__info.html">th_info</a></td><td class="indexvalue">Theora bitstream information </td></tr>
<tr><td class="indexkey"><a class="el" href="structth__quant__info.html">th_quant_info</a></td><td class="indexvalue">A complete set of quantization parameters </td></tr>
<tr><td class="indexkey"><a class="el" href="structth__quant__ranges.html">th_quant_ranges</a></td><td class="indexvalue">A set of <em>qi</em> ranges </td></tr>
<tr><td class="indexkey"><a class="el" href="structth__stripe__callback.html">th_stripe_callback</a></td><td class="indexvalue">The striped decode callback data to pass to <a class="el" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e" title="Sets the striped decode callback function.">TH_DECCTL_SET_STRIPE_CB</a> </td></tr>
<tr><td class="indexkey"><a class="el" href="structtheora__comment.html">theora_comment</a></td><td class="indexvalue">Comment header metadata </td></tr>
<tr><td class="indexkey"><a class="el" href="structtheora__info.html">theora_info</a></td><td class="indexvalue">Theora bitstream info </td></tr>
<tr><td class="indexkey"><a class="el" href="structtheora__state.html">theora_state</a></td><td class="indexvalue">Codec internal state and context </td></tr>
<tr><td class="indexkey"><a class="el" href="structyuv__buffer.html">yuv_buffer</a></td><td class="indexvalue">A YUV buffer for passing uncompressed frames to and from the codec </td></tr>
</table>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,38 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Alphabetical List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Data Structure Index</h1><div class="qindex"><a class="qindex" href="#letter_T">T</a>&nbsp;|&nbsp;<a class="qindex" href="#letter_Y">Y</a></div>
<table align="center" width="95%" border="0" cellspacing="0" cellpadding="0">
<tr><td><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;T&nbsp;&nbsp;</div></td></tr></table>
</td><td><a class="el" href="structth__img__plane.html">th_img_plane</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structth__quant__ranges.html">th_quant_ranges</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structtheora__info.html">theora_info</a>&nbsp;&nbsp;&nbsp;</td><td><a name="letter_Y"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&nbsp;&nbsp;Y&nbsp;&nbsp;</div></td></tr></table>
</td></tr><tr><td><a class="el" href="structth__comment.html">th_comment</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structth__info.html">th_info</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structth__stripe__callback.html">th_stripe_callback</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structtheora__state.html">theora_state</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structyuv__buffer.html">yuv_buffer</a>&nbsp;&nbsp;&nbsp;</td></tr><tr><td><a class="el" href="structth__huff__code.html">th_huff_code</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structth__quant__info.html">th_quant_info</a>&nbsp;&nbsp;&nbsp;</td><td><a class="el" href="structtheora__comment.html">theora_comment</a>&nbsp;&nbsp;&nbsp;</td></tr></table><div class="qindex"><a class="qindex" href="#letter_T">T</a>&nbsp;|&nbsp;<a class="qindex" href="#letter_Y">Y</a></div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,411 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: codec.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>codec.h File Reference</h1>
<p>The shared <code>libtheoradec</code> and <code>libtheoraenc</code> C API.
<a href="#_details">More...</a></p>
<code>#include &lt;ogg/ogg.h&gt;</code><br/>
<p><a href="codec_8h_source.html">Go to the source code of this file.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__img__plane.html">th_img_plane</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A buffer for a single color plane in an uncompressed image. <a href="structth__img__plane.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html">th_info</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Theora bitstream information. <a href="structth__info.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__comment.html">th_comment</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The comment information. <a href="structth__comment.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__ranges.html">th_quant_ranges</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A set of <em>qi</em> ranges. <a href="structth__quant__ranges.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__info.html">th_quant_info</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A complete set of quantization parameters. <a href="structth__quant__info.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__huff__code.html">th_huff_code</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A Huffman code for a Theora DCT token. <a href="structth__huff__code.html#_details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a15352a6a862d25ab00a8f06ea65ee75b">_O_THEORA_CODEC_H_</a>&nbsp;&nbsp;&nbsp;(1)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a49bf449eae33c5320f0c308f32c6ae42">TH_NHUFFMAN_TABLES</a>&nbsp;&nbsp;&nbsp;(80)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The number of Huffman tables used by Theora. <a href="#a49bf449eae33c5320f0c308f32c6ae42"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a2a44f48084e76a58cae48fb5d47cd422">TH_NDCT_TOKENS</a>&nbsp;&nbsp;&nbsp;(32)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The number of DCT token values in each table. <a href="#a2a44f48084e76a58cae48fb5d47cd422"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Return codes</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp800007e5fae550658ee577ca16693452"></a> </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a4d8d8e34fc5ec39ffa05d61a310a0407">TH_EFAULT</a>&nbsp;&nbsp;&nbsp;(-1)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An invalid pointer was provided. <a href="#a4d8d8e34fc5ec39ffa05d61a310a0407"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#afbbd9f19fbf292aeb62a37792cecb870">TH_EINVAL</a>&nbsp;&nbsp;&nbsp;(-10)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An invalid argument was provided. <a href="#afbbd9f19fbf292aeb62a37792cecb870"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#af00f7ecc5242d12a717202537324a510">TH_EBADHEADER</a>&nbsp;&nbsp;&nbsp;(-20)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The contents of the header were incomplete, invalid, or unexpected. <a href="#af00f7ecc5242d12a717202537324a510"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a3dc08a00a9aba231be398f3e31726d9c">TH_ENOTFORMAT</a>&nbsp;&nbsp;&nbsp;(-21)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The header does not belong to a Theora stream. <a href="#a3dc08a00a9aba231be398f3e31726d9c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#ac3a45ef2b24f75259258edc481e3a122">TH_EVERSION</a>&nbsp;&nbsp;&nbsp;(-22)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The bitstream version is too high. <a href="#ac3a45ef2b24f75259258edc481e3a122"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a921c47accc17841f220af5a6afb79efe">TH_EIMPL</a>&nbsp;&nbsp;&nbsp;(-23)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The specified function is not implemented. <a href="#a921c47accc17841f220af5a6afb79efe"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a6efb84e9c2213a8840003eee2847b27f">TH_EBADPACKET</a>&nbsp;&nbsp;&nbsp;(-24)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">There were errors in the video data packet. <a href="#a6efb84e9c2213a8840003eee2847b27f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#ab10e7b64f17a02707fc9348ea9832d09">TH_DUPFRAME</a>&nbsp;&nbsp;&nbsp;(1)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The decoded packet represented a dropped frame. <a href="#ab10e7b64f17a02707fc9348ea9832d09"></a><br/></td></tr>
<tr><td colspan="2"><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="structth__img__plane.html">th_img_plane</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a> [3]</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A complete image buffer for an uncompressed frame. <a href="#a343f7cfabad179cc4fe527cf06873f45"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a6a1426d16beef8a311d7f0e9d2e96326">th_quant_base</a> [64]</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A single base matrix. <a href="#a6a1426d16beef8a311d7f0e9d2e96326"></a><br/></td></tr>
<tr><td colspan="2"><h2>Enumerations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0">th_colorspace</a> { <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0adb9a17a3283c8d490652e507db2427cf">TH_CS_UNSPECIFIED</a>,
<a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a1a19346bbfb8192baa4c185df73d3397">TH_CS_ITU_REC_470M</a>,
<a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a009021d50836ddb0ec6004a2803775fe">TH_CS_ITU_REC_470BG</a>,
<a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a0fa8ea07f583ee57943520ddb2f6e62e">TH_CS_NSPACES</a>
}</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>The currently defined color space tags. </p>
<a href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc">th_pixel_fmt</a> { <br/>
&nbsp;&nbsp;<a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bcafed7ad7ee4345930255827bff6055162">TH_PF_420</a>,
<a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca9e60af0159d42b20806d7eb4a8b833e6">TH_PF_RSVD</a>,
<a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca0271d01babf2f51512479f4a6245b9fa">TH_PF_422</a>,
<a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2ac50ac048ea75501a5e0f99a63c8c86">TH_PF_444</a>,
<br/>
&nbsp;&nbsp;<a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2d6d78b9df1df086bb60f32f963a31eb">TH_PF_NFORMATS</a>
<br/>
}</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>The currently defined pixel format tags. </p>
<a href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc">More...</a><br/></td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td colspan="2"><div class="groupHeader">Basic shared functions</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrpb625c22fa07613c734f71c378fe32d7a"></a> </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga04846066738d9f2024fc9961162b2dbc">th_version_string</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a human-readable string to identify the library vendor and version. <a href="group__basefuncs.html#ga04846066738d9f2024fc9961162b2dbc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#gab723a75c0f95b3eb817f7f769846016b">th_version_number</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the library version number. <a href="group__basefuncs.html#gab723a75c0f95b3eb817f7f769846016b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga95b10e76fc4c05d0240ea2dfd9fd62bd">th_granule_frame</a> (void *_encdec, ogg_int64_t _granpos)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts a granule position to an absolute frame index, starting at <code>0</code>. <a href="group__basefuncs.html#ga95b10e76fc4c05d0240ea2dfd9fd62bd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga707e1e281de788af0df39ef00f3fb432">th_granule_time</a> (void *_encdec, ogg_int64_t _granpos)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts a granule position to an absolute time in seconds. <a href="group__basefuncs.html#ga707e1e281de788af0df39ef00f3fb432"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga02f3f38261a9b39452d8a5e6f8737cc1">th_packet_isheader</a> (ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether a Theora packet is a header or not. <a href="group__basefuncs.html#ga02f3f38261a9b39452d8a5e6f8737cc1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#gafe95cfd06f0fef413266c9168a66248a">th_packet_iskeyframe</a> (ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether a theora packet is a key frame or not. <a href="group__basefuncs.html#gafe95cfd06f0fef413266c9168a66248a"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Functions for manipulating header data</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp14ef5f819e97c870c128539ed1f334e3"></a> </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga430d9c605816a6ca0bdce3a0b965b926">th_info_init</a> (<a class="el" href="structth__info.html">th_info</a> *_info)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure. <a href="group__basefuncs.html#ga430d9c605816a6ca0bdce3a0b965b926"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#gab3d6441ab4a4969859ef5fd78a9e3c1c">th_info_clear</a> (<a class="el" href="structth__info.html">th_info</a> *_info)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clears a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure. <a href="group__basefuncs.html#gab3d6441ab4a4969859ef5fd78a9e3c1c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga6c8ab25988e7ea9d7b1e31a54cf58f09">th_comment_init</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize a <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. <a href="group__basefuncs.html#ga6c8ab25988e7ea9d7b1e31a54cf58f09"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga19a1f7b8032db957df151a34e5ac9272">th_comment_add</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc, char *_comment)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a comment to an initialized <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. <a href="group__basefuncs.html#ga19a1f7b8032db957df151a34e5ac9272"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga6c5edc201ca220a30787ca6c1ddcaeaf">th_comment_add_tag</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc, char *_tag, char *_val)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a comment to an initialized <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. <a href="group__basefuncs.html#ga6c5edc201ca220a30787ca6c1ddcaeaf"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga33c8b4f57a03217636d704c2ebb211fa">th_comment_query</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc, char *_tag, int _count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Look up a comment value by its tag. <a href="group__basefuncs.html#ga33c8b4f57a03217636d704c2ebb211fa"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga81d518dc4426f63ceaedcbe2668679fc">th_comment_query_count</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc, char *_tag)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Look up the number of instances of a tag. <a href="group__basefuncs.html#ga81d518dc4426f63ceaedcbe2668679fc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#gae736c1afa514947a3feb223143af95e3">th_comment_clear</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clears a <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. <a href="group__basefuncs.html#gae736c1afa514947a3feb223143af95e3"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>The shared <code>libtheoradec</code> and <code>libtheoraenc</code> C API. </p>
<p>You don't need to include this directly. </p>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="a15352a6a862d25ab00a8f06ea65ee75b"></a><!-- doxytag: member="codec.h::_O_THEORA_CODEC_H_" ref="a15352a6a862d25ab00a8f06ea65ee75b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _O_THEORA_CODEC_H_&nbsp;&nbsp;&nbsp;(1)</td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="ab10e7b64f17a02707fc9348ea9832d09"></a><!-- doxytag: member="codec.h::TH_DUPFRAME" ref="ab10e7b64f17a02707fc9348ea9832d09" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DUPFRAME&nbsp;&nbsp;&nbsp;(1)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The decoded packet represented a dropped frame. </p>
<p>The player can continue to display the current frame, as the contents of the decoded frame buffer have not changed. </p>
</div>
</div>
<a class="anchor" id="af00f7ecc5242d12a717202537324a510"></a><!-- doxytag: member="codec.h::TH_EBADHEADER" ref="af00f7ecc5242d12a717202537324a510" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_EBADHEADER&nbsp;&nbsp;&nbsp;(-20)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The contents of the header were incomplete, invalid, or unexpected. </p>
</div>
</div>
<a class="anchor" id="a6efb84e9c2213a8840003eee2847b27f"></a><!-- doxytag: member="codec.h::TH_EBADPACKET" ref="a6efb84e9c2213a8840003eee2847b27f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_EBADPACKET&nbsp;&nbsp;&nbsp;(-24)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>There were errors in the video data packet. </p>
</div>
</div>
<a class="anchor" id="a4d8d8e34fc5ec39ffa05d61a310a0407"></a><!-- doxytag: member="codec.h::TH_EFAULT" ref="a4d8d8e34fc5ec39ffa05d61a310a0407" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_EFAULT&nbsp;&nbsp;&nbsp;(-1)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>An invalid pointer was provided. </p>
</div>
</div>
<a class="anchor" id="a921c47accc17841f220af5a6afb79efe"></a><!-- doxytag: member="codec.h::TH_EIMPL" ref="a921c47accc17841f220af5a6afb79efe" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_EIMPL&nbsp;&nbsp;&nbsp;(-23)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The specified function is not implemented. </p>
</div>
</div>
<a class="anchor" id="afbbd9f19fbf292aeb62a37792cecb870"></a><!-- doxytag: member="codec.h::TH_EINVAL" ref="afbbd9f19fbf292aeb62a37792cecb870" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_EINVAL&nbsp;&nbsp;&nbsp;(-10)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>An invalid argument was provided. </p>
</div>
</div>
<a class="anchor" id="a3dc08a00a9aba231be398f3e31726d9c"></a><!-- doxytag: member="codec.h::TH_ENOTFORMAT" ref="a3dc08a00a9aba231be398f3e31726d9c" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENOTFORMAT&nbsp;&nbsp;&nbsp;(-21)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The header does not belong to a Theora stream. </p>
</div>
</div>
<a class="anchor" id="ac3a45ef2b24f75259258edc481e3a122"></a><!-- doxytag: member="codec.h::TH_EVERSION" ref="ac3a45ef2b24f75259258edc481e3a122" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_EVERSION&nbsp;&nbsp;&nbsp;(-22)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The bitstream version is too high. </p>
</div>
</div>
<a class="anchor" id="a2a44f48084e76a58cae48fb5d47cd422"></a><!-- doxytag: member="codec.h::TH_NDCT_TOKENS" ref="a2a44f48084e76a58cae48fb5d47cd422" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_NDCT_TOKENS&nbsp;&nbsp;&nbsp;(32)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The number of DCT token values in each table. </p>
</div>
</div>
<a class="anchor" id="a49bf449eae33c5320f0c308f32c6ae42"></a><!-- doxytag: member="codec.h::TH_NHUFFMAN_TABLES" ref="a49bf449eae33c5320f0c308f32c6ae42" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_NHUFFMAN_TABLES&nbsp;&nbsp;&nbsp;(80)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The number of Huffman tables used by Theora. </p>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="a6a1426d16beef8a311d7f0e9d2e96326"></a><!-- doxytag: member="codec.h::th_quant_base" ref="a6a1426d16beef8a311d7f0e9d2e96326" args="[64]" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef unsigned char <a class="el" href="codec_8h.html#a6a1426d16beef8a311d7f0e9d2e96326">th_quant_base</a>[64]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>A single base matrix. </p>
</div>
</div>
<a class="anchor" id="a343f7cfabad179cc4fe527cf06873f45"></a><!-- doxytag: member="codec.h::th_ycbcr_buffer" ref="a343f7cfabad179cc4fe527cf06873f45" args="[3]" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef <a class="el" href="structth__img__plane.html">th_img_plane</a> <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a>[3]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>A complete image buffer for an uncompressed frame. </p>
<p>The chroma planes may be decimated by a factor of two in either direction, as indicated by <a class="el" href="structth__info.html#a2301388ef3755c41ab12fd144c1fc54e" title="The pixel format.">th_info::pixel_fmt</a>. The width and height of the Y' plane must be multiples of 16. They may need to be cropped for display, using the rectangle specified by <a class="el" href="structth__info.html#a5b3f834bcf141564e7bb14f49101870f" title="The X offset of the displayed picture.">th_info::pic_x</a>, <a class="el" href="structth__info.html#a8aacc575cab2dfe3735001c2ad32aa14" title="The Y offset of the displayed picture.">th_info::pic_y</a>, <a class="el" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345" title="The displayed picture width.">th_info::pic_width</a>, and <a class="el" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b" title="The displayed picture height.">th_info::pic_height</a>. All samples are 8 bits. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>The term YUV often used to describe a colorspace is ambiguous. The exact parameters of the RGB to YUV conversion process aside, in many contexts the U and V channels actually have opposite meanings. To avoid this confusion, we are explicit: the name of the color channels are Y'CbCr, and they appear in that order, always. The prime symbol denotes that the Y channel is non-linear. Cb and Cr stand for "Chroma blue" and "Chroma red", respectively. </dd></dl>
</div>
</div>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="a4ce7a695ce353b1582d29b6c1ddf31a0"></a><!-- doxytag: member="codec.h::th_colorspace" ref="a4ce7a695ce353b1582d29b6c1ddf31a0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0">th_colorspace</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The currently defined color space tags. </p>
<p>See <a href="http://www.theora.org/doc/Theora.pdf">the Theora specification</a>, Chapter 4, for exact details on the meaning of each of these color spaces. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="a4ce7a695ce353b1582d29b6c1ddf31a0adb9a17a3283c8d490652e507db2427cf"></a><!-- doxytag: member="TH_CS_UNSPECIFIED" ref="a4ce7a695ce353b1582d29b6c1ddf31a0adb9a17a3283c8d490652e507db2427cf" args="" -->TH_CS_UNSPECIFIED</em>&nbsp;</td><td>
<p>The color space was not specified at the encoder. </p>
<p>It may be conveyed by an external means. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a4ce7a695ce353b1582d29b6c1ddf31a0a1a19346bbfb8192baa4c185df73d3397"></a><!-- doxytag: member="TH_CS_ITU_REC_470M" ref="a4ce7a695ce353b1582d29b6c1ddf31a0a1a19346bbfb8192baa4c185df73d3397" args="" -->TH_CS_ITU_REC_470M</em>&nbsp;</td><td>
<p>A color space designed for NTSC content. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a4ce7a695ce353b1582d29b6c1ddf31a0a009021d50836ddb0ec6004a2803775fe"></a><!-- doxytag: member="TH_CS_ITU_REC_470BG" ref="a4ce7a695ce353b1582d29b6c1ddf31a0a009021d50836ddb0ec6004a2803775fe" args="" -->TH_CS_ITU_REC_470BG</em>&nbsp;</td><td>
<p>A color space designed for PAL/SECAM content. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a4ce7a695ce353b1582d29b6c1ddf31a0a0fa8ea07f583ee57943520ddb2f6e62e"></a><!-- doxytag: member="TH_CS_NSPACES" ref="a4ce7a695ce353b1582d29b6c1ddf31a0a0fa8ea07f583ee57943520ddb2f6e62e" args="" -->TH_CS_NSPACES</em>&nbsp;</td><td>
<p>The total number of currently defined color spaces. </p>
</td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a5c9e7f2f0c7ed209c9ca3ed0abd328bc"></a><!-- doxytag: member="codec.h::th_pixel_fmt" ref="a5c9e7f2f0c7ed209c9ca3ed0abd328bc" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc">th_pixel_fmt</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The currently defined pixel format tags. </p>
<p>See <a href="http://www.theora.org/doc/Theora.pdf">the Theora specification</a>, Section 4.4, for details on the precise sample locations. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="a5c9e7f2f0c7ed209c9ca3ed0abd328bcafed7ad7ee4345930255827bff6055162"></a><!-- doxytag: member="TH_PF_420" ref="a5c9e7f2f0c7ed209c9ca3ed0abd328bcafed7ad7ee4345930255827bff6055162" args="" -->TH_PF_420</em>&nbsp;</td><td>
<p>Chroma decimation by 2 in both the X and Y directions (4:2:0). </p>
<p>The Cb and Cr chroma planes are half the width and half the height of the luma plane. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5c9e7f2f0c7ed209c9ca3ed0abd328bca9e60af0159d42b20806d7eb4a8b833e6"></a><!-- doxytag: member="TH_PF_RSVD" ref="a5c9e7f2f0c7ed209c9ca3ed0abd328bca9e60af0159d42b20806d7eb4a8b833e6" args="" -->TH_PF_RSVD</em>&nbsp;</td><td>
<p>Currently reserved. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5c9e7f2f0c7ed209c9ca3ed0abd328bca0271d01babf2f51512479f4a6245b9fa"></a><!-- doxytag: member="TH_PF_422" ref="a5c9e7f2f0c7ed209c9ca3ed0abd328bca0271d01babf2f51512479f4a6245b9fa" args="" -->TH_PF_422</em>&nbsp;</td><td>
<p>Chroma decimation by 2 in the X direction (4:2:2). </p>
<p>The Cb and Cr chroma planes are half the width of the luma plane, but full height. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5c9e7f2f0c7ed209c9ca3ed0abd328bca2ac50ac048ea75501a5e0f99a63c8c86"></a><!-- doxytag: member="TH_PF_444" ref="a5c9e7f2f0c7ed209c9ca3ed0abd328bca2ac50ac048ea75501a5e0f99a63c8c86" args="" -->TH_PF_444</em>&nbsp;</td><td>
<p>No chroma decimation (4:4:4). </p>
<p>The Cb and Cr chroma planes are full width and full height. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5c9e7f2f0c7ed209c9ca3ed0abd328bca2d6d78b9df1df086bb60f32f963a31eb"></a><!-- doxytag: member="TH_PF_NFORMATS" ref="a5c9e7f2f0c7ed209c9ca3ed0abd328bca2d6d78b9df1df086bb60f32f963a31eb" args="" -->TH_PF_NFORMATS</em>&nbsp;</td><td>
<p>The total number of currently defined pixel formats. </p>
</td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,195 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: codec.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<h1>codec.h</h1><a href="codec_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/********************************************************************</span>
<a name="l00002"></a>00002 <span class="comment"> * *</span>
<a name="l00003"></a>00003 <span class="comment"> * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE. *</span>
<a name="l00004"></a>00004 <span class="comment"> * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *</span>
<a name="l00005"></a>00005 <span class="comment"> * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *</span>
<a name="l00006"></a>00006 <span class="comment"> * IN &apos;COPYING&apos;. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *</span>
<a name="l00007"></a>00007 <span class="comment"> * *</span>
<a name="l00008"></a>00008 <span class="comment"> * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *</span>
<a name="l00009"></a>00009 <span class="comment"> * by the Xiph.Org Foundation http://www.xiph.org/ *</span>
<a name="l00010"></a>00010 <span class="comment"> * *</span>
<a name="l00011"></a>00011 <span class="comment"> ********************************************************************</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment"> function:</span>
<a name="l00014"></a>00014 <span class="comment"> last mod: $Id: theora.h,v 1.8 2004/03/15 22:17:32 derf Exp $</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment"> ********************************************************************/</span>
<a name="l00017"></a>00017
<a name="l00062"></a>00062 <span class="preprocessor">#if !defined(_O_THEORA_CODEC_H_)</span>
<a name="l00063"></a><a class="code" href="codec_8h.html#a15352a6a862d25ab00a8f06ea65ee75b">00063</a> <span class="preprocessor"></span><span class="preprocessor"># define _O_THEORA_CODEC_H_ (1)</span>
<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor"># include &lt;ogg/ogg.h&gt;</span>
<a name="l00065"></a>00065
<a name="l00066"></a>00066 <span class="preprocessor">#if defined(__cplusplus)</span>
<a name="l00067"></a>00067 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l00068"></a>00068 <span class="preprocessor">#endif</span>
<a name="l00069"></a>00069 <span class="preprocessor"></span>
<a name="l00070"></a>00070
<a name="l00071"></a>00071
<a name="l00075"></a><a class="code" href="codec_8h.html#a4d8d8e34fc5ec39ffa05d61a310a0407">00075</a> <span class="preprocessor">#define TH_EFAULT (-1)</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span>
<a name="l00077"></a><a class="code" href="codec_8h.html#afbbd9f19fbf292aeb62a37792cecb870">00077</a> <span class="preprocessor">#define TH_EINVAL (-10)</span>
<a name="l00078"></a>00078 <span class="preprocessor"></span>
<a name="l00079"></a><a class="code" href="codec_8h.html#af00f7ecc5242d12a717202537324a510">00079</a> <span class="preprocessor">#define TH_EBADHEADER (-20)</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span>
<a name="l00081"></a><a class="code" href="codec_8h.html#a3dc08a00a9aba231be398f3e31726d9c">00081</a> <span class="preprocessor">#define TH_ENOTFORMAT (-21)</span>
<a name="l00082"></a>00082 <span class="preprocessor"></span>
<a name="l00083"></a><a class="code" href="codec_8h.html#ac3a45ef2b24f75259258edc481e3a122">00083</a> <span class="preprocessor">#define TH_EVERSION (-22)</span>
<a name="l00084"></a>00084 <span class="preprocessor"></span>
<a name="l00085"></a><a class="code" href="codec_8h.html#a921c47accc17841f220af5a6afb79efe">00085</a> <span class="preprocessor">#define TH_EIMPL (-23)</span>
<a name="l00086"></a>00086 <span class="preprocessor"></span>
<a name="l00087"></a><a class="code" href="codec_8h.html#a6efb84e9c2213a8840003eee2847b27f">00087</a> <span class="preprocessor">#define TH_EBADPACKET (-24)</span>
<a name="l00088"></a>00088 <span class="preprocessor"></span>
<a name="l00091"></a><a class="code" href="codec_8h.html#ab10e7b64f17a02707fc9348ea9832d09">00091</a> <span class="preprocessor">#define TH_DUPFRAME (1)</span>
<a name="l00092"></a>00092 <span class="preprocessor"></span>
<a name="l00098"></a><a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0">00098</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>{
<a name="l00101"></a><a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0adb9a17a3283c8d490652e507db2427cf">00101</a> <a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0adb9a17a3283c8d490652e507db2427cf" title="The color space was not specified at the encoder.">TH_CS_UNSPECIFIED</a>,
<a name="l00103"></a><a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a1a19346bbfb8192baa4c185df73d3397">00103</a> <a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a1a19346bbfb8192baa4c185df73d3397" title="A color space designed for NTSC content.">TH_CS_ITU_REC_470M</a>,
<a name="l00105"></a><a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a009021d50836ddb0ec6004a2803775fe">00105</a> <a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a009021d50836ddb0ec6004a2803775fe" title="A color space designed for PAL/SECAM content.">TH_CS_ITU_REC_470BG</a>,
<a name="l00107"></a><a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a0fa8ea07f583ee57943520ddb2f6e62e">00107</a> <a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a0fa8ea07f583ee57943520ddb2f6e62e" title="The total number of currently defined color spaces.">TH_CS_NSPACES</a>
<a name="l00108"></a>00108 }<a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0" title="The currently defined color space tags.">th_colorspace</a>;
<a name="l00109"></a>00109
<a name="l00114"></a><a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc">00114</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>{
<a name="l00118"></a><a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bcafed7ad7ee4345930255827bff6055162">00118</a> <a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bcafed7ad7ee4345930255827bff6055162" title="Chroma decimation by 2 in both the X and Y directions (4:2:0).">TH_PF_420</a>,
<a name="l00120"></a><a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca9e60af0159d42b20806d7eb4a8b833e6">00120</a> <a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca9e60af0159d42b20806d7eb4a8b833e6" title="Currently reserved.">TH_PF_RSVD</a>,
<a name="l00124"></a><a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca0271d01babf2f51512479f4a6245b9fa">00124</a> <a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca0271d01babf2f51512479f4a6245b9fa" title="Chroma decimation by 2 in the X direction (4:2:2).">TH_PF_422</a>,
<a name="l00127"></a><a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2ac50ac048ea75501a5e0f99a63c8c86">00127</a> <a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2ac50ac048ea75501a5e0f99a63c8c86" title="No chroma decimation (4:4:4).">TH_PF_444</a>,
<a name="l00129"></a><a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2d6d78b9df1df086bb60f32f963a31eb">00129</a> <a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2d6d78b9df1df086bb60f32f963a31eb" title="The total number of currently defined pixel formats.">TH_PF_NFORMATS</a>
<a name="l00130"></a>00130 }<a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc" title="The currently defined pixel format tags.">th_pixel_fmt</a>;
<a name="l00131"></a>00131
<a name="l00132"></a>00132
<a name="l00133"></a>00133
<a name="l00142"></a><a class="code" href="structth__img__plane.html">00142</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>{
<a name="l00144"></a><a class="code" href="structth__img__plane.html#a58cc297a99cd4594c3d30e56f2ed6b74">00144</a> <span class="keywordtype">int</span> width;
<a name="l00146"></a><a class="code" href="structth__img__plane.html#a21aea1367894468de489d529d7eaf44d">00146</a> <span class="keywordtype">int</span> height;
<a name="l00148"></a><a class="code" href="structth__img__plane.html#ab1100f071ffee3b37e07e3222f819bad">00148</a> <span class="keywordtype">int</span> stride;
<a name="l00150"></a><a class="code" href="structth__img__plane.html#af8133681516ce88b5a201c1b4b7e6ba2">00150</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *data;
<a name="l00151"></a>00151 }<a class="code" href="structth__img__plane.html" title="A buffer for a single color plane in an uncompressed image.">th_img_plane</a>;
<a name="l00152"></a>00152
<a name="l00168"></a><a class="code" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">00168</a> <span class="keyword">typedef</span> <a class="code" href="structth__img__plane.html" title="A buffer for a single color plane in an uncompressed image.">th_img_plane</a> <a class="code" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45" title="A complete image buffer for an uncompressed frame.">th_ycbcr_buffer</a>[3];
<a name="l00169"></a>00169
<a name="l00204"></a><a class="code" href="structth__info.html">00204</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>{
<a name="l00208"></a><a class="code" href="structth__info.html#a60b3e2cac006fee0e105a918d6a5a9f9">00208</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> version_major;
<a name="l00209"></a><a class="code" href="structth__info.html#abb1d4887a8079c6c5aaa6d7229f243d7">00209</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> version_minor;
<a name="l00210"></a><a class="code" href="structth__info.html#abfacc79b7cabae12b6ac2484f76602d3">00210</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> version_subminor;
<a name="l00214"></a><a class="code" href="structth__info.html#a6b8087a4d831da53011a43b8d74087a0">00214</a> ogg_uint32_t frame_width;
<a name="l00217"></a><a class="code" href="structth__info.html#a6b1adc3a16a8336a72692b0a5937214c">00217</a> ogg_uint32_t frame_height;
<a name="l00220"></a><a class="code" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345">00220</a> ogg_uint32_t pic_width;
<a name="l00223"></a><a class="code" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b">00223</a> ogg_uint32_t pic_height;
<a name="l00227"></a><a class="code" href="structth__info.html#a5b3f834bcf141564e7bb14f49101870f">00227</a> ogg_uint32_t pic_x;
<a name="l00235"></a><a class="code" href="structth__info.html#a8aacc575cab2dfe3735001c2ad32aa14">00235</a> ogg_uint32_t pic_y;
<a name="l00240"></a><a class="code" href="structth__info.html#a20606e61676f585a7e59cfc96de190a5">00240</a> ogg_uint32_t fps_numerator;
<a name="l00241"></a><a class="code" href="structth__info.html#aa619408f70c03935529f1d3eda7a3ec2">00241</a> ogg_uint32_t fps_denominator;
<a name="l00252"></a><a class="code" href="structth__info.html#a5be65dac9f75e37864cf73dd543570cd">00252</a> ogg_uint32_t aspect_numerator;
<a name="l00253"></a><a class="code" href="structth__info.html#a04c0bd477222d747a76085d8720322e2">00253</a> ogg_uint32_t aspect_denominator;
<a name="l00256"></a><a class="code" href="structth__info.html#a8c7828cd0e023e9d21108160d53659a6">00256</a> <a class="code" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0" title="The currently defined color space tags.">th_colorspace</a> colorspace;
<a name="l00258"></a><a class="code" href="structth__info.html#a2301388ef3755c41ab12fd144c1fc54e">00258</a> <a class="code" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc" title="The currently defined pixel format tags.">th_pixel_fmt</a> pixel_fmt;
<a name="l00262"></a><a class="code" href="structth__info.html#a1d9c8d768a4ae623269f5bd8f6f7a015">00262</a> <span class="keywordtype">int</span> target_bitrate;
<a name="l00268"></a>00268 <span class="comment">/*Currently this is set so that a qi of 0 corresponds to distortions of 24</span>
<a name="l00269"></a>00269 <span class="comment"> times the JND, and each increase by 16 halves that value.</span>
<a name="l00270"></a>00270 <span class="comment"> This gives us fine discrimination at low qualities, yet effective rate</span>
<a name="l00271"></a>00271 <span class="comment"> control at high qualities.</span>
<a name="l00272"></a>00272 <span class="comment"> The qi value 63 is special, however.</span>
<a name="l00273"></a>00273 <span class="comment"> For this, the highest quality, we use one half of a JND for our threshold.</span>
<a name="l00274"></a>00274 <span class="comment"> Due to the lower bounds placed on allowable quantizers in Theora, we will</span>
<a name="l00275"></a>00275 <span class="comment"> not actually be able to achieve quality this good, but this should</span>
<a name="l00276"></a>00276 <span class="comment"> provide as close to visually lossless quality as Theora is capable of.</span>
<a name="l00277"></a>00277 <span class="comment"> We could lift the quantizer restrictions without breaking VP3.1</span>
<a name="l00278"></a>00278 <span class="comment"> compatibility, but this would result in quantized coefficients that are</span>
<a name="l00279"></a>00279 <span class="comment"> too large for the current bitstream to be able to store.</span>
<a name="l00280"></a>00280 <span class="comment"> We&apos;d have to redesign the token syntax to store these large coefficients,</span>
<a name="l00281"></a>00281 <span class="comment"> which would make transcoding complex.*/</span>
<a name="l00282"></a><a class="code" href="structth__info.html#aa4cdcf96cb46b256821993e9a830ee02">00282</a> <span class="keywordtype">int</span> quality;
<a name="l00296"></a><a class="code" href="structth__info.html#a693ca4ab11fbc0c3f32594b4bb8766ed">00296</a> <span class="keywordtype">int</span> keyframe_granule_shift;
<a name="l00297"></a>00297 }<a class="code" href="structth__info.html" title="Theora bitstream information.">th_info</a>;
<a name="l00298"></a>00298
<a name="l00323"></a><a class="code" href="structth__comment.html">00323</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structth__comment.html" title="The comment information.">th_comment</a>{
<a name="l00325"></a><a class="code" href="structth__comment.html#ad72830e183e707bb0df423eb73b00de4">00325</a> <span class="keywordtype">char</span> **<a class="code" href="structth__comment.html#ad72830e183e707bb0df423eb73b00de4" title="The array of comment string vectors.">user_comments</a>;
<a name="l00327"></a><a class="code" href="structth__comment.html#a723dc6fdf75757e70e28eea864b10898">00327</a> <span class="keywordtype">int</span> *<a class="code" href="structth__comment.html#a723dc6fdf75757e70e28eea864b10898" title="An array of the corresponding length of each vector, in bytes.">comment_lengths</a>;
<a name="l00329"></a><a class="code" href="structth__comment.html#a5990c34932376f070ad0fc314daaeb78">00329</a> <span class="keywordtype">int</span> <a class="code" href="structth__comment.html#a5990c34932376f070ad0fc314daaeb78" title="The total number of comment strings.">comments</a>;
<a name="l00332"></a><a class="code" href="structth__comment.html#a93fbe894d23603f56843be15b0cbdba0">00332</a> <span class="keywordtype">char</span> *<a class="code" href="structth__comment.html#a93fbe894d23603f56843be15b0cbdba0" title="The null-terminated vendor string.">vendor</a>;
<a name="l00333"></a>00333 }<a class="code" href="structth__comment.html" title="The comment information.">th_comment</a>;
<a name="l00334"></a>00334
<a name="l00335"></a>00335
<a name="l00336"></a>00336
<a name="l00338"></a><a class="code" href="codec_8h.html#a6a1426d16beef8a311d7f0e9d2e96326">00338</a> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="codec_8h.html#a6a1426d16beef8a311d7f0e9d2e96326" title="A single base matrix.">th_quant_base</a>[64];
<a name="l00339"></a>00339
<a name="l00341"></a><a class="code" href="structth__quant__ranges.html">00341</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>{
<a name="l00343"></a><a class="code" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab">00343</a> <span class="keywordtype">int</span> nranges;
<a name="l00346"></a><a class="code" href="structth__quant__ranges.html#af3188a373bc0b8ffaa330d0ab4c1a194">00346</a> <span class="keyword">const</span> <span class="keywordtype">int</span> *sizes;
<a name="l00349"></a><a class="code" href="structth__quant__ranges.html#a52cb432f034737087492ea448de20bdb">00349</a> <span class="keyword">const</span> th_quant_base *base_matrices;
<a name="l00350"></a>00350 }<a class="code" href="structth__quant__ranges.html" title="A set of qi ranges.">th_quant_ranges</a>;
<a name="l00351"></a>00351
<a name="l00409"></a><a class="code" href="structth__quant__info.html">00409</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>{
<a name="l00411"></a><a class="code" href="structth__quant__info.html#ad5c1c0d1aa4127fcf864ae747d732ed9">00411</a> ogg_uint16_t dc_scale[64];
<a name="l00413"></a><a class="code" href="structth__quant__info.html#a102f079c8f4a135dc0895c10768aeb06">00413</a> ogg_uint16_t ac_scale[64];
<a name="l00415"></a><a class="code" href="structth__quant__info.html#a4ac56bf0a45b5743b36daf85d5cd9e33">00415</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> loop_filter_limits[64];
<a name="l00417"></a><a class="code" href="structth__quant__info.html#a6feacf4b365e305a7df7b93d87ee7bb8">00417</a> <a class="code" href="structth__quant__ranges.html" title="A set of qi ranges.">th_quant_ranges</a> qi_ranges[2][3];
<a name="l00418"></a>00418 }<a class="code" href="structth__quant__info.html" title="A complete set of quantization parameters.">th_quant_info</a>;
<a name="l00419"></a>00419
<a name="l00420"></a>00420
<a name="l00421"></a>00421
<a name="l00423"></a><a class="code" href="codec_8h.html#a49bf449eae33c5320f0c308f32c6ae42">00423</a> <span class="preprocessor">#define TH_NHUFFMAN_TABLES (80)</span>
<a name="l00424"></a>00424 <span class="preprocessor"></span>
<a name="l00425"></a><a class="code" href="codec_8h.html#a2a44f48084e76a58cae48fb5d47cd422">00425</a> <span class="preprocessor">#define TH_NDCT_TOKENS (32)</span>
<a name="l00426"></a>00426 <span class="preprocessor"></span>
<a name="l00438"></a><a class="code" href="structth__huff__code.html">00438</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>{
<a name="l00441"></a><a class="code" href="structth__huff__code.html#a6dd29e3aa5a0c5a2dd5ce1f45b1162b4">00441</a> ogg_uint32_t pattern;
<a name="l00444"></a><a class="code" href="structth__huff__code.html#aaf97b8f2f90042f7bc136a7b2bc35e35">00444</a> <span class="keywordtype">int</span> nbits;
<a name="l00445"></a>00445 }<a class="code" href="structth__huff__code.html" title="A Huffman code for a Theora DCT token.">th_huff_code</a>;
<a name="l00446"></a>00446
<a name="l00447"></a>00447
<a name="l00448"></a>00448
<a name="l00456"></a>00456 <span class="keyword">extern</span> <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="group__basefuncs.html#ga04846066738d9f2024fc9961162b2dbc" title="Retrieves a human-readable string to identify the library vendor and version.">th_version_string</a>(<span class="keywordtype">void</span>);
<a name="l00466"></a>00466 <span class="keyword">extern</span> ogg_uint32_t <a class="code" href="group__basefuncs.html#gab723a75c0f95b3eb817f7f769846016b" title="Retrieves the library version number.">th_version_number</a>(<span class="keywordtype">void</span>);
<a name="l00476"></a>00476 <span class="keyword">extern</span> ogg_int64_t <a class="code" href="group__basefuncs.html#ga95b10e76fc4c05d0240ea2dfd9fd62bd" title="Converts a granule position to an absolute frame index, starting at 0.">th_granule_frame</a>(<span class="keywordtype">void</span> *_encdec,ogg_int64_t _granpos);
<a name="l00488"></a>00488 <span class="keyword">extern</span> <span class="keywordtype">double</span> <a class="code" href="group__basefuncs.html#ga707e1e281de788af0df39ef00f3fb432" title="Converts a granule position to an absolute time in seconds.">th_granule_time</a>(<span class="keywordtype">void</span> *_encdec,ogg_int64_t _granpos);
<a name="l00498"></a>00498 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__basefuncs.html#ga02f3f38261a9b39452d8a5e6f8737cc1" title="Determines whether a Theora packet is a header or not.">th_packet_isheader</a>(ogg_packet *_op);
<a name="l00509"></a>00509 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__basefuncs.html#gafe95cfd06f0fef413266c9168a66248a" title="Determines whether a theora packet is a key frame or not.">th_packet_iskeyframe</a>(ogg_packet *_op);
<a name="l00519"></a>00519 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__basefuncs.html#ga430d9c605816a6ca0bdce3a0b965b926" title="Initializes a th_info structure.">th_info_init</a>(<a class="code" href="structth__info.html" title="Theora bitstream information.">th_info</a> *_info);
<a name="l00524"></a>00524 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__basefuncs.html#gab3d6441ab4a4969859ef5fd78a9e3c1c" title="Clears a th_info structure.">th_info_clear</a>(<a class="code" href="structth__info.html" title="Theora bitstream information.">th_info</a> *_info);
<a name="l00525"></a>00525
<a name="l00530"></a>00530 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__basefuncs.html#ga6c8ab25988e7ea9d7b1e31a54cf58f09" title="Initialize a th_comment structure.">th_comment_init</a>(<a class="code" href="structth__comment.html" title="The comment information.">th_comment</a> *_tc);
<a name="l00540"></a>00540 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__basefuncs.html#ga19a1f7b8032db957df151a34e5ac9272" title="Add a comment to an initialized th_comment structure.">th_comment_add</a>(<a class="code" href="structth__comment.html" title="The comment information.">th_comment</a> *_tc, <span class="keywordtype">char</span> *_comment);
<a name="l00551"></a>00551 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__basefuncs.html#ga6c5edc201ca220a30787ca6c1ddcaeaf" title="Add a comment to an initialized th_comment structure.">th_comment_add_tag</a>(<a class="code" href="structth__comment.html" title="The comment information.">th_comment</a> *_tc,<span class="keywordtype">char</span> *_tag,<span class="keywordtype">char</span> *_val);
<a name="l00567"></a>00567 <span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="group__basefuncs.html#ga33c8b4f57a03217636d704c2ebb211fa" title="Look up a comment value by its tag.">th_comment_query</a>(<a class="code" href="structth__comment.html" title="The comment information.">th_comment</a> *_tc,<span class="keywordtype">char</span> *_tag,<span class="keywordtype">int</span> _count);
<a name="l00575"></a>00575 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__basefuncs.html#ga81d518dc4426f63ceaedcbe2668679fc" title="Look up the number of instances of a tag.">th_comment_query_count</a>(<a class="code" href="structth__comment.html" title="The comment information.">th_comment</a> *_tc,<span class="keywordtype">char</span> *_tag);
<a name="l00581"></a>00581 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__basefuncs.html#gae736c1afa514947a3feb223143af95e3" title="Clears a th_comment structure.">th_comment_clear</a>(<a class="code" href="structth__comment.html" title="The comment information.">th_comment</a> *_tc);
<a name="l00584"></a>00584
<a name="l00585"></a>00585
<a name="l00586"></a>00586
<a name="l00587"></a>00587 <span class="preprocessor">#if defined(__cplusplus)</span>
<a name="l00588"></a>00588 <span class="preprocessor"></span>}
<a name="l00589"></a>00589 <span class="preprocessor">#endif</span>
<a name="l00590"></a>00590 <span class="preprocessor"></span>
<a name="l00591"></a>00591 <span class="preprocessor">#endif</span>
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,498 @@
/* The standard CSS for doxygen */
body, table, div, p, dl {
font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
font-size: 12px;
}
/* @group Heading Levels */
h1 {
text-align: center;
font-size: 150%;
}
h2 {
font-size: 120%;
}
h3 {
font-size: 100%;
}
dt {
font-weight: bold;
}
div.multicol {
-moz-column-gap: 1em;
-webkit-column-gap: 1em;
-moz-column-count: 3;
-webkit-column-count: 3;
}
p.startli, p.startdd {
margin-top: 2px;
}
p.endli {
margin-bottom: 0px;
}
p.enddd {
margin-bottom: 4px;
}
/* @end */
caption {
font-weight: bold;
}
span.legend {
font-size: 70%;
text-align: center;
}
div.qindex, div.navtab{
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
padding: 2px;
}
div.qindex, div.navpath {
width: 100%;
line-height: 140%;
}
div.navtab {
margin-right: 15px;
}
/* @group Link Styling */
a {
color: #153788;
font-weight: normal;
text-decoration: none;
}
.contents a:visited {
color: #1b77c5;
}
a:hover {
text-decoration: underline;
}
a.qindex {
font-weight: bold;
}
a.qindexHL {
font-weight: bold;
background-color: #6666cc;
color: #ffffff;
border: 1px double #9295C2;
}
.contents a.qindexHL:visited {
color: #ffffff;
}
a.el {
font-weight: bold;
}
a.elRef {
}
a.code {
}
a.codeRef {
}
/* @end */
dl.el {
margin-left: -1cm;
}
.fragment {
font-family: monospace, fixed;
font-size: 105%;
}
pre.fragment {
border: 1px solid #CCCCCC;
background-color: #f5f5f5;
padding: 4px 6px;
margin: 4px 8px 4px 2px;
}
div.ah {
background-color: black;
font-weight: bold;
color: #ffffff;
margin-bottom: 3px;
margin-top: 3px
}
div.groupHeader {
margin-left: 16px;
margin-top: 12px;
margin-bottom: 6px;
font-weight: bold;
}
div.groupText {
margin-left: 16px;
font-style: italic;
}
body {
background: white;
color: black;
margin-right: 20px;
margin-left: 20px;
}
td.indexkey {
background-color: #e8eef2;
font-weight: bold;
border: 1px solid #CCCCCC;
margin: 2px 0px 2px 0;
padding: 2px 10px;
}
td.indexvalue {
background-color: #e8eef2;
border: 1px solid #CCCCCC;
padding: 2px 10px;
margin: 2px 0px;
}
tr.memlist {
background-color: #f0f0f0;
}
p.formulaDsp {
text-align: center;
}
img.formulaDsp {
}
img.formulaInl {
vertical-align: middle;
}
div.center {
text-align: center;
margin-top: 0px;
margin-bottom: 0px;
padding: 0px;
}
div.center img {
border: 0px;
}
img.footer {
border: 0px;
vertical-align: middle;
}
/* @group Code Colorization */
span.keyword {
color: #008000
}
span.keywordtype {
color: #604020
}
span.keywordflow {
color: #e08000
}
span.comment {
color: #800000
}
span.preprocessor {
color: #806020
}
span.stringliteral {
color: #002080
}
span.charliteral {
color: #008080
}
span.vhdldigit {
color: #ff00ff
}
span.vhdlchar {
color: #000000
}
span.vhdlkeyword {
color: #700070
}
span.vhdllogic {
color: #ff0000
}
/* @end */
.search {
color: #003399;
font-weight: bold;
}
form.search {
margin-bottom: 0px;
margin-top: 0px;
}
input.search {
font-size: 75%;
color: #000080;
font-weight: normal;
background-color: #e8eef2;
}
td.tiny {
font-size: 75%;
}
.dirtab {
padding: 4px;
border-collapse: collapse;
border: 1px solid #84b0c7;
}
th.dirtab {
background: #e8eef2;
font-weight: bold;
}
hr {
height: 0;
border: none;
border-top: 1px solid #666;
}
/* @group Member Descriptions */
.mdescLeft, .mdescRight,
.memItemLeft, .memItemRight,
.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
background-color: #FAFAFA;
border: none;
margin: 4px;
padding: 1px 0 0 8px;
}
.mdescLeft, .mdescRight {
padding: 0px 8px 4px 8px;
color: #555;
}
.memItemLeft, .memItemRight, .memTemplParams {
border-top: 1px solid #ccc;
}
.memItemLeft, .memTemplItemLeft {
white-space: nowrap;
}
.memTemplParams {
color: #606060;
white-space: nowrap;
}
/* @end */
/* @group Member Details */
/* Styles for detailed member documentation */
.memtemplate {
font-size: 80%;
color: #606060;
font-weight: normal;
margin-left: 3px;
}
.memnav {
background-color: #e8eef2;
border: 1px solid #84b0c7;
text-align: center;
margin: 2px;
margin-right: 15px;
padding: 2px;
}
.memitem {
padding: 0;
margin-bottom: 10px;
}
.memname {
white-space: nowrap;
font-weight: bold;
}
.memproto, .memdoc {
border: 1px solid #84b0c7;
}
.memproto {
padding: 0;
background-color: #d5e1e8;
font-weight: bold;
-webkit-border-top-left-radius: 8px;
-webkit-border-top-right-radius: 8px;
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-moz-border-radius-topleft: 8px;
-moz-border-radius-topright: 8px;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
}
.memdoc {
padding: 2px 5px;
background-color: #eef3f5;
border-top-width: 0;
-webkit-border-bottom-left-radius: 8px;
-webkit-border-bottom-right-radius: 8px;
-webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-moz-border-radius-bottomleft: 8px;
-moz-border-radius-bottomright: 8px;
-moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
}
.paramkey {
text-align: right;
}
.paramtype {
white-space: nowrap;
}
.paramname {
color: #602020;
white-space: nowrap;
}
.paramname em {
font-style: normal;
}
/* @end */
/* @group Directory (tree) */
/* for the tree view */
.ftvtree {
font-family: sans-serif;
margin: 0.5em;
}
/* these are for tree view when used as main index */
.directory {
font-size: 9pt;
font-weight: bold;
}
.directory h3 {
margin: 0px;
margin-top: 1em;
font-size: 11pt;
}
/*
The following two styles can be used to replace the root node title
with an image of your choice. Simply uncomment the next two styles,
specify the name of your image and be sure to set 'height' to the
proper pixel height of your image.
*/
/*
.directory h3.swap {
height: 61px;
background-repeat: no-repeat;
background-image: url("yourimage.gif");
}
.directory h3.swap span {
display: none;
}
*/
.directory > h3 {
margin-top: 0;
}
.directory p {
margin: 0px;
white-space: nowrap;
}
.directory div {
display: none;
margin: 0px;
}
.directory img {
vertical-align: -30%;
}
/* these are for tree view when not used as main index */
.directory-alt {
font-size: 100%;
font-weight: bold;
}
.directory-alt h3 {
margin: 0px;
margin-top: 1em;
font-size: 11pt;
}
.directory-alt > h3 {
margin-top: 0;
}
.directory-alt p {
margin: 0px;
white-space: nowrap;
}
.directory-alt div {
display: none;
margin: 0px;
}
.directory-alt img {
vertical-align: -30%;
}
/* @end */
address {
font-style: normal;
color: #333;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,39 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: File Index</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>File List</h1>Here is a list of all files with brief descriptions:<table>
<tr><td class="indexkey"><a class="el" href="codec_8h.html">codec.h</a> <a href="codec_8h_source.html">[code]</a></td><td class="indexvalue">The shared <code>libtheoradec</code> and <code>libtheoraenc</code> C API </td></tr>
<tr><td class="indexkey"><a class="el" href="theora_8h.html">theora.h</a> <a href="theora_8h_source.html">[code]</a></td><td class="indexvalue">The libtheora pre-1.0 legacy C API </td></tr>
<tr><td class="indexkey"><a class="el" href="theoradec_8h.html">theoradec.h</a> <a href="theoradec_8h_source.html">[code]</a></td><td class="indexvalue">The <code>libtheoradec</code> C decoding API </td></tr>
<tr><td class="indexkey"><a class="el" href="theoraenc_8h.html">theoraenc.h</a> <a href="theoraenc_8h_source.html">[code]</a></td><td class="indexvalue">The <code>libtheoraenc</code> C encoding API </td></tr>
</table>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,353 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="functions.html"><span>All</span></a></li>
<li><a href="functions_vars.html"><span>Variables</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="#index_a"><span>a</span></a></li>
<li><a href="#index_b"><span>b</span></a></li>
<li><a href="#index_c"><span>c</span></a></li>
<li><a href="#index_d"><span>d</span></a></li>
<li><a href="#index_f"><span>f</span></a></li>
<li><a href="#index_g"><span>g</span></a></li>
<li><a href="#index_h"><span>h</span></a></li>
<li><a href="#index_i"><span>i</span></a></li>
<li><a href="#index_k"><span>k</span></a></li>
<li><a href="#index_l"><span>l</span></a></li>
<li><a href="#index_n"><span>n</span></a></li>
<li><a href="#index_o"><span>o</span></a></li>
<li><a href="#index_p"><span>p</span></a></li>
<li><a href="#index_q"><span>q</span></a></li>
<li><a href="#index_s"><span>s</span></a></li>
<li><a href="#index_t"><span>t</span></a></li>
<li><a href="#index_u"><span>u</span></a></li>
<li><a href="#index_v"><span>v</span></a></li>
<li><a href="#index_w"><span>w</span></a></li>
<li><a href="#index_y"><span>y</span></a></li>
</ul>
</div>
</div>
<div class="contents">
Here is a list of all struct and union fields with links to the structures/unions they belong to:
<h3><a class="anchor" id="index_a">- a -</a></h3><ul>
<li>ac_scale
: <a class="el" href="structth__quant__info.html#a102f079c8f4a135dc0895c10768aeb06">th_quant_info</a>
</li>
<li>aspect_denominator
: <a class="el" href="structth__info.html#a04c0bd477222d747a76085d8720322e2">th_info</a>
, <a class="el" href="structtheora__info.html#afebc4d0cbfb34b68c833a8c79e83ae12">theora_info</a>
</li>
<li>aspect_numerator
: <a class="el" href="structth__info.html#a5be65dac9f75e37864cf73dd543570cd">th_info</a>
, <a class="el" href="structtheora__info.html#a5a3ed8c79815fba1aa06c3f7d8e48b35">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_b">- b -</a></h3><ul>
<li>base_matrices
: <a class="el" href="structth__quant__ranges.html#a52cb432f034737087492ea448de20bdb">th_quant_ranges</a>
</li>
</ul>
<h3><a class="anchor" id="index_c">- c -</a></h3><ul>
<li>codec_setup
: <a class="el" href="structtheora__info.html#a719a1d77a4a3bfeab79aa5747dbbb04c">theora_info</a>
</li>
<li>colorspace
: <a class="el" href="structth__info.html#a8c7828cd0e023e9d21108160d53659a6">th_info</a>
, <a class="el" href="structtheora__info.html#a5eaba99c96706d47b426ab7b7602dc5d">theora_info</a>
</li>
<li>comment_lengths
: <a class="el" href="structth__comment.html#a723dc6fdf75757e70e28eea864b10898">th_comment</a>
, <a class="el" href="structtheora__comment.html#a5ab4a376d3c217282a684577c9c9f49a">theora_comment</a>
</li>
<li>comments
: <a class="el" href="structth__comment.html#a5990c34932376f070ad0fc314daaeb78">th_comment</a>
, <a class="el" href="structtheora__comment.html#a122393035c8352ff9be42d69e73aee00">theora_comment</a>
</li>
<li>ctx
: <a class="el" href="structth__stripe__callback.html#ab895162ce29a411fa98e0ba9661f47d4">th_stripe_callback</a>
</li>
</ul>
<h3><a class="anchor" id="index_d">- d -</a></h3><ul>
<li>data
: <a class="el" href="structth__img__plane.html#af8133681516ce88b5a201c1b4b7e6ba2">th_img_plane</a>
</li>
<li>dc_scale
: <a class="el" href="structth__quant__info.html#ad5c1c0d1aa4127fcf864ae747d732ed9">th_quant_info</a>
</li>
<li>dropframes_p
: <a class="el" href="structtheora__info.html#af294db65a8363a0bcf43f4727763b291">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_f">- f -</a></h3><ul>
<li>fps_denominator
: <a class="el" href="structth__info.html#aa619408f70c03935529f1d3eda7a3ec2">th_info</a>
, <a class="el" href="structtheora__info.html#a9aa7e826e0323a4ae8cd8646a6cfbfea">theora_info</a>
</li>
<li>fps_numerator
: <a class="el" href="structtheora__info.html#a3478199aa5ab213816c1819f70085ad7">theora_info</a>
, <a class="el" href="structth__info.html#a20606e61676f585a7e59cfc96de190a5">th_info</a>
</li>
<li>frame_height
: <a class="el" href="structth__info.html#a6b1adc3a16a8336a72692b0a5937214c">th_info</a>
, <a class="el" href="structtheora__info.html#a287e4c194f1d2e6deb39d59f1748ea48">theora_info</a>
</li>
<li>frame_width
: <a class="el" href="structtheora__info.html#a8f28f4018a25634d40e4ae861fbbccfa">theora_info</a>
, <a class="el" href="structth__info.html#a6b8087a4d831da53011a43b8d74087a0">th_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_g">- g -</a></h3><ul>
<li>granulepos
: <a class="el" href="structtheora__state.html#a5dd344a3f79ea7501b18c756772fab7b">theora_state</a>
</li>
</ul>
<h3><a class="anchor" id="index_h">- h -</a></h3><ul>
<li>height
: <a class="el" href="structth__img__plane.html#a21aea1367894468de489d529d7eaf44d">th_img_plane</a>
, <a class="el" href="structtheora__info.html#ae6f0274fc4a7f285c422d91abb35f9c6">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_i">- i -</a></h3><ul>
<li>i
: <a class="el" href="structtheora__state.html#a0efc7ac581ef260b0ca17f518ace0731">theora_state</a>
</li>
<li>internal_decode
: <a class="el" href="structtheora__state.html#ad20c4eebbc5ed9764cf03ba8b90e796e">theora_state</a>
</li>
<li>internal_encode
: <a class="el" href="structtheora__state.html#a1fbfd82fb7210cbcc4233cb680ec2af6">theora_state</a>
</li>
</ul>
<h3><a class="anchor" id="index_k">- k -</a></h3><ul>
<li>keyframe_auto_p
: <a class="el" href="structtheora__info.html#a23648173369174f687085c0ce85ef30e">theora_info</a>
</li>
<li>keyframe_auto_threshold
: <a class="el" href="structtheora__info.html#a95cb8958e29ad3d24047ee8f9e7fd99b">theora_info</a>
</li>
<li>keyframe_data_target_bitrate
: <a class="el" href="structtheora__info.html#a588942d1ee90a26a7effdf6a0e98b9ce">theora_info</a>
</li>
<li>keyframe_frequency
: <a class="el" href="structtheora__info.html#a03e1b3e337af5f9dabaaaeb9050f145a">theora_info</a>
</li>
<li>keyframe_frequency_force
: <a class="el" href="structtheora__info.html#ad9d2e22c44a53473010e6d1042dfe0d8">theora_info</a>
</li>
<li>keyframe_granule_shift
: <a class="el" href="structth__info.html#a693ca4ab11fbc0c3f32594b4bb8766ed">th_info</a>
</li>
<li>keyframe_mindistance
: <a class="el" href="structtheora__info.html#aa79ca8c0e77a884d4487fd627fae32e9">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_l">- l -</a></h3><ul>
<li>loop_filter_limits
: <a class="el" href="structth__quant__info.html#a4ac56bf0a45b5743b36daf85d5cd9e33">th_quant_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_n">- n -</a></h3><ul>
<li>nbits
: <a class="el" href="structth__huff__code.html#aaf97b8f2f90042f7bc136a7b2bc35e35">th_huff_code</a>
</li>
<li>noise_sensitivity
: <a class="el" href="structtheora__info.html#ac4789034f547b57d1075e035050eeed9">theora_info</a>
</li>
<li>nranges
: <a class="el" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab">th_quant_ranges</a>
</li>
</ul>
<h3><a class="anchor" id="index_o">- o -</a></h3><ul>
<li>offset_x
: <a class="el" href="structtheora__info.html#af5949a02bef29512f2705e6f6c944e3b">theora_info</a>
</li>
<li>offset_y
: <a class="el" href="structtheora__info.html#a91c3922097ba32a85acd584a01dc2c93">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_p">- p -</a></h3><ul>
<li>pattern
: <a class="el" href="structth__huff__code.html#a6dd29e3aa5a0c5a2dd5ce1f45b1162b4">th_huff_code</a>
</li>
<li>pic_height
: <a class="el" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b">th_info</a>
</li>
<li>pic_width
: <a class="el" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345">th_info</a>
</li>
<li>pic_x
: <a class="el" href="structth__info.html#a5b3f834bcf141564e7bb14f49101870f">th_info</a>
</li>
<li>pic_y
: <a class="el" href="structth__info.html#a8aacc575cab2dfe3735001c2ad32aa14">th_info</a>
</li>
<li>pixel_fmt
: <a class="el" href="structth__info.html#a2301388ef3755c41ab12fd144c1fc54e">th_info</a>
</li>
<li>pixelformat
: <a class="el" href="structtheora__info.html#a65ab4376ab5242ee82e06c78fb7008ab">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_q">- q -</a></h3><ul>
<li>qi_ranges
: <a class="el" href="structth__quant__info.html#a6feacf4b365e305a7df7b93d87ee7bb8">th_quant_info</a>
</li>
<li>quality
: <a class="el" href="structth__info.html#aa4cdcf96cb46b256821993e9a830ee02">th_info</a>
, <a class="el" href="structtheora__info.html#a71a4748a5f31bd58d0e403b7806c980d">theora_info</a>
</li>
<li>quick_p
: <a class="el" href="structtheora__info.html#a2dfae4fd175dbd19254eaf0697778ff5">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_s">- s -</a></h3><ul>
<li>sharpness
: <a class="el" href="structtheora__info.html#a3fb695de2b2f56dd0203b9e2eb0df1cc">theora_info</a>
</li>
<li>sizes
: <a class="el" href="structth__quant__ranges.html#af3188a373bc0b8ffaa330d0ab4c1a194">th_quant_ranges</a>
</li>
<li>stride
: <a class="el" href="structth__img__plane.html#ab1100f071ffee3b37e07e3222f819bad">th_img_plane</a>
</li>
<li>stripe_decoded
: <a class="el" href="structth__stripe__callback.html#a977c725680a37e3446e459f063b1f4a5">th_stripe_callback</a>
</li>
</ul>
<h3><a class="anchor" id="index_t">- t -</a></h3><ul>
<li>target_bitrate
: <a class="el" href="structth__info.html#a1d9c8d768a4ae623269f5bd8f6f7a015">th_info</a>
, <a class="el" href="structtheora__info.html#a0cfba041767ae2416dd190a406afe713">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_u">- u -</a></h3><ul>
<li>u
: <a class="el" href="structyuv__buffer.html#a8b1857afe3ffac28f259499a57a559e1">yuv_buffer</a>
</li>
<li>user_comments
: <a class="el" href="structth__comment.html#ad72830e183e707bb0df423eb73b00de4">th_comment</a>
, <a class="el" href="structtheora__comment.html#a1e236fd180dfce19be89081399444cf5">theora_comment</a>
</li>
<li>uv_height
: <a class="el" href="structyuv__buffer.html#a640f1a0b456d3807f9f0538b22f10097">yuv_buffer</a>
</li>
<li>uv_stride
: <a class="el" href="structyuv__buffer.html#ab265cc24ffb5650bf52daf223b0debb9">yuv_buffer</a>
</li>
<li>uv_width
: <a class="el" href="structyuv__buffer.html#a8c59a57c35af0be519ee47f15e49fe2b">yuv_buffer</a>
</li>
</ul>
<h3><a class="anchor" id="index_v">- v -</a></h3><ul>
<li>v
: <a class="el" href="structyuv__buffer.html#aa429491dd112adb0254672c59ef55075">yuv_buffer</a>
</li>
<li>vendor
: <a class="el" href="structth__comment.html#a93fbe894d23603f56843be15b0cbdba0">th_comment</a>
, <a class="el" href="structtheora__comment.html#adb371baf8f0daed42af8b875cf8430ef">theora_comment</a>
</li>
<li>version_major
: <a class="el" href="structth__info.html#a60b3e2cac006fee0e105a918d6a5a9f9">th_info</a>
, <a class="el" href="structtheora__info.html#a7c5ebb9e6700aaef87f29f7c6074e474">theora_info</a>
</li>
<li>version_minor
: <a class="el" href="structtheora__info.html#a75eda4f30270d833c7b9dba43932a06a">theora_info</a>
, <a class="el" href="structth__info.html#abb1d4887a8079c6c5aaa6d7229f243d7">th_info</a>
</li>
<li>version_subminor
: <a class="el" href="structtheora__info.html#aa07967ecd6e20bd2928ead42b6397b3d">theora_info</a>
, <a class="el" href="structth__info.html#abfacc79b7cabae12b6ac2484f76602d3">th_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_w">- w -</a></h3><ul>
<li>width
: <a class="el" href="structth__img__plane.html#a58cc297a99cd4594c3d30e56f2ed6b74">th_img_plane</a>
, <a class="el" href="structtheora__info.html#a17c2fc651bb3329f1ea6b13ff1d3957b">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_y">- y -</a></h3><ul>
<li>y
: <a class="el" href="structyuv__buffer.html#a725727c70eeced6b8c90866973399ac1">yuv_buffer</a>
</li>
<li>y_height
: <a class="el" href="structyuv__buffer.html#a5a8b60e012247e2caffcbbaca99414e0">yuv_buffer</a>
</li>
<li>y_stride
: <a class="el" href="structyuv__buffer.html#a9cdf61834c11b2351640a4a243ad0549">yuv_buffer</a>
</li>
<li>y_width
: <a class="el" href="structyuv__buffer.html#aaa6c06c071da933231647238418d5fc0">yuv_buffer</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,353 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields - Variables</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="functions.html"><span>All</span></a></li>
<li class="current"><a href="functions_vars.html"><span>Variables</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="#index_a"><span>a</span></a></li>
<li><a href="#index_b"><span>b</span></a></li>
<li><a href="#index_c"><span>c</span></a></li>
<li><a href="#index_d"><span>d</span></a></li>
<li><a href="#index_f"><span>f</span></a></li>
<li><a href="#index_g"><span>g</span></a></li>
<li><a href="#index_h"><span>h</span></a></li>
<li><a href="#index_i"><span>i</span></a></li>
<li><a href="#index_k"><span>k</span></a></li>
<li><a href="#index_l"><span>l</span></a></li>
<li><a href="#index_n"><span>n</span></a></li>
<li><a href="#index_o"><span>o</span></a></li>
<li><a href="#index_p"><span>p</span></a></li>
<li><a href="#index_q"><span>q</span></a></li>
<li><a href="#index_s"><span>s</span></a></li>
<li><a href="#index_t"><span>t</span></a></li>
<li><a href="#index_u"><span>u</span></a></li>
<li><a href="#index_v"><span>v</span></a></li>
<li><a href="#index_w"><span>w</span></a></li>
<li><a href="#index_y"><span>y</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;
<h3><a class="anchor" id="index_a">- a -</a></h3><ul>
<li>ac_scale
: <a class="el" href="structth__quant__info.html#a102f079c8f4a135dc0895c10768aeb06">th_quant_info</a>
</li>
<li>aspect_denominator
: <a class="el" href="structth__info.html#a04c0bd477222d747a76085d8720322e2">th_info</a>
, <a class="el" href="structtheora__info.html#afebc4d0cbfb34b68c833a8c79e83ae12">theora_info</a>
</li>
<li>aspect_numerator
: <a class="el" href="structth__info.html#a5be65dac9f75e37864cf73dd543570cd">th_info</a>
, <a class="el" href="structtheora__info.html#a5a3ed8c79815fba1aa06c3f7d8e48b35">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_b">- b -</a></h3><ul>
<li>base_matrices
: <a class="el" href="structth__quant__ranges.html#a52cb432f034737087492ea448de20bdb">th_quant_ranges</a>
</li>
</ul>
<h3><a class="anchor" id="index_c">- c -</a></h3><ul>
<li>codec_setup
: <a class="el" href="structtheora__info.html#a719a1d77a4a3bfeab79aa5747dbbb04c">theora_info</a>
</li>
<li>colorspace
: <a class="el" href="structth__info.html#a8c7828cd0e023e9d21108160d53659a6">th_info</a>
, <a class="el" href="structtheora__info.html#a5eaba99c96706d47b426ab7b7602dc5d">theora_info</a>
</li>
<li>comment_lengths
: <a class="el" href="structth__comment.html#a723dc6fdf75757e70e28eea864b10898">th_comment</a>
, <a class="el" href="structtheora__comment.html#a5ab4a376d3c217282a684577c9c9f49a">theora_comment</a>
</li>
<li>comments
: <a class="el" href="structth__comment.html#a5990c34932376f070ad0fc314daaeb78">th_comment</a>
, <a class="el" href="structtheora__comment.html#a122393035c8352ff9be42d69e73aee00">theora_comment</a>
</li>
<li>ctx
: <a class="el" href="structth__stripe__callback.html#ab895162ce29a411fa98e0ba9661f47d4">th_stripe_callback</a>
</li>
</ul>
<h3><a class="anchor" id="index_d">- d -</a></h3><ul>
<li>data
: <a class="el" href="structth__img__plane.html#af8133681516ce88b5a201c1b4b7e6ba2">th_img_plane</a>
</li>
<li>dc_scale
: <a class="el" href="structth__quant__info.html#ad5c1c0d1aa4127fcf864ae747d732ed9">th_quant_info</a>
</li>
<li>dropframes_p
: <a class="el" href="structtheora__info.html#af294db65a8363a0bcf43f4727763b291">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_f">- f -</a></h3><ul>
<li>fps_denominator
: <a class="el" href="structth__info.html#aa619408f70c03935529f1d3eda7a3ec2">th_info</a>
, <a class="el" href="structtheora__info.html#a9aa7e826e0323a4ae8cd8646a6cfbfea">theora_info</a>
</li>
<li>fps_numerator
: <a class="el" href="structtheora__info.html#a3478199aa5ab213816c1819f70085ad7">theora_info</a>
, <a class="el" href="structth__info.html#a20606e61676f585a7e59cfc96de190a5">th_info</a>
</li>
<li>frame_height
: <a class="el" href="structth__info.html#a6b1adc3a16a8336a72692b0a5937214c">th_info</a>
, <a class="el" href="structtheora__info.html#a287e4c194f1d2e6deb39d59f1748ea48">theora_info</a>
</li>
<li>frame_width
: <a class="el" href="structtheora__info.html#a8f28f4018a25634d40e4ae861fbbccfa">theora_info</a>
, <a class="el" href="structth__info.html#a6b8087a4d831da53011a43b8d74087a0">th_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_g">- g -</a></h3><ul>
<li>granulepos
: <a class="el" href="structtheora__state.html#a5dd344a3f79ea7501b18c756772fab7b">theora_state</a>
</li>
</ul>
<h3><a class="anchor" id="index_h">- h -</a></h3><ul>
<li>height
: <a class="el" href="structth__img__plane.html#a21aea1367894468de489d529d7eaf44d">th_img_plane</a>
, <a class="el" href="structtheora__info.html#ae6f0274fc4a7f285c422d91abb35f9c6">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_i">- i -</a></h3><ul>
<li>i
: <a class="el" href="structtheora__state.html#a0efc7ac581ef260b0ca17f518ace0731">theora_state</a>
</li>
<li>internal_decode
: <a class="el" href="structtheora__state.html#ad20c4eebbc5ed9764cf03ba8b90e796e">theora_state</a>
</li>
<li>internal_encode
: <a class="el" href="structtheora__state.html#a1fbfd82fb7210cbcc4233cb680ec2af6">theora_state</a>
</li>
</ul>
<h3><a class="anchor" id="index_k">- k -</a></h3><ul>
<li>keyframe_auto_p
: <a class="el" href="structtheora__info.html#a23648173369174f687085c0ce85ef30e">theora_info</a>
</li>
<li>keyframe_auto_threshold
: <a class="el" href="structtheora__info.html#a95cb8958e29ad3d24047ee8f9e7fd99b">theora_info</a>
</li>
<li>keyframe_data_target_bitrate
: <a class="el" href="structtheora__info.html#a588942d1ee90a26a7effdf6a0e98b9ce">theora_info</a>
</li>
<li>keyframe_frequency
: <a class="el" href="structtheora__info.html#a03e1b3e337af5f9dabaaaeb9050f145a">theora_info</a>
</li>
<li>keyframe_frequency_force
: <a class="el" href="structtheora__info.html#ad9d2e22c44a53473010e6d1042dfe0d8">theora_info</a>
</li>
<li>keyframe_granule_shift
: <a class="el" href="structth__info.html#a693ca4ab11fbc0c3f32594b4bb8766ed">th_info</a>
</li>
<li>keyframe_mindistance
: <a class="el" href="structtheora__info.html#aa79ca8c0e77a884d4487fd627fae32e9">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_l">- l -</a></h3><ul>
<li>loop_filter_limits
: <a class="el" href="structth__quant__info.html#a4ac56bf0a45b5743b36daf85d5cd9e33">th_quant_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_n">- n -</a></h3><ul>
<li>nbits
: <a class="el" href="structth__huff__code.html#aaf97b8f2f90042f7bc136a7b2bc35e35">th_huff_code</a>
</li>
<li>noise_sensitivity
: <a class="el" href="structtheora__info.html#ac4789034f547b57d1075e035050eeed9">theora_info</a>
</li>
<li>nranges
: <a class="el" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab">th_quant_ranges</a>
</li>
</ul>
<h3><a class="anchor" id="index_o">- o -</a></h3><ul>
<li>offset_x
: <a class="el" href="structtheora__info.html#af5949a02bef29512f2705e6f6c944e3b">theora_info</a>
</li>
<li>offset_y
: <a class="el" href="structtheora__info.html#a91c3922097ba32a85acd584a01dc2c93">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_p">- p -</a></h3><ul>
<li>pattern
: <a class="el" href="structth__huff__code.html#a6dd29e3aa5a0c5a2dd5ce1f45b1162b4">th_huff_code</a>
</li>
<li>pic_height
: <a class="el" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b">th_info</a>
</li>
<li>pic_width
: <a class="el" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345">th_info</a>
</li>
<li>pic_x
: <a class="el" href="structth__info.html#a5b3f834bcf141564e7bb14f49101870f">th_info</a>
</li>
<li>pic_y
: <a class="el" href="structth__info.html#a8aacc575cab2dfe3735001c2ad32aa14">th_info</a>
</li>
<li>pixel_fmt
: <a class="el" href="structth__info.html#a2301388ef3755c41ab12fd144c1fc54e">th_info</a>
</li>
<li>pixelformat
: <a class="el" href="structtheora__info.html#a65ab4376ab5242ee82e06c78fb7008ab">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_q">- q -</a></h3><ul>
<li>qi_ranges
: <a class="el" href="structth__quant__info.html#a6feacf4b365e305a7df7b93d87ee7bb8">th_quant_info</a>
</li>
<li>quality
: <a class="el" href="structth__info.html#aa4cdcf96cb46b256821993e9a830ee02">th_info</a>
, <a class="el" href="structtheora__info.html#a71a4748a5f31bd58d0e403b7806c980d">theora_info</a>
</li>
<li>quick_p
: <a class="el" href="structtheora__info.html#a2dfae4fd175dbd19254eaf0697778ff5">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_s">- s -</a></h3><ul>
<li>sharpness
: <a class="el" href="structtheora__info.html#a3fb695de2b2f56dd0203b9e2eb0df1cc">theora_info</a>
</li>
<li>sizes
: <a class="el" href="structth__quant__ranges.html#af3188a373bc0b8ffaa330d0ab4c1a194">th_quant_ranges</a>
</li>
<li>stride
: <a class="el" href="structth__img__plane.html#ab1100f071ffee3b37e07e3222f819bad">th_img_plane</a>
</li>
<li>stripe_decoded
: <a class="el" href="structth__stripe__callback.html#a977c725680a37e3446e459f063b1f4a5">th_stripe_callback</a>
</li>
</ul>
<h3><a class="anchor" id="index_t">- t -</a></h3><ul>
<li>target_bitrate
: <a class="el" href="structth__info.html#a1d9c8d768a4ae623269f5bd8f6f7a015">th_info</a>
, <a class="el" href="structtheora__info.html#a0cfba041767ae2416dd190a406afe713">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_u">- u -</a></h3><ul>
<li>u
: <a class="el" href="structyuv__buffer.html#a8b1857afe3ffac28f259499a57a559e1">yuv_buffer</a>
</li>
<li>user_comments
: <a class="el" href="structth__comment.html#ad72830e183e707bb0df423eb73b00de4">th_comment</a>
, <a class="el" href="structtheora__comment.html#a1e236fd180dfce19be89081399444cf5">theora_comment</a>
</li>
<li>uv_height
: <a class="el" href="structyuv__buffer.html#a640f1a0b456d3807f9f0538b22f10097">yuv_buffer</a>
</li>
<li>uv_stride
: <a class="el" href="structyuv__buffer.html#ab265cc24ffb5650bf52daf223b0debb9">yuv_buffer</a>
</li>
<li>uv_width
: <a class="el" href="structyuv__buffer.html#a8c59a57c35af0be519ee47f15e49fe2b">yuv_buffer</a>
</li>
</ul>
<h3><a class="anchor" id="index_v">- v -</a></h3><ul>
<li>v
: <a class="el" href="structyuv__buffer.html#aa429491dd112adb0254672c59ef55075">yuv_buffer</a>
</li>
<li>vendor
: <a class="el" href="structth__comment.html#a93fbe894d23603f56843be15b0cbdba0">th_comment</a>
, <a class="el" href="structtheora__comment.html#adb371baf8f0daed42af8b875cf8430ef">theora_comment</a>
</li>
<li>version_major
: <a class="el" href="structth__info.html#a60b3e2cac006fee0e105a918d6a5a9f9">th_info</a>
, <a class="el" href="structtheora__info.html#a7c5ebb9e6700aaef87f29f7c6074e474">theora_info</a>
</li>
<li>version_minor
: <a class="el" href="structtheora__info.html#a75eda4f30270d833c7b9dba43932a06a">theora_info</a>
, <a class="el" href="structth__info.html#abb1d4887a8079c6c5aaa6d7229f243d7">th_info</a>
</li>
<li>version_subminor
: <a class="el" href="structtheora__info.html#aa07967ecd6e20bd2928ead42b6397b3d">theora_info</a>
, <a class="el" href="structth__info.html#abfacc79b7cabae12b6ac2484f76602d3">th_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_w">- w -</a></h3><ul>
<li>width
: <a class="el" href="structth__img__plane.html#a58cc297a99cd4594c3d30e56f2ed6b74">th_img_plane</a>
, <a class="el" href="structtheora__info.html#a17c2fc651bb3329f1ea6b13ff1d3957b">theora_info</a>
</li>
</ul>
<h3><a class="anchor" id="index_y">- y -</a></h3><ul>
<li>y
: <a class="el" href="structyuv__buffer.html#a725727c70eeced6b8c90866973399ac1">yuv_buffer</a>
</li>
<li>y_height
: <a class="el" href="structyuv__buffer.html#a5a8b60e012247e2caffcbbaca99414e0">yuv_buffer</a>
</li>
<li>y_stride
: <a class="el" href="structyuv__buffer.html#a9cdf61834c11b2351640a4a243ad0549">yuv_buffer</a>
</li>
<li>y_width
: <a class="el" href="structyuv__buffer.html#aaa6c06c071da933231647238418d5fc0">yuv_buffer</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,464 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li class="current"><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_vars.html"><span>Variables</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="#index__"><span>_</span></a></li>
<li><a href="#index_o"><span>o</span></a></li>
<li><a href="#index_t"><span>t</span></a></li>
</ul>
</div>
</div>
<div class="contents">
Here is a list of all functions, variables, defines, enums, and typedefs with links to the files they belong to:
<h3><a class="anchor" id="index__">- _ -</a></h3><ul>
<li>_O_THEORA_CODEC_H_
: <a class="el" href="codec_8h.html#a15352a6a862d25ab00a8f06ea65ee75b">codec.h</a>
</li>
<li>_O_THEORA_THEORADEC_H_
: <a class="el" href="theoradec_8h.html#a0d78767a326c34dbf84d5b845cba7b4a">theoradec.h</a>
</li>
<li>_O_THEORA_THEORAENC_H_
: <a class="el" href="theoraenc_8h.html#ab915dd90f069a2431454fd62365e9381">theoraenc.h</a>
</li>
</ul>
<h3><a class="anchor" id="index_o">- o -</a></h3><ul>
<li>OC_BADHEADER
: <a class="el" href="group__oldfuncs.html#ga809cbad2eb36be17a235a3cadfb737ba">theora.h</a>
</li>
<li>OC_BADPACKET
: <a class="el" href="group__oldfuncs.html#ga117774c062a63dfad2a5b4d092fa2bb1">theora.h</a>
</li>
<li>OC_CS_ITU_REC_470BG
: <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a04f8fa2da26f9ec513f514163705666a">theora.h</a>
</li>
<li>OC_CS_ITU_REC_470M
: <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9ab20c9851a21ab148fef0bf2c00c0a294">theora.h</a>
</li>
<li>OC_CS_NSPACES
: <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a640b572f11fa7102d434e1c605aaa186">theora.h</a>
</li>
<li>OC_CS_UNSPECIFIED
: <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9abf217cf83d7d7cbf73295e6689f5cf5f">theora.h</a>
</li>
<li>OC_DISABLED
: <a class="el" href="group__oldfuncs.html#ga38b9fa0af856d5930c534db26e2ac2d1">theora.h</a>
</li>
<li>OC_DUPFRAME
: <a class="el" href="group__oldfuncs.html#ga84a8d2f5080ad62b415a4e7551941cbb">theora.h</a>
</li>
<li>OC_EINVAL
: <a class="el" href="group__oldfuncs.html#ga43d15091b1a03a734a124e9a04d3be55">theora.h</a>
</li>
<li>OC_FAULT
: <a class="el" href="group__oldfuncs.html#gaa4370e13ed3aea6441ccf69dcab2506e">theora.h</a>
</li>
<li>OC_IMPL
: <a class="el" href="group__oldfuncs.html#ga895dc2597b3bf9c97bf7701c6eff5b0c">theora.h</a>
</li>
<li>OC_NEWPACKET
: <a class="el" href="group__oldfuncs.html#ga60be4dc92c933eac3542bce3ce076496">theora.h</a>
</li>
<li>OC_NOTFORMAT
: <a class="el" href="group__oldfuncs.html#ga9558d6d9eacd2273c8da27f945d725ad">theora.h</a>
</li>
<li>OC_PF_420
: <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a4e451af01be2645511b0e431f5225d2b">theora.h</a>
</li>
<li>OC_PF_422
: <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a36a88c55b7ddd5aedeac2d61d57fee5b">theora.h</a>
</li>
<li>OC_PF_444
: <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a1d5c6d1b0365e06b4a87880b7825f044">theora.h</a>
</li>
<li>OC_PF_RSVD
: <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a7d21c63341ad299766839c83ed1216eb">theora.h</a>
</li>
<li>OC_VERSION
: <a class="el" href="group__oldfuncs.html#ga4611cfd61160405721d1e2ab0ec2564b">theora.h</a>
</li>
</ul>
<h3><a class="anchor" id="index_t">- t -</a></h3><ul>
<li>th_colorspace
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0">codec.h</a>
</li>
<li>th_comment_add()
: <a class="el" href="group__basefuncs.html#ga19a1f7b8032db957df151a34e5ac9272">codec.h</a>
</li>
<li>th_comment_add_tag()
: <a class="el" href="group__basefuncs.html#ga6c5edc201ca220a30787ca6c1ddcaeaf">codec.h</a>
</li>
<li>th_comment_clear()
: <a class="el" href="group__basefuncs.html#gae736c1afa514947a3feb223143af95e3">codec.h</a>
</li>
<li>th_comment_init()
: <a class="el" href="group__basefuncs.html#ga6c8ab25988e7ea9d7b1e31a54cf58f09">codec.h</a>
</li>
<li>th_comment_query()
: <a class="el" href="group__basefuncs.html#ga33c8b4f57a03217636d704c2ebb211fa">codec.h</a>
</li>
<li>th_comment_query_count()
: <a class="el" href="group__basefuncs.html#ga81d518dc4426f63ceaedcbe2668679fc">codec.h</a>
</li>
<li>TH_CS_ITU_REC_470BG
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a009021d50836ddb0ec6004a2803775fe">codec.h</a>
</li>
<li>TH_CS_ITU_REC_470M
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a1a19346bbfb8192baa4c185df73d3397">codec.h</a>
</li>
<li>TH_CS_NSPACES
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a0fa8ea07f583ee57943520ddb2f6e62e">codec.h</a>
</li>
<li>TH_CS_UNSPECIFIED
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0adb9a17a3283c8d490652e507db2427cf">codec.h</a>
</li>
<li>th_dec_ctx
: <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">theoradec.h</a>
</li>
<li>TH_DECCTL_GET_PPLEVEL_MAX
: <a class="el" href="group__oldfuncs.html#gab31f251c9319f2140d247585d30b3d07">theora.h</a>
, <a class="el" href="theoradec_8h.html#ab31f251c9319f2140d247585d30b3d07">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_GRANPOS
: <a class="el" href="theoradec_8h.html#a1e870c654d35394f0d490045df04e0f5">theoradec.h</a>
, <a class="el" href="group__oldfuncs.html#ga1e870c654d35394f0d490045df04e0f5">theora.h</a>
</li>
<li>TH_DECCTL_SET_PPLEVEL
: <a class="el" href="group__oldfuncs.html#ga87774c35e1a755a84e2d705b38ebef0d">theora.h</a>
, <a class="el" href="theoradec_8h.html#a87774c35e1a755a84e2d705b38ebef0d">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_STRIPE_CB
: <a class="el" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_TELEMETRY_BITS
: <a class="el" href="theoradec_8h.html#a7f43fec07486f8a5f00e92aab7d44a25">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_TELEMETRY_MBMODE
: <a class="el" href="theoradec_8h.html#a8d5e0b9b4c8898f93f241acbeb7e7ffb">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_TELEMETRY_MV
: <a class="el" href="theoradec_8h.html#a829285a03d24832c583f33c6357df8aa">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_TELEMETRY_QI
: <a class="el" href="theoradec_8h.html#ae3e2f7674ad92fe67b63915d48c9df5b">theoradec.h</a>
</li>
<li>th_decode_alloc()
: <a class="el" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e">theoradec.h</a>
</li>
<li>th_decode_ctl()
: <a class="el" href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1">theoradec.h</a>
</li>
<li>th_decode_free()
: <a class="el" href="group__decfuncs.html#gafb6684ad8ba507b71112bc9de148e7d0">theoradec.h</a>
</li>
<li>th_decode_headerin()
: <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50">theoradec.h</a>
</li>
<li>th_decode_packetin()
: <a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb">theoradec.h</a>
</li>
<li>th_decode_ycbcr_out()
: <a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb">theoradec.h</a>
</li>
<li>TH_DUPFRAME
: <a class="el" href="codec_8h.html#ab10e7b64f17a02707fc9348ea9832d09">codec.h</a>
</li>
<li>TH_EBADHEADER
: <a class="el" href="codec_8h.html#af00f7ecc5242d12a717202537324a510">codec.h</a>
</li>
<li>TH_EBADPACKET
: <a class="el" href="codec_8h.html#a6efb84e9c2213a8840003eee2847b27f">codec.h</a>
</li>
<li>TH_EFAULT
: <a class="el" href="codec_8h.html#a4d8d8e34fc5ec39ffa05d61a310a0407">codec.h</a>
</li>
<li>TH_EIMPL
: <a class="el" href="codec_8h.html#a921c47accc17841f220af5a6afb79efe">codec.h</a>
</li>
<li>TH_EINVAL
: <a class="el" href="codec_8h.html#afbbd9f19fbf292aeb62a37792cecb870">codec.h</a>
</li>
<li>th_enc_ctx
: <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">theoraenc.h</a>
</li>
<li>TH_ENCCTL_2PASS_IN
: <a class="el" href="theoraenc_8h.html#a4a84f982cdd9a3e3c803a29bbde9df0b">theoraenc.h</a>
</li>
<li>TH_ENCCTL_2PASS_OUT
: <a class="el" href="theoraenc_8h.html#ac3751b9c3838888ec2e3f0b0d2823282">theoraenc.h</a>
</li>
<li>TH_ENCCTL_GET_SPLEVEL
: <a class="el" href="theoraenc_8h.html#a114b7c552f50b7b8d881a39489af1f61">theoraenc.h</a>
</li>
<li>TH_ENCCTL_GET_SPLEVEL_MAX
: <a class="el" href="group__oldfuncs.html#ga9baf5bdd206e80c78a8fd44687e89783">theora.h</a>
, <a class="el" href="theoraenc_8h.html#a9baf5bdd206e80c78a8fd44687e89783">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_BITRATE
: <a class="el" href="theoraenc_8h.html#a9b969df55ecad1acd1ae207fad42592e">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_DUP_COUNT
: <a class="el" href="theoraenc_8h.html#a8bb9b05471c42a09f8684a2583b8a1df">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_HUFFMAN_CODES
: <a class="el" href="theoraenc_8h.html#a0165348788e560a19b7c61ae8f0c2283">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE
: <a class="el" href="group__oldfuncs.html#ga27e755e15b4b5604c54974b304037a49">theora.h</a>
, <a class="el" href="theoraenc_8h.html#a27e755e15b4b5604c54974b304037a49">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_QUALITY
: <a class="el" href="theoraenc_8h.html#aac087983fa951b9148c9db6bc2e81ef4">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_QUANT_PARAMS
: <a class="el" href="group__oldfuncs.html#ga3befcdd66678f8d27034f9c4b16d1b9c">theora.h</a>
, <a class="el" href="theoraenc_8h.html#a3befcdd66678f8d27034f9c4b16d1b9c">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_RATE_BUFFER
: <a class="el" href="theoraenc_8h.html#aaefb515876b2a180ad5c3120fc584a52">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_RATE_FLAGS
: <a class="el" href="theoraenc_8h.html#a026502e08fbe1af0a1063f39bd18129c">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_SPLEVEL
: <a class="el" href="group__oldfuncs.html#gabd9fbcb6a25a77d991d3620164fe59d6">theora.h</a>
, <a class="el" href="theoraenc_8h.html#abd9fbcb6a25a77d991d3620164fe59d6">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_VP3_COMPATIBLE
: <a class="el" href="group__oldfuncs.html#ga382d685a39a34d8e6ba76b00d804efd8">theora.h</a>
, <a class="el" href="theoraenc_8h.html#a382d685a39a34d8e6ba76b00d804efd8">theoraenc.h</a>
</li>
<li>th_encode_alloc()
: <a class="el" href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7">theoraenc.h</a>
</li>
<li>th_encode_ctl()
: <a class="el" href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9">theoraenc.h</a>
</li>
<li>th_encode_flushheader()
: <a class="el" href="group__encfuncs.html#ga9439d61b566039d194ff782681fbc408">theoraenc.h</a>
</li>
<li>th_encode_free()
: <a class="el" href="group__encfuncs.html#ga36b23d216532231925c4107894204680">theoraenc.h</a>
</li>
<li>th_encode_packetout()
: <a class="el" href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b">theoraenc.h</a>
</li>
<li>th_encode_ycbcr_in()
: <a class="el" href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750">theoraenc.h</a>
</li>
<li>TH_ENOTFORMAT
: <a class="el" href="codec_8h.html#a3dc08a00a9aba231be398f3e31726d9c">codec.h</a>
</li>
<li>TH_EVERSION
: <a class="el" href="codec_8h.html#ac3a45ef2b24f75259258edc481e3a122">codec.h</a>
</li>
<li>th_granule_frame()
: <a class="el" href="group__basefuncs.html#ga95b10e76fc4c05d0240ea2dfd9fd62bd">codec.h</a>
</li>
<li>th_granule_time()
: <a class="el" href="group__basefuncs.html#ga707e1e281de788af0df39ef00f3fb432">codec.h</a>
</li>
<li>th_info_clear()
: <a class="el" href="group__basefuncs.html#gab3d6441ab4a4969859ef5fd78a9e3c1c">codec.h</a>
</li>
<li>th_info_init()
: <a class="el" href="group__basefuncs.html#ga430d9c605816a6ca0bdce3a0b965b926">codec.h</a>
</li>
<li>TH_NDCT_TOKENS
: <a class="el" href="codec_8h.html#a2a44f48084e76a58cae48fb5d47cd422">codec.h</a>
</li>
<li>TH_NHUFFMAN_TABLES
: <a class="el" href="codec_8h.html#a49bf449eae33c5320f0c308f32c6ae42">codec.h</a>
</li>
<li>th_packet_isheader()
: <a class="el" href="group__basefuncs.html#ga02f3f38261a9b39452d8a5e6f8737cc1">codec.h</a>
</li>
<li>th_packet_iskeyframe()
: <a class="el" href="group__basefuncs.html#gafe95cfd06f0fef413266c9168a66248a">codec.h</a>
</li>
<li>TH_PF_420
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bcafed7ad7ee4345930255827bff6055162">codec.h</a>
</li>
<li>TH_PF_422
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca0271d01babf2f51512479f4a6245b9fa">codec.h</a>
</li>
<li>TH_PF_444
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2ac50ac048ea75501a5e0f99a63c8c86">codec.h</a>
</li>
<li>TH_PF_NFORMATS
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2d6d78b9df1df086bb60f32f963a31eb">codec.h</a>
</li>
<li>TH_PF_RSVD
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca9e60af0159d42b20806d7eb4a8b833e6">codec.h</a>
</li>
<li>th_pixel_fmt
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc">codec.h</a>
</li>
<li>th_quant_base
: <a class="el" href="codec_8h.html#a6a1426d16beef8a311d7f0e9d2e96326">codec.h</a>
</li>
<li>TH_RATECTL_CAP_OVERFLOW
: <a class="el" href="theoraenc_8h.html#a32f9983b344a431334493cefb0b9337c">theoraenc.h</a>
</li>
<li>TH_RATECTL_CAP_UNDERFLOW
: <a class="el" href="theoraenc_8h.html#ad0d62d9dce542caf5296b03b97e020a6">theoraenc.h</a>
</li>
<li>TH_RATECTL_DROP_FRAMES
: <a class="el" href="theoraenc_8h.html#a3e7fab53b902b54135522ba286f45e33">theoraenc.h</a>
</li>
<li>th_setup_free()
: <a class="el" href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27">theoradec.h</a>
</li>
<li>th_setup_info
: <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">theoradec.h</a>
</li>
<li>th_stripe_decoded_func
: <a class="el" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54">theoradec.h</a>
</li>
<li>th_version_number()
: <a class="el" href="group__basefuncs.html#gab723a75c0f95b3eb817f7f769846016b">codec.h</a>
</li>
<li>th_version_string()
: <a class="el" href="group__basefuncs.html#ga04846066738d9f2024fc9961162b2dbc">codec.h</a>
</li>
<li>TH_VP31_HUFF_CODES
: <a class="el" href="theoraenc_8h.html#aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e">theoraenc.h</a>
</li>
<li>TH_VP31_QUANT_INFO
: <a class="el" href="theoraenc_8h.html#a3b1b462989f4e7a5a98e6e697f1a7f7d">theoraenc.h</a>
</li>
<li>th_ycbcr_buffer
: <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">codec.h</a>
</li>
<li>theora_clear()
: <a class="el" href="group__oldfuncs.html#gab252d5d81b925136dda72e8f1c09c5eb">theora.h</a>
</li>
<li>theora_colorspace
: <a class="el" href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9">theora.h</a>
</li>
<li>theora_comment_add()
: <a class="el" href="group__oldfuncs.html#ga650642ed23894e41109bbc42ec393ed4">theora.h</a>
</li>
<li>theora_comment_add_tag()
: <a class="el" href="group__oldfuncs.html#ga339bd80b5bf4bb168b7052d8ec0b5a92">theora.h</a>
</li>
<li>theora_comment_clear()
: <a class="el" href="group__oldfuncs.html#ga04c07c2eefba3a433e43f9fbde14719f">theora.h</a>
</li>
<li>theora_comment_init()
: <a class="el" href="group__oldfuncs.html#ga811b92785df3bdbbebb3de612d9d6ce0">theora.h</a>
</li>
<li>theora_comment_query()
: <a class="el" href="group__oldfuncs.html#ga4361f6001abb5c83c36a2ddfb648a8dc">theora.h</a>
</li>
<li>theora_comment_query_count()
: <a class="el" href="group__oldfuncs.html#ga10f66a3c752442a3e0c0098e0f88df8b">theora.h</a>
</li>
<li>theora_control()
: <a class="el" href="group__oldfuncs.html#ga186773db3bc8cd550047e7df1b2ba2c9">theora.h</a>
</li>
<li>theora_decode_header()
: <a class="el" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82">theora.h</a>
</li>
<li>theora_decode_init()
: <a class="el" href="group__oldfuncs.html#ga264907c66003799ff77ecbd09eb33d2c">theora.h</a>
</li>
<li>theora_decode_packetin()
: <a class="el" href="group__oldfuncs.html#gaa65a9e53b46fd54ab344bd599fa96975">theora.h</a>
</li>
<li>theora_decode_YUVout()
: <a class="el" href="group__oldfuncs.html#ga09d47c80e1e94bff0a46a496816b8daa">theora.h</a>
</li>
<li>theora_encode_comment()
: <a class="el" href="group__oldfuncs.html#ga45e8db0713eaaca0f1144f3724cb834a">theora.h</a>
</li>
<li>theora_encode_header()
: <a class="el" href="group__oldfuncs.html#ga451feb58d6bde726edbae193689887be">theora.h</a>
</li>
<li>theora_encode_init()
: <a class="el" href="group__oldfuncs.html#ga0f7ad4d4b2343278cb4ba8fb2bd5109a">theora.h</a>
</li>
<li>theora_encode_packetout()
: <a class="el" href="group__oldfuncs.html#ga5f4929677a735bc2198c2309d235f1b3">theora.h</a>
</li>
<li>theora_encode_tables()
: <a class="el" href="group__oldfuncs.html#ga5085baf20855b283fa01fc948505d9d2">theora.h</a>
</li>
<li>theora_encode_YUVin()
: <a class="el" href="group__oldfuncs.html#gac0d33d896ca70cedfc94c5986d947078">theora.h</a>
</li>
<li>theora_granule_frame()
: <a class="el" href="group__oldfuncs.html#ga7bfa3ceb2fb4b41a282456c56e1dd269">theora.h</a>
</li>
<li>theora_granule_shift()
: <a class="el" href="group__oldfuncs.html#gacd9360e6a47139c761002410af457a02">theora.h</a>
</li>
<li>theora_granule_time()
: <a class="el" href="group__oldfuncs.html#ga4376358b12b9fa23ce6fe21cb5c65ac6">theora.h</a>
</li>
<li>theora_info_clear()
: <a class="el" href="group__oldfuncs.html#gaba7022d58edbc4825cacad03f68b3e0d">theora.h</a>
</li>
<li>theora_info_init()
: <a class="el" href="group__oldfuncs.html#ga3091c87d48f1faba018c5956379a6d90">theora.h</a>
</li>
<li>theora_packet_isheader()
: <a class="el" href="group__oldfuncs.html#gab969f9d0407683f0e5abe73d0839a25b">theora.h</a>
</li>
<li>theora_packet_iskeyframe()
: <a class="el" href="group__oldfuncs.html#ga39ccc8f847a748d7074c926b4fdd12b2">theora.h</a>
</li>
<li>theora_pixelformat
: <a class="el" href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079">theora.h</a>
</li>
<li>theora_version_number()
: <a class="el" href="group__oldfuncs.html#gad181f4b19d455dcc2bef2533530b84c8">theora.h</a>
</li>
<li>theora_version_string()
: <a class="el" href="group__oldfuncs.html#ga5a3da8fd262a60f055f96536eec06df2">theora.h</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,215 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_vars.html"><span>Variables</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
<li class="current"><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="#index__"><span>_</span></a></li>
<li><a href="#index_o"><span>o</span></a></li>
<li><a href="#index_t"><span>t</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;
<h3><a class="anchor" id="index__">- _ -</a></h3><ul>
<li>_O_THEORA_CODEC_H_
: <a class="el" href="codec_8h.html#a15352a6a862d25ab00a8f06ea65ee75b">codec.h</a>
</li>
<li>_O_THEORA_THEORADEC_H_
: <a class="el" href="theoradec_8h.html#a0d78767a326c34dbf84d5b845cba7b4a">theoradec.h</a>
</li>
<li>_O_THEORA_THEORAENC_H_
: <a class="el" href="theoraenc_8h.html#ab915dd90f069a2431454fd62365e9381">theoraenc.h</a>
</li>
</ul>
<h3><a class="anchor" id="index_o">- o -</a></h3><ul>
<li>OC_BADHEADER
: <a class="el" href="group__oldfuncs.html#ga809cbad2eb36be17a235a3cadfb737ba">theora.h</a>
</li>
<li>OC_BADPACKET
: <a class="el" href="group__oldfuncs.html#ga117774c062a63dfad2a5b4d092fa2bb1">theora.h</a>
</li>
<li>OC_DISABLED
: <a class="el" href="group__oldfuncs.html#ga38b9fa0af856d5930c534db26e2ac2d1">theora.h</a>
</li>
<li>OC_DUPFRAME
: <a class="el" href="group__oldfuncs.html#ga84a8d2f5080ad62b415a4e7551941cbb">theora.h</a>
</li>
<li>OC_EINVAL
: <a class="el" href="group__oldfuncs.html#ga43d15091b1a03a734a124e9a04d3be55">theora.h</a>
</li>
<li>OC_FAULT
: <a class="el" href="group__oldfuncs.html#gaa4370e13ed3aea6441ccf69dcab2506e">theora.h</a>
</li>
<li>OC_IMPL
: <a class="el" href="group__oldfuncs.html#ga895dc2597b3bf9c97bf7701c6eff5b0c">theora.h</a>
</li>
<li>OC_NEWPACKET
: <a class="el" href="group__oldfuncs.html#ga60be4dc92c933eac3542bce3ce076496">theora.h</a>
</li>
<li>OC_NOTFORMAT
: <a class="el" href="group__oldfuncs.html#ga9558d6d9eacd2273c8da27f945d725ad">theora.h</a>
</li>
<li>OC_VERSION
: <a class="el" href="group__oldfuncs.html#ga4611cfd61160405721d1e2ab0ec2564b">theora.h</a>
</li>
</ul>
<h3><a class="anchor" id="index_t">- t -</a></h3><ul>
<li>TH_DECCTL_GET_PPLEVEL_MAX
: <a class="el" href="group__oldfuncs.html#gab31f251c9319f2140d247585d30b3d07">theora.h</a>
, <a class="el" href="theoradec_8h.html#ab31f251c9319f2140d247585d30b3d07">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_GRANPOS
: <a class="el" href="theoradec_8h.html#a1e870c654d35394f0d490045df04e0f5">theoradec.h</a>
, <a class="el" href="group__oldfuncs.html#ga1e870c654d35394f0d490045df04e0f5">theora.h</a>
</li>
<li>TH_DECCTL_SET_PPLEVEL
: <a class="el" href="group__oldfuncs.html#ga87774c35e1a755a84e2d705b38ebef0d">theora.h</a>
, <a class="el" href="theoradec_8h.html#a87774c35e1a755a84e2d705b38ebef0d">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_STRIPE_CB
: <a class="el" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_TELEMETRY_BITS
: <a class="el" href="theoradec_8h.html#a7f43fec07486f8a5f00e92aab7d44a25">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_TELEMETRY_MBMODE
: <a class="el" href="theoradec_8h.html#a8d5e0b9b4c8898f93f241acbeb7e7ffb">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_TELEMETRY_MV
: <a class="el" href="theoradec_8h.html#a829285a03d24832c583f33c6357df8aa">theoradec.h</a>
</li>
<li>TH_DECCTL_SET_TELEMETRY_QI
: <a class="el" href="theoradec_8h.html#ae3e2f7674ad92fe67b63915d48c9df5b">theoradec.h</a>
</li>
<li>TH_DUPFRAME
: <a class="el" href="codec_8h.html#ab10e7b64f17a02707fc9348ea9832d09">codec.h</a>
</li>
<li>TH_EBADHEADER
: <a class="el" href="codec_8h.html#af00f7ecc5242d12a717202537324a510">codec.h</a>
</li>
<li>TH_EBADPACKET
: <a class="el" href="codec_8h.html#a6efb84e9c2213a8840003eee2847b27f">codec.h</a>
</li>
<li>TH_EFAULT
: <a class="el" href="codec_8h.html#a4d8d8e34fc5ec39ffa05d61a310a0407">codec.h</a>
</li>
<li>TH_EIMPL
: <a class="el" href="codec_8h.html#a921c47accc17841f220af5a6afb79efe">codec.h</a>
</li>
<li>TH_EINVAL
: <a class="el" href="codec_8h.html#afbbd9f19fbf292aeb62a37792cecb870">codec.h</a>
</li>
<li>TH_ENCCTL_2PASS_IN
: <a class="el" href="theoraenc_8h.html#a4a84f982cdd9a3e3c803a29bbde9df0b">theoraenc.h</a>
</li>
<li>TH_ENCCTL_2PASS_OUT
: <a class="el" href="theoraenc_8h.html#ac3751b9c3838888ec2e3f0b0d2823282">theoraenc.h</a>
</li>
<li>TH_ENCCTL_GET_SPLEVEL
: <a class="el" href="theoraenc_8h.html#a114b7c552f50b7b8d881a39489af1f61">theoraenc.h</a>
</li>
<li>TH_ENCCTL_GET_SPLEVEL_MAX
: <a class="el" href="group__oldfuncs.html#ga9baf5bdd206e80c78a8fd44687e89783">theora.h</a>
, <a class="el" href="theoraenc_8h.html#a9baf5bdd206e80c78a8fd44687e89783">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_BITRATE
: <a class="el" href="theoraenc_8h.html#a9b969df55ecad1acd1ae207fad42592e">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_DUP_COUNT
: <a class="el" href="theoraenc_8h.html#a8bb9b05471c42a09f8684a2583b8a1df">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_HUFFMAN_CODES
: <a class="el" href="theoraenc_8h.html#a0165348788e560a19b7c61ae8f0c2283">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE
: <a class="el" href="theoraenc_8h.html#a27e755e15b4b5604c54974b304037a49">theoraenc.h</a>
, <a class="el" href="group__oldfuncs.html#ga27e755e15b4b5604c54974b304037a49">theora.h</a>
</li>
<li>TH_ENCCTL_SET_QUALITY
: <a class="el" href="theoraenc_8h.html#aac087983fa951b9148c9db6bc2e81ef4">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_QUANT_PARAMS
: <a class="el" href="group__oldfuncs.html#ga3befcdd66678f8d27034f9c4b16d1b9c">theora.h</a>
, <a class="el" href="theoraenc_8h.html#a3befcdd66678f8d27034f9c4b16d1b9c">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_RATE_BUFFER
: <a class="el" href="theoraenc_8h.html#aaefb515876b2a180ad5c3120fc584a52">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_RATE_FLAGS
: <a class="el" href="theoraenc_8h.html#a026502e08fbe1af0a1063f39bd18129c">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_SPLEVEL
: <a class="el" href="group__oldfuncs.html#gabd9fbcb6a25a77d991d3620164fe59d6">theora.h</a>
, <a class="el" href="theoraenc_8h.html#abd9fbcb6a25a77d991d3620164fe59d6">theoraenc.h</a>
</li>
<li>TH_ENCCTL_SET_VP3_COMPATIBLE
: <a class="el" href="theoraenc_8h.html#a382d685a39a34d8e6ba76b00d804efd8">theoraenc.h</a>
, <a class="el" href="group__oldfuncs.html#ga382d685a39a34d8e6ba76b00d804efd8">theora.h</a>
</li>
<li>TH_ENOTFORMAT
: <a class="el" href="codec_8h.html#a3dc08a00a9aba231be398f3e31726d9c">codec.h</a>
</li>
<li>TH_EVERSION
: <a class="el" href="codec_8h.html#ac3a45ef2b24f75259258edc481e3a122">codec.h</a>
</li>
<li>TH_NDCT_TOKENS
: <a class="el" href="codec_8h.html#a2a44f48084e76a58cae48fb5d47cd422">codec.h</a>
</li>
<li>TH_NHUFFMAN_TABLES
: <a class="el" href="codec_8h.html#a49bf449eae33c5320f0c308f32c6ae42">codec.h</a>
</li>
<li>TH_RATECTL_CAP_OVERFLOW
: <a class="el" href="theoraenc_8h.html#a32f9983b344a431334493cefb0b9337c">theoraenc.h</a>
</li>
<li>TH_RATECTL_CAP_UNDERFLOW
: <a class="el" href="theoraenc_8h.html#ad0d62d9dce542caf5296b03b97e020a6">theoraenc.h</a>
</li>
<li>TH_RATECTL_DROP_FRAMES
: <a class="el" href="theoraenc_8h.html#a3e7fab53b902b54135522ba286f45e33">theoraenc.h</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,58 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_vars.html"><span>Variables</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li class="current"><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;<ul>
<li>th_colorspace
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0">codec.h</a>
</li>
<li>th_pixel_fmt
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc">codec.h</a>
</li>
<li>theora_colorspace
: <a class="el" href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9">theora.h</a>
</li>
<li>theora_pixelformat
: <a class="el" href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079">theora.h</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,97 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_vars.html"><span>Variables</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li class="current"><a href="globals_eval.html"><span>Enumerator</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;<ul>
<li>OC_CS_ITU_REC_470BG
: <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a04f8fa2da26f9ec513f514163705666a">theora.h</a>
</li>
<li>OC_CS_ITU_REC_470M
: <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9ab20c9851a21ab148fef0bf2c00c0a294">theora.h</a>
</li>
<li>OC_CS_NSPACES
: <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a640b572f11fa7102d434e1c605aaa186">theora.h</a>
</li>
<li>OC_CS_UNSPECIFIED
: <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9abf217cf83d7d7cbf73295e6689f5cf5f">theora.h</a>
</li>
<li>OC_PF_420
: <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a4e451af01be2645511b0e431f5225d2b">theora.h</a>
</li>
<li>OC_PF_422
: <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a36a88c55b7ddd5aedeac2d61d57fee5b">theora.h</a>
</li>
<li>OC_PF_444
: <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a1d5c6d1b0365e06b4a87880b7825f044">theora.h</a>
</li>
<li>OC_PF_RSVD
: <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a7d21c63341ad299766839c83ed1216eb">theora.h</a>
</li>
<li>TH_CS_ITU_REC_470BG
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a009021d50836ddb0ec6004a2803775fe">codec.h</a>
</li>
<li>TH_CS_ITU_REC_470M
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a1a19346bbfb8192baa4c185df73d3397">codec.h</a>
</li>
<li>TH_CS_NSPACES
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0a0fa8ea07f583ee57943520ddb2f6e62e">codec.h</a>
</li>
<li>TH_CS_UNSPECIFIED
: <a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0adb9a17a3283c8d490652e507db2427cf">codec.h</a>
</li>
<li>TH_PF_420
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bcafed7ad7ee4345930255827bff6055162">codec.h</a>
</li>
<li>TH_PF_422
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca0271d01babf2f51512479f4a6245b9fa">codec.h</a>
</li>
<li>TH_PF_444
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2ac50ac048ea75501a5e0f99a63c8c86">codec.h</a>
</li>
<li>TH_PF_NFORMATS
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca2d6d78b9df1df086bb60f32f963a31eb">codec.h</a>
</li>
<li>TH_PF_RSVD
: <a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bca9e60af0159d42b20806d7eb4a8b833e6">codec.h</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,215 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li class="current"><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_vars.html"><span>Variables</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="#index_t"><span>t</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;
<h3><a class="anchor" id="index_t">- t -</a></h3><ul>
<li>th_comment_add()
: <a class="el" href="group__basefuncs.html#ga19a1f7b8032db957df151a34e5ac9272">codec.h</a>
</li>
<li>th_comment_add_tag()
: <a class="el" href="group__basefuncs.html#ga6c5edc201ca220a30787ca6c1ddcaeaf">codec.h</a>
</li>
<li>th_comment_clear()
: <a class="el" href="group__basefuncs.html#gae736c1afa514947a3feb223143af95e3">codec.h</a>
</li>
<li>th_comment_init()
: <a class="el" href="group__basefuncs.html#ga6c8ab25988e7ea9d7b1e31a54cf58f09">codec.h</a>
</li>
<li>th_comment_query()
: <a class="el" href="group__basefuncs.html#ga33c8b4f57a03217636d704c2ebb211fa">codec.h</a>
</li>
<li>th_comment_query_count()
: <a class="el" href="group__basefuncs.html#ga81d518dc4426f63ceaedcbe2668679fc">codec.h</a>
</li>
<li>th_decode_alloc()
: <a class="el" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e">theoradec.h</a>
</li>
<li>th_decode_ctl()
: <a class="el" href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1">theoradec.h</a>
</li>
<li>th_decode_free()
: <a class="el" href="group__decfuncs.html#gafb6684ad8ba507b71112bc9de148e7d0">theoradec.h</a>
</li>
<li>th_decode_headerin()
: <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50">theoradec.h</a>
</li>
<li>th_decode_packetin()
: <a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb">theoradec.h</a>
</li>
<li>th_decode_ycbcr_out()
: <a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb">theoradec.h</a>
</li>
<li>th_encode_alloc()
: <a class="el" href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7">theoraenc.h</a>
</li>
<li>th_encode_ctl()
: <a class="el" href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9">theoraenc.h</a>
</li>
<li>th_encode_flushheader()
: <a class="el" href="group__encfuncs.html#ga9439d61b566039d194ff782681fbc408">theoraenc.h</a>
</li>
<li>th_encode_free()
: <a class="el" href="group__encfuncs.html#ga36b23d216532231925c4107894204680">theoraenc.h</a>
</li>
<li>th_encode_packetout()
: <a class="el" href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b">theoraenc.h</a>
</li>
<li>th_encode_ycbcr_in()
: <a class="el" href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750">theoraenc.h</a>
</li>
<li>th_granule_frame()
: <a class="el" href="group__basefuncs.html#ga95b10e76fc4c05d0240ea2dfd9fd62bd">codec.h</a>
</li>
<li>th_granule_time()
: <a class="el" href="group__basefuncs.html#ga707e1e281de788af0df39ef00f3fb432">codec.h</a>
</li>
<li>th_info_clear()
: <a class="el" href="group__basefuncs.html#gab3d6441ab4a4969859ef5fd78a9e3c1c">codec.h</a>
</li>
<li>th_info_init()
: <a class="el" href="group__basefuncs.html#ga430d9c605816a6ca0bdce3a0b965b926">codec.h</a>
</li>
<li>th_packet_isheader()
: <a class="el" href="group__basefuncs.html#ga02f3f38261a9b39452d8a5e6f8737cc1">codec.h</a>
</li>
<li>th_packet_iskeyframe()
: <a class="el" href="group__basefuncs.html#gafe95cfd06f0fef413266c9168a66248a">codec.h</a>
</li>
<li>th_setup_free()
: <a class="el" href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27">theoradec.h</a>
</li>
<li>th_version_number()
: <a class="el" href="group__basefuncs.html#gab723a75c0f95b3eb817f7f769846016b">codec.h</a>
</li>
<li>th_version_string()
: <a class="el" href="group__basefuncs.html#ga04846066738d9f2024fc9961162b2dbc">codec.h</a>
</li>
<li>theora_clear()
: <a class="el" href="group__oldfuncs.html#gab252d5d81b925136dda72e8f1c09c5eb">theora.h</a>
</li>
<li>theora_comment_add()
: <a class="el" href="group__oldfuncs.html#ga650642ed23894e41109bbc42ec393ed4">theora.h</a>
</li>
<li>theora_comment_add_tag()
: <a class="el" href="group__oldfuncs.html#ga339bd80b5bf4bb168b7052d8ec0b5a92">theora.h</a>
</li>
<li>theora_comment_clear()
: <a class="el" href="group__oldfuncs.html#ga04c07c2eefba3a433e43f9fbde14719f">theora.h</a>
</li>
<li>theora_comment_init()
: <a class="el" href="group__oldfuncs.html#ga811b92785df3bdbbebb3de612d9d6ce0">theora.h</a>
</li>
<li>theora_comment_query()
: <a class="el" href="group__oldfuncs.html#ga4361f6001abb5c83c36a2ddfb648a8dc">theora.h</a>
</li>
<li>theora_comment_query_count()
: <a class="el" href="group__oldfuncs.html#ga10f66a3c752442a3e0c0098e0f88df8b">theora.h</a>
</li>
<li>theora_control()
: <a class="el" href="group__oldfuncs.html#ga186773db3bc8cd550047e7df1b2ba2c9">theora.h</a>
</li>
<li>theora_decode_header()
: <a class="el" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82">theora.h</a>
</li>
<li>theora_decode_init()
: <a class="el" href="group__oldfuncs.html#ga264907c66003799ff77ecbd09eb33d2c">theora.h</a>
</li>
<li>theora_decode_packetin()
: <a class="el" href="group__oldfuncs.html#gaa65a9e53b46fd54ab344bd599fa96975">theora.h</a>
</li>
<li>theora_decode_YUVout()
: <a class="el" href="group__oldfuncs.html#ga09d47c80e1e94bff0a46a496816b8daa">theora.h</a>
</li>
<li>theora_encode_comment()
: <a class="el" href="group__oldfuncs.html#ga45e8db0713eaaca0f1144f3724cb834a">theora.h</a>
</li>
<li>theora_encode_header()
: <a class="el" href="group__oldfuncs.html#ga451feb58d6bde726edbae193689887be">theora.h</a>
</li>
<li>theora_encode_init()
: <a class="el" href="group__oldfuncs.html#ga0f7ad4d4b2343278cb4ba8fb2bd5109a">theora.h</a>
</li>
<li>theora_encode_packetout()
: <a class="el" href="group__oldfuncs.html#ga5f4929677a735bc2198c2309d235f1b3">theora.h</a>
</li>
<li>theora_encode_tables()
: <a class="el" href="group__oldfuncs.html#ga5085baf20855b283fa01fc948505d9d2">theora.h</a>
</li>
<li>theora_encode_YUVin()
: <a class="el" href="group__oldfuncs.html#gac0d33d896ca70cedfc94c5986d947078">theora.h</a>
</li>
<li>theora_granule_frame()
: <a class="el" href="group__oldfuncs.html#ga7bfa3ceb2fb4b41a282456c56e1dd269">theora.h</a>
</li>
<li>theora_granule_shift()
: <a class="el" href="group__oldfuncs.html#gacd9360e6a47139c761002410af457a02">theora.h</a>
</li>
<li>theora_granule_time()
: <a class="el" href="group__oldfuncs.html#ga4376358b12b9fa23ce6fe21cb5c65ac6">theora.h</a>
</li>
<li>theora_info_clear()
: <a class="el" href="group__oldfuncs.html#gaba7022d58edbc4825cacad03f68b3e0d">theora.h</a>
</li>
<li>theora_info_init()
: <a class="el" href="group__oldfuncs.html#ga3091c87d48f1faba018c5956379a6d90">theora.h</a>
</li>
<li>theora_packet_isheader()
: <a class="el" href="group__oldfuncs.html#gab969f9d0407683f0e5abe73d0839a25b">theora.h</a>
</li>
<li>theora_packet_iskeyframe()
: <a class="el" href="group__oldfuncs.html#ga39ccc8f847a748d7074c926b4fdd12b2">theora.h</a>
</li>
<li>theora_version_number()
: <a class="el" href="group__oldfuncs.html#gad181f4b19d455dcc2bef2533530b84c8">theora.h</a>
</li>
<li>theora_version_string()
: <a class="el" href="group__oldfuncs.html#ga5a3da8fd262a60f055f96536eec06df2">theora.h</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,64 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li><a href="globals_vars.html"><span>Variables</span></a></li>
<li class="current"><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;<ul>
<li>th_dec_ctx
: <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">theoradec.h</a>
</li>
<li>th_enc_ctx
: <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">theoraenc.h</a>
</li>
<li>th_quant_base
: <a class="el" href="codec_8h.html#a6a1426d16beef8a311d7f0e9d2e96326">codec.h</a>
</li>
<li>th_setup_info
: <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">theoradec.h</a>
</li>
<li>th_stripe_decoded_func
: <a class="el" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54">theoradec.h</a>
</li>
<li>th_ycbcr_buffer
: <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">codec.h</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,52 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Data Fields</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li class="current"><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="globals.html"><span>All</span></a></li>
<li><a href="globals_func.html"><span>Functions</span></a></li>
<li class="current"><a href="globals_vars.html"><span>Variables</span></a></li>
<li><a href="globals_type.html"><span>Typedefs</span></a></li>
<li><a href="globals_enum.html"><span>Enumerations</span></a></li>
<li><a href="globals_eval.html"><span>Enumerator</span></a></li>
<li><a href="globals_defs.html"><span>Defines</span></a></li>
</ul>
</div>
</div>
<div class="contents">
&nbsp;<ul>
<li>TH_VP31_HUFF_CODES
: <a class="el" href="theoraenc_8h.html#aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e">theoraenc.h</a>
</li>
<li>TH_VP31_QUANT_INFO
: <a class="el" href="theoraenc_8h.html#a3b1b462989f4e7a5a98e6e697f1a7f7d">theoraenc.h</a>
</li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,542 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Functions Shared by Encode and Decode</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Functions Shared by Encode and Decode</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Basic shared functions</h2></td></tr>
<tr><td colspan="2"><p><a class="anchor" id="amgrpb625c22fa07613c734f71c378fe32d7a"></a> </p>
<br/><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga04846066738d9f2024fc9961162b2dbc">th_version_string</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a human-readable string to identify the library vendor and version. <a href="#ga04846066738d9f2024fc9961162b2dbc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#gab723a75c0f95b3eb817f7f769846016b">th_version_number</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the library version number. <a href="#gab723a75c0f95b3eb817f7f769846016b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga95b10e76fc4c05d0240ea2dfd9fd62bd">th_granule_frame</a> (void *_encdec, ogg_int64_t _granpos)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts a granule position to an absolute frame index, starting at <code>0</code>. <a href="#ga95b10e76fc4c05d0240ea2dfd9fd62bd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga707e1e281de788af0df39ef00f3fb432">th_granule_time</a> (void *_encdec, ogg_int64_t _granpos)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts a granule position to an absolute time in seconds. <a href="#ga707e1e281de788af0df39ef00f3fb432"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga02f3f38261a9b39452d8a5e6f8737cc1">th_packet_isheader</a> (ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether a Theora packet is a header or not. <a href="#ga02f3f38261a9b39452d8a5e6f8737cc1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#gafe95cfd06f0fef413266c9168a66248a">th_packet_iskeyframe</a> (ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether a theora packet is a key frame or not. <a href="#gafe95cfd06f0fef413266c9168a66248a"></a><br/></td></tr>
<tr><td colspan="2"><h2>Functions for manipulating header data</h2></td></tr>
<tr><td colspan="2"><p><a class="anchor" id="amgrp14ef5f819e97c870c128539ed1f334e3"></a> </p>
<br/><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga430d9c605816a6ca0bdce3a0b965b926">th_info_init</a> (<a class="el" href="structth__info.html">th_info</a> *_info)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure. <a href="#ga430d9c605816a6ca0bdce3a0b965b926"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#gab3d6441ab4a4969859ef5fd78a9e3c1c">th_info_clear</a> (<a class="el" href="structth__info.html">th_info</a> *_info)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clears a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure. <a href="#gab3d6441ab4a4969859ef5fd78a9e3c1c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga6c8ab25988e7ea9d7b1e31a54cf58f09">th_comment_init</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize a <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. <a href="#ga6c8ab25988e7ea9d7b1e31a54cf58f09"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga19a1f7b8032db957df151a34e5ac9272">th_comment_add</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc, char *_comment)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a comment to an initialized <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. <a href="#ga19a1f7b8032db957df151a34e5ac9272"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga6c5edc201ca220a30787ca6c1ddcaeaf">th_comment_add_tag</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc, char *_tag, char *_val)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a comment to an initialized <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. <a href="#ga6c5edc201ca220a30787ca6c1ddcaeaf"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga33c8b4f57a03217636d704c2ebb211fa">th_comment_query</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc, char *_tag, int _count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Look up a comment value by its tag. <a href="#ga33c8b4f57a03217636d704c2ebb211fa"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#ga81d518dc4426f63ceaedcbe2668679fc">th_comment_query_count</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc, char *_tag)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Look up the number of instances of a tag. <a href="#ga81d518dc4426f63ceaedcbe2668679fc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__basefuncs.html#gae736c1afa514947a3feb223143af95e3">th_comment_clear</a> (<a class="el" href="structth__comment.html">th_comment</a> *_tc)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clears a <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. <a href="#gae736c1afa514947a3feb223143af95e3"></a><br/></td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga19a1f7b8032db957df151a34e5ac9272"></a><!-- doxytag: member="codec.h::th_comment_add" ref="ga19a1f7b8032db957df151a34e5ac9272" args="(th_comment *_tc, char *_comment)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_comment_add </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__comment.html">th_comment</a> *&nbsp;</td>
<td class="paramname"> <em>_tc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&nbsp;</td>
<td class="paramname"> <em>_comment</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Add a comment to an initialized <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>Neither <a class="el" href="group__basefuncs.html#ga19a1f7b8032db957df151a34e5ac9272" title="Add a comment to an initialized th_comment structure.">th_comment_add()</a> nor <a class="el" href="group__basefuncs.html#ga6c5edc201ca220a30787ca6c1ddcaeaf" title="Add a comment to an initialized th_comment structure.">th_comment_add_tag()</a> support comments containing null values, although the bitstream format does support them. To add such comments you will need to manipulate the <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure directly. </dd></dl>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_tc</em>&nbsp;</td><td>The <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> struct to add the comment to. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_comment</em>&nbsp;</td><td>Must be a null-terminated UTF-8 string containing the comment in "TAG=the value" form. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga6c5edc201ca220a30787ca6c1ddcaeaf"></a><!-- doxytag: member="codec.h::th_comment_add_tag" ref="ga6c5edc201ca220a30787ca6c1ddcaeaf" args="(th_comment *_tc, char *_tag, char *_val)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_comment_add_tag </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__comment.html">th_comment</a> *&nbsp;</td>
<td class="paramname"> <em>_tc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&nbsp;</td>
<td class="paramname"> <em>_tag</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&nbsp;</td>
<td class="paramname"> <em>_val</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Add a comment to an initialized <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>Neither <a class="el" href="group__basefuncs.html#ga19a1f7b8032db957df151a34e5ac9272" title="Add a comment to an initialized th_comment structure.">th_comment_add()</a> nor <a class="el" href="group__basefuncs.html#ga6c5edc201ca220a30787ca6c1ddcaeaf" title="Add a comment to an initialized th_comment structure.">th_comment_add_tag()</a> support comments containing null values, although the bitstream format does support them. To add such comments you will need to manipulate the <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure directly. </dd></dl>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_tc</em>&nbsp;</td><td>The <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> struct to add the comment to. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_tag</em>&nbsp;</td><td>A null-terminated string containing the tag associated with the comment. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_val</em>&nbsp;</td><td>The corresponding value as a null-terminated string. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gae736c1afa514947a3feb223143af95e3"></a><!-- doxytag: member="codec.h::th_comment_clear" ref="gae736c1afa514947a3feb223143af95e3" args="(th_comment *_tc)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_comment_clear </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__comment.html">th_comment</a> *&nbsp;</td>
<td class="paramname"> <em>_tc</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Clears a <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. </p>
<p>This should be called on a <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure after it is no longer needed. It will free all memory used by the structure members. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_tc</em>&nbsp;</td><td>The <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> struct to clear. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga6c8ab25988e7ea9d7b1e31a54cf58f09"></a><!-- doxytag: member="codec.h::th_comment_init" ref="ga6c8ab25988e7ea9d7b1e31a54cf58f09" args="(th_comment *_tc)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_comment_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__comment.html">th_comment</a> *&nbsp;</td>
<td class="paramname"> <em>_tc</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Initialize a <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. </p>
<p>This should be called on a freshly allocated <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure before attempting to use it. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_tc</em>&nbsp;</td><td>The <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> struct to initialize. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga33c8b4f57a03217636d704c2ebb211fa"></a><!-- doxytag: member="codec.h::th_comment_query" ref="ga33c8b4f57a03217636d704c2ebb211fa" args="(th_comment *_tc, char *_tag, int _count)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* th_comment_query </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__comment.html">th_comment</a> *&nbsp;</td>
<td class="paramname"> <em>_tc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&nbsp;</td>
<td class="paramname"> <em>_tag</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>_count</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Look up a comment value by its tag. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_tc</em>&nbsp;</td><td>An initialized <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_tag</em>&nbsp;</td><td>The tag to look up. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_count</em>&nbsp;</td><td>The instance of the tag. The same tag can appear multiple times, each with a distinct value, so an index is required to retrieve them all. The order in which these values appear is significant and should be preserved. Use <a class="el" href="group__basefuncs.html#ga81d518dc4426f63ceaedcbe2668679fc" title="Look up the number of instances of a tag.">th_comment_query_count()</a> to get the legal range for the <em>_count</em> parameter. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A pointer to the queried tag's value. This points directly to data in the <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. It should not be modified or freed by the application, and modifications to the structure may invalidate the pointer. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>NULL</em>&nbsp;</td><td>If no matching tag is found. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga81d518dc4426f63ceaedcbe2668679fc"></a><!-- doxytag: member="codec.h::th_comment_query_count" ref="ga81d518dc4426f63ceaedcbe2668679fc" args="(th_comment *_tc, char *_tag)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_comment_query_count </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__comment.html">th_comment</a> *&nbsp;</td>
<td class="paramname"> <em>_tc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">char *&nbsp;</td>
<td class="paramname"> <em>_tag</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Look up the number of instances of a tag. </p>
<p>Call this first when querying for a specific tag and then iterate over the number of instances with separate calls to <a class="el" href="group__basefuncs.html#ga33c8b4f57a03217636d704c2ebb211fa" title="Look up a comment value by its tag.">th_comment_query()</a> to retrieve all the values for that tag in order. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_tc</em>&nbsp;</td><td>An initialized <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_tag</em>&nbsp;</td><td>The tag to look up. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The number on instances of this particular tag. </dd></dl>
</div>
</div>
<a class="anchor" id="ga95b10e76fc4c05d0240ea2dfd9fd62bd"></a><!-- doxytag: member="codec.h::th_granule_frame" ref="ga95b10e76fc4c05d0240ea2dfd9fd62bd" args="(void *_encdec, ogg_int64_t _granpos)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_int64_t th_granule_frame </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>_encdec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ogg_int64_t&nbsp;</td>
<td class="paramname"> <em>_granpos</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Converts a granule position to an absolute frame index, starting at <code>0</code>. </p>
<p>The granule position is interpreted in the context of a given <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> or <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle (either will suffice). </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_encdec</em>&nbsp;</td><td>A previously allocated <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> or <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_granpos</em>&nbsp;</td><td>The granule position to convert. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The absolute frame index corresponding to <em>_granpos</em>. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>-1</em>&nbsp;</td><td>The given granule position was invalid (i.e. negative). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga707e1e281de788af0df39ef00f3fb432"></a><!-- doxytag: member="codec.h::th_granule_time" ref="ga707e1e281de788af0df39ef00f3fb432" args="(void *_encdec, ogg_int64_t _granpos)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">double th_granule_time </td>
<td>(</td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>_encdec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ogg_int64_t&nbsp;</td>
<td class="paramname"> <em>_granpos</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Converts a granule position to an absolute time in seconds. </p>
<p>The granule position is interpreted in the context of a given <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> or <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle (either will suffice). </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_encdec</em>&nbsp;</td><td>A previously allocated <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> or <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_granpos</em>&nbsp;</td><td>The granule position to convert. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The absolute time in seconds corresponding to <em>_granpos</em>. This is the "end time" for the frame, or the latest time it should be displayed. It is not the presentation time. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>-1</em>&nbsp;</td><td>The given granule position was invalid (i.e. negative). </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gab3d6441ab4a4969859ef5fd78a9e3c1c"></a><!-- doxytag: member="codec.h::th_info_clear" ref="gab3d6441ab4a4969859ef5fd78a9e3c1c" args="(th_info *_info)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_info_clear </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__info.html">th_info</a> *&nbsp;</td>
<td class="paramname"> <em>_info</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Clears a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure. </p>
<p>This should be called on a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure after it is no longer needed. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_info</em>&nbsp;</td><td>The <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> struct to clear. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga430d9c605816a6ca0bdce3a0b965b926"></a><!-- doxytag: member="codec.h::th_info_init" ref="ga430d9c605816a6ca0bdce3a0b965b926" args="(th_info *_info)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_info_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__info.html">th_info</a> *&nbsp;</td>
<td class="paramname"> <em>_info</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Initializes a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure. </p>
<p>This should be called on a freshly allocated <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure before attempting to use it. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_info</em>&nbsp;</td><td>The <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> struct to initialize. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga02f3f38261a9b39452d8a5e6f8737cc1"></a><!-- doxytag: member="codec.h::th_packet_isheader" ref="ga02f3f38261a9b39452d8a5e6f8737cc1" args="(ogg_packet *_op)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_packet_isheader </td>
<td>(</td>
<td class="paramtype">ogg_packet *&nbsp;</td>
<td class="paramname"> <em>_op</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Determines whether a Theora packet is a header or not. </p>
<p>This function does no verification beyond checking the packet type bit, so it should not be used for bitstream identification; use <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a> for that. As per the Theora specification, an empty (0-byte) packet is treated as a data packet (a delta frame with no coded blocks). </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_op</em>&nbsp;</td><td>An <code>ogg_packet</code> containing encoded Theora data. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>1</em>&nbsp;</td><td>The packet is a header packet </td></tr>
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>The packet is a video data packet. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gafe95cfd06f0fef413266c9168a66248a"></a><!-- doxytag: member="codec.h::th_packet_iskeyframe" ref="gafe95cfd06f0fef413266c9168a66248a" args="(ogg_packet *_op)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_packet_iskeyframe </td>
<td>(</td>
<td class="paramtype">ogg_packet *&nbsp;</td>
<td class="paramname"> <em>_op</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Determines whether a theora packet is a key frame or not. </p>
<p>This function does no verification beyond checking the packet type and key frame bits, so it should not be used for bitstream identification; use <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a> for that. As per the Theora specification, an empty (0-byte) packet is treated as a delta frame (with no coded blocks). </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_op</em>&nbsp;</td><td>An <code>ogg_packet</code> containing encoded Theora data. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>1</em>&nbsp;</td><td>The packet contains a key frame. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>The packet contains a delta frame. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>-1</em>&nbsp;</td><td>The packet is not a video data packet. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gab723a75c0f95b3eb817f7f769846016b"></a><!-- doxytag: member="codec.h::th_version_number" ref="gab723a75c0f95b3eb817f7f769846016b" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t th_version_number </td>
<td>(</td>
<td class="paramtype">void&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Retrieves the library version number. </p>
<p>This is the highest bitstream version that the encoder library will produce, or that the decoder library can decode. This number is composed of a 16-bit major version, 8-bit minor version and 8 bit sub-version, composed as follows: </p>
<div class="fragment"><pre class="fragment"> (VERSION_MAJOR&lt;&lt;16)+(VERSION_MINOR&lt;&lt;8)+(VERSION_SUBMINOR)
</pre></div> <dl class="return"><dt><b>Returns:</b></dt><dd>the version number. </dd></dl>
</div>
</div>
<a class="anchor" id="ga04846066738d9f2024fc9961162b2dbc"></a><!-- doxytag: member="codec.h::th_version_string" ref="ga04846066738d9f2024fc9961162b2dbc" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const char* th_version_string </td>
<td>(</td>
<td class="paramtype">void&nbsp;</td>
<td class="paramname"></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Retrieves a human-readable string to identify the library vendor and version. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>the version string. </dd></dl>
</div>
</div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,367 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Functions for Decoding</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Functions for Decoding</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Functions for decoding</h2></td></tr>
<tr><td colspan="2"><p><a class="anchor" id="amgrp9d29c94aa62f20426aa5ff062c7daedd"></a>You must link to <code>libtheoradec</code> if you use any of the functions in this section.</p>
<p>The functions are listed in the order they are used in a typical decode. The basic steps are:</p>
<ul>
<li>Parse the header packets by repeatedly calling <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a>.</li>
<li>Allocate a <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle with <a class="el" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e" title="Allocates a decoder instance.">th_decode_alloc()</a>.</li>
<li>Call <a class="el" href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27" title="Releases all storage used for the decoder setup information.">th_setup_free()</a> to free any memory used for codec setup information.</li>
<li>Perform any additional decoder configuration with <a class="el" href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1" title="Decoder control function.">th_decode_ctl()</a>.</li>
<li>For each video data packet:<ul>
<li>Submit the packet to the decoder via <a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb" title="Submits a packet containing encoded video data to the decoder.">th_decode_packetin()</a>.</li>
<li>Retrieve the uncompressed video data via <a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb" title="Outputs the next available frame of decoded Y&#39;CbCr data.">th_decode_ycbcr_out()</a>.</li>
</ul>
</li>
<li>Call <a class="el" href="group__decfuncs.html#gafb6684ad8ba507b71112bc9de148e7d0" title="Frees an allocated decoder instance.">th_decode_free()</a> to release all decoder memory. </li>
</ul>
<br/><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50">th_decode_headerin</a> (<a class="el" href="structth__info.html">th_info</a> *_info, <a class="el" href="structth__comment.html">th_comment</a> *_tc, <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> **_setup, ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decodes the header packets of a Theora stream. <a href="#ga006d01d36fbe64768c571e6a12b7fc50"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e">th_decode_alloc</a> (const <a class="el" href="structth__info.html">th_info</a> *_info, const <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> *_setup)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocates a decoder instance. <a href="#ga0ef07a9a97849054aa606c595a2d807e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27">th_setup_free</a> (<a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> *_setup)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Releases all storage used for the decoder setup information. <a href="#gadef55431b68aaa59d0d7b32b2f118f27"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1">th_decode_ctl</a> (<a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *_dec, int _req, void *_buf, size_t _buf_sz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decoder control function. <a href="#ga1a8051958d75b1012573b6e3c8f670e1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb">th_decode_packetin</a> (<a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *_dec, const ogg_packet *_op, ogg_int64_t *_granpos)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Submits a packet containing encoded video data to the decoder. <a href="#ga31c814bf09b2232aff69c57ae20f04eb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb">th_decode_ycbcr_out</a> (<a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *_dec, <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a> _ycbcr)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Outputs the next available frame of decoded Y'CbCr data. <a href="#gaa9cc8af63fa8540e0fc95572f259cdcb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#gafb6684ad8ba507b71112bc9de148e7d0">th_decode_free</a> (<a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *_dec)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Frees an allocated decoder instance. <a href="#gafb6684ad8ba507b71112bc9de148e7d0"></a><br/></td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga0ef07a9a97849054aa606c595a2d807e"></a><!-- doxytag: member="theoradec.h::th_decode_alloc" ref="ga0ef07a9a97849054aa606c595a2d807e" args="(const th_info *_info, const th_setup_info *_setup)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a>* th_decode_alloc </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structth__info.html">th_info</a> *&nbsp;</td>
<td class="paramname"> <em>_info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> *&nbsp;</td>
<td class="paramname"> <em>_setup</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Allocates a decoder instance. </p>
<p><b>Security Warning:</b> The Theora format supports very large frame sizes, potentially even larger than the address space of a 32-bit machine, and creating a decoder context allocates the space for several frames of data. If the allocation fails here, your program will crash, possibly at some future point because the OS kernel returned a valid memory range and will only fail when it tries to map the pages in it the first time they are used. Even if it succeeds, you may experience a denial of service if the frame size is large enough to cause excessive paging. If you are integrating libtheora in a larger application where such things are undesirable, it is highly recommended that you check the frame size in <em>_info</em> before calling this function and refuse to decode streams where it is larger than some reasonable maximum. libtheora will not check this for you, because there may be machines that can handle such streams and applications that wish to. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_info</em>&nbsp;</td><td>A <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> struct filled via <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_setup</em>&nbsp;</td><td>A <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28" title="Setup information.">th_setup_info</a> handle returned via <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a>. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The initialized <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>NULL</em>&nbsp;</td><td>If the decoding parameters were invalid. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga1a8051958d75b1012573b6e3c8f670e1"></a><!-- doxytag: member="theoradec.h::th_decode_ctl" ref="ga1a8051958d75b1012573b6e3c8f670e1" args="(th_dec_ctx *_dec, int _req, void *_buf, size_t _buf_sz)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_decode_ctl </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_dec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>_req</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>_buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&nbsp;</td>
<td class="paramname"> <em>_buf_sz</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Decoder control function. </p>
<p>This is used to provide advanced control of the decoding process. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_dec</em>&nbsp;</td><td>A <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_req</em>&nbsp;</td><td>The control code to process. See <a class="el" href="theoradec_8h.html#decctlcodes">the list of available control codes</a> for details. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_buf</em>&nbsp;</td><td>The parameters for this control code. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_buf_sz</em>&nbsp;</td><td>The size of the parameter buffer. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gafb6684ad8ba507b71112bc9de148e7d0"></a><!-- doxytag: member="theoradec.h::th_decode_free" ref="gafb6684ad8ba507b71112bc9de148e7d0" args="(th_dec_ctx *_dec)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_decode_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_dec</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Frees an allocated decoder instance. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_dec</em>&nbsp;</td><td>A <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga006d01d36fbe64768c571e6a12b7fc50"></a><!-- doxytag: member="theoradec.h::th_decode_headerin" ref="ga006d01d36fbe64768c571e6a12b7fc50" args="(th_info *_info, th_comment *_tc, th_setup_info **_setup, ogg_packet *_op)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_decode_headerin </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structth__info.html">th_info</a> *&nbsp;</td>
<td class="paramname"> <em>_info</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structth__comment.html">th_comment</a> *&nbsp;</td>
<td class="paramname"> <em>_tc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> **&nbsp;</td>
<td class="paramname"> <em>_setup</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ogg_packet *&nbsp;</td>
<td class="paramname"> <em>_op</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Decodes the header packets of a Theora stream. </p>
<p>This should be called on the initial packets of the stream, in succession, until it returns <code>0</code>, indicating that all headers have been processed, or an error is encountered. At least three header packets are required, and additional optional header packets may follow. This can be used on the first packet of any logical stream to determine if that stream is a Theora stream. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_info</em>&nbsp;</td><td>A <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure to fill in. This must have been previously initialized with <a class="el" href="group__basefuncs.html#ga430d9c605816a6ca0bdce3a0b965b926" title="Initializes a th_info structure.">th_info_init()</a>. The application may immediately begin using the contents of this structure after the first header is decoded, though it must continue to be passed in on all subsequent calls. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_tc</em>&nbsp;</td><td>A <a class="el" href="structth__comment.html" title="The comment information.">th_comment</a> structure to fill in. The application may immediately begin using the contents of this structure after the second header is decoded, though it must continue to be passed in on all subsequent calls. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_setup</em>&nbsp;</td><td>Returns a pointer to additional, private setup information needed by the decoder. The contents of this pointer must be initialized to <code>NULL</code> on the first call, and the returned value must continue to be passed in on all subsequent calls. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_op</em>&nbsp;</td><td>An <code>ogg_packet</code> structure which contains one of the initial packets of an Ogg logical stream. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A positive value indicates that a Theora header was successfully processed. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>The first video data packet was encountered after all required header packets were parsed. The packet just passed in on this call should be saved and fed to <a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb" title="Submits a packet containing encoded video data to the decoder.">th_decode_packetin()</a> to begin decoding video data. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td>One of <em>_info</em>, <em>_tc</em>, or <em>_setup</em> was <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EBADHEADER</em>&nbsp;</td><td><em>_op</em> was <code>NULL</code>, the packet was not the next header packet in the expected sequence, or the format of the header data was invalid. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EVERSION</em>&nbsp;</td><td>The packet data was a Theora info header, but for a bitstream version not decodable with this version of <code>libtheoradec</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_ENOTFORMAT</em>&nbsp;</td><td>The packet was not a Theora header. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga31c814bf09b2232aff69c57ae20f04eb"></a><!-- doxytag: member="theoradec.h::th_decode_packetin" ref="ga31c814bf09b2232aff69c57ae20f04eb" args="(th_dec_ctx *_dec, const ogg_packet *_op, ogg_int64_t *_granpos)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_decode_packetin </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_dec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const ogg_packet *&nbsp;</td>
<td class="paramname"> <em>_op</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ogg_int64_t *&nbsp;</td>
<td class="paramname"> <em>_granpos</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Submits a packet containing encoded video data to the decoder. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_dec</em>&nbsp;</td><td>A <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_op</em>&nbsp;</td><td>An <code>ogg_packet</code> containing encoded video data. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_granpos</em>&nbsp;</td><td>Returns the granule position of the decoded packet. If non-<code>NULL</code>, the granule position for this specific packet is stored in this location. This is computed incrementally from previously decoded packets. After a seek, the correct granule position must be set via <a class="el" href="theoradec_8h.html#a1e870c654d35394f0d490045df04e0f5" title="Sets the granule position.">TH_DECCTL_SET_GRANPOS</a> for this to work properly. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success. A new decoded frame can be retrieved by calling <a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb" title="Outputs the next available frame of decoded Y&#39;CbCr data.">th_decode_ycbcr_out()</a>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_DUPFRAME</em>&nbsp;</td><td>The packet represented a dropped (0-byte) frame. The player can skip the call to <a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb" title="Outputs the next available frame of decoded Y&#39;CbCr data.">th_decode_ycbcr_out()</a>, as the contents of the decoded frame buffer have not changed. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_dec</em> or <em>_op</em> was <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EBADPACKET</em>&nbsp;</td><td><em>_op</em> does not contain encoded video data. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>The video data uses bitstream features which this library does not support. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gaa9cc8af63fa8540e0fc95572f259cdcb"></a><!-- doxytag: member="theoradec.h::th_decode_ycbcr_out" ref="gaa9cc8af63fa8540e0fc95572f259cdcb" args="(th_dec_ctx *_dec, th_ycbcr_buffer _ycbcr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_decode_ycbcr_out </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_dec</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a>&nbsp;</td>
<td class="paramname"> <em>_ycbcr</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Outputs the next available frame of decoded Y'CbCr data. </p>
<p>If a striped decode callback has been set with <a class="el" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e" title="Sets the striped decode callback function.">TH_DECCTL_SET_STRIPE_CB</a>, then the application does not need to call this function. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_dec</em>&nbsp;</td><td>A <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_ycbcr</em>&nbsp;</td><td>A video buffer structure to fill in. <code>libtheoradec</code> will fill in all the members of this structure, including the pointers to the uncompressed video data. The memory for this video data is owned by <code>libtheoradec</code>. It may be freed or overwritten without notification when subsequent frames are decoded. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_dec</em> or <em>_ycbcr</em> was <code>NULL</code>. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gadef55431b68aaa59d0d7b32b2f118f27"></a><!-- doxytag: member="theoradec.h::th_setup_free" ref="gadef55431b68aaa59d0d7b32b2f118f27" args="(th_setup_info *_setup)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_setup_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> *&nbsp;</td>
<td class="paramname"> <em>_setup</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Releases all storage used for the decoder setup information. </p>
<p>This should be called after you no longer want to create any decoders for a stream whose headers you have parsed with <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a>. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_setup</em>&nbsp;</td><td>The setup information to free. This can safely be <code>NULL</code>. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,317 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Functions for Encoding</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Functions for Encoding</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Functions for encoding</h2></td></tr>
<tr><td colspan="2"><p><a class="anchor" id="amgrpc58fb8743a7ca83eb895d57e29e032c8"></a>You must link to <code>libtheoraenc</code> and <code>libtheoradec</code> if you use any of the functions in this section.</p>
<p>The functions are listed in the order they are used in a typical encode. The basic steps are:</p>
<ul>
<li>Fill in a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure with details on the format of the video you wish to encode.</li>
<li>Allocate a <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> handle with <a class="el" href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7" title="Allocates an encoder instance.">th_encode_alloc()</a>.</li>
<li>Perform any additional encoder configuration required with <a class="el" href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9" title="Encoder control function.">th_encode_ctl()</a>.</li>
<li>Repeatedly call <a class="el" href="group__encfuncs.html#ga9439d61b566039d194ff782681fbc408" title="Outputs the next header packet.">th_encode_flushheader()</a> to retrieve all the header packets.</li>
<li>For each uncompressed frame:<ul>
<li>Submit the uncompressed frame via <a class="el" href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750" title="Submits an uncompressed frame to the encoder.">th_encode_ycbcr_in()</a></li>
<li>Repeatedly call <a class="el" href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b" title="Retrieves encoded video data packets.">th_encode_packetout()</a> to retrieve any video data packets that are ready.</li>
</ul>
</li>
<li>Call <a class="el" href="group__encfuncs.html#ga36b23d216532231925c4107894204680" title="Frees an allocated encoder instance.">th_encode_free()</a> to release all encoder memory. </li>
</ul>
<br/><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7">th_encode_alloc</a> (const <a class="el" href="structth__info.html">th_info</a> *_info)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocates an encoder instance. <a href="#gaa91e47bc9dd5f6ee52045bd7b815e5a7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9">th_encode_ctl</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc, int _req, void *_buf, size_t _buf_sz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encoder control function. <a href="#ga3a427f6514dfdc01ea72172c469d51d9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#ga9439d61b566039d194ff782681fbc408">th_encode_flushheader</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc, <a class="el" href="structth__comment.html">th_comment</a> *_comments, ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Outputs the next header packet. <a href="#ga9439d61b566039d194ff782681fbc408"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750">th_encode_ycbcr_in</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc, <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a> _ycbcr)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Submits an uncompressed frame to the encoder. <a href="#gadbe7dd66b411c2d61ab8153c15308750"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b">th_encode_packetout</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc, int _last, ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves encoded video data packets. <a href="#ga96d8ac1dda53187455352f99bbb5b04b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#ga36b23d216532231925c4107894204680">th_encode_free</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Frees an allocated encoder instance. <a href="#ga36b23d216532231925c4107894204680"></a><br/></td></tr>
</table>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gaa91e47bc9dd5f6ee52045bd7b815e5a7"></a><!-- doxytag: member="theoraenc.h::th_encode_alloc" ref="gaa91e47bc9dd5f6ee52045bd7b815e5a7" args="(const th_info *_info)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a>* th_encode_alloc </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="structth__info.html">th_info</a> *&nbsp;</td>
<td class="paramname"> <em>_info</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Allocates an encoder instance. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_info</em>&nbsp;</td><td>A <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> struct filled with the desired encoding parameters. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>The initialized <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> handle. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>NULL</em>&nbsp;</td><td>If the encoding parameters were invalid. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga3a427f6514dfdc01ea72172c469d51d9"></a><!-- doxytag: member="theoraenc.h::th_encode_ctl" ref="ga3a427f6514dfdc01ea72172c469d51d9" args="(th_enc_ctx *_enc, int _req, void *_buf, size_t _buf_sz)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_encode_ctl </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_enc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>_req</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&nbsp;</td>
<td class="paramname"> <em>_buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&nbsp;</td>
<td class="paramname"> <em>_buf_sz</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Encoder control function. </p>
<p>This is used to provide advanced control the encoding process. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_enc</em>&nbsp;</td><td>A <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_req</em>&nbsp;</td><td>The control code to process. See <a class="el" href="theoraenc_8h.html#encctlcodes">the list of available control codes</a> for details. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_buf</em>&nbsp;</td><td>The parameters for this control code. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_buf_sz</em>&nbsp;</td><td>The size of the parameter buffer. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga9439d61b566039d194ff782681fbc408"></a><!-- doxytag: member="theoraenc.h::th_encode_flushheader" ref="ga9439d61b566039d194ff782681fbc408" args="(th_enc_ctx *_enc, th_comment *_comments, ogg_packet *_op)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_encode_flushheader </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_enc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structth__comment.html">th_comment</a> *&nbsp;</td>
<td class="paramname"> <em>_comments</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ogg_packet *&nbsp;</td>
<td class="paramname"> <em>_op</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Outputs the next header packet. </p>
<p>This should be called repeatedly after encoder initialization until it returns 0 in order to get all of the header packets, in order, before encoding actual video data. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_enc</em>&nbsp;</td><td>A <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_comments</em>&nbsp;</td><td>The metadata to place in the comment header, when it is encoded. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_op</em>&nbsp;</td><td>An <code>ogg_packet</code> structure to fill. All of the elements of this structure will be set, including a pointer to the header data. The memory for the header data is owned by <code>libtheoraenc</code>, and may be invalidated when the next encoder function is called. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A positive value indicates that a header packet was successfully produced. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>No packet was produced, and no more header packets remain. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc</em>, <em>_comments</em>, or <em>_op</em> was <code>NULL</code>. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga36b23d216532231925c4107894204680"></a><!-- doxytag: member="theoraenc.h::th_encode_free" ref="ga36b23d216532231925c4107894204680" args="(th_enc_ctx *_enc)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void th_encode_free </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_enc</em></td>
<td>&nbsp;)&nbsp;</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Frees an allocated encoder instance. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_enc</em>&nbsp;</td><td>A <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> handle. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga96d8ac1dda53187455352f99bbb5b04b"></a><!-- doxytag: member="theoraenc.h::th_encode_packetout" ref="ga96d8ac1dda53187455352f99bbb5b04b" args="(th_enc_ctx *_enc, int _last, ogg_packet *_op)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_encode_packetout </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_enc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&nbsp;</td>
<td class="paramname"> <em>_last</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ogg_packet *&nbsp;</td>
<td class="paramname"> <em>_op</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Retrieves encoded video data packets. </p>
<p>This should be called repeatedly after each frame is submitted to flush any encoded packets, until it returns 0. The encoder will not buffer these packets as subsequent frames are compressed, so a failure to do so will result in lost video data. </p>
<dl class="note"><dt><b>Note:</b></dt><dd>Currently the encoder operates in a one-frame-in, one-packet-out manner. However, this may be changed in the future. </dd></dl>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_enc</em>&nbsp;</td><td>A <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_last</em>&nbsp;</td><td>Set this flag to a non-zero value if no more uncompressed frames will be submitted. This ensures that a proper EOS flag is set on the last packet. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_op</em>&nbsp;</td><td>An <code>ogg_packet</code> structure to fill. All of the elements of this structure will be set, including a pointer to the video data. The memory for the video data is owned by <code>libtheoraenc</code>, and may be invalidated when the next encoder function is called. </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>A positive value indicates that a video data packet was successfully produced. </dd></dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>No packet was produced, and no more encoded video data remains. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc</em> or <em>_op</em> was <code>NULL</code>. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="gadbe7dd66b411c2d61ab8153c15308750"></a><!-- doxytag: member="theoraenc.h::th_encode_ycbcr_in" ref="gadbe7dd66b411c2d61ab8153c15308750" args="(th_enc_ctx *_enc, th_ycbcr_buffer _ycbcr)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int th_encode_ycbcr_in </td>
<td>(</td>
<td class="paramtype"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *&nbsp;</td>
<td class="paramname"> <em>_enc</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a>&nbsp;</td>
<td class="paramname"> <em>_ycbcr</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Submits an uncompressed frame to the encoder. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_enc</em>&nbsp;</td><td>A <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> handle. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_ycbcr</em>&nbsp;</td><td>A buffer of Y'CbCr data to encode. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc</em> or <em>_ycbcr</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td>The buffer size does not match the frame size the encoder was initialized with, or encoding has already completed. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,40 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Main Page</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li class="current"><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>libtheora Documentation</h1><h3>1.1.0+svn </h3><h2><a class="anchor" id="intro">
Introduction</a></h2>
<p>This is the documentation for <code>libtheora</code> C API. The current reference implementation for <a href="http://www.theora.org/">Theora</a>, a free, patent-unencumbered video codec. Theora is derived from On2's VP3 codec with additional features and integration with Ogg multimedia formats by <a href="http://www.xiph.org/">the Xiph.Org Foundation</a>. Complete documentation of the format itself is available in <a href="http://www.theora.org/doc/Theora.pdf">the Theora specification</a>.</p>
<h3><a class="anchor" id="Organization">
Organization</a></h3>
<p>The functions documented here are actually subdivided into three separate libraries:</p>
<ul>
<li><code>libtheoraenc</code> contains the encoder interface, described in <a class="el" href="group__encfuncs.html">Functions for Encoding</a>.</li>
<li><code>libtheoradec</code> contains the decoder interface and routines shared with the encoder. You must also link to this if you link to <code>libtheoraenc</code>. The routines in this library are described in <a class="el" href="group__decfuncs.html">Functions for Decoding</a> and <a class="el" href="group__basefuncs.html">Functions Shared by Encode and Decode</a>.</li>
<li><code>libtheora</code> contains the <a class="el" href="group__oldfuncs.html">Legacy pre-1.0 C API</a>.</li>
</ul>
<p>New code should link to <code>libtheoradec</code> and, if using encoder features, <code>libtheoraenc</code>. Together these two export both the standard and the legacy API, so this is all that is needed by any code. The older <code>libtheora</code> library is provided just for compatibility with older build configurations.</p>
<p>In general the recommended 1.x API symbols can be distinguished by their <code>th_</code> or <code>TH_</code> namespace prefix. The older, legacy API uses <code>theora_</code> or <code>OC_</code> prefixes instead. </p>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: Module Index</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li class="current"><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>Modules</h1>Here is a list of all modules:<ul>
<li><a class="el" href="group__basefuncs.html">Functions Shared by Encode and Decode</a></li>
<li><a class="el" href="group__oldfuncs.html">Legacy pre-1.0 C API</a></li>
<li><a class="el" href="group__decfuncs.html">Functions for Decoding</a></li>
<li><a class="el" href="group__encfuncs.html">Functions for Encoding</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,119 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: th_comment Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>th_comment Struct Reference</h1><!-- doxytag: class="th_comment" -->
<p>The comment information.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="codec_8h_source.html">codec.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char **&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__comment.html#ad72830e183e707bb0df423eb73b00de4">user_comments</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The array of comment string vectors. <a href="#ad72830e183e707bb0df423eb73b00de4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__comment.html#a723dc6fdf75757e70e28eea864b10898">comment_lengths</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An array of the corresponding length of each vector, in bytes. <a href="#a723dc6fdf75757e70e28eea864b10898"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__comment.html#a5990c34932376f070ad0fc314daaeb78">comments</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The total number of comment strings. <a href="#a5990c34932376f070ad0fc314daaeb78"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__comment.html#a93fbe894d23603f56843be15b0cbdba0">vendor</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The null-terminated vendor string. <a href="#a93fbe894d23603f56843be15b0cbdba0"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>The comment information. </p>
<p>This structure holds the in-stream metadata corresponding to the 'comment' header packet. The comment header is meant to be used much like someone jotting a quick note on the label of a video. It should be a short, to the point text note that can be more than a couple words, but not more than a short paragraph.</p>
<p>The metadata is stored as a series of (tag, value) pairs, in length-encoded string vectors. The first occurrence of the '=' character delimits the tag and value. A particular tag may occur more than once, and order is significant. The character set encoding for the strings is always UTF-8, but the tag names are limited to ASCII, and treated as case-insensitive. See <a href="http://www.theora.org/doc/Theora.pdf">the Theora specification</a>, Section 6.3.3 for details.</p>
<p>In filling in this structure, <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a> will null-terminate the user_comment strings for safety. However, the bitstream format itself treats them as 8-bit clean vectors, possibly containing null characters, and so the length array should be treated as their authoritative length. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="a723dc6fdf75757e70e28eea864b10898"></a><!-- doxytag: member="th_comment::comment_lengths" ref="a723dc6fdf75757e70e28eea864b10898" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int* <a class="el" href="structth__comment.html#a723dc6fdf75757e70e28eea864b10898">th_comment::comment_lengths</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>An array of the corresponding length of each vector, in bytes. </p>
</div>
</div>
<a class="anchor" id="a5990c34932376f070ad0fc314daaeb78"></a><!-- doxytag: member="th_comment::comments" ref="a5990c34932376f070ad0fc314daaeb78" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__comment.html#a5990c34932376f070ad0fc314daaeb78">th_comment::comments</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The total number of comment strings. </p>
</div>
</div>
<a class="anchor" id="ad72830e183e707bb0df423eb73b00de4"></a><!-- doxytag: member="th_comment::user_comments" ref="ad72830e183e707bb0df423eb73b00de4" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char** <a class="el" href="structth__comment.html#ad72830e183e707bb0df423eb73b00de4">th_comment::user_comments</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The array of comment string vectors. </p>
</div>
</div>
<a class="anchor" id="a93fbe894d23603f56843be15b0cbdba0"></a><!-- doxytag: member="th_comment::vendor" ref="a93fbe894d23603f56843be15b0cbdba0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* <a class="el" href="structth__comment.html#a93fbe894d23603f56843be15b0cbdba0">th_comment::vendor</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The null-terminated vendor string. </p>
<p>This identifies the software used to encode the stream. </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="codec_8h_source.html">codec.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,83 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: th_huff_code Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>th_huff_code Struct Reference</h1><!-- doxytag: class="th_huff_code" -->
<p>A Huffman code for a Theora DCT token.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="codec_8h_source.html">codec.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__huff__code.html#a6dd29e3aa5a0c5a2dd5ce1f45b1162b4">pattern</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The bit pattern for the code, with the LSbit of the pattern aligned in the LSbit of the word. <a href="#a6dd29e3aa5a0c5a2dd5ce1f45b1162b4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__huff__code.html#aaf97b8f2f90042f7bc136a7b2bc35e35">nbits</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The number of bits in the code. <a href="#aaf97b8f2f90042f7bc136a7b2bc35e35"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>A Huffman code for a Theora DCT token. </p>
<p>Each set of Huffman codes in a given table must form a complete, prefix-free code. There is no requirement that all the tokens in a table have a valid code, but the current encoder is not optimized to take advantage of this. If each of the five grouops of 16 tables does not contain at least one table with a code for every token, then the encoder may fail to encode certain frames. The complete table in the first group of 16 does not have to be in the same place as the complete table in the other groups, but the complete tables in the remaining four groups must all be in the same place. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="aaf97b8f2f90042f7bc136a7b2bc35e35"></a><!-- doxytag: member="th_huff_code::nbits" ref="aaf97b8f2f90042f7bc136a7b2bc35e35" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__huff__code.html#aaf97b8f2f90042f7bc136a7b2bc35e35">th_huff_code::nbits</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The number of bits in the code. </p>
<p>This must be between 0 and 32, inclusive. </p>
</div>
</div>
<a class="anchor" id="a6dd29e3aa5a0c5a2dd5ce1f45b1162b4"></a><!-- doxytag: member="th_huff_code::pattern" ref="a6dd29e3aa5a0c5a2dd5ce1f45b1162b4" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__huff__code.html#a6dd29e3aa5a0c5a2dd5ce1f45b1162b4">th_huff_code::pattern</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The bit pattern for the code, with the LSbit of the pattern aligned in the LSbit of the word. </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="codec_8h_source.html">codec.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,116 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: th_img_plane Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>th_img_plane Struct Reference</h1><!-- doxytag: class="th_img_plane" -->
<p>A buffer for a single color plane in an uncompressed image.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="codec_8h_source.html">codec.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__img__plane.html#a58cc297a99cd4594c3d30e56f2ed6b74">width</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The width of this plane. <a href="#a58cc297a99cd4594c3d30e56f2ed6b74"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__img__plane.html#a21aea1367894468de489d529d7eaf44d">height</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The height of this plane. <a href="#a21aea1367894468de489d529d7eaf44d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__img__plane.html#ab1100f071ffee3b37e07e3222f819bad">stride</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The offset in bytes between successive rows. <a href="#ab1100f071ffee3b37e07e3222f819bad"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__img__plane.html#af8133681516ce88b5a201c1b4b7e6ba2">data</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A pointer to the beginning of the first row. <a href="#af8133681516ce88b5a201c1b4b7e6ba2"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>A buffer for a single color plane in an uncompressed image. </p>
<p>This contains the image data in a left-to-right, top-down format. Each row of pixels is stored contiguously in memory, but successive rows need not be. Use <em>stride</em> to compute the offset of the next row. The encoder accepts both positive <em>stride</em> values (top-down in memory) and negative (bottom-up in memory). The decoder currently always generates images with positive strides. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="af8133681516ce88b5a201c1b4b7e6ba2"></a><!-- doxytag: member="th_img_plane::data" ref="af8133681516ce88b5a201c1b4b7e6ba2" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char* <a class="el" href="structth__img__plane.html#af8133681516ce88b5a201c1b4b7e6ba2">th_img_plane::data</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>A pointer to the beginning of the first row. </p>
</div>
</div>
<a class="anchor" id="a21aea1367894468de489d529d7eaf44d"></a><!-- doxytag: member="th_img_plane::height" ref="a21aea1367894468de489d529d7eaf44d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__img__plane.html#a21aea1367894468de489d529d7eaf44d">th_img_plane::height</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The height of this plane. </p>
</div>
</div>
<a class="anchor" id="ab1100f071ffee3b37e07e3222f819bad"></a><!-- doxytag: member="th_img_plane::stride" ref="ab1100f071ffee3b37e07e3222f819bad" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__img__plane.html#ab1100f071ffee3b37e07e3222f819bad">th_img_plane::stride</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The offset in bytes between successive rows. </p>
</div>
</div>
<a class="anchor" id="a58cc297a99cd4594c3d30e56f2ed6b74"></a><!-- doxytag: member="th_img_plane::width" ref="a58cc297a99cd4594c3d30e56f2ed6b74" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__img__plane.html#a58cc297a99cd4594c3d30e56f2ed6b74">th_img_plane::width</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The width of this plane. </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="codec_8h_source.html">codec.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,358 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: th_info Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>th_info Struct Reference</h1><!-- doxytag: class="th_info" -->
<p>Theora bitstream information.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="codec_8h_source.html">codec.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a6b8087a4d831da53011a43b8d74087a0">frame_width</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The encoded frame width. <a href="#a6b8087a4d831da53011a43b8d74087a0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a6b1adc3a16a8336a72692b0a5937214c">frame_height</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The encoded frame height. <a href="#a6b1adc3a16a8336a72692b0a5937214c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345">pic_width</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The displayed picture width. <a href="#a5048edf77b141dd3e9a92ca85e317345"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b">pic_height</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The displayed picture height. <a href="#a775178474283c5990ba73f9ba7f6b88b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a5b3f834bcf141564e7bb14f49101870f">pic_x</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The X offset of the displayed picture. <a href="#a5b3f834bcf141564e7bb14f49101870f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a8aacc575cab2dfe3735001c2ad32aa14">pic_y</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The Y offset of the displayed picture. <a href="#a8aacc575cab2dfe3735001c2ad32aa14"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0">th_colorspace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a8c7828cd0e023e9d21108160d53659a6">colorspace</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The color space. <a href="#a8c7828cd0e023e9d21108160d53659a6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc">th_pixel_fmt</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a2301388ef3755c41ab12fd144c1fc54e">pixel_fmt</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The pixel format. <a href="#a2301388ef3755c41ab12fd144c1fc54e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a1d9c8d768a4ae623269f5bd8f6f7a015">target_bitrate</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The target bit-rate in bits per second. <a href="#a1d9c8d768a4ae623269f5bd8f6f7a015"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#aa4cdcf96cb46b256821993e9a830ee02">quality</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The target quality level. <a href="#aa4cdcf96cb46b256821993e9a830ee02"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a693ca4ab11fbc0c3f32594b4bb8766ed">keyframe_granule_shift</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The amount to shift to extract the last keyframe number from the granule position. <a href="#a693ca4ab11fbc0c3f32594b4bb8766ed"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Theora version</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrpf735645ddddaaf44dc0647da0e883f6c"></a>Bitstream version information.</p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a60b3e2cac006fee0e105a918d6a5a9f9">version_major</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#abb1d4887a8079c6c5aaa6d7229f243d7">version_minor</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#abfacc79b7cabae12b6ac2484f76602d3">version_subminor</a></td></tr>
<tr><td colspan="2"><div class="groupHeader">Frame rate</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp801309c4a0e25a4db3fe5739b322b0a7"></a>The frame rate, as a fraction.</p>
<p>If either is 0, the frame rate is undefined. </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a20606e61676f585a7e59cfc96de190a5">fps_numerator</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#aa619408f70c03935529f1d3eda7a3ec2">fps_denominator</a></td></tr>
<tr><td colspan="2"><div class="groupHeader">Aspect ratio</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrpdeca19914b5126815a2220f15d067c9b"></a>The aspect ratio of the pixels.</p>
<p>If either value is zero, the aspect ratio is undefined. If not specified by any external means, 1:1 should be assumed. The aspect ratio of the full picture can be computed as </p>
<div class="fragment"><pre class="fragment"> <a class="code" href="structth__info.html#a5be65dac9f75e37864cf73dd543570cd">aspect_numerator</a>*<a class="code" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345" title="The displayed picture width.">pic_width</a>/(<a class="code" href="structth__info.html#a04c0bd477222d747a76085d8720322e2">aspect_denominator</a>*<a class="code" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b" title="The displayed picture height.">pic_height</a>).
</pre></div> <br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a5be65dac9f75e37864cf73dd543570cd">aspect_numerator</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__info.html#a04c0bd477222d747a76085d8720322e2">aspect_denominator</a></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Theora bitstream information. </p>
<p>This contains the basic playback parameters for a stream, and corresponds to the initial 'info' header packet. To initialize an encoder, the application fills in this structure and passes it to <a class="el" href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7" title="Allocates an encoder instance.">th_encode_alloc()</a>. A default encoding mode is chosen based on the values of the <a class="el" href="structth__info.html#aa4cdcf96cb46b256821993e9a830ee02" title="The target quality level.">quality</a> and <a class="el" href="structth__info.html#a1d9c8d768a4ae623269f5bd8f6f7a015" title="The target bit-rate in bits per second.">target_bitrate</a> fields. On decode, it is filled in by <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a>, and then passed to <a class="el" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e" title="Allocates a decoder instance.">th_decode_alloc()</a>.</p>
<p>Encoded Theora frames must be a multiple of 16 in size; this is what the <a class="el" href="structth__info.html#a6b8087a4d831da53011a43b8d74087a0" title="The encoded frame width.">frame_width</a> and <a class="el" href="structth__info.html#a6b1adc3a16a8336a72692b0a5937214c" title="The encoded frame height.">frame_height</a> members represent. To handle arbitrary picture sizes, a crop rectangle is specified in the <a class="el" href="structth__info.html#a5b3f834bcf141564e7bb14f49101870f" title="The X offset of the displayed picture.">pic_x</a>, <a class="el" href="structth__info.html#a8aacc575cab2dfe3735001c2ad32aa14" title="The Y offset of the displayed picture.">pic_y</a>, <a class="el" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345" title="The displayed picture width.">pic_width</a> and <a class="el" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b" title="The displayed picture height.">pic_height</a> members.</p>
<p>All frame buffers contain pointers to the full, padded frame. However, the current encoder <em>will not</em> reference pixels outside of the cropped picture region, and the application does not need to fill them in. The decoder <em>will</em> allocate storage for a full frame, but the application <em>should not</em> rely on the padding containing sensible data.</p>
<p>It is also generally recommended that the offsets and sizes should still be multiples of 2 to avoid chroma sampling shifts when chroma is sub-sampled. See <a href="http://www.theora.org/doc/Theora.pdf">the Theora specification</a>, Section 4.4, for more details.</p>
<p>Frame rate, in frames per second, is stored as a rational fraction, as is the pixel aspect ratio. Note that this refers to the aspect ratio of the individual pixels, not of the overall frame itself. The frame aspect ratio can be computed from pixel aspect ratio using the image dimensions. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="a04c0bd477222d747a76085d8720322e2"></a><!-- doxytag: member="th_info::aspect_denominator" ref="a04c0bd477222d747a76085d8720322e2" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a04c0bd477222d747a76085d8720322e2">th_info::aspect_denominator</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a5be65dac9f75e37864cf73dd543570cd"></a><!-- doxytag: member="th_info::aspect_numerator" ref="a5be65dac9f75e37864cf73dd543570cd" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a5be65dac9f75e37864cf73dd543570cd">th_info::aspect_numerator</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a8c7828cd0e023e9d21108160d53659a6"></a><!-- doxytag: member="th_info::colorspace" ref="a8c7828cd0e023e9d21108160d53659a6" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="codec_8h.html#a4ce7a695ce353b1582d29b6c1ddf31a0">th_colorspace</a> <a class="el" href="structth__info.html#a8c7828cd0e023e9d21108160d53659a6">th_info::colorspace</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The color space. </p>
</div>
</div>
<a class="anchor" id="aa619408f70c03935529f1d3eda7a3ec2"></a><!-- doxytag: member="th_info::fps_denominator" ref="aa619408f70c03935529f1d3eda7a3ec2" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#aa619408f70c03935529f1d3eda7a3ec2">th_info::fps_denominator</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a20606e61676f585a7e59cfc96de190a5"></a><!-- doxytag: member="th_info::fps_numerator" ref="a20606e61676f585a7e59cfc96de190a5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a20606e61676f585a7e59cfc96de190a5">th_info::fps_numerator</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a6b1adc3a16a8336a72692b0a5937214c"></a><!-- doxytag: member="th_info::frame_height" ref="a6b1adc3a16a8336a72692b0a5937214c" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a6b1adc3a16a8336a72692b0a5937214c">th_info::frame_height</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The encoded frame height. </p>
<p>This must be a multiple of 16, and less than 1048576. </p>
</div>
</div>
<a class="anchor" id="a6b8087a4d831da53011a43b8d74087a0"></a><!-- doxytag: member="th_info::frame_width" ref="a6b8087a4d831da53011a43b8d74087a0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a6b8087a4d831da53011a43b8d74087a0">th_info::frame_width</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The encoded frame width. </p>
<p>This must be a multiple of 16, and less than 1048576. </p>
</div>
</div>
<a class="anchor" id="a693ca4ab11fbc0c3f32594b4bb8766ed"></a><!-- doxytag: member="th_info::keyframe_granule_shift" ref="a693ca4ab11fbc0c3f32594b4bb8766ed" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__info.html#a693ca4ab11fbc0c3f32594b4bb8766ed">th_info::keyframe_granule_shift</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The amount to shift to extract the last keyframe number from the granule position. </p>
<p>This can be at most 31. <a class="el" href="group__basefuncs.html#ga430d9c605816a6ca0bdce3a0b965b926" title="Initializes a th_info structure.">th_info_init()</a> will set this to a default value (currently <code>6</code>, which is good for streaming applications), but you can set it to 0 to make every frame a keyframe. The maximum distance between key frames is <code>1&lt;&lt;<a class="el" href="structth__info.html#a693ca4ab11fbc0c3f32594b4bb8766ed" title="The amount to shift to extract the last keyframe number from the granule position...">keyframe_granule_shift</a></code>. The keyframe frequency can be more finely controlled with <a class="el" href="theoraenc_8h.html#a27e755e15b4b5604c54974b304037a49" title="Sets the maximum distance between key frames.">TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE</a>, which can also be adjusted during encoding (for example, to force the next frame to be a keyframe), but it cannot be set larger than the amount permitted by this field after the headers have been output. </p>
</div>
</div>
<a class="anchor" id="a775178474283c5990ba73f9ba7f6b88b"></a><!-- doxytag: member="th_info::pic_height" ref="a775178474283c5990ba73f9ba7f6b88b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b">th_info::pic_height</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The displayed picture height. </p>
<p>This must be no larger than height. </p>
</div>
</div>
<a class="anchor" id="a5048edf77b141dd3e9a92ca85e317345"></a><!-- doxytag: member="th_info::pic_width" ref="a5048edf77b141dd3e9a92ca85e317345" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345">th_info::pic_width</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The displayed picture width. </p>
<p>This must be no larger than width. </p>
</div>
</div>
<a class="anchor" id="a5b3f834bcf141564e7bb14f49101870f"></a><!-- doxytag: member="th_info::pic_x" ref="a5b3f834bcf141564e7bb14f49101870f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a5b3f834bcf141564e7bb14f49101870f">th_info::pic_x</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The X offset of the displayed picture. </p>
<p>This must be no larger than <a class="el" href="structth__info.html#a6b8087a4d831da53011a43b8d74087a0" title="The encoded frame width.">frame_width</a>-<a class="el" href="structth__info.html#a5048edf77b141dd3e9a92ca85e317345" title="The displayed picture width.">pic_width</a> or 255, whichever is smaller. </p>
</div>
</div>
<a class="anchor" id="a8aacc575cab2dfe3735001c2ad32aa14"></a><!-- doxytag: member="th_info::pic_y" ref="a8aacc575cab2dfe3735001c2ad32aa14" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structth__info.html#a8aacc575cab2dfe3735001c2ad32aa14">th_info::pic_y</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The Y offset of the displayed picture. </p>
<p>This must be no larger than <a class="el" href="structth__info.html#a6b1adc3a16a8336a72692b0a5937214c" title="The encoded frame height.">frame_height</a>-<a class="el" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b" title="The displayed picture height.">pic_height</a>, and <a class="el" href="structth__info.html#a6b1adc3a16a8336a72692b0a5937214c" title="The encoded frame height.">frame_height</a>-<a class="el" href="structth__info.html#a775178474283c5990ba73f9ba7f6b88b" title="The displayed picture height.">pic_height</a>-<a class="el" href="structth__info.html#a8aacc575cab2dfe3735001c2ad32aa14" title="The Y offset of the displayed picture.">pic_y</a> must be no larger than 255. This slightly funny restriction is due to the fact that the offset is specified from the top of the image for consistency with the standard graphics left-handed coordinate system used throughout this API, while it is stored in the encoded stream as an offset from the bottom. </p>
</div>
</div>
<a class="anchor" id="a2301388ef3755c41ab12fd144c1fc54e"></a><!-- doxytag: member="th_info::pixel_fmt" ref="a2301388ef3755c41ab12fd144c1fc54e" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="codec_8h.html#a5c9e7f2f0c7ed209c9ca3ed0abd328bc">th_pixel_fmt</a> <a class="el" href="structth__info.html#a2301388ef3755c41ab12fd144c1fc54e">th_info::pixel_fmt</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The pixel format. </p>
</div>
</div>
<a class="anchor" id="aa4cdcf96cb46b256821993e9a830ee02"></a><!-- doxytag: member="th_info::quality" ref="aa4cdcf96cb46b256821993e9a830ee02" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__info.html#aa4cdcf96cb46b256821993e9a830ee02">th_info::quality</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The target quality level. </p>
<p>Valid values range from 0 to 63, inclusive, with higher values giving higher quality. If initializing an encoder with this struct, and <a class="el" href="structth__info.html#a1d9c8d768a4ae623269f5bd8f6f7a015" title="The target bit-rate in bits per second.">target_bitrate</a> is set to zero, VBR encoding at this quality will be activated by default. </p>
</div>
</div>
<a class="anchor" id="a1d9c8d768a4ae623269f5bd8f6f7a015"></a><!-- doxytag: member="th_info::target_bitrate" ref="a1d9c8d768a4ae623269f5bd8f6f7a015" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__info.html#a1d9c8d768a4ae623269f5bd8f6f7a015">th_info::target_bitrate</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The target bit-rate in bits per second. </p>
<p>If initializing an encoder with this struct, set this field to a non-zero value to activate CBR encoding by default. </p>
</div>
</div>
<a class="anchor" id="a60b3e2cac006fee0e105a918d6a5a9f9"></a><!-- doxytag: member="th_info::version_major" ref="a60b3e2cac006fee0e105a918d6a5a9f9" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char <a class="el" href="structth__info.html#a60b3e2cac006fee0e105a918d6a5a9f9">th_info::version_major</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="abb1d4887a8079c6c5aaa6d7229f243d7"></a><!-- doxytag: member="th_info::version_minor" ref="abb1d4887a8079c6c5aaa6d7229f243d7" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char <a class="el" href="structth__info.html#abb1d4887a8079c6c5aaa6d7229f243d7">th_info::version_minor</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="abfacc79b7cabae12b6ac2484f76602d3"></a><!-- doxytag: member="th_info::version_subminor" ref="abfacc79b7cabae12b6ac2484f76602d3" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char <a class="el" href="structth__info.html#abfacc79b7cabae12b6ac2484f76602d3">th_info::version_subminor</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="codec_8h_source.html">codec.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,132 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: th_quant_info Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>th_quant_info Struct Reference</h1><!-- doxytag: class="th_quant_info" -->
<p>A complete set of quantization parameters.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="codec_8h_source.html">codec.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__info.html#ad5c1c0d1aa4127fcf864ae747d732ed9">dc_scale</a> [64]</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The DC scaling factors. <a href="#ad5c1c0d1aa4127fcf864ae747d732ed9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint16_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__info.html#a102f079c8f4a135dc0895c10768aeb06">ac_scale</a> [64]</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The AC scaling factors. <a href="#a102f079c8f4a135dc0895c10768aeb06"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__info.html#a4ac56bf0a45b5743b36daf85d5cd9e33">loop_filter_limits</a> [64]</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The loop filter limit values. <a href="#a4ac56bf0a45b5743b36daf85d5cd9e33"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structth__quant__ranges.html">th_quant_ranges</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__info.html#a6feacf4b365e305a7df7b93d87ee7bb8">qi_ranges</a> [2][3]</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The <em>qi</em> ranges for each <em>ci</em> and <em>pli</em>. <a href="#a6feacf4b365e305a7df7b93d87ee7bb8"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>A complete set of quantization parameters. </p>
<p>The quantizer for each coefficient is calculated as: </p>
<div class="fragment"><pre class="fragment"> Q=MAX(MIN(qmin[qti][ci!=0],scale[ci!=0][qi]*base[qti][pli][qi][ci]/100),
1024).
</pre></div><p><em>qti</em> is the quantization type index: 0 for intra, 1 for inter. <code>ci!=0</code> is 0 for the DC coefficient and 1 for AC coefficients. <em>qi</em> is the quality index, ranging between 0 (low quality) and 63 (high quality). <em>pli</em> is the color plane index: 0 for Y', 1 for Cb, 2 for Cr. <em>ci</em> is the DCT coefficient index. Coefficient indices correspond to the normal 2D DCT block ordering--row-major with low frequencies first--<em>not</em> zig-zag order.</p>
<p>Minimum quantizers are constant, and are given by: </p>
<div class="fragment"><pre class="fragment"> qmin[2][2]={{4,2},{8,4}}.
</pre></div><p>Parameters that can be stored in the bitstream are as follows:</p>
<ul>
<li>The two scale matrices ac_scale and dc_scale. <div class="fragment"><pre class="fragment"> scale[2][64]={<a class="code" href="structth__quant__info.html#ad5c1c0d1aa4127fcf864ae747d732ed9" title="The DC scaling factors.">dc_scale</a>,<a class="code" href="structth__quant__info.html#a102f079c8f4a135dc0895c10768aeb06" title="The AC scaling factors.">ac_scale</a>}.
</pre></div></li>
<li>The base matrices for each <em>qi</em>, <em>qti</em> and <em>pli</em> (up to 384 in all). In order to avoid storing a full 384 base matrices, only a sparse set of matrices are stored, and the rest are linearly interpolated. This is done as follows. For each <em>qti</em> and <em>pli</em>, a series of <em>n</em> <em>qi</em> ranges is defined. The size of each <em>qi</em> range can vary arbitrarily, but they must sum to 63. Then, <code>n+1</code> matrices are specified, one for each endpoint of the ranges. For interpolation purposes, each range's endpoints are the first <em>qi</em> value it contains and one past the last <em>qi</em> value it contains. Fractional values are rounded to the nearest integer, with ties rounded away from zero.</li>
</ul>
<p>Base matrices are stored by reference, so if the same matrices are used multiple times, they will only appear once in the bitstream. The bitstream is also capable of omitting an entire set of ranges and its associated matrices if they are the same as either the previous set (indexed in row-major order) or if the inter set is the same as the intra set.</p>
<ul>
<li>Loop filter limit values. The same limits are used for the loop filter in all color planes, despite potentially differing levels of quantization in each.</li>
</ul>
<p>For the current encoder, <code>scale[ci!=0][qi]</code> must be no greater than <code>scale[ci!=0][qi-1]</code> and <code>base[qti][pli][qi][ci]</code> must be no greater than <code>base[qti][pli][qi-1][ci]</code>. These two conditions ensure that the actual quantizer for a given <em>qti</em>, <em>pli</em>, and <em>ci</em> does not increase as <em>qi</em> increases. This is not required by the decoder. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="a102f079c8f4a135dc0895c10768aeb06"></a><!-- doxytag: member="th_quant_info::ac_scale" ref="a102f079c8f4a135dc0895c10768aeb06" args="[64]" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint16_t <a class="el" href="structth__quant__info.html#a102f079c8f4a135dc0895c10768aeb06">th_quant_info::ac_scale</a>[64]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The AC scaling factors. </p>
</div>
</div>
<a class="anchor" id="ad5c1c0d1aa4127fcf864ae747d732ed9"></a><!-- doxytag: member="th_quant_info::dc_scale" ref="ad5c1c0d1aa4127fcf864ae747d732ed9" args="[64]" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint16_t <a class="el" href="structth__quant__info.html#ad5c1c0d1aa4127fcf864ae747d732ed9">th_quant_info::dc_scale</a>[64]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The DC scaling factors. </p>
</div>
</div>
<a class="anchor" id="a4ac56bf0a45b5743b36daf85d5cd9e33"></a><!-- doxytag: member="th_quant_info::loop_filter_limits" ref="a4ac56bf0a45b5743b36daf85d5cd9e33" args="[64]" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char <a class="el" href="structth__quant__info.html#a4ac56bf0a45b5743b36daf85d5cd9e33">th_quant_info::loop_filter_limits</a>[64]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The loop filter limit values. </p>
</div>
</div>
<a class="anchor" id="a6feacf4b365e305a7df7b93d87ee7bb8"></a><!-- doxytag: member="th_quant_info::qi_ranges" ref="a6feacf4b365e305a7df7b93d87ee7bb8" args="[2][3]" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structth__quant__ranges.html">th_quant_ranges</a> <a class="el" href="structth__quant__info.html#a6feacf4b365e305a7df7b93d87ee7bb8">th_quant_info::qi_ranges</a>[2][3]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The <em>qi</em> ranges for each <em>ci</em> and <em>pli</em>. </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="codec_8h_source.html">codec.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,100 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: th_quant_ranges Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>th_quant_ranges Struct Reference</h1><!-- doxytag: class="th_quant_ranges" -->
<p>A set of <em>qi</em> ranges.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="codec_8h_source.html">codec.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab">nranges</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The number of ranges in the set. <a href="#a53e5a3d7f7a112100b4b670929b3ebab"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const int *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__ranges.html#af3188a373bc0b8ffaa330d0ab4c1a194">sizes</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The size of each of the <a class="el" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab" title="The number of ranges in the set.">nranges</a> ranges. <a href="#af3188a373bc0b8ffaa330d0ab4c1a194"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="codec_8h.html#a6a1426d16beef8a311d7f0e9d2e96326">th_quant_base</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__quant__ranges.html#a52cb432f034737087492ea448de20bdb">base_matrices</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab" title="The number of ranges in the set.">nranges</a> <code>+1</code> base matrices. <a href="#a52cb432f034737087492ea448de20bdb"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>A set of <em>qi</em> ranges. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="a52cb432f034737087492ea448de20bdb"></a><!-- doxytag: member="th_quant_ranges::base_matrices" ref="a52cb432f034737087492ea448de20bdb" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="codec_8h.html#a6a1426d16beef8a311d7f0e9d2e96326">th_quant_base</a>* <a class="el" href="structth__quant__ranges.html#a52cb432f034737087492ea448de20bdb">th_quant_ranges::base_matrices</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p><a class="el" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab" title="The number of ranges in the set.">nranges</a> <code>+1</code> base matrices. </p>
<p>Matrices <em>i</em> and <code>i+1</code> form the endpoints of range <em>i</em>. </p>
</div>
</div>
<a class="anchor" id="a53e5a3d7f7a112100b4b670929b3ebab"></a><!-- doxytag: member="th_quant_ranges::nranges" ref="a53e5a3d7f7a112100b4b670929b3ebab" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab">th_quant_ranges::nranges</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The number of ranges in the set. </p>
</div>
</div>
<a class="anchor" id="af3188a373bc0b8ffaa330d0ab4c1a194"></a><!-- doxytag: member="th_quant_ranges::sizes" ref="af3188a373bc0b8ffaa330d0ab4c1a194" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const int* <a class="el" href="structth__quant__ranges.html#af3188a373bc0b8ffaa330d0ab4c1a194">th_quant_ranges::sizes</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The size of each of the <a class="el" href="structth__quant__ranges.html#a53e5a3d7f7a112100b4b670929b3ebab" title="The number of ranges in the set.">nranges</a> ranges. </p>
<p>These must sum to 63. </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="codec_8h_source.html">codec.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,82 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: th_stripe_callback Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>th_stripe_callback Struct Reference</h1><!-- doxytag: class="th_stripe_callback" -->
<p>The striped decode callback data to pass to <a class="el" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e" title="Sets the striped decode callback function.">TH_DECCTL_SET_STRIPE_CB</a>.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="theoradec_8h_source.html">theoradec.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__stripe__callback.html#ab895162ce29a411fa98e0ba9661f47d4">ctx</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An application-provided context pointer. <a href="#ab895162ce29a411fa98e0ba9661f47d4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54">th_stripe_decoded_func</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__stripe__callback.html#a977c725680a37e3446e459f063b1f4a5">stripe_decoded</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The callback function pointer. <a href="#a977c725680a37e3446e459f063b1f4a5"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>The striped decode callback data to pass to <a class="el" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e" title="Sets the striped decode callback function.">TH_DECCTL_SET_STRIPE_CB</a>. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="ab895162ce29a411fa98e0ba9661f47d4"></a><!-- doxytag: member="th_stripe_callback::ctx" ref="ab895162ce29a411fa98e0ba9661f47d4" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="structth__stripe__callback.html#ab895162ce29a411fa98e0ba9661f47d4">th_stripe_callback::ctx</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>An application-provided context pointer. </p>
<p>This will be passed back verbatim to the application. </p>
</div>
</div>
<a class="anchor" id="a977c725680a37e3446e459f063b1f4a5"></a><!-- doxytag: member="th_stripe_callback::stripe_decoded" ref="a977c725680a37e3446e459f063b1f4a5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54">th_stripe_decoded_func</a> <a class="el" href="structth__stripe__callback.html#a977c725680a37e3446e459f063b1f4a5">th_stripe_callback::stripe_decoded</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The callback function pointer. </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="theoradec_8h_source.html">theoradec.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,121 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theora_comment Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>theora_comment Struct Reference<br/>
<small>
[<a class="el" href="group__oldfuncs.html">Legacy pre-1.0 C API</a>]</small>
</h1><!-- doxytag: class="theora_comment" -->
<p>Comment header metadata.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="theora_8h_source.html">theora.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char **&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__comment.html#a1e236fd180dfce19be89081399444cf5">user_comments</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An array of comment string vectors. <a href="#a1e236fd180dfce19be89081399444cf5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__comment.html#a5ab4a376d3c217282a684577c9c9f49a">comment_lengths</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An array of corresponding string vector lengths in bytes. <a href="#a5ab4a376d3c217282a684577c9c9f49a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__comment.html#a122393035c8352ff9be42d69e73aee00">comments</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The total number of comment string vectors. <a href="#a122393035c8352ff9be42d69e73aee00"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__comment.html#adb371baf8f0daed42af8b875cf8430ef">vendor</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The vendor string identifying the encoder, null terminated. <a href="#adb371baf8f0daed42af8b875cf8430ef"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Comment header metadata. </p>
<p>This structure holds the in-stream metadata corresponding to the 'comment' header packet.</p>
<p>Meta data is stored as a series of (tag, value) pairs, in length-encoded string vectors. The first occurence of the '=' character delimits the tag and value. A particular tag may occur more than once. The character set encoding for the strings is always UTF-8, but the tag names are limited to case-insensitive ASCII. See the spec for details.</p>
<p>In filling in this structure, <a class="el" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82" title="Decode an Ogg packet, with the expectation that the packet contains an initial header...">theora_decode_header()</a> will null-terminate the user_comment strings for safety. However, the bitstream format itself treats them as 8-bit clean, and so the length array should be treated as authoritative for their length. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="a5ab4a376d3c217282a684577c9c9f49a"></a><!-- doxytag: member="theora_comment::comment_lengths" ref="a5ab4a376d3c217282a684577c9c9f49a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int* <a class="el" href="structtheora__comment.html#a5ab4a376d3c217282a684577c9c9f49a">theora_comment::comment_lengths</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>An array of corresponding string vector lengths in bytes. </p>
</div>
</div>
<a class="anchor" id="a122393035c8352ff9be42d69e73aee00"></a><!-- doxytag: member="theora_comment::comments" ref="a122393035c8352ff9be42d69e73aee00" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structtheora__comment.html#a122393035c8352ff9be42d69e73aee00">theora_comment::comments</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The total number of comment string vectors. </p>
</div>
</div>
<a class="anchor" id="a1e236fd180dfce19be89081399444cf5"></a><!-- doxytag: member="theora_comment::user_comments" ref="a1e236fd180dfce19be89081399444cf5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char** <a class="el" href="structtheora__comment.html#a1e236fd180dfce19be89081399444cf5">theora_comment::user_comments</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>An array of comment string vectors. </p>
</div>
</div>
<a class="anchor" id="adb371baf8f0daed42af8b875cf8430ef"></a><!-- doxytag: member="theora_comment::vendor" ref="adb371baf8f0daed42af8b875cf8430ef" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char* <a class="el" href="structtheora__comment.html#adb371baf8f0daed42af8b875cf8430ef">theora_comment::vendor</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The vendor string identifying the encoder, null terminated. </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="theora_8h_source.html">theora.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,491 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theora_info Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>theora_info Struct Reference<br/>
<small>
[<a class="el" href="group__oldfuncs.html">Legacy pre-1.0 C API</a>]</small>
</h1><!-- doxytag: class="theora_info" -->
<p>Theora bitstream info.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="theora_8h_source.html">theora.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a17c2fc651bb3329f1ea6b13ff1d3957b">width</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">encoded frame width <a href="#a17c2fc651bb3329f1ea6b13ff1d3957b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#ae6f0274fc4a7f285c422d91abb35f9c6">height</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">encoded frame height <a href="#ae6f0274fc4a7f285c422d91abb35f9c6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a8f28f4018a25634d40e4ae861fbbccfa">frame_width</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">display frame width <a href="#a8f28f4018a25634d40e4ae861fbbccfa"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a287e4c194f1d2e6deb39d59f1748ea48">frame_height</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">display frame height <a href="#a287e4c194f1d2e6deb39d59f1748ea48"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#af5949a02bef29512f2705e6f6c944e3b">offset_x</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">horizontal offset of the displayed frame <a href="#af5949a02bef29512f2705e6f6c944e3b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a91c3922097ba32a85acd584a01dc2c93">offset_y</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">vertical offset of the displayed frame <a href="#a91c3922097ba32a85acd584a01dc2c93"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a3478199aa5ab213816c1819f70085ad7">fps_numerator</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">frame rate numerator <a href="#a3478199aa5ab213816c1819f70085ad7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a9aa7e826e0323a4ae8cd8646a6cfbfea">fps_denominator</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">frame rate denominator <a href="#a9aa7e826e0323a4ae8cd8646a6cfbfea"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a5a3ed8c79815fba1aa06c3f7d8e48b35">aspect_numerator</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">pixel aspect ratio numerator <a href="#a5a3ed8c79815fba1aa06c3f7d8e48b35"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#afebc4d0cbfb34b68c833a8c79e83ae12">aspect_denominator</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">pixel aspect ratio denominator <a href="#afebc4d0cbfb34b68c833a8c79e83ae12"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9">theora_colorspace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a5eaba99c96706d47b426ab7b7602dc5d">colorspace</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">colorspace <a href="#a5eaba99c96706d47b426ab7b7602dc5d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a0cfba041767ae2416dd190a406afe713">target_bitrate</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">nominal bitrate in bits per second <a href="#a0cfba041767ae2416dd190a406afe713"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a71a4748a5f31bd58d0e403b7806c980d">quality</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Nominal quality setting, 0-63. <a href="#a71a4748a5f31bd58d0e403b7806c980d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a2dfae4fd175dbd19254eaf0697778ff5">quick_p</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Quick encode/decode. <a href="#a2dfae4fd175dbd19254eaf0697778ff5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a7c5ebb9e6700aaef87f29f7c6074e474">version_major</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a75eda4f30270d833c7b9dba43932a06a">version_minor</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#aa07967ecd6e20bd2928ead42b6397b3d">version_subminor</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a719a1d77a4a3bfeab79aa5747dbbb04c">codec_setup</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#af294db65a8363a0bcf43f4727763b291">dropframes_p</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a23648173369174f687085c0ce85ef30e">keyframe_auto_p</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a03e1b3e337af5f9dabaaaeb9050f145a">keyframe_frequency</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#ad9d2e22c44a53473010e6d1042dfe0d8">keyframe_frequency_force</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a588942d1ee90a26a7effdf6a0e98b9ce">keyframe_data_target_bitrate</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_int32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a95cb8958e29ad3d24047ee8f9e7fd99b">keyframe_auto_threshold</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#aa79ca8c0e77a884d4487fd627fae32e9">keyframe_mindistance</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_int32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#ac4789034f547b57d1075e035050eeed9">noise_sensitivity</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_int32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a3fb695de2b2f56dd0203b9e2eb0df1cc">sharpness</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079">theora_pixelformat</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html#a65ab4376ab5242ee82e06c78fb7008ab">pixelformat</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">chroma subsampling mode to expect <a href="#a65ab4376ab5242ee82e06c78fb7008ab"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Theora bitstream info. </p>
<p>Contains the basic playback parameters for a stream, corresponding to the initial 'info' header packet.</p>
<p>Encoded theora frames must be a multiple of 16 in width and height. To handle other frame sizes, a crop rectangle is specified in frame_height and frame_width, offset_x and * offset_y. The offset and size should still be a multiple of 2 to avoid chroma sampling shifts. Offset values in this structure are measured from the upper left of the image.</p>
<p>Frame rate, in frames per second, is stored as a rational fraction. Aspect ratio is also stored as a rational fraction, and refers to the aspect ratio of the frame pixels, not of the overall frame itself.</p>
<p>See <a href="http://svn.xiph.org/trunk/theora/examples/encoder_example.c">examples/encoder_example.c</a> for usage examples of the other paramters and good default settings for the encoder parameters. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="afebc4d0cbfb34b68c833a8c79e83ae12"></a><!-- doxytag: member="theora_info::aspect_denominator" ref="afebc4d0cbfb34b68c833a8c79e83ae12" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#afebc4d0cbfb34b68c833a8c79e83ae12">theora_info::aspect_denominator</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>pixel aspect ratio denominator </p>
</div>
</div>
<a class="anchor" id="a5a3ed8c79815fba1aa06c3f7d8e48b35"></a><!-- doxytag: member="theora_info::aspect_numerator" ref="a5a3ed8c79815fba1aa06c3f7d8e48b35" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a5a3ed8c79815fba1aa06c3f7d8e48b35">theora_info::aspect_numerator</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>pixel aspect ratio numerator </p>
</div>
</div>
<a class="anchor" id="a719a1d77a4a3bfeab79aa5747dbbb04c"></a><!-- doxytag: member="theora_info::codec_setup" ref="a719a1d77a4a3bfeab79aa5747dbbb04c" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="structtheora__info.html#a719a1d77a4a3bfeab79aa5747dbbb04c">theora_info::codec_setup</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a5eaba99c96706d47b426ab7b7602dc5d"></a><!-- doxytag: member="theora_info::colorspace" ref="a5eaba99c96706d47b426ab7b7602dc5d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9">theora_colorspace</a> <a class="el" href="structtheora__info.html#a5eaba99c96706d47b426ab7b7602dc5d">theora_info::colorspace</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>colorspace </p>
</div>
</div>
<a class="anchor" id="af294db65a8363a0bcf43f4727763b291"></a><!-- doxytag: member="theora_info::dropframes_p" ref="af294db65a8363a0bcf43f4727763b291" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structtheora__info.html#af294db65a8363a0bcf43f4727763b291">theora_info::dropframes_p</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a9aa7e826e0323a4ae8cd8646a6cfbfea"></a><!-- doxytag: member="theora_info::fps_denominator" ref="a9aa7e826e0323a4ae8cd8646a6cfbfea" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a9aa7e826e0323a4ae8cd8646a6cfbfea">theora_info::fps_denominator</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>frame rate denominator </p>
</div>
</div>
<a class="anchor" id="a3478199aa5ab213816c1819f70085ad7"></a><!-- doxytag: member="theora_info::fps_numerator" ref="a3478199aa5ab213816c1819f70085ad7" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a3478199aa5ab213816c1819f70085ad7">theora_info::fps_numerator</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>frame rate numerator </p>
</div>
</div>
<a class="anchor" id="a287e4c194f1d2e6deb39d59f1748ea48"></a><!-- doxytag: member="theora_info::frame_height" ref="a287e4c194f1d2e6deb39d59f1748ea48" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a287e4c194f1d2e6deb39d59f1748ea48">theora_info::frame_height</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>display frame height </p>
</div>
</div>
<a class="anchor" id="a8f28f4018a25634d40e4ae861fbbccfa"></a><!-- doxytag: member="theora_info::frame_width" ref="a8f28f4018a25634d40e4ae861fbbccfa" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a8f28f4018a25634d40e4ae861fbbccfa">theora_info::frame_width</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>display frame width </p>
</div>
</div>
<a class="anchor" id="ae6f0274fc4a7f285c422d91abb35f9c6"></a><!-- doxytag: member="theora_info::height" ref="ae6f0274fc4a7f285c422d91abb35f9c6" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#ae6f0274fc4a7f285c422d91abb35f9c6">theora_info::height</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>encoded frame height </p>
</div>
</div>
<a class="anchor" id="a23648173369174f687085c0ce85ef30e"></a><!-- doxytag: member="theora_info::keyframe_auto_p" ref="a23648173369174f687085c0ce85ef30e" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structtheora__info.html#a23648173369174f687085c0ce85ef30e">theora_info::keyframe_auto_p</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a95cb8958e29ad3d24047ee8f9e7fd99b"></a><!-- doxytag: member="theora_info::keyframe_auto_threshold" ref="a95cb8958e29ad3d24047ee8f9e7fd99b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_int32_t <a class="el" href="structtheora__info.html#a95cb8958e29ad3d24047ee8f9e7fd99b">theora_info::keyframe_auto_threshold</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a588942d1ee90a26a7effdf6a0e98b9ce"></a><!-- doxytag: member="theora_info::keyframe_data_target_bitrate" ref="a588942d1ee90a26a7effdf6a0e98b9ce" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a588942d1ee90a26a7effdf6a0e98b9ce">theora_info::keyframe_data_target_bitrate</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a03e1b3e337af5f9dabaaaeb9050f145a"></a><!-- doxytag: member="theora_info::keyframe_frequency" ref="a03e1b3e337af5f9dabaaaeb9050f145a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a03e1b3e337af5f9dabaaaeb9050f145a">theora_info::keyframe_frequency</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="ad9d2e22c44a53473010e6d1042dfe0d8"></a><!-- doxytag: member="theora_info::keyframe_frequency_force" ref="ad9d2e22c44a53473010e6d1042dfe0d8" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#ad9d2e22c44a53473010e6d1042dfe0d8">theora_info::keyframe_frequency_force</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="aa79ca8c0e77a884d4487fd627fae32e9"></a><!-- doxytag: member="theora_info::keyframe_mindistance" ref="aa79ca8c0e77a884d4487fd627fae32e9" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#aa79ca8c0e77a884d4487fd627fae32e9">theora_info::keyframe_mindistance</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="ac4789034f547b57d1075e035050eeed9"></a><!-- doxytag: member="theora_info::noise_sensitivity" ref="ac4789034f547b57d1075e035050eeed9" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_int32_t <a class="el" href="structtheora__info.html#ac4789034f547b57d1075e035050eeed9">theora_info::noise_sensitivity</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="af5949a02bef29512f2705e6f6c944e3b"></a><!-- doxytag: member="theora_info::offset_x" ref="af5949a02bef29512f2705e6f6c944e3b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#af5949a02bef29512f2705e6f6c944e3b">theora_info::offset_x</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>horizontal offset of the displayed frame </p>
</div>
</div>
<a class="anchor" id="a91c3922097ba32a85acd584a01dc2c93"></a><!-- doxytag: member="theora_info::offset_y" ref="a91c3922097ba32a85acd584a01dc2c93" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a91c3922097ba32a85acd584a01dc2c93">theora_info::offset_y</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>vertical offset of the displayed frame </p>
</div>
</div>
<a class="anchor" id="a65ab4376ab5242ee82e06c78fb7008ab"></a><!-- doxytag: member="theora_info::pixelformat" ref="a65ab4376ab5242ee82e06c78fb7008ab" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079">theora_pixelformat</a> <a class="el" href="structtheora__info.html#a65ab4376ab5242ee82e06c78fb7008ab">theora_info::pixelformat</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>chroma subsampling mode to expect </p>
</div>
</div>
<a class="anchor" id="a71a4748a5f31bd58d0e403b7806c980d"></a><!-- doxytag: member="theora_info::quality" ref="a71a4748a5f31bd58d0e403b7806c980d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structtheora__info.html#a71a4748a5f31bd58d0e403b7806c980d">theora_info::quality</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Nominal quality setting, 0-63. </p>
</div>
</div>
<a class="anchor" id="a2dfae4fd175dbd19254eaf0697778ff5"></a><!-- doxytag: member="theora_info::quick_p" ref="a2dfae4fd175dbd19254eaf0697778ff5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structtheora__info.html#a2dfae4fd175dbd19254eaf0697778ff5">theora_info::quick_p</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Quick encode/decode. </p>
</div>
</div>
<a class="anchor" id="a3fb695de2b2f56dd0203b9e2eb0df1cc"></a><!-- doxytag: member="theora_info::sharpness" ref="a3fb695de2b2f56dd0203b9e2eb0df1cc" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_int32_t <a class="el" href="structtheora__info.html#a3fb695de2b2f56dd0203b9e2eb0df1cc">theora_info::sharpness</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a0cfba041767ae2416dd190a406afe713"></a><!-- doxytag: member="theora_info::target_bitrate" ref="a0cfba041767ae2416dd190a406afe713" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structtheora__info.html#a0cfba041767ae2416dd190a406afe713">theora_info::target_bitrate</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>nominal bitrate in bits per second </p>
</div>
</div>
<a class="anchor" id="a7c5ebb9e6700aaef87f29f7c6074e474"></a><!-- doxytag: member="theora_info::version_major" ref="a7c5ebb9e6700aaef87f29f7c6074e474" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char <a class="el" href="structtheora__info.html#a7c5ebb9e6700aaef87f29f7c6074e474">theora_info::version_major</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a75eda4f30270d833c7b9dba43932a06a"></a><!-- doxytag: member="theora_info::version_minor" ref="a75eda4f30270d833c7b9dba43932a06a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char <a class="el" href="structtheora__info.html#a75eda4f30270d833c7b9dba43932a06a">theora_info::version_minor</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="aa07967ecd6e20bd2928ead42b6397b3d"></a><!-- doxytag: member="theora_info::version_subminor" ref="aa07967ecd6e20bd2928ead42b6397b3d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char <a class="el" href="structtheora__info.html#aa07967ecd6e20bd2928ead42b6397b3d">theora_info::version_subminor</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a17c2fc651bb3329f1ea6b13ff1d3957b"></a><!-- doxytag: member="theora_info::width" ref="a17c2fc651bb3329f1ea6b13ff1d3957b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_uint32_t <a class="el" href="structtheora__info.html#a17c2fc651bb3329f1ea6b13ff1d3957b">theora_info::width</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>encoded frame width </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="theora_8h_source.html">theora.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,106 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theora_state Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>theora_state Struct Reference<br/>
<small>
[<a class="el" href="group__oldfuncs.html">Legacy pre-1.0 C API</a>]</small>
</h1><!-- doxytag: class="theora_state" -->
<p>Codec internal state and context.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="theora_8h_source.html">theora.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="structtheora__info.html">theora_info</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__state.html#a0efc7ac581ef260b0ca17f518ace0731">i</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__state.html#a5dd344a3f79ea7501b18c756772fab7b">granulepos</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__state.html#a1fbfd82fb7210cbcc4233cb680ec2af6">internal_encode</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__state.html#ad20c4eebbc5ed9764cf03ba8b90e796e">internal_decode</a></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Codec internal state and context. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="a5dd344a3f79ea7501b18c756772fab7b"></a><!-- doxytag: member="theora_state::granulepos" ref="a5dd344a3f79ea7501b18c756772fab7b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ogg_int64_t <a class="el" href="structtheora__state.html#a5dd344a3f79ea7501b18c756772fab7b">theora_state::granulepos</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a0efc7ac581ef260b0ca17f518ace0731"></a><!-- doxytag: member="theora_state::i" ref="a0efc7ac581ef260b0ca17f518ace0731" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structtheora__info.html">theora_info</a>* <a class="el" href="structtheora__state.html#a0efc7ac581ef260b0ca17f518ace0731">theora_state::i</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="ad20c4eebbc5ed9764cf03ba8b90e796e"></a><!-- doxytag: member="theora_state::internal_decode" ref="ad20c4eebbc5ed9764cf03ba8b90e796e" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="structtheora__state.html#ad20c4eebbc5ed9764cf03ba8b90e796e">theora_state::internal_decode</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a1fbfd82fb7210cbcc4233cb680ec2af6"></a><!-- doxytag: member="theora_state::internal_encode" ref="a1fbfd82fb7210cbcc4233cb680ec2af6" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void* <a class="el" href="structtheora__state.html#a1fbfd82fb7210cbcc4233cb680ec2af6">theora_state::internal_encode</a></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="theora_8h_source.html">theora.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,207 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: yuv_buffer Struct Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li class="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>yuv_buffer Struct Reference<br/>
<small>
[<a class="el" href="group__oldfuncs.html">Legacy pre-1.0 C API</a>]</small>
</h1><!-- doxytag: class="yuv_buffer" -->
<p>A YUV buffer for passing uncompressed frames to and from the codec.
<a href="#_details">More...</a></p>
<p><code>#include &lt;<a class="el" href="theora_8h_source.html">theora.h</a>&gt;</code></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Fields</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#aaa6c06c071da933231647238418d5fc0">y_width</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Width of the Y' luminance plane. <a href="#aaa6c06c071da933231647238418d5fc0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#a5a8b60e012247e2caffcbbaca99414e0">y_height</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Height of the luminance plane. <a href="#a5a8b60e012247e2caffcbbaca99414e0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#a9cdf61834c11b2351640a4a243ad0549">y_stride</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Offset in bytes between successive rows. <a href="#a9cdf61834c11b2351640a4a243ad0549"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#a8c59a57c35af0be519ee47f15e49fe2b">uv_width</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Width of the Cb and Cr chroma planes. <a href="#a8c59a57c35af0be519ee47f15e49fe2b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#a640f1a0b456d3807f9f0538b22f10097">uv_height</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Height of the chroma planes. <a href="#a640f1a0b456d3807f9f0538b22f10097"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#ab265cc24ffb5650bf52daf223b0debb9">uv_stride</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Offset between successive chroma rows. <a href="#ab265cc24ffb5650bf52daf223b0debb9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#a725727c70eeced6b8c90866973399ac1">y</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pointer to start of luminance data. <a href="#a725727c70eeced6b8c90866973399ac1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#a8b1857afe3ffac28f259499a57a559e1">u</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pointer to start of Cb data. <a href="#a8b1857afe3ffac28f259499a57a559e1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">unsigned char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html#aa429491dd112adb0254672c59ef55075">v</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pointer to start of Cr data. <a href="#aa429491dd112adb0254672c59ef55075"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>A YUV buffer for passing uncompressed frames to and from the codec. </p>
<p>This holds a Y'CbCr frame in planar format. The CbCr planes can be subsampled and have their own separate dimensions and row stride offsets. Note that the strides may be negative in some configurations. For theora the width and height of the largest plane must be a multiple of 16. The actual meaningful picture size and offset are stored in the <a class="el" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> structure; frames returned by the decoder may need to be cropped for display.</p>
<p>All samples are 8 bits. Within each plane samples are ordered by row from the top of the frame to the bottom. Within each row samples are ordered from left to right.</p>
<p>During decode, the <a class="el" href="structyuv__buffer.html" title="A YUV buffer for passing uncompressed frames to and from the codec.">yuv_buffer</a> struct is allocated by the user, but all fields (including luma and chroma pointers) are filled by the library. These pointers address library-internal memory and their contents should not be modified.</p>
<p>Conversely, during encode the user allocates the struct and fills out all fields. The user also manages the data addressed by the luma and chroma pointers. See the encoder_example.c and dump_video.c example files in theora/examples/ for more information. </p>
<hr/><h2>Field Documentation</h2>
<a class="anchor" id="a8b1857afe3ffac28f259499a57a559e1"></a><!-- doxytag: member="yuv_buffer::u" ref="a8b1857afe3ffac28f259499a57a559e1" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char* <a class="el" href="structyuv__buffer.html#a8b1857afe3ffac28f259499a57a559e1">yuv_buffer::u</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Pointer to start of Cb data. </p>
</div>
</div>
<a class="anchor" id="a640f1a0b456d3807f9f0538b22f10097"></a><!-- doxytag: member="yuv_buffer::uv_height" ref="a640f1a0b456d3807f9f0538b22f10097" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structyuv__buffer.html#a640f1a0b456d3807f9f0538b22f10097">yuv_buffer::uv_height</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Height of the chroma planes. </p>
</div>
</div>
<a class="anchor" id="ab265cc24ffb5650bf52daf223b0debb9"></a><!-- doxytag: member="yuv_buffer::uv_stride" ref="ab265cc24ffb5650bf52daf223b0debb9" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structyuv__buffer.html#ab265cc24ffb5650bf52daf223b0debb9">yuv_buffer::uv_stride</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Offset between successive chroma rows. </p>
</div>
</div>
<a class="anchor" id="a8c59a57c35af0be519ee47f15e49fe2b"></a><!-- doxytag: member="yuv_buffer::uv_width" ref="a8c59a57c35af0be519ee47f15e49fe2b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structyuv__buffer.html#a8c59a57c35af0be519ee47f15e49fe2b">yuv_buffer::uv_width</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Width of the Cb and Cr chroma planes. </p>
</div>
</div>
<a class="anchor" id="aa429491dd112adb0254672c59ef55075"></a><!-- doxytag: member="yuv_buffer::v" ref="aa429491dd112adb0254672c59ef55075" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char* <a class="el" href="structyuv__buffer.html#aa429491dd112adb0254672c59ef55075">yuv_buffer::v</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Pointer to start of Cr data. </p>
</div>
</div>
<a class="anchor" id="a725727c70eeced6b8c90866973399ac1"></a><!-- doxytag: member="yuv_buffer::y" ref="a725727c70eeced6b8c90866973399ac1" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">unsigned char* <a class="el" href="structyuv__buffer.html#a725727c70eeced6b8c90866973399ac1">yuv_buffer::y</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Pointer to start of luminance data. </p>
</div>
</div>
<a class="anchor" id="a5a8b60e012247e2caffcbbaca99414e0"></a><!-- doxytag: member="yuv_buffer::y_height" ref="a5a8b60e012247e2caffcbbaca99414e0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structyuv__buffer.html#a5a8b60e012247e2caffcbbaca99414e0">yuv_buffer::y_height</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Height of the luminance plane. </p>
</div>
</div>
<a class="anchor" id="a9cdf61834c11b2351640a4a243ad0549"></a><!-- doxytag: member="yuv_buffer::y_stride" ref="a9cdf61834c11b2351640a4a243ad0549" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structyuv__buffer.html#a9cdf61834c11b2351640a4a243ad0549">yuv_buffer::y_stride</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Offset in bytes between successive rows. </p>
</div>
</div>
<a class="anchor" id="aaa6c06c071da933231647238418d5fc0"></a><!-- doxytag: member="yuv_buffer::y_width" ref="aaa6c06c071da933231647238418d5fc0" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int <a class="el" href="structyuv__buffer.html#aaa6c06c071da933231647238418d5fc0">yuv_buffer::y_width</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Width of the Y' luminance plane. </p>
</div>
</div>
<hr/>The documentation for this struct was generated from the following file:<ul>
<li><a class="el" href="theora_8h_source.html">theora.h</a></li>
</ul>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -0,0 +1,105 @@
/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
DIV.tabs
{
float : left;
width : 100%;
background : url("tab_b.gif") repeat-x bottom;
margin-bottom : 4px;
}
DIV.tabs UL
{
margin : 0px;
padding-left : 10px;
list-style : none;
}
DIV.tabs LI, DIV.tabs FORM
{
display : inline;
margin : 0px;
padding : 0px;
}
DIV.tabs FORM
{
float : right;
}
DIV.tabs A
{
float : left;
background : url("tab_r.gif") no-repeat right top;
border-bottom : 1px solid #84B0C7;
font-size : 80%;
font-weight : bold;
text-decoration : none;
}
DIV.tabs A:hover
{
background-position: 100% -150px;
}
DIV.tabs A:link, DIV.tabs A:visited,
DIV.tabs A:active, DIV.tabs A:hover
{
color: #1A419D;
}
DIV.tabs SPAN
{
float : left;
display : block;
background : url("tab_l.gif") no-repeat left top;
padding : 5px 9px;
white-space : nowrap;
}
DIV.tabs #MSearchBox
{
float : right;
display : inline;
font-size : 1em;
}
DIV.tabs TD
{
font-size : 80%;
font-weight : bold;
text-decoration : none;
}
/* Commented Backslash Hack hides rule from IE5-Mac \*/
DIV.tabs SPAN {float : none;}
/* End IE5-Mac hack */
DIV.tabs A:hover SPAN
{
background-position: 0% -150px;
}
DIV.tabs LI.current A
{
background-position: 100% -150px;
border-width : 0px;
}
DIV.tabs LI.current SPAN
{
background-position: 0% -150px;
padding-bottom : 6px;
}
DIV.navpath
{
background : none;
border : none;
border-bottom : 1px solid #84B0C7;
text-align : center;
margin : 2px;
padding : 2px;
}

View file

@ -0,0 +1,212 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theora.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>theora.h File Reference</h1>
<p>The libtheora pre-1.0 legacy C API.
<a href="#_details">More...</a></p>
<code>#include &lt;stddef.h&gt;</code><br/>
<code>#include &lt;ogg/ogg.h&gt;</code><br/>
<p><a href="theora_8h_source.html">Go to the source code of this file.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structyuv__buffer.html">yuv_buffer</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A YUV buffer for passing uncompressed frames to and from the codec. <a href="structyuv__buffer.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__info.html">theora_info</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Theora bitstream info. <a href="structtheora__info.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__state.html">theora_state</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Codec internal state and context. <a href="structtheora__state.html#_details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structtheora__comment.html">theora_comment</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Comment header metadata. <a href="structtheora__comment.html#_details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gaa4370e13ed3aea6441ccf69dcab2506e">OC_FAULT</a>&nbsp;&nbsp;&nbsp;-1</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">General failure. <a href="group__oldfuncs.html#gaa4370e13ed3aea6441ccf69dcab2506e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga43d15091b1a03a734a124e9a04d3be55">OC_EINVAL</a>&nbsp;&nbsp;&nbsp;-10</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Library encountered invalid internal data. <a href="group__oldfuncs.html#ga43d15091b1a03a734a124e9a04d3be55"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga38b9fa0af856d5930c534db26e2ac2d1">OC_DISABLED</a>&nbsp;&nbsp;&nbsp;-11</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Requested action is disabled. <a href="group__oldfuncs.html#ga38b9fa0af856d5930c534db26e2ac2d1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga809cbad2eb36be17a235a3cadfb737ba">OC_BADHEADER</a>&nbsp;&nbsp;&nbsp;-20</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Header packet was corrupt/invalid. <a href="group__oldfuncs.html#ga809cbad2eb36be17a235a3cadfb737ba"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga9558d6d9eacd2273c8da27f945d725ad">OC_NOTFORMAT</a>&nbsp;&nbsp;&nbsp;-21</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Packet is not a theora packet. <a href="group__oldfuncs.html#ga9558d6d9eacd2273c8da27f945d725ad"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga4611cfd61160405721d1e2ab0ec2564b">OC_VERSION</a>&nbsp;&nbsp;&nbsp;-22</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Bitstream version is not handled. <a href="group__oldfuncs.html#ga4611cfd61160405721d1e2ab0ec2564b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga895dc2597b3bf9c97bf7701c6eff5b0c">OC_IMPL</a>&nbsp;&nbsp;&nbsp;-23</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Feature or action not implemented. <a href="group__oldfuncs.html#ga895dc2597b3bf9c97bf7701c6eff5b0c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga117774c062a63dfad2a5b4d092fa2bb1">OC_BADPACKET</a>&nbsp;&nbsp;&nbsp;-24</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Packet is corrupt. <a href="group__oldfuncs.html#ga117774c062a63dfad2a5b4d092fa2bb1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga60be4dc92c933eac3542bce3ce076496">OC_NEWPACKET</a>&nbsp;&nbsp;&nbsp;-25</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Packet is an (ignorable) unhandled extension. <a href="group__oldfuncs.html#ga60be4dc92c933eac3542bce3ce076496"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga84a8d2f5080ad62b415a4e7551941cbb">OC_DUPFRAME</a>&nbsp;&nbsp;&nbsp;1</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Packet is a dropped frame. <a href="group__oldfuncs.html#ga84a8d2f5080ad62b415a4e7551941cbb"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">theora_control() codes</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp13fd61986cff4566fe89a40e30b74ad9"></a> </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gab31f251c9319f2140d247585d30b3d07">TH_DECCTL_GET_PPLEVEL_MAX</a>&nbsp;&nbsp;&nbsp;(1)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the maximum post-processing level. <a href="group__oldfuncs.html#gab31f251c9319f2140d247585d30b3d07"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga87774c35e1a755a84e2d705b38ebef0d">TH_DECCTL_SET_PPLEVEL</a>&nbsp;&nbsp;&nbsp;(3)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the post-processing level. <a href="group__oldfuncs.html#ga87774c35e1a755a84e2d705b38ebef0d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga27e755e15b4b5604c54974b304037a49">TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE</a>&nbsp;&nbsp;&nbsp;(4)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the maximum distance between key frames. <a href="group__oldfuncs.html#ga27e755e15b4b5604c54974b304037a49"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga1e870c654d35394f0d490045df04e0f5">TH_DECCTL_SET_GRANPOS</a>&nbsp;&nbsp;&nbsp;(5)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the granule position. <a href="group__oldfuncs.html#ga1e870c654d35394f0d490045df04e0f5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga3befcdd66678f8d27034f9c4b16d1b9c">TH_ENCCTL_SET_QUANT_PARAMS</a>&nbsp;&nbsp;&nbsp;(2)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the quantization parameters to use. <a href="group__oldfuncs.html#ga3befcdd66678f8d27034f9c4b16d1b9c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga382d685a39a34d8e6ba76b00d804efd8">TH_ENCCTL_SET_VP3_COMPATIBLE</a>&nbsp;&nbsp;&nbsp;(10)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disables any encoder features that would prevent lossless transcoding back to VP3. <a href="group__oldfuncs.html#ga382d685a39a34d8e6ba76b00d804efd8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga9baf5bdd206e80c78a8fd44687e89783">TH_ENCCTL_GET_SPLEVEL_MAX</a>&nbsp;&nbsp;&nbsp;(12)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the maximum speed level. <a href="group__oldfuncs.html#ga9baf5bdd206e80c78a8fd44687e89783"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gabd9fbcb6a25a77d991d3620164fe59d6">TH_ENCCTL_SET_SPLEVEL</a>&nbsp;&nbsp;&nbsp;(14)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the speed level. <a href="group__oldfuncs.html#gabd9fbcb6a25a77d991d3620164fe59d6"></a><br/></td></tr>
<tr><td colspan="2"><h2>Enumerations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9">theora_colorspace</a> { <a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9abf217cf83d7d7cbf73295e6689f5cf5f">OC_CS_UNSPECIFIED</a>,
<a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9ab20c9851a21ab148fef0bf2c00c0a294">OC_CS_ITU_REC_470M</a>,
<a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a04f8fa2da26f9ec513f514163705666a">OC_CS_ITU_REC_470BG</a>,
<a class="el" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a640b572f11fa7102d434e1c605aaa186">OC_CS_NSPACES</a>
}</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>A Colorspace. </p>
<a href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079">theora_pixelformat</a> { <a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a4e451af01be2645511b0e431f5225d2b">OC_PF_420</a>,
<a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a7d21c63341ad299766839c83ed1216eb">OC_PF_RSVD</a>,
<a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a36a88c55b7ddd5aedeac2d61d57fee5b">OC_PF_422</a>,
<a class="el" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a1d5c6d1b0365e06b4a87880b7825f044">OC_PF_444</a>
}</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>A Chroma subsampling. </p>
<a href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079">More...</a><br/></td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga5a3da8fd262a60f055f96536eec06df2">theora_version_string</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieve a human-readable string to identify the encoder vendor and version. <a href="group__oldfuncs.html#ga5a3da8fd262a60f055f96536eec06df2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gad181f4b19d455dcc2bef2533530b84c8">theora_version_number</a> (void)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieve a 32-bit version number. <a href="group__oldfuncs.html#gad181f4b19d455dcc2bef2533530b84c8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga0f7ad4d4b2343278cb4ba8fb2bd5109a">theora_encode_init</a> (<a class="el" href="structtheora__state.html">theora_state</a> *th, <a class="el" href="structtheora__info.html">theora_info</a> *ti)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the theora encoder. <a href="group__oldfuncs.html#ga0f7ad4d4b2343278cb4ba8fb2bd5109a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gac0d33d896ca70cedfc94c5986d947078">theora_encode_YUVin</a> (<a class="el" href="structtheora__state.html">theora_state</a> *t, <a class="el" href="structyuv__buffer.html">yuv_buffer</a> *yuv)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Submit a YUV buffer to the theora encoder. <a href="group__oldfuncs.html#gac0d33d896ca70cedfc94c5986d947078"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga5f4929677a735bc2198c2309d235f1b3">theora_encode_packetout</a> (<a class="el" href="structtheora__state.html">theora_state</a> *t, int last_p, ogg_packet *op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request the next packet of encoded video. <a href="group__oldfuncs.html#ga5f4929677a735bc2198c2309d235f1b3"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga451feb58d6bde726edbae193689887be">theora_encode_header</a> (<a class="el" href="structtheora__state.html">theora_state</a> *t, ogg_packet *op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request a packet containing the initial header. <a href="group__oldfuncs.html#ga451feb58d6bde726edbae193689887be"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga45e8db0713eaaca0f1144f3724cb834a">theora_encode_comment</a> (<a class="el" href="structtheora__comment.html">theora_comment</a> *tc, ogg_packet *op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request a comment header packet from provided metadata. <a href="group__oldfuncs.html#ga45e8db0713eaaca0f1144f3724cb834a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga5085baf20855b283fa01fc948505d9d2">theora_encode_tables</a> (<a class="el" href="structtheora__state.html">theora_state</a> *t, ogg_packet *op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request a packet containing the codebook tables for the stream. <a href="group__oldfuncs.html#ga5085baf20855b283fa01fc948505d9d2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82">theora_decode_header</a> (<a class="el" href="structtheora__info.html">theora_info</a> *ci, <a class="el" href="structtheora__comment.html">theora_comment</a> *cc, ogg_packet *op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decode an Ogg packet, with the expectation that the packet contains an initial header, comment data or codebook tables. <a href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga264907c66003799ff77ecbd09eb33d2c">theora_decode_init</a> (<a class="el" href="structtheora__state.html">theora_state</a> *th, <a class="el" href="structtheora__info.html">theora_info</a> *c)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize a <a class="el" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> handle for decoding. <a href="group__oldfuncs.html#ga264907c66003799ff77ecbd09eb33d2c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gaa65a9e53b46fd54ab344bd599fa96975">theora_decode_packetin</a> (<a class="el" href="structtheora__state.html">theora_state</a> *th, ogg_packet *op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Input a packet containing encoded data into the theora decoder. <a href="group__oldfuncs.html#gaa65a9e53b46fd54ab344bd599fa96975"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga09d47c80e1e94bff0a46a496816b8daa">theora_decode_YUVout</a> (<a class="el" href="structtheora__state.html">theora_state</a> *th, <a class="el" href="structyuv__buffer.html">yuv_buffer</a> *yuv)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output the next available frame of decoded YUV data. <a href="group__oldfuncs.html#ga09d47c80e1e94bff0a46a496816b8daa"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gab969f9d0407683f0e5abe73d0839a25b">theora_packet_isheader</a> (ogg_packet *op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Report whether a theora packet is a header or not This function does no verification beyond checking the header flag bit so it should not be used for bitstream identification; use <a class="el" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82" title="Decode an Ogg packet, with the expectation that the packet contains an initial header...">theora_decode_header()</a> for that. <a href="group__oldfuncs.html#gab969f9d0407683f0e5abe73d0839a25b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga39ccc8f847a748d7074c926b4fdd12b2">theora_packet_iskeyframe</a> (ogg_packet *op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Report whether a theora packet is a keyframe or not. <a href="group__oldfuncs.html#ga39ccc8f847a748d7074c926b4fdd12b2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gacd9360e6a47139c761002410af457a02">theora_granule_shift</a> (<a class="el" href="structtheora__info.html">theora_info</a> *ti)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Report the granulepos shift radix. <a href="group__oldfuncs.html#gacd9360e6a47139c761002410af457a02"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">ogg_int64_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga7bfa3ceb2fb4b41a282456c56e1dd269">theora_granule_frame</a> (<a class="el" href="structtheora__state.html">theora_state</a> *th, ogg_int64_t granulepos)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convert a granulepos to an absolute frame index, starting at 0. <a href="group__oldfuncs.html#ga7bfa3ceb2fb4b41a282456c56e1dd269"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga4376358b12b9fa23ce6fe21cb5c65ac6">theora_granule_time</a> (<a class="el" href="structtheora__state.html">theora_state</a> *th, ogg_int64_t granulepos)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convert a granulepos to absolute time in seconds. <a href="group__oldfuncs.html#ga4376358b12b9fa23ce6fe21cb5c65ac6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga3091c87d48f1faba018c5956379a6d90">theora_info_init</a> (<a class="el" href="structtheora__info.html">theora_info</a> *c)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize a <a class="el" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> structure. <a href="group__oldfuncs.html#ga3091c87d48f1faba018c5956379a6d90"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gaba7022d58edbc4825cacad03f68b3e0d">theora_info_clear</a> (<a class="el" href="structtheora__info.html">theora_info</a> *c)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear a <a class="el" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> structure. <a href="group__oldfuncs.html#gaba7022d58edbc4825cacad03f68b3e0d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#gab252d5d81b925136dda72e8f1c09c5eb">theora_clear</a> (<a class="el" href="structtheora__state.html">theora_state</a> *t)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Free all internal data associated with a <a class="el" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> handle. <a href="group__oldfuncs.html#gab252d5d81b925136dda72e8f1c09c5eb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga811b92785df3bdbbebb3de612d9d6ce0">theora_comment_init</a> (<a class="el" href="structtheora__comment.html">theora_comment</a> *tc)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize an allocated <a class="el" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> structure. <a href="group__oldfuncs.html#ga811b92785df3bdbbebb3de612d9d6ce0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga650642ed23894e41109bbc42ec393ed4">theora_comment_add</a> (<a class="el" href="structtheora__comment.html">theora_comment</a> *tc, char *comment)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a comment to an initialized <a class="el" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> structure. <a href="group__oldfuncs.html#ga650642ed23894e41109bbc42ec393ed4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga339bd80b5bf4bb168b7052d8ec0b5a92">theora_comment_add_tag</a> (<a class="el" href="structtheora__comment.html">theora_comment</a> *tc, char *tag, char *value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a comment to an initialized <a class="el" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> structure. <a href="group__oldfuncs.html#ga339bd80b5bf4bb168b7052d8ec0b5a92"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga4361f6001abb5c83c36a2ddfb648a8dc">theora_comment_query</a> (<a class="el" href="structtheora__comment.html">theora_comment</a> *tc, char *tag, int count)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Look up a comment value by tag. <a href="group__oldfuncs.html#ga4361f6001abb5c83c36a2ddfb648a8dc"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga10f66a3c752442a3e0c0098e0f88df8b">theora_comment_query_count</a> (<a class="el" href="structtheora__comment.html">theora_comment</a> *tc, char *tag)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Look up the number of instances of a tag. <a href="group__oldfuncs.html#ga10f66a3c752442a3e0c0098e0f88df8b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga04c07c2eefba3a433e43f9fbde14719f">theora_comment_clear</a> (<a class="el" href="structtheora__comment.html">theora_comment</a> *tc)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear an allocated <a class="el" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> struct so that it can be freed. <a href="group__oldfuncs.html#ga04c07c2eefba3a433e43f9fbde14719f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__oldfuncs.html#ga186773db3bc8cd550047e7df1b2ba2c9">theora_control</a> (<a class="el" href="structtheora__state.html">theora_state</a> *th, int req, void *buf, size_t buf_sz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encoder control function. <a href="group__oldfuncs.html#ga186773db3bc8cd550047e7df1b2ba2c9"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>The libtheora pre-1.0 legacy C API. </p>
<h2><a class="anchor" id="intro">
Introduction</a></h2>
<p>This is the documentation for the libtheora legacy C API, declared in the <a class="el" href="theora_8h.html" title="The libtheora pre-1.0 legacy C API.">theora.h</a> header, which describes the old interface used before the 1.0 release. This API was widely deployed for several years and remains supported, but for new code we recommend the cleaner API declared in <a class="el" href="theoradec_8h.html" title="The libtheoradec C decoding API.">theoradec.h</a> and <a class="el" href="theoraenc_8h.html" title="The libtheoraenc C encoding API.">theoraenc.h</a>.</p>
<p>libtheora is the reference implementation for <a href="http://www.theora.org/">Theora</a>, a free video codec. Theora is derived from On2's VP3 codec with improved integration with Ogg multimedia formats by <a href="http://www.xiph.org/">Xiph.Org</a>.</p>
<h2><a class="anchor" id="overview">
Overview</a></h2>
<p>This library will both decode and encode theora packets to/from raw YUV frames. In either case, the packets will most likely either come from or need to be embedded in an Ogg stream. Use <a href="http://xiph.org/ogg/">libogg</a> or <a href="http://www.annodex.net/software/liboggz/index.html">liboggz</a> to extract/package these packets.</p>
<h2><a class="anchor" id="decoding">
Decoding Process</a></h2>
<p>Decoding can be separated into the following steps:</p>
<ol type="1">
<li>initialise <a class="el" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> and <a class="el" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> structures using <a class="el" href="group__oldfuncs.html#ga3091c87d48f1faba018c5956379a6d90" title="Initialize a theora_info structure.">theora_info_init()</a> and <a class="el" href="group__oldfuncs.html#ga811b92785df3bdbbebb3de612d9d6ce0" title="Initialize an allocated theora_comment structure.">theora_comment_init()</a>: <div class="fragment"><pre class="fragment">
theora_info info;
theora_comment comment;
theora_info_init(&amp;info);
theora_comment_init(&amp;comment);
</pre></div></li>
<li>retrieve header packets from Ogg stream (there should be 3) and decode into <a class="el" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> and <a class="el" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> structures using <a class="el" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82" title="Decode an Ogg packet, with the expectation that the packet contains an initial header...">theora_decode_header()</a>. See <a class="el" href="theora_8h.html#identification">Identifying Theora Packets</a> for more information on identifying which packets are theora packets. <div class="fragment"><pre class="fragment">
int i;
for (i = 0; i &lt; 3; i++)
{
(get a theora packet "op" from the Ogg stream)
theora_decode_header(&amp;info, &amp;comment, op);
}
</pre></div></li>
<li>initialise the decoder based on the information retrieved into the <a class="el" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> struct by <a class="el" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82" title="Decode an Ogg packet, with the expectation that the packet contains an initial header...">theora_decode_header()</a>. You will need a <a class="el" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> struct. <div class="fragment"><pre class="fragment">
theora_state state;
theora_decode_init(&amp;state, &amp;info);
</pre></div></li>
<li>pass in packets and retrieve decoded frames! See the <a class="el" href="structyuv__buffer.html" title="A YUV buffer for passing uncompressed frames to and from the codec.">yuv_buffer</a> documentation for information on how to retrieve raw YUV data. <div class="fragment"><pre class="fragment">
yuf_buffer buffer;
while (last packet was not e_o_s) {
(get a theora packet "op" from the Ogg stream)
theora_decode_packetin(&amp;state, op);
theora_decode_YUVout(&amp;state, &amp;buffer);
}
</pre></div></li>
</ol>
<h3><a class="anchor" id="identification">
Identifying Theora Packets</a></h3>
<p>All streams inside an Ogg file have a unique serial_no attached to the stream. Typically, you will want to</p>
<ul>
<li>retrieve the serial_no for each b_o_s (beginning of stream) page encountered within the Ogg file;</li>
<li>test the first (only) packet on that page to determine if it is a theora packet;</li>
<li>once you have found a theora b_o_s page then use the retrieved serial_no to identify future packets belonging to the same theora stream.</li>
</ul>
<p>Note that you <em>cannot</em> use <a class="el" href="group__oldfuncs.html#gab969f9d0407683f0e5abe73d0839a25b" title="Report whether a theora packet is a header or not This function does no verification...">theora_packet_isheader()</a> to determine if a packet is a theora packet or not, as this function does not perform any checking beyond whether a header bit is present. Instead, use the <a class="el" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82" title="Decode an Ogg packet, with the expectation that the packet contains an initial header...">theora_decode_header()</a> function and check the return value; or examine the header bytes at the beginning of the Ogg page. </p>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,245 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theora.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<h1>theora.h</h1><a href="theora_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/********************************************************************</span>
<a name="l00002"></a>00002 <span class="comment"> * *</span>
<a name="l00003"></a>00003 <span class="comment"> * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE. *</span>
<a name="l00004"></a>00004 <span class="comment"> * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *</span>
<a name="l00005"></a>00005 <span class="comment"> * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *</span>
<a name="l00006"></a>00006 <span class="comment"> * IN &apos;COPYING&apos;. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *</span>
<a name="l00007"></a>00007 <span class="comment"> * *</span>
<a name="l00008"></a>00008 <span class="comment"> * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *</span>
<a name="l00009"></a>00009 <span class="comment"> * by the Xiph.Org Foundation http://www.xiph.org/ *</span>
<a name="l00010"></a>00010 <span class="comment"> * *</span>
<a name="l00011"></a>00011 <span class="comment"> ********************************************************************</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment"> function:</span>
<a name="l00014"></a>00014 <span class="comment"> last mod: $Id: theora.h,v 1.17 2003/12/06 18:06:19 arc Exp $</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment"> ********************************************************************/</span>
<a name="l00017"></a>00017
<a name="l00018"></a>00018 <span class="preprocessor">#ifndef _O_THEORA_H_</span>
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define _O_THEORA_H_</span>
<a name="l00020"></a>00020 <span class="preprocessor"></span>
<a name="l00021"></a>00021 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span>
<a name="l00023"></a>00023 {
<a name="l00024"></a>00024 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
<a name="l00025"></a>00025
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;stddef.h&gt;</span> <span class="comment">/* for size_t */</span>
<a name="l00027"></a>00027
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;ogg/ogg.h&gt;</span>
<a name="l00029"></a>00029
<a name="l00121"></a>00121 <span class="comment">/* @{ */</span>
<a name="l00122"></a>00122
<a name="l00147"></a><a class="code" href="structyuv__buffer.html">00147</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00148"></a><a class="code" href="structyuv__buffer.html#aaa6c06c071da933231647238418d5fc0">00148</a> <span class="keywordtype">int</span> y_width;
<a name="l00149"></a><a class="code" href="structyuv__buffer.html#a5a8b60e012247e2caffcbbaca99414e0">00149</a> <span class="keywordtype">int</span> y_height;
<a name="l00150"></a><a class="code" href="structyuv__buffer.html#a9cdf61834c11b2351640a4a243ad0549">00150</a> <span class="keywordtype">int</span> y_stride;
<a name="l00152"></a><a class="code" href="structyuv__buffer.html#a8c59a57c35af0be519ee47f15e49fe2b">00152</a> <span class="keywordtype">int</span> uv_width;
<a name="l00153"></a><a class="code" href="structyuv__buffer.html#a640f1a0b456d3807f9f0538b22f10097">00153</a> <span class="keywordtype">int</span> uv_height;
<a name="l00154"></a><a class="code" href="structyuv__buffer.html#ab265cc24ffb5650bf52daf223b0debb9">00154</a> <span class="keywordtype">int</span> uv_stride;
<a name="l00155"></a><a class="code" href="structyuv__buffer.html#a725727c70eeced6b8c90866973399ac1">00155</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *y;
<a name="l00156"></a><a class="code" href="structyuv__buffer.html#a8b1857afe3ffac28f259499a57a559e1">00156</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *u;
<a name="l00157"></a><a class="code" href="structyuv__buffer.html#aa429491dd112adb0254672c59ef55075">00157</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *v;
<a name="l00159"></a>00159 } <a class="code" href="structyuv__buffer.html" title="A YUV buffer for passing uncompressed frames to and from the codec.">yuv_buffer</a>;
<a name="l00160"></a>00160
<a name="l00164"></a><a class="code" href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9">00164</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
<a name="l00165"></a><a class="code" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9abf217cf83d7d7cbf73295e6689f5cf5f">00165</a> <a class="code" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9abf217cf83d7d7cbf73295e6689f5cf5f" title="The colorspace is unknown or unspecified.">OC_CS_UNSPECIFIED</a>,
<a name="l00166"></a><a class="code" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9ab20c9851a21ab148fef0bf2c00c0a294">00166</a> <a class="code" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9ab20c9851a21ab148fef0bf2c00c0a294" title="This is the best option for &amp;#39;NTSC&amp;#39; content.">OC_CS_ITU_REC_470M</a>,
<a name="l00167"></a><a class="code" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a04f8fa2da26f9ec513f514163705666a">00167</a> <a class="code" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a04f8fa2da26f9ec513f514163705666a" title="This is the best option for &amp;#39;PAL&amp;#39; content.">OC_CS_ITU_REC_470BG</a>,
<a name="l00168"></a><a class="code" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a640b572f11fa7102d434e1c605aaa186">00168</a> <a class="code" href="group__oldfuncs.html#ggaa567da4ce591f7373149ce3ef3acdac9a640b572f11fa7102d434e1c605aaa186" title="This marks the end of the defined colorspaces.">OC_CS_NSPACES</a>
<a name="l00169"></a>00169 } <a class="code" href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9" title="A Colorspace.">theora_colorspace</a>;
<a name="l00170"></a>00170
<a name="l00178"></a><a class="code" href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079">00178</a> <span class="keyword">typedef</span> <span class="keyword">enum</span> {
<a name="l00179"></a><a class="code" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a4e451af01be2645511b0e431f5225d2b">00179</a> <a class="code" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a4e451af01be2645511b0e431f5225d2b" title="Chroma subsampling by 2 in each direction (4:2:0).">OC_PF_420</a>,
<a name="l00180"></a><a class="code" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a7d21c63341ad299766839c83ed1216eb">00180</a> <a class="code" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a7d21c63341ad299766839c83ed1216eb" title="Reserved value.">OC_PF_RSVD</a>,
<a name="l00181"></a><a class="code" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a36a88c55b7ddd5aedeac2d61d57fee5b">00181</a> <a class="code" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a36a88c55b7ddd5aedeac2d61d57fee5b" title="Horizonatal chroma subsampling by 2 (4:2:2).">OC_PF_422</a>,
<a name="l00182"></a><a class="code" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a1d5c6d1b0365e06b4a87880b7825f044">00182</a> <a class="code" href="group__oldfuncs.html#ggae169da05bfaaf4e964a6866552d45079a1d5c6d1b0365e06b4a87880b7825f044" title="No chroma subsampling at all (4:4:4).">OC_PF_444</a>,
<a name="l00183"></a>00183 } <a class="code" href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079" title="A Chroma subsampling.">theora_pixelformat</a>;
<a name="l00184"></a>00184
<a name="l00206"></a><a class="code" href="structtheora__info.html">00206</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00207"></a><a class="code" href="structtheora__info.html#a17c2fc651bb3329f1ea6b13ff1d3957b">00207</a> ogg_uint32_t width;
<a name="l00208"></a><a class="code" href="structtheora__info.html#ae6f0274fc4a7f285c422d91abb35f9c6">00208</a> ogg_uint32_t height;
<a name="l00209"></a><a class="code" href="structtheora__info.html#a8f28f4018a25634d40e4ae861fbbccfa">00209</a> ogg_uint32_t frame_width;
<a name="l00210"></a><a class="code" href="structtheora__info.html#a287e4c194f1d2e6deb39d59f1748ea48">00210</a> ogg_uint32_t frame_height;
<a name="l00211"></a><a class="code" href="structtheora__info.html#af5949a02bef29512f2705e6f6c944e3b">00211</a> ogg_uint32_t offset_x;
<a name="l00212"></a><a class="code" href="structtheora__info.html#a91c3922097ba32a85acd584a01dc2c93">00212</a> ogg_uint32_t offset_y;
<a name="l00213"></a><a class="code" href="structtheora__info.html#a3478199aa5ab213816c1819f70085ad7">00213</a> ogg_uint32_t fps_numerator;
<a name="l00214"></a><a class="code" href="structtheora__info.html#a9aa7e826e0323a4ae8cd8646a6cfbfea">00214</a> ogg_uint32_t fps_denominator;
<a name="l00215"></a><a class="code" href="structtheora__info.html#a5a3ed8c79815fba1aa06c3f7d8e48b35">00215</a> ogg_uint32_t aspect_numerator;
<a name="l00216"></a><a class="code" href="structtheora__info.html#afebc4d0cbfb34b68c833a8c79e83ae12">00216</a> ogg_uint32_t aspect_denominator;
<a name="l00217"></a><a class="code" href="structtheora__info.html#a5eaba99c96706d47b426ab7b7602dc5d">00217</a> <a class="code" href="group__oldfuncs.html#gaa567da4ce591f7373149ce3ef3acdac9" title="A Colorspace.">theora_colorspace</a> colorspace;
<a name="l00218"></a><a class="code" href="structtheora__info.html#a0cfba041767ae2416dd190a406afe713">00218</a> <span class="keywordtype">int</span> target_bitrate;
<a name="l00219"></a><a class="code" href="structtheora__info.html#a71a4748a5f31bd58d0e403b7806c980d">00219</a> <span class="keywordtype">int</span> quality;
<a name="l00220"></a><a class="code" href="structtheora__info.html#a2dfae4fd175dbd19254eaf0697778ff5">00220</a> <span class="keywordtype">int</span> quick_p;
<a name="l00222"></a>00222 <span class="comment">/* decode only */</span>
<a name="l00223"></a><a class="code" href="structtheora__info.html#a7c5ebb9e6700aaef87f29f7c6074e474">00223</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> version_major;
<a name="l00224"></a><a class="code" href="structtheora__info.html#a75eda4f30270d833c7b9dba43932a06a">00224</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> version_minor;
<a name="l00225"></a><a class="code" href="structtheora__info.html#aa07967ecd6e20bd2928ead42b6397b3d">00225</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> version_subminor;
<a name="l00226"></a>00226
<a name="l00227"></a><a class="code" href="structtheora__info.html#a719a1d77a4a3bfeab79aa5747dbbb04c">00227</a> <span class="keywordtype">void</span> *codec_setup;
<a name="l00228"></a>00228
<a name="l00229"></a>00229 <span class="comment">/* encode only */</span>
<a name="l00230"></a><a class="code" href="structtheora__info.html#af294db65a8363a0bcf43f4727763b291">00230</a> <span class="keywordtype">int</span> dropframes_p;
<a name="l00231"></a><a class="code" href="structtheora__info.html#a23648173369174f687085c0ce85ef30e">00231</a> <span class="keywordtype">int</span> keyframe_auto_p;
<a name="l00232"></a><a class="code" href="structtheora__info.html#a03e1b3e337af5f9dabaaaeb9050f145a">00232</a> ogg_uint32_t keyframe_frequency;
<a name="l00233"></a><a class="code" href="structtheora__info.html#ad9d2e22c44a53473010e6d1042dfe0d8">00233</a> ogg_uint32_t keyframe_frequency_force; <span class="comment">/* also used for decode init to</span>
<a name="l00234"></a>00234 <span class="comment"> get granpos shift correct */</span>
<a name="l00235"></a><a class="code" href="structtheora__info.html#a588942d1ee90a26a7effdf6a0e98b9ce">00235</a> ogg_uint32_t keyframe_data_target_bitrate;
<a name="l00236"></a><a class="code" href="structtheora__info.html#a95cb8958e29ad3d24047ee8f9e7fd99b">00236</a> ogg_int32_t keyframe_auto_threshold;
<a name="l00237"></a><a class="code" href="structtheora__info.html#aa79ca8c0e77a884d4487fd627fae32e9">00237</a> ogg_uint32_t keyframe_mindistance;
<a name="l00238"></a><a class="code" href="structtheora__info.html#ac4789034f547b57d1075e035050eeed9">00238</a> ogg_int32_t noise_sensitivity;
<a name="l00239"></a><a class="code" href="structtheora__info.html#a3fb695de2b2f56dd0203b9e2eb0df1cc">00239</a> ogg_int32_t sharpness;
<a name="l00240"></a>00240
<a name="l00241"></a><a class="code" href="structtheora__info.html#a65ab4376ab5242ee82e06c78fb7008ab">00241</a> <a class="code" href="group__oldfuncs.html#gae169da05bfaaf4e964a6866552d45079" title="A Chroma subsampling.">theora_pixelformat</a> pixelformat;
<a name="l00243"></a>00243 } <a class="code" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a>;
<a name="l00244"></a>00244
<a name="l00247"></a><a class="code" href="structtheora__state.html">00247</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>{
<a name="l00248"></a><a class="code" href="structtheora__state.html#a0efc7ac581ef260b0ca17f518ace0731">00248</a> <a class="code" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> *i;
<a name="l00249"></a><a class="code" href="structtheora__state.html#a5dd344a3f79ea7501b18c756772fab7b">00249</a> ogg_int64_t granulepos;
<a name="l00250"></a>00250
<a name="l00251"></a><a class="code" href="structtheora__state.html#a1fbfd82fb7210cbcc4233cb680ec2af6">00251</a> <span class="keywordtype">void</span> *internal_encode;
<a name="l00252"></a><a class="code" href="structtheora__state.html#ad20c4eebbc5ed9764cf03ba8b90e796e">00252</a> <span class="keywordtype">void</span> *internal_decode;
<a name="l00253"></a>00253
<a name="l00254"></a>00254 } <a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a>;
<a name="l00255"></a>00255
<a name="l00275"></a><a class="code" href="structtheora__comment.html">00275</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a>{
<a name="l00276"></a><a class="code" href="structtheora__comment.html#a1e236fd180dfce19be89081399444cf5">00276</a> <span class="keywordtype">char</span> **<a class="code" href="structtheora__comment.html#a1e236fd180dfce19be89081399444cf5" title="An array of comment string vectors.">user_comments</a>;
<a name="l00277"></a><a class="code" href="structtheora__comment.html#a5ab4a376d3c217282a684577c9c9f49a">00277</a> <span class="keywordtype">int</span> *<a class="code" href="structtheora__comment.html#a5ab4a376d3c217282a684577c9c9f49a" title="An array of corresponding string vector lengths in bytes.">comment_lengths</a>;
<a name="l00278"></a><a class="code" href="structtheora__comment.html#a122393035c8352ff9be42d69e73aee00">00278</a> <span class="keywordtype">int</span> <a class="code" href="structtheora__comment.html#a122393035c8352ff9be42d69e73aee00" title="The total number of comment string vectors.">comments</a>;
<a name="l00279"></a><a class="code" href="structtheora__comment.html#adb371baf8f0daed42af8b875cf8430ef">00279</a> <span class="keywordtype">char</span> *<a class="code" href="structtheora__comment.html#adb371baf8f0daed42af8b875cf8430ef" title="The vendor string identifying the encoder, null terminated.">vendor</a>;
<a name="l00281"></a>00281 } <a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a>;
<a name="l00282"></a>00282
<a name="l00283"></a>00283
<a name="l00285"></a>00285 <span class="comment">/* \anchor decctlcodes_old</span>
<a name="l00286"></a>00286 <span class="comment"> * These are the available request codes for theora_control()</span>
<a name="l00287"></a>00287 <span class="comment"> * when called with a decoder instance.</span>
<a name="l00288"></a>00288 <span class="comment"> * By convention decoder control codes are odd, to distinguish </span>
<a name="l00289"></a>00289 <span class="comment"> * them from \ref encctlcodes_old &quot;encoder control codes&quot; which</span>
<a name="l00290"></a>00290 <span class="comment"> * are even.</span>
<a name="l00291"></a>00291 <span class="comment"> *</span>
<a name="l00292"></a>00292 <span class="comment"> * Note that since the 1.0 release, both the legacy and the final</span>
<a name="l00293"></a>00293 <span class="comment"> * implementation accept all the same control codes, but only the</span>
<a name="l00294"></a>00294 <span class="comment"> * final API declares the newer codes.</span>
<a name="l00295"></a>00295 <span class="comment"> *</span>
<a name="l00296"></a>00296 <span class="comment"> * Keep any experimental or vendor-specific values above \c 0x8000.*/</span>
<a name="l00297"></a>00297
<a name="l00306"></a><a class="code" href="group__oldfuncs.html#gab31f251c9319f2140d247585d30b3d07">00306</a> <span class="preprocessor">#define TH_DECCTL_GET_PPLEVEL_MAX (1)</span>
<a name="l00307"></a>00307 <span class="preprocessor"></span>
<a name="l00313"></a><a class="code" href="group__oldfuncs.html#ga87774c35e1a755a84e2d705b38ebef0d">00313</a> <span class="preprocessor">#define TH_DECCTL_SET_PPLEVEL (3)</span>
<a name="l00314"></a>00314 <span class="preprocessor"></span>
<a name="l00327"></a><a class="code" href="group__oldfuncs.html#ga27e755e15b4b5604c54974b304037a49">00327</a> <span class="preprocessor">#define TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE (4)</span>
<a name="l00328"></a>00328 <span class="preprocessor"></span>
<a name="l00336"></a><a class="code" href="group__oldfuncs.html#ga1e870c654d35394f0d490045df04e0f5">00336</a> <span class="preprocessor">#define TH_DECCTL_SET_GRANPOS (5)</span>
<a name="l00337"></a>00337 <span class="preprocessor"></span>
<a name="l00353"></a><a class="code" href="group__oldfuncs.html#ga3befcdd66678f8d27034f9c4b16d1b9c">00353</a> <span class="preprocessor">#define TH_ENCCTL_SET_QUANT_PARAMS (2)</span>
<a name="l00354"></a>00354 <span class="preprocessor"></span>
<a name="l00382"></a><a class="code" href="group__oldfuncs.html#ga382d685a39a34d8e6ba76b00d804efd8">00382</a> <span class="preprocessor">#define TH_ENCCTL_SET_VP3_COMPATIBLE (10)</span>
<a name="l00383"></a>00383 <span class="preprocessor"></span>
<a name="l00397"></a><a class="code" href="group__oldfuncs.html#ga9baf5bdd206e80c78a8fd44687e89783">00397</a> <span class="preprocessor">#define TH_ENCCTL_GET_SPLEVEL_MAX (12)</span>
<a name="l00398"></a>00398 <span class="preprocessor"></span>
<a name="l00412"></a><a class="code" href="group__oldfuncs.html#gabd9fbcb6a25a77d991d3620164fe59d6">00412</a> <span class="preprocessor">#define TH_ENCCTL_SET_SPLEVEL (14)</span>
<a name="l00413"></a>00413 <span class="preprocessor"></span>
<a name="l00416"></a><a class="code" href="group__oldfuncs.html#gaa4370e13ed3aea6441ccf69dcab2506e">00416</a> <span class="preprocessor">#define OC_FAULT -1 </span>
<a name="l00417"></a><a class="code" href="group__oldfuncs.html#ga43d15091b1a03a734a124e9a04d3be55">00417</a> <span class="preprocessor">#define OC_EINVAL -10 </span>
<a name="l00418"></a><a class="code" href="group__oldfuncs.html#ga38b9fa0af856d5930c534db26e2ac2d1">00418</a> <span class="preprocessor">#define OC_DISABLED -11 </span>
<a name="l00419"></a><a class="code" href="group__oldfuncs.html#ga809cbad2eb36be17a235a3cadfb737ba">00419</a> <span class="preprocessor">#define OC_BADHEADER -20 </span>
<a name="l00420"></a><a class="code" href="group__oldfuncs.html#ga9558d6d9eacd2273c8da27f945d725ad">00420</a> <span class="preprocessor">#define OC_NOTFORMAT -21 </span>
<a name="l00421"></a><a class="code" href="group__oldfuncs.html#ga4611cfd61160405721d1e2ab0ec2564b">00421</a> <span class="preprocessor">#define OC_VERSION -22 </span>
<a name="l00422"></a><a class="code" href="group__oldfuncs.html#ga895dc2597b3bf9c97bf7701c6eff5b0c">00422</a> <span class="preprocessor">#define OC_IMPL -23 </span>
<a name="l00423"></a><a class="code" href="group__oldfuncs.html#ga117774c062a63dfad2a5b4d092fa2bb1">00423</a> <span class="preprocessor">#define OC_BADPACKET -24 </span>
<a name="l00424"></a><a class="code" href="group__oldfuncs.html#ga60be4dc92c933eac3542bce3ce076496">00424</a> <span class="preprocessor">#define OC_NEWPACKET -25 </span>
<a name="l00425"></a><a class="code" href="group__oldfuncs.html#ga84a8d2f5080ad62b415a4e7551941cbb">00425</a> <span class="preprocessor">#define OC_DUPFRAME 1 </span>
<a name="l00431"></a>00431 <span class="preprocessor">extern const char *theora_version_string(void);</span>
<a name="l00432"></a>00432 <span class="preprocessor"></span>
<a name="l00442"></a>00442 <span class="keyword">extern</span> ogg_uint32_t <a class="code" href="group__oldfuncs.html#gad181f4b19d455dcc2bef2533530b84c8" title="Retrieve a 32-bit version number.">theora_version_number</a>(<span class="keywordtype">void</span>);
<a name="l00443"></a>00443
<a name="l00450"></a>00450 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga0f7ad4d4b2343278cb4ba8fb2bd5109a" title="Initialize the theora encoder.">theora_encode_init</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *th, <a class="code" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> *ti);
<a name="l00451"></a>00451
<a name="l00462"></a>00462 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#gac0d33d896ca70cedfc94c5986d947078" title="Submit a YUV buffer to the theora encoder.">theora_encode_YUVin</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *t, <a class="code" href="structyuv__buffer.html" title="A YUV buffer for passing uncompressed frames to and from the codec.">yuv_buffer</a> *yuv);
<a name="l00463"></a>00463
<a name="l00476"></a>00476 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga5f4929677a735bc2198c2309d235f1b3" title="Request the next packet of encoded video.">theora_encode_packetout</a>( <a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *t, <span class="keywordtype">int</span> last_p,
<a name="l00477"></a>00477 ogg_packet *op);
<a name="l00478"></a>00478
<a name="l00489"></a>00489 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga451feb58d6bde726edbae193689887be" title="Request a packet containing the initial header.">theora_encode_header</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *t, ogg_packet *op);
<a name="l00490"></a>00490
<a name="l00502"></a>00502 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga45e8db0713eaaca0f1144f3724cb834a" title="Request a comment header packet from provided metadata.">theora_encode_comment</a>(<a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> *tc, ogg_packet *op);
<a name="l00503"></a>00503
<a name="l00514"></a>00514 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga5085baf20855b283fa01fc948505d9d2" title="Request a packet containing the codebook tables for the stream.">theora_encode_tables</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *t, ogg_packet *op);
<a name="l00515"></a>00515
<a name="l00557"></a>00557 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga02915e63c1bd733ee291f577a8b75a82" title="Decode an Ogg packet, with the expectation that the packet contains an initial header...">theora_decode_header</a>(<a class="code" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> *ci, <a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> *cc,
<a name="l00558"></a>00558 ogg_packet *op);
<a name="l00559"></a>00559
<a name="l00568"></a>00568 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga264907c66003799ff77ecbd09eb33d2c" title="Initialize a theora_state handle for decoding.">theora_decode_init</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *th, <a class="code" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> *c);
<a name="l00569"></a>00569
<a name="l00577"></a>00577 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#gaa65a9e53b46fd54ab344bd599fa96975" title="Input a packet containing encoded data into the theora decoder.">theora_decode_packetin</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *th,ogg_packet *op);
<a name="l00578"></a>00578
<a name="l00589"></a>00589 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga09d47c80e1e94bff0a46a496816b8daa" title="Output the next available frame of decoded YUV data.">theora_decode_YUVout</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *th,<a class="code" href="structyuv__buffer.html" title="A YUV buffer for passing uncompressed frames to and from the codec.">yuv_buffer</a> *yuv);
<a name="l00590"></a>00590
<a name="l00603"></a>00603 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#gab969f9d0407683f0e5abe73d0839a25b" title="Report whether a theora packet is a header or not This function does no verification...">theora_packet_isheader</a>(ogg_packet *op);
<a name="l00604"></a>00604
<a name="l00615"></a>00615 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga39ccc8f847a748d7074c926b4fdd12b2" title="Report whether a theora packet is a keyframe or not.">theora_packet_iskeyframe</a>(ogg_packet *op);
<a name="l00616"></a>00616
<a name="l00642"></a>00642 <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#gacd9360e6a47139c761002410af457a02" title="Report the granulepos shift radix.">theora_granule_shift</a>(<a class="code" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> *ti);
<a name="l00643"></a>00643
<a name="l00660"></a>00660 <span class="keyword">extern</span> ogg_int64_t <a class="code" href="group__oldfuncs.html#ga7bfa3ceb2fb4b41a282456c56e1dd269" title="Convert a granulepos to an absolute frame index, starting at 0.">theora_granule_frame</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *th,ogg_int64_t granulepos);
<a name="l00661"></a>00661
<a name="l00677"></a>00677 <span class="keyword">extern</span> <span class="keywordtype">double</span> <a class="code" href="group__oldfuncs.html#ga4376358b12b9fa23ce6fe21cb5c65ac6" title="Convert a granulepos to absolute time in seconds.">theora_granule_time</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *th,ogg_int64_t granulepos);
<a name="l00678"></a>00678
<a name="l00685"></a>00685 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__oldfuncs.html#ga3091c87d48f1faba018c5956379a6d90" title="Initialize a theora_info structure.">theora_info_init</a>(<a class="code" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> *c);
<a name="l00686"></a>00686
<a name="l00692"></a>00692 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__oldfuncs.html#gaba7022d58edbc4825cacad03f68b3e0d" title="Clear a theora_info structure.">theora_info_clear</a>(<a class="code" href="structtheora__info.html" title="Theora bitstream info.">theora_info</a> *c);
<a name="l00693"></a>00693
<a name="l00698"></a>00698 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__oldfuncs.html#gab252d5d81b925136dda72e8f1c09c5eb" title="Free all internal data associated with a theora_state handle.">theora_clear</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *t);
<a name="l00699"></a>00699
<a name="l00704"></a>00704 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__oldfuncs.html#ga811b92785df3bdbbebb3de612d9d6ce0" title="Initialize an allocated theora_comment structure.">theora_comment_init</a>(<a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> *tc);
<a name="l00705"></a>00705
<a name="l00718"></a>00718 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__oldfuncs.html#ga650642ed23894e41109bbc42ec393ed4" title="Add a comment to an initialized theora_comment structure.">theora_comment_add</a>(<a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> *tc, <span class="keywordtype">char</span> *comment);
<a name="l00719"></a>00719
<a name="l00732"></a>00732 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__oldfuncs.html#ga339bd80b5bf4bb168b7052d8ec0b5a92" title="Add a comment to an initialized theora_comment structure.">theora_comment_add_tag</a>(<a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> *tc,
<a name="l00733"></a>00733 <span class="keywordtype">char</span> *tag, <span class="keywordtype">char</span> *value);
<a name="l00734"></a>00734
<a name="l00749"></a>00749 <span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="group__oldfuncs.html#ga4361f6001abb5c83c36a2ddfb648a8dc" title="Look up a comment value by tag.">theora_comment_query</a>(<a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> *tc, <span class="keywordtype">char</span> *tag, <span class="keywordtype">int</span> count);
<a name="l00750"></a>00750
<a name="l00760"></a>00760 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga10f66a3c752442a3e0c0098e0f88df8b" title="Look up the number of instances of a tag.">theora_comment_query_count</a>(<a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> *tc, <span class="keywordtype">char</span> *tag);
<a name="l00761"></a>00761
<a name="l00766"></a>00766 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__oldfuncs.html#ga04c07c2eefba3a433e43f9fbde14719f" title="Clear an allocated theora_comment struct so that it can be freed.">theora_comment_clear</a>(<a class="code" href="structtheora__comment.html" title="Comment header metadata.">theora_comment</a> *tc);
<a name="l00767"></a>00767
<a name="l00776"></a>00776 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__oldfuncs.html#ga186773db3bc8cd550047e7df1b2ba2c9" title="Encoder control function.">theora_control</a>(<a class="code" href="structtheora__state.html" title="Codec internal state and context.">theora_state</a> *th,<span class="keywordtype">int</span> req,<span class="keywordtype">void</span> *buf,<span class="keywordtype">size_t</span> buf_sz);
<a name="l00777"></a>00777
<a name="l00778"></a>00778 <span class="comment">/* @} */</span> <span class="comment">/* end oldfuncs doxygen group */</span>
<a name="l00779"></a>00779
<a name="l00780"></a>00780 <span class="preprocessor">#ifdef __cplusplus</span>
<a name="l00781"></a>00781 <span class="preprocessor"></span>}
<a name="l00782"></a>00782 <span class="preprocessor">#endif </span><span class="comment">/* __cplusplus */</span>
<a name="l00783"></a>00783
<a name="l00784"></a>00784 <span class="preprocessor">#endif </span><span class="comment">/* _O_THEORA_H_ */</span>
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,361 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theoradec.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>theoradec.h File Reference</h1>
<p>The <code>libtheoradec</code> C decoding API.
<a href="#_details">More...</a></p>
<code>#include &lt;stddef.h&gt;</code><br/>
<code>#include &lt;ogg/ogg.h&gt;</code><br/>
<code>#include &quot;<a class="el" href="codec_8h_source.html">codec.h</a>&quot;</code><br/>
<p><a href="theoradec_8h_source.html">Go to the source code of this file.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structth__stripe__callback.html">th_stripe_callback</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The striped decode callback data to pass to <a class="el" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e" title="Sets the striped decode callback function.">TH_DECCTL_SET_STRIPE_CB</a>. <a href="structth__stripe__callback.html#_details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#a0d78767a326c34dbf84d5b845cba7b4a">_O_THEORA_THEORADEC_H_</a>&nbsp;&nbsp;&nbsp;(1)</td></tr>
<tr><td colspan="2"><div class="groupHeader">th_decode_ctl() codes</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp638dfd34390d0a936dbf76caf938d78d"></a><a class="anchor" id="decctlcodes"></a> These are the available request codes for <a class="el" href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1" title="Decoder control function.">th_decode_ctl()</a>. By convention, these are odd, to distinguish them from the <a class="el" href="theoraenc_8h.html#encctlcodes">encoder control codes</a>. Keep any experimental or vendor-specific values above <code>0x8000</code>. </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#ab31f251c9319f2140d247585d30b3d07">TH_DECCTL_GET_PPLEVEL_MAX</a>&nbsp;&nbsp;&nbsp;(1)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the maximum post-processing level. <a href="#ab31f251c9319f2140d247585d30b3d07"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#a87774c35e1a755a84e2d705b38ebef0d">TH_DECCTL_SET_PPLEVEL</a>&nbsp;&nbsp;&nbsp;(3)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the post-processing level. <a href="#a87774c35e1a755a84e2d705b38ebef0d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#a1e870c654d35394f0d490045df04e0f5">TH_DECCTL_SET_GRANPOS</a>&nbsp;&nbsp;&nbsp;(5)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the granule position. <a href="#a1e870c654d35394f0d490045df04e0f5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e">TH_DECCTL_SET_STRIPE_CB</a>&nbsp;&nbsp;&nbsp;(7)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the striped decode callback function. <a href="#ac95cc9e109474b0fa4bb920ab2cfdf1e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#a8d5e0b9b4c8898f93f241acbeb7e7ffb">TH_DECCTL_SET_TELEMETRY_MBMODE</a>&nbsp;&nbsp;&nbsp;(9)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables telemetry and sets the macroblock display mode. <a href="#a8d5e0b9b4c8898f93f241acbeb7e7ffb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#a829285a03d24832c583f33c6357df8aa">TH_DECCTL_SET_TELEMETRY_MV</a>&nbsp;&nbsp;&nbsp;(11)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables telemetry and sets the motion vector display mode. <a href="#a829285a03d24832c583f33c6357df8aa"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#ae3e2f7674ad92fe67b63915d48c9df5b">TH_DECCTL_SET_TELEMETRY_QI</a>&nbsp;&nbsp;&nbsp;(13)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables telemetry and sets the adaptive quantization display mode. <a href="#ae3e2f7674ad92fe67b63915d48c9df5b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#a7f43fec07486f8a5f00e92aab7d44a25">TH_DECCTL_SET_TELEMETRY_BITS</a>&nbsp;&nbsp;&nbsp;(15)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables telemetry and sets the bitstream breakdown visualization mode. <a href="#a7f43fec07486f8a5f00e92aab7d44a25"></a><br/></td></tr>
<tr><td colspan="2"><h2>Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54">th_stripe_decoded_func</a> )(void *_ctx, <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a> _buf, int _yfrag0, int _yfrag_end)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A callback function for striped decode. <a href="#a25dfc8713157545abd81eda476ca4b54"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">Decoder state</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp20ad7456b6a1ebc1cb57f3e51d4d7bc3"></a>The following data structures are opaque, and their contents are not publicly defined by this API.</p>
<p>Referring to their internals directly is unsupported, and may break without warning. </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The decoder context. <a href="#a843d70bb02563885a8d54b9c1a781729"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Setup information. <a href="#ab71cd2657455cc27d6c0127c66a89f28"></a><br/></td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td colspan="2"><div class="groupHeader">Functions for decoding</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp9d29c94aa62f20426aa5ff062c7daedd"></a>You must link to <code>libtheoradec</code> if you use any of the functions in this section.</p>
<p>The functions are listed in the order they are used in a typical decode. The basic steps are:</p>
<ul>
<li>Parse the header packets by repeatedly calling <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a>.</li>
<li>Allocate a <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> handle with <a class="el" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e" title="Allocates a decoder instance.">th_decode_alloc()</a>.</li>
<li>Call <a class="el" href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27" title="Releases all storage used for the decoder setup information.">th_setup_free()</a> to free any memory used for codec setup information.</li>
<li>Perform any additional decoder configuration with <a class="el" href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1" title="Decoder control function.">th_decode_ctl()</a>.</li>
<li>For each video data packet:<ul>
<li>Submit the packet to the decoder via <a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb" title="Submits a packet containing encoded video data to the decoder.">th_decode_packetin()</a>.</li>
<li>Retrieve the uncompressed video data via <a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb" title="Outputs the next available frame of decoded Y&#39;CbCr data.">th_decode_ycbcr_out()</a>.</li>
</ul>
</li>
<li>Call <a class="el" href="group__decfuncs.html#gafb6684ad8ba507b71112bc9de148e7d0" title="Frees an allocated decoder instance.">th_decode_free()</a> to release all decoder memory. </li>
</ul>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50">th_decode_headerin</a> (<a class="el" href="structth__info.html">th_info</a> *_info, <a class="el" href="structth__comment.html">th_comment</a> *_tc, <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> **_setup, ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decodes the header packets of a Theora stream. <a href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e">th_decode_alloc</a> (const <a class="el" href="structth__info.html">th_info</a> *_info, const <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> *_setup)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocates a decoder instance. <a href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27">th_setup_free</a> (<a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> *_setup)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Releases all storage used for the decoder setup information. <a href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1">th_decode_ctl</a> (<a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *_dec, int _req, void *_buf, size_t _buf_sz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decoder control function. <a href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb">th_decode_packetin</a> (<a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *_dec, const ogg_packet *_op, ogg_int64_t *_granpos)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Submits a packet containing encoded video data to the decoder. <a href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb">th_decode_ycbcr_out</a> (<a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *_dec, <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a> _ycbcr)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Outputs the next available frame of decoded Y'CbCr data. <a href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__decfuncs.html#gafb6684ad8ba507b71112bc9de148e7d0">th_decode_free</a> (<a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> *_dec)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Frees an allocated decoder instance. <a href="group__decfuncs.html#gafb6684ad8ba507b71112bc9de148e7d0"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>The <code>libtheoradec</code> C decoding API. </p>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="a0d78767a326c34dbf84d5b845cba7b4a"></a><!-- doxytag: member="theoradec.h::_O_THEORA_THEORADEC_H_" ref="a0d78767a326c34dbf84d5b845cba7b4a" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _O_THEORA_THEORADEC_H_&nbsp;&nbsp;&nbsp;(1)</td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="ab31f251c9319f2140d247585d30b3d07"></a><!-- doxytag: member="theoradec.h::TH_DECCTL_GET_PPLEVEL_MAX" ref="ab31f251c9319f2140d247585d30b3d07" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DECCTL_GET_PPLEVEL_MAX&nbsp;&nbsp;&nbsp;(1)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Gets the maximum post-processing level. </p>
<p>The decoder supports a post-processing filter that can improve the appearance of the decoded images. This returns the highest level setting for this post-processor, corresponding to maximum improvement and computational expense.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td>int: The maximum post-processing level. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_dec_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a1e870c654d35394f0d490045df04e0f5"></a><!-- doxytag: member="theoradec.h::TH_DECCTL_SET_GRANPOS" ref="a1e870c654d35394f0d490045df04e0f5" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DECCTL_SET_GRANPOS&nbsp;&nbsp;&nbsp;(5)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the granule position. </p>
<p>Call this after a seek, before decoding the first frame, to ensure that the proper granule position is returned for all subsequent frames. If you track timestamps yourself and do not use the granule position returned by the decoder, then you need not call this function.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>ogg_int64_t</code>: The granule position of the next frame. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_dec_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(ogg_int64_t)</code>, or the granule position is negative. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a87774c35e1a755a84e2d705b38ebef0d"></a><!-- doxytag: member="theoradec.h::TH_DECCTL_SET_PPLEVEL" ref="a87774c35e1a755a84e2d705b38ebef0d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DECCTL_SET_PPLEVEL&nbsp;&nbsp;&nbsp;(3)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the post-processing level. </p>
<p>By default, post-processing is disabled.</p>
<p>Sets the level of post-processing to use when decoding the compressed stream. This must be a value between zero (off) and the maximum returned by TH_DECCTL_GET_PPLEVEL_MAX.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td>int: The new post-processing level. 0 to disable; larger values use more CPU. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_dec_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code>, or the post-processing level is out of bounds. The maximum post-processing level may be implementation-specific, and can be obtained via <a class="el" href="theoradec_8h.html#ab31f251c9319f2140d247585d30b3d07" title="Gets the maximum post-processing level.">TH_DECCTL_GET_PPLEVEL_MAX</a>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ac95cc9e109474b0fa4bb920ab2cfdf1e"></a><!-- doxytag: member="theoradec.h::TH_DECCTL_SET_STRIPE_CB" ref="ac95cc9e109474b0fa4bb920ab2cfdf1e" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DECCTL_SET_STRIPE_CB&nbsp;&nbsp;&nbsp;(7)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the striped decode callback function. </p>
<p>If set, this function will be called as each piece of a frame is fully decoded in <a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb" title="Submits a packet containing encoded video data to the decoder.">th_decode_packetin()</a>. You can pass in a <a class="el" href="structth__stripe__callback.html" title="The striped decode callback data to pass to TH_DECCTL_SET_STRIPE_CB.">th_stripe_callback</a> with <a class="el" href="structth__stripe__callback.html#a977c725680a37e3446e459f063b1f4a5" title="The callback function pointer.">th_stripe_callback::stripe_decoded</a> set to <code>NULL</code> to disable the callbacks at any point. Enabling striped decode does not prevent you from calling <a class="el" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb" title="Outputs the next available frame of decoded Y&#39;CbCr data.">th_decode_ycbcr_out()</a> after the frame is fully decoded.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><a class="el" href="structth__stripe__callback.html" title="The striped decode callback data to pass to TH_DECCTL_SET_STRIPE_CB.">th_stripe_callback</a>: The callback parameters. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_dec_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(th_stripe_callback)</code>. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a7f43fec07486f8a5f00e92aab7d44a25"></a><!-- doxytag: member="theoradec.h::TH_DECCTL_SET_TELEMETRY_BITS" ref="a7f43fec07486f8a5f00e92aab7d44a25" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DECCTL_SET_TELEMETRY_BITS&nbsp;&nbsp;&nbsp;(15)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Enables telemetry and sets the bitstream breakdown visualization mode. </p>
</div>
</div>
<a class="anchor" id="a8d5e0b9b4c8898f93f241acbeb7e7ffb"></a><!-- doxytag: member="theoradec.h::TH_DECCTL_SET_TELEMETRY_MBMODE" ref="a8d5e0b9b4c8898f93f241acbeb7e7ffb" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DECCTL_SET_TELEMETRY_MBMODE&nbsp;&nbsp;&nbsp;(9)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Enables telemetry and sets the macroblock display mode. </p>
</div>
</div>
<a class="anchor" id="a829285a03d24832c583f33c6357df8aa"></a><!-- doxytag: member="theoradec.h::TH_DECCTL_SET_TELEMETRY_MV" ref="a829285a03d24832c583f33c6357df8aa" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DECCTL_SET_TELEMETRY_MV&nbsp;&nbsp;&nbsp;(11)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Enables telemetry and sets the motion vector display mode. </p>
</div>
</div>
<a class="anchor" id="ae3e2f7674ad92fe67b63915d48c9df5b"></a><!-- doxytag: member="theoradec.h::TH_DECCTL_SET_TELEMETRY_QI" ref="ae3e2f7674ad92fe67b63915d48c9df5b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_DECCTL_SET_TELEMETRY_QI&nbsp;&nbsp;&nbsp;(13)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Enables telemetry and sets the adaptive quantization display mode. </p>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="a843d70bb02563885a8d54b9c1a781729"></a><!-- doxytag: member="theoradec.h::th_dec_ctx" ref="a843d70bb02563885a8d54b9c1a781729" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a> <a class="el" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">th_dec_ctx</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The decoder context. </p>
</div>
</div>
<a class="anchor" id="ab71cd2657455cc27d6c0127c66a89f28"></a><!-- doxytag: member="theoradec.h::th_setup_info" ref="ab71cd2657455cc27d6c0127c66a89f28" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a> <a class="el" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">th_setup_info</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Setup information. </p>
<p>This contains auxiliary information (Huffman tables and quantization parameters) decoded from the setup header by <a class="el" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin()</a> to be passed to <a class="el" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e" title="Allocates a decoder instance.">th_decode_alloc()</a>. It can be re-used to initialize any number of decoders, and can be freed via <a class="el" href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27" title="Releases all storage used for the decoder setup information.">th_setup_free()</a> at any time. </p>
</div>
</div>
<a class="anchor" id="a25dfc8713157545abd81eda476ca4b54"></a><!-- doxytag: member="theoradec.h::th_stripe_decoded_func" ref="a25dfc8713157545abd81eda476ca4b54" args=")(void *_ctx, th_ycbcr_buffer _buf, int _yfrag0, int _yfrag_end)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef void(* <a class="el" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54">th_stripe_decoded_func</a>)(void *_ctx, <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a> _buf, int _yfrag0, int _yfrag_end)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>A callback function for striped decode. </p>
<p>This is a function pointer to an application-provided function that will be called each time a section of the image is fully decoded in <a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb" title="Submits a packet containing encoded video data to the decoder.">th_decode_packetin()</a>. This allows the application to process the section immediately, while it is still in cache. Note that the frame is decoded bottom to top, so <em>_yfrag0</em> will steadily decrease with each call until it reaches 0, at which point the full frame is decoded. The number of fragment rows made available in each call depends on the pixel format and the number of post-processing filters enabled, and may not even be constant for the entire frame. If a non-<code>NULL</code> <em>_granpos</em> pointer is passed to <a class="el" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb" title="Submits a packet containing encoded video data to the decoder.">th_decode_packetin()</a>, the granule position for the frame will be stored in it before the first callback is made. If an entire frame is dropped (a 0-byte packet), then no callbacks will be made at all for that frame. </p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>_ctx</em>&nbsp;</td><td>An application-provided context pointer. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_buf</em>&nbsp;</td><td>The image buffer for the decoded frame. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_yfrag0</em>&nbsp;</td><td>The Y coordinate of the first row of 8x8 fragments decoded. Multiply this by 8 to obtain the pixel row number in the luma plane. If the chroma planes are subsampled in the Y direction, this will always be divisible by two. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>_yfrag_end</em>&nbsp;</td><td>The Y coordinate of the first row of 8x8 fragments past the newly decoded section. If the chroma planes are subsampled in the Y direction, this will always be divisible by two. I.e., this section contains fragment rows <code><em>_yfrag0</em> ...<em>_yfrag_end</em> -1</code>. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,108 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theoradec.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<h1>theoradec.h</h1><a href="theoradec_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/********************************************************************</span>
<a name="l00002"></a>00002 <span class="comment"> * *</span>
<a name="l00003"></a>00003 <span class="comment"> * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE. *</span>
<a name="l00004"></a>00004 <span class="comment"> * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *</span>
<a name="l00005"></a>00005 <span class="comment"> * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *</span>
<a name="l00006"></a>00006 <span class="comment"> * IN &apos;COPYING&apos;. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *</span>
<a name="l00007"></a>00007 <span class="comment"> * *</span>
<a name="l00008"></a>00008 <span class="comment"> * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *</span>
<a name="l00009"></a>00009 <span class="comment"> * by the Xiph.Org Foundation http://www.xiph.org/ *</span>
<a name="l00010"></a>00010 <span class="comment"> * *</span>
<a name="l00011"></a>00011 <span class="comment"> ********************************************************************</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment"> function:</span>
<a name="l00014"></a>00014 <span class="comment"> last mod: $Id: theora.h,v 1.8 2004/03/15 22:17:32 derf Exp $</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment"> ********************************************************************/</span>
<a name="l00017"></a>00017
<a name="l00021"></a>00021 <span class="preprocessor">#if !defined(_O_THEORA_THEORADEC_H_)</span>
<a name="l00022"></a><a class="code" href="theoradec_8h.html#a0d78767a326c34dbf84d5b845cba7b4a">00022</a> <span class="preprocessor"></span><span class="preprocessor"># define _O_THEORA_THEORADEC_H_ (1)</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor"># include &lt;stddef.h&gt;</span>
<a name="l00024"></a>00024 <span class="preprocessor"># include &lt;ogg/ogg.h&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor"># include &quot;<a class="code" href="codec_8h.html" title="The shared libtheoradec and libtheoraenc C API.">codec.h</a>&quot;</span>
<a name="l00026"></a>00026
<a name="l00027"></a>00027 <span class="preprocessor">#if defined(__cplusplus)</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031
<a name="l00032"></a>00032
<a name="l00050"></a><a class="code" href="theoradec_8h.html#ab31f251c9319f2140d247585d30b3d07">00050</a> <span class="preprocessor">#define TH_DECCTL_GET_PPLEVEL_MAX (1)</span>
<a name="l00051"></a>00051 <span class="preprocessor"></span>
<a name="l00067"></a><a class="code" href="theoradec_8h.html#a87774c35e1a755a84e2d705b38ebef0d">00067</a> <span class="preprocessor">#define TH_DECCTL_SET_PPLEVEL (3)</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span>
<a name="l00079"></a><a class="code" href="theoradec_8h.html#a1e870c654d35394f0d490045df04e0f5">00079</a> <span class="preprocessor">#define TH_DECCTL_SET_GRANPOS (5)</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span>
<a name="l00093"></a><a class="code" href="theoradec_8h.html#ac95cc9e109474b0fa4bb920ab2cfdf1e">00093</a> <span class="preprocessor">#define TH_DECCTL_SET_STRIPE_CB (7)</span>
<a name="l00094"></a>00094 <span class="preprocessor"></span>
<a name="l00096"></a><a class="code" href="theoradec_8h.html#a8d5e0b9b4c8898f93f241acbeb7e7ffb">00096</a> <span class="preprocessor">#define TH_DECCTL_SET_TELEMETRY_MBMODE (9)</span>
<a name="l00097"></a>00097 <span class="preprocessor"></span>
<a name="l00098"></a><a class="code" href="theoradec_8h.html#a829285a03d24832c583f33c6357df8aa">00098</a> <span class="preprocessor">#define TH_DECCTL_SET_TELEMETRY_MV (11)</span>
<a name="l00099"></a>00099 <span class="preprocessor"></span>
<a name="l00100"></a><a class="code" href="theoradec_8h.html#ae3e2f7674ad92fe67b63915d48c9df5b">00100</a> <span class="preprocessor">#define TH_DECCTL_SET_TELEMETRY_QI (13)</span>
<a name="l00101"></a>00101 <span class="preprocessor"></span>
<a name="l00102"></a><a class="code" href="theoradec_8h.html#a7f43fec07486f8a5f00e92aab7d44a25">00102</a> <span class="preprocessor">#define TH_DECCTL_SET_TELEMETRY_BITS (15)</span>
<a name="l00103"></a>00103 <span class="preprocessor"></span>
<a name="l00138"></a><a class="code" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54">00138</a> <span class="keyword">typedef</span> void (*<a class="code" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54" title="A callback function for striped decode.">th_stripe_decoded_func</a>)(<span class="keywordtype">void</span> *_ctx,<a class="code" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45" title="A complete image buffer for an uncompressed frame.">th_ycbcr_buffer</a> _buf,
<a name="l00139"></a>00139 <span class="keywordtype">int</span> _yfrag0,<span class="keywordtype">int</span> _yfrag_end);
<a name="l00140"></a>00140
<a name="l00142"></a><a class="code" href="structth__stripe__callback.html">00142</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>{
<a name="l00145"></a><a class="code" href="structth__stripe__callback.html#ab895162ce29a411fa98e0ba9661f47d4">00145</a> <span class="keywordtype">void</span> *ctx;
<a name="l00147"></a><a class="code" href="structth__stripe__callback.html#a977c725680a37e3446e459f063b1f4a5">00147</a> <a class="code" href="theoradec_8h.html#a25dfc8713157545abd81eda476ca4b54" title="A callback function for striped decode.">th_stripe_decoded_func</a> stripe_decoded;
<a name="l00148"></a>00148 }<a class="code" href="structth__stripe__callback.html" title="The striped decode callback data to pass to TH_DECCTL_SET_STRIPE_CB.">th_stripe_callback</a>;
<a name="l00149"></a>00149
<a name="l00150"></a>00150
<a name="l00151"></a>00151
<a name="l00159"></a><a class="code" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729">00159</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> <a class="code" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a>;
<a name="l00166"></a><a class="code" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28">00166</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28" title="Setup information.">th_setup_info</a> <a class="code" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28" title="Setup information.">th_setup_info</a>;
<a name="l00231"></a>00231 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__decfuncs.html#ga006d01d36fbe64768c571e6a12b7fc50" title="Decodes the header packets of a Theora stream.">th_decode_headerin</a>(<a class="code" href="structth__info.html" title="Theora bitstream information.">th_info</a> *_info,<a class="code" href="structth__comment.html" title="The comment information.">th_comment</a> *_tc,
<a name="l00232"></a>00232 <a class="code" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28" title="Setup information.">th_setup_info</a> **_setup,ogg_packet *_op);
<a name="l00255"></a>00255 <span class="keyword">extern</span> <a class="code" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> *<a class="code" href="group__decfuncs.html#ga0ef07a9a97849054aa606c595a2d807e" title="Allocates a decoder instance.">th_decode_alloc</a>(<span class="keyword">const</span> <a class="code" href="structth__info.html" title="Theora bitstream information.">th_info</a> *_info,
<a name="l00256"></a>00256 <span class="keyword">const</span> <a class="code" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28" title="Setup information.">th_setup_info</a> *_setup);
<a name="l00262"></a>00262 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__decfuncs.html#gadef55431b68aaa59d0d7b32b2f118f27" title="Releases all storage used for the decoder setup information.">th_setup_free</a>(<a class="code" href="theoradec_8h.html#ab71cd2657455cc27d6c0127c66a89f28" title="Setup information.">th_setup_info</a> *_setup);
<a name="l00271"></a>00271 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__decfuncs.html#ga1a8051958d75b1012573b6e3c8f670e1" title="Decoder control function.">th_decode_ctl</a>(<a class="code" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> *_dec,<span class="keywordtype">int</span> _req,<span class="keywordtype">void</span> *_buf,
<a name="l00272"></a>00272 <span class="keywordtype">size_t</span> _buf_sz);
<a name="l00294"></a>00294 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__decfuncs.html#ga31c814bf09b2232aff69c57ae20f04eb" title="Submits a packet containing encoded video data to the decoder.">th_decode_packetin</a>(<a class="code" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> *_dec,<span class="keyword">const</span> ogg_packet *_op,
<a name="l00295"></a>00295 ogg_int64_t *_granpos);
<a name="l00311"></a>00311 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__decfuncs.html#gaa9cc8af63fa8540e0fc95572f259cdcb" title="Outputs the next available frame of decoded Y&amp;#39;CbCr data.">th_decode_ycbcr_out</a>(<a class="code" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> *_dec,
<a name="l00312"></a>00312 <a class="code" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45" title="A complete image buffer for an uncompressed frame.">th_ycbcr_buffer</a> _ycbcr);
<a name="l00315"></a>00315 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__decfuncs.html#gafb6684ad8ba507b71112bc9de148e7d0" title="Frees an allocated decoder instance.">th_decode_free</a>(<a class="code" href="theoradec_8h.html#a843d70bb02563885a8d54b9c1a781729" title="The decoder context.">th_dec_ctx</a> *_dec);
<a name="l00318"></a>00318
<a name="l00319"></a>00319
<a name="l00320"></a>00320
<a name="l00321"></a>00321 <span class="preprocessor">#if defined(__cplusplus)</span>
<a name="l00322"></a>00322 <span class="preprocessor"></span>}
<a name="l00323"></a>00323 <span class="preprocessor">#endif</span>
<a name="l00324"></a>00324 <span class="preprocessor"></span>
<a name="l00325"></a>00325 <span class="preprocessor">#endif</span>
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,674 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theoraenc.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>theoraenc.h File Reference</h1>
<p>The <code>libtheoraenc</code> C encoding API.
<a href="#_details">More...</a></p>
<code>#include &lt;stddef.h&gt;</code><br/>
<code>#include &lt;ogg/ogg.h&gt;</code><br/>
<code>#include &quot;<a class="el" href="codec_8h_source.html">codec.h</a>&quot;</code><br/>
<p><a href="theoraenc_8h_source.html">Go to the source code of this file.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#ab915dd90f069a2431454fd62365e9381">_O_THEORA_THEORAENC_H_</a>&nbsp;&nbsp;&nbsp;(1)</td></tr>
<tr><td colspan="2"><div class="groupHeader">th_encode_ctl() codes</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp652c8d6bf1cea216ce117704a398b5f8"></a><a class="anchor" id="encctlcodes"></a> These are the available request codes for <a class="el" href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9" title="Encoder control function.">th_encode_ctl()</a>. By convention, these are even, to distinguish them from the <a class="el" href="theoradec_8h.html#decctlcodes">decoder control codes</a>. Keep any experimental or vendor-specific values above <code>0x8000</code>. </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a0165348788e560a19b7c61ae8f0c2283">TH_ENCCTL_SET_HUFFMAN_CODES</a>&nbsp;&nbsp;&nbsp;(0)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the Huffman tables to use. <a href="#a0165348788e560a19b7c61ae8f0c2283"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a3befcdd66678f8d27034f9c4b16d1b9c">TH_ENCCTL_SET_QUANT_PARAMS</a>&nbsp;&nbsp;&nbsp;(2)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the quantization parameters to use. <a href="#a3befcdd66678f8d27034f9c4b16d1b9c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a27e755e15b4b5604c54974b304037a49">TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE</a>&nbsp;&nbsp;&nbsp;(4)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the maximum distance between key frames. <a href="#a27e755e15b4b5604c54974b304037a49"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a382d685a39a34d8e6ba76b00d804efd8">TH_ENCCTL_SET_VP3_COMPATIBLE</a>&nbsp;&nbsp;&nbsp;(10)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disables any encoder features that would prevent lossless transcoding back to VP3. <a href="#a382d685a39a34d8e6ba76b00d804efd8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a9baf5bdd206e80c78a8fd44687e89783">TH_ENCCTL_GET_SPLEVEL_MAX</a>&nbsp;&nbsp;&nbsp;(12)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the maximum speed level. <a href="#a9baf5bdd206e80c78a8fd44687e89783"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#abd9fbcb6a25a77d991d3620164fe59d6">TH_ENCCTL_SET_SPLEVEL</a>&nbsp;&nbsp;&nbsp;(14)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the speed level. <a href="#abd9fbcb6a25a77d991d3620164fe59d6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a114b7c552f50b7b8d881a39489af1f61">TH_ENCCTL_GET_SPLEVEL</a>&nbsp;&nbsp;&nbsp;(16)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the current speed level. <a href="#a114b7c552f50b7b8d881a39489af1f61"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a8bb9b05471c42a09f8684a2583b8a1df">TH_ENCCTL_SET_DUP_COUNT</a>&nbsp;&nbsp;&nbsp;(18)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the number of duplicates of the next frame to produce. <a href="#a8bb9b05471c42a09f8684a2583b8a1df"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a026502e08fbe1af0a1063f39bd18129c">TH_ENCCTL_SET_RATE_FLAGS</a>&nbsp;&nbsp;&nbsp;(20)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modifies the default bitrate management behavior. <a href="#a026502e08fbe1af0a1063f39bd18129c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#aaefb515876b2a180ad5c3120fc584a52">TH_ENCCTL_SET_RATE_BUFFER</a>&nbsp;&nbsp;&nbsp;(22)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the size of the bitrate management bit reservoir as a function of number of frames. <a href="#aaefb515876b2a180ad5c3120fc584a52"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#ac3751b9c3838888ec2e3f0b0d2823282">TH_ENCCTL_2PASS_OUT</a>&nbsp;&nbsp;&nbsp;(24)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enable pass 1 of two-pass encoding mode and retrieve the first pass metrics. <a href="#ac3751b9c3838888ec2e3f0b0d2823282"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a4a84f982cdd9a3e3c803a29bbde9df0b">TH_ENCCTL_2PASS_IN</a>&nbsp;&nbsp;&nbsp;(26)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Submits two-pass encoding metric data collected the first encoding pass to the second pass. <a href="#a4a84f982cdd9a3e3c803a29bbde9df0b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#aac087983fa951b9148c9db6bc2e81ef4">TH_ENCCTL_SET_QUALITY</a>&nbsp;&nbsp;&nbsp;(28)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the current encoding quality. <a href="#aac087983fa951b9148c9db6bc2e81ef4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a9b969df55ecad1acd1ae207fad42592e">TH_ENCCTL_SET_BITRATE</a>&nbsp;&nbsp;&nbsp;(30)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the current encoding bitrate. <a href="#a9b969df55ecad1acd1ae207fad42592e"></a><br/></td></tr>
<tr><td colspan="2"><div class="groupHeader">TH_ENCCTL_SET_RATE_FLAGS flags</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp6d70796e675cce22589d15a73cb3a16b"></a><a class="anchor" id="ratectlflags"></a> These are the flags available for use with <a class="el" href="theoraenc_8h.html#a026502e08fbe1af0a1063f39bd18129c" title="Modifies the default bitrate management behavior.">TH_ENCCTL_SET_RATE_FLAGS</a>. </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a3e7fab53b902b54135522ba286f45e33">TH_RATECTL_DROP_FRAMES</a>&nbsp;&nbsp;&nbsp;(0x1)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Drop frames to keep within bitrate buffer constraints. <a href="#a3e7fab53b902b54135522ba286f45e33"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a32f9983b344a431334493cefb0b9337c">TH_RATECTL_CAP_OVERFLOW</a>&nbsp;&nbsp;&nbsp;(0x2)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Ignore bitrate buffer overflows. <a href="#a32f9983b344a431334493cefb0b9337c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#ad0d62d9dce542caf5296b03b97e020a6">TH_RATECTL_CAP_UNDERFLOW</a>&nbsp;&nbsp;&nbsp;(0x4)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Ignore bitrate buffer underflows. <a href="#ad0d62d9dce542caf5296b03b97e020a6"></a><br/></td></tr>
<tr><td colspan="2"><h2>Typedefs</h2></td></tr>
<tr><td colspan="2"><div class="groupHeader">Encoder state</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrp4ebc85bd8522a8b6128225c02b31c8b7"></a>The following data structure is opaque, and its contents are not publicly defined by this API.</p>
<p>Referring to its internals directly is unsupported, and may break without warning. </p>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The encoder context. <a href="#af5cc40472b925456d42526a035d66edd"></a><br/></td></tr>
<tr><td colspan="2"><h2>Functions</h2></td></tr>
<tr><td colspan="2"><div class="groupHeader">Functions for encoding</div></td></tr>
<tr><td colspan="2"><div class="groupText"><p><a class="anchor" id="amgrpc58fb8743a7ca83eb895d57e29e032c8"></a>You must link to <code>libtheoraenc</code> and <code>libtheoradec</code> if you use any of the functions in this section.</p>
<p>The functions are listed in the order they are used in a typical encode. The basic steps are:</p>
<ul>
<li>Fill in a <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> structure with details on the format of the video you wish to encode.</li>
<li>Allocate a <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> handle with <a class="el" href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7" title="Allocates an encoder instance.">th_encode_alloc()</a>.</li>
<li>Perform any additional encoder configuration required with <a class="el" href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9" title="Encoder control function.">th_encode_ctl()</a>.</li>
<li>Repeatedly call <a class="el" href="group__encfuncs.html#ga9439d61b566039d194ff782681fbc408" title="Outputs the next header packet.">th_encode_flushheader()</a> to retrieve all the header packets.</li>
<li>For each uncompressed frame:<ul>
<li>Submit the uncompressed frame via <a class="el" href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750" title="Submits an uncompressed frame to the encoder.">th_encode_ycbcr_in()</a></li>
<li>Repeatedly call <a class="el" href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b" title="Retrieves encoded video data packets.">th_encode_packetout()</a> to retrieve any video data packets that are ready.</li>
</ul>
</li>
<li>Call <a class="el" href="group__encfuncs.html#ga36b23d216532231925c4107894204680" title="Frees an allocated encoder instance.">th_encode_free()</a> to release all encoder memory. </li>
</ul>
<br/><br/></div></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7">th_encode_alloc</a> (const <a class="el" href="structth__info.html">th_info</a> *_info)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Allocates an encoder instance. <a href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9">th_encode_ctl</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc, int _req, void *_buf, size_t _buf_sz)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encoder control function. <a href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#ga9439d61b566039d194ff782681fbc408">th_encode_flushheader</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc, <a class="el" href="structth__comment.html">th_comment</a> *_comments, ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Outputs the next header packet. <a href="group__encfuncs.html#ga9439d61b566039d194ff782681fbc408"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750">th_encode_ycbcr_in</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc, <a class="el" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45">th_ycbcr_buffer</a> _ycbcr)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Submits an uncompressed frame to the encoder. <a href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b">th_encode_packetout</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc, int _last, ogg_packet *_op)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves encoded video data packets. <a href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__encfuncs.html#ga36b23d216532231925c4107894204680">th_encode_free</a> (<a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> *_enc)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Frees an allocated encoder instance. <a href="group__encfuncs.html#ga36b23d216532231925c4107894204680"></a><br/></td></tr>
<tr><td colspan="2"><h2>Variables</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structth__quant__info.html">th_quant_info</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#a3b1b462989f4e7a5a98e6e697f1a7f7d">TH_VP31_QUANT_INFO</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The quantization parameters used by VP3. <a href="#a3b1b462989f4e7a5a98e6e697f1a7f7d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structth__huff__code.html">th_huff_code</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="theoraenc_8h.html#aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e">TH_VP31_HUFF_CODES</a> [TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The Huffman tables used by VP3. <a href="#aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>The <code>libtheoraenc</code> C encoding API. </p>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ab915dd90f069a2431454fd62365e9381"></a><!-- doxytag: member="theoraenc.h::_O_THEORA_THEORAENC_H_" ref="ab915dd90f069a2431454fd62365e9381" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define _O_THEORA_THEORAENC_H_&nbsp;&nbsp;&nbsp;(1)</td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a4a84f982cdd9a3e3c803a29bbde9df0b"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_2PASS_IN" ref="a4a84f982cdd9a3e3c803a29bbde9df0b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_2PASS_IN&nbsp;&nbsp;&nbsp;(26)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Submits two-pass encoding metric data collected the first encoding pass to the second pass. </p>
<p>The first call must be made before the first frame is encoded, and a target bitrate must have already been specified to the encoder. It sets the encoder to pass 2 mode implicitly; this cannot be disabled. The encoder may require reading data from some or all of the frames in advance, depending on, e.g., the reservoir size used in the second pass. You must call this function repeatedly before each frame to provide data until either a) it fails to consume all of the data presented or b) all of the pass 1 data has been consumed. In the first case, you must save the remaining data to be presented after the next frame. You can call this function with a NULL argument to get an upper bound on the number of bytes that will be required before the next frame.</p>
<p>When pass 2 is first enabled, the default bit reservoir is set to the entire file; this gives maximum flexibility but can lead to very high peak rates. You can subsequently set it to another value with <a class="el" href="theoraenc_8h.html#aaefb515876b2a180ad5c3120fc584a52" title="Sets the size of the bitrate management bit reservoir as a function of number of...">TH_ENCCTL_SET_RATE_BUFFER</a> (e.g., to set it to the keyframe interval for non-live streaming), however, you may then need to provide more data before the next frame.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>char[]</code>: A buffer containing the data returned by <a class="el" href="theoraenc_8h.html#ac3751b9c3838888ec2e3f0b0d2823282" title="Enable pass 1 of two-pass encoding mode and retrieve the first pass metrics.">TH_ENCCTL_2PASS_OUT</a> in pass 1. You may pass <code>NULL</code> for <em>_buf</em> to return an upper bound on the number of additional bytes needed before the next frame. The summary data returned at the end of pass 1 must be at the head of the buffer on the first call with a non-<code>NULL</code> <em>_buf</em>, and the placeholder data returned at the start of pass 1 should be omitted. After each call you should advance this buffer by the number of bytes consumed. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>&gt;0</em>&nbsp;</td><td>The number of bytes of metric data required/consumed. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>No more data is required before the next frame. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td>No target bitrate has been set, or the first call was made after the first frame was submitted for encoding. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_ENOTFORMAT</em>&nbsp;</td><td>The data did not appear to be pass 1 from a compatible implementation of this library. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EBADHEADER</em>&nbsp;</td><td>The data was invalid; this may be returned when attempting to read an aborted pass 1 file that still has the placeholder data in place of the summary data. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="ac3751b9c3838888ec2e3f0b0d2823282"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_2PASS_OUT" ref="ac3751b9c3838888ec2e3f0b0d2823282" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_2PASS_OUT&nbsp;&nbsp;&nbsp;(24)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Enable pass 1 of two-pass encoding mode and retrieve the first pass metrics. </p>
<p>Pass 1 mode must be enabled before the first frame is encoded, and a target bitrate must have already been specified to the encoder. Although this does not have to be the exact rate that will be used in the second pass, closer values may produce better results. The first call returns the size of the two-pass header data, along with some placeholder content, and sets the encoder into pass 1 mode implicitly. This call sets the encoder to pass 1 mode implicitly. Then, a subsequent call must be made after each call to <a class="el" href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750" title="Submits an uncompressed frame to the encoder.">th_encode_ycbcr_in()</a> to retrieve the metrics for that frame. An additional, final call must be made to retrieve the summary data, containing such information as the total number of frames, etc. This must be stored in place of the placeholder data that was returned in the first call, before the frame metrics data. All of this data must be presented back to the encoder during pass 2 using <a class="el" href="theoraenc_8h.html#a4a84f982cdd9a3e3c803a29bbde9df0b" title="Submits two-pass encoding metric data collected the first encoding pass to the second...">TH_ENCCTL_2PASS_IN</a>.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>&lt;tt&gt;char</em>&nbsp;</td><td>*_buf: Returns a pointer to internal storage containing the two pass metrics data. This storage is only valid until the next call, or until the encoder context is freed, and must be copied by the application. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>&gt;=0</em>&nbsp;</td><td>The number of bytes of metric data available in the returned buffer. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(char *)</code>, no target bitrate has been set, or the first call was made after the first frame was submitted for encoding. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a114b7c552f50b7b8d881a39489af1f61"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_GET_SPLEVEL" ref="a114b7c552f50b7b8d881a39489af1f61" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_GET_SPLEVEL&nbsp;&nbsp;&nbsp;(16)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Gets the current speed level. </p>
<p>The default speed level may vary according to encoder implementation, but if this control code is not supported (it returns <a class="el" href="codec_8h.html#a921c47accc17841f220af5a6afb79efe" title="The specified function is not implemented.">TH_EIMPL</a>), the default may be assumed to be the slowest available speed (0). The maximum encoding speed level may be implementation- and encoding mode-specific, and can be obtained via <a class="el" href="theoraenc_8h.html#a9baf5bdd206e80c78a8fd44687e89783" title="Gets the maximum speed level.">TH_ENCCTL_GET_SPLEVEL_MAX</a>.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: The current encoding speed level. 0 is slowest, larger values use less CPU. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation in the current encoding mode. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a9baf5bdd206e80c78a8fd44687e89783"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_GET_SPLEVEL_MAX" ref="a9baf5bdd206e80c78a8fd44687e89783" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_GET_SPLEVEL_MAX&nbsp;&nbsp;&nbsp;(12)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Gets the maximum speed level. </p>
<p>Higher speed levels favor quicker encoding over better quality per bit. Depending on the encoding mode, and the internal algorithms used, quality may actually improve, but in this case bitrate will also likely increase. In any case, overall rate/distortion performance will probably decrease. The maximum value, and the meaning of each value, may change depending on the current encoding mode (VBR vs. constant quality, etc.).</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: The maximum encoding speed level. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation in the current encoding mode. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a9b969df55ecad1acd1ae207fad42592e"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_BITRATE" ref="a9b969df55ecad1acd1ae207fad42592e" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_BITRATE&nbsp;&nbsp;&nbsp;(30)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the current encoding bitrate. </p>
<p>Once a bitrate is set, the encoder must use a rate-controlled mode for all future frames (this restriction may be relaxed in a future version). If it is set before the headers are emitted, the target bitrate encoded in them will be updated. Due to the buffer delay, the exact bitrate of each section of the encode is not guaranteed. The encoder may have already used more bits than allowed for the frames it has encoded, expecting to make them up in future frames, or it may have used fewer, holding the excess in reserve. The exact transition between the two bitrates is not well-defined by this API, but may be affected by flags set with <a class="el" href="theoraenc_8h.html#a026502e08fbe1af0a1063f39bd18129c" title="Modifies the default bitrate management behavior.">TH_ENCCTL_SET_RATE_FLAGS</a>. After a number of frames equal to the buffer delay, one may expect further output to average at the target bitrate.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>long</code>: The new target bitrate, in bits per second. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td>The target bitrate was not positive. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a8bb9b05471c42a09f8684a2583b8a1df"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_DUP_COUNT" ref="a8bb9b05471c42a09f8684a2583b8a1df" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_DUP_COUNT&nbsp;&nbsp;&nbsp;(18)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the number of duplicates of the next frame to produce. </p>
<p>Although libtheora can encode duplicate frames very cheaply, it costs some amount of CPU to detect them, and a run of duplicates cannot span a keyframe boundary. This control code tells the encoder to produce the specified number of extra duplicates of the next frame. This allows the encoder to make smarter keyframe placement decisions and rate control decisions, and reduces CPU usage as well, when compared to just submitting the same frame for encoding multiple times. This setting only applies to the next frame submitted for encoding. You MUST call <a class="el" href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b" title="Retrieves encoded video data packets.">th_encode_packetout()</a> repeatedly until it returns 0, or the extra duplicate frames will be lost.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: The number of duplicates to produce. If this is negative or zero, no duplicates will be produced. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code>, or the number of duplicates is greater than or equal to the maximum keyframe interval. In the latter case, NO duplicate frames will be produced. You must ensure that the maximum keyframe interval is set larger than the maximum number of duplicates you will ever wish to insert prior to encoding. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation in the current encoding mode. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a0165348788e560a19b7c61ae8f0c2283"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_HUFFMAN_CODES" ref="a0165348788e560a19b7c61ae8f0c2283" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_HUFFMAN_CODES&nbsp;&nbsp;&nbsp;(0)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the Huffman tables to use. </p>
<p>The tables are copied, not stored by reference, so they can be freed after this call. <code>NULL</code> may be specified to revert to the default tables.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code><a class="el" href="structth__huff__code.html" title="A Huffman code for a Theora DCT token.">th_huff_code</a>[<a class="el" href="codec_8h.html#a49bf449eae33c5320f0c308f32c6ae42" title="The number of Huffman tables used by Theora.">TH_NHUFFMAN_TABLES</a>][<a class="el" href="codec_8h.html#a2a44f48084e76a58cae48fb5d47cd422" title="The number of DCT token values in each table.">TH_NDCT_TOKENS</a>]</code> </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td>Encoding has already begun or one or more of the given tables is not full or prefix-free, <em>_buf</em> is <code>NULL</code> and <em>_buf_sz</em> is not zero, or <em>_buf</em> is non-<code>NULL</code> and <em>_buf_sz</em> is not <code>sizeof(<a class="el" href="structth__huff__code.html" title="A Huffman code for a Theora DCT token.">th_huff_code</a>)*<a class="el" href="codec_8h.html#a49bf449eae33c5320f0c308f32c6ae42" title="The number of Huffman tables used by Theora.">TH_NHUFFMAN_TABLES</a>*<a class="el" href="codec_8h.html#a2a44f48084e76a58cae48fb5d47cd422" title="The number of DCT token values in each table.">TH_NDCT_TOKENS</a></code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a27e755e15b4b5604c54974b304037a49"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE" ref="a27e755e15b4b5604c54974b304037a49" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE&nbsp;&nbsp;&nbsp;(4)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the maximum distance between key frames. </p>
<p>This can be changed during an encode, but will be bounded by <code>1&lt;&lt;<a class="el" href="structth__info.html#a693ca4ab11fbc0c3f32594b4bb8766ed" title="The amount to shift to extract the last keyframe number from the granule position...">th_info::keyframe_granule_shift</a></code>. If it is set before encoding begins, <a class="el" href="structth__info.html#a693ca4ab11fbc0c3f32594b4bb8766ed" title="The amount to shift to extract the last keyframe number from the granule position...">th_info::keyframe_granule_shift</a> will be enlarged appropriately.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>ogg_uint32_t</code>: The maximum distance between key frames. </td></tr>
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>ogg_uint32_t</code>: The actual maximum distance set. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(ogg_uint32_t)</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="aac087983fa951b9148c9db6bc2e81ef4"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_QUALITY" ref="aac087983fa951b9148c9db6bc2e81ef4" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_QUALITY&nbsp;&nbsp;&nbsp;(28)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the current encoding quality. </p>
<p>This is only valid so long as no bitrate has been specified, either through the <a class="el" href="structth__info.html" title="Theora bitstream information.">th_info</a> struct used to initialize the encoder or through <a class="el" href="theoraenc_8h.html#a9b969df55ecad1acd1ae207fad42592e" title="Sets the current encoding bitrate.">TH_ENCCTL_SET_BITRATE</a> (this restriction may be relaxed in a future version). If it is set before the headers are emitted, the target quality encoded in them will be updated.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: The new target quality, in the range 0...63, inclusive. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>0</em>&nbsp;</td><td>Success. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td>A target bitrate has already been specified, or the quality index was not in the range 0...63. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a3befcdd66678f8d27034f9c4b16d1b9c"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_QUANT_PARAMS" ref="a3befcdd66678f8d27034f9c4b16d1b9c" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_QUANT_PARAMS&nbsp;&nbsp;&nbsp;(2)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the quantization parameters to use. </p>
<p>The parameters are copied, not stored by reference, so they can be freed after this call. <code>NULL</code> may be specified to revert to the default parameters.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><a class="el" href="structth__quant__info.html" title="A complete set of quantization parameters.">th_quant_info</a> </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td>Encoding has already begun, <em>_buf</em> is <code>NULL</code> and <em>_buf_sz</em> is not zero, or <em>_buf</em> is non-<code>NULL</code> and <em>_buf_sz</em> is not <code>sizeof(<a class="el" href="structth__quant__info.html" title="A complete set of quantization parameters.">th_quant_info</a>)</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="aaefb515876b2a180ad5c3120fc584a52"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_RATE_BUFFER" ref="aaefb515876b2a180ad5c3120fc584a52" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_RATE_BUFFER&nbsp;&nbsp;&nbsp;(22)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the size of the bitrate management bit reservoir as a function of number of frames. </p>
<p>The reservoir size affects how quickly bitrate management reacts to instantaneous changes in the video complexity. Larger reservoirs react more slowly, and provide better overall quality, but require more buffering by a client, adding more latency to live streams. By default, libtheora sets the reservoir to the maximum distance between keyframes, subject to a minimum and maximum limit. This call may be used to increase or decrease the reservoir, increasing or decreasing the allowed temporary variance in bitrate. An implementation may impose some limits on the size of a reservoir it can handle, in which case the actual reservoir size may not be exactly what was requested. The actual value set will be returned.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: Requested size of the reservoir measured in frames. </td></tr>
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: The actual size of the reservoir set. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code>, or rate control is not enabled. The buffer has an implementation defined minimum and maximum size and the value in _buf will be adjusted to match the actual value set. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation in the current encoding mode. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a026502e08fbe1af0a1063f39bd18129c"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_RATE_FLAGS" ref="a026502e08fbe1af0a1063f39bd18129c" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_RATE_FLAGS&nbsp;&nbsp;&nbsp;(20)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Modifies the default bitrate management behavior. </p>
<p>Use to allow or disallow frame dropping, and to enable or disable capping bit reservoir overflows and underflows. See <a class="el" href="theoraenc_8h.html#encctlcodes">the list of available flags</a>. The flags are set by default to <code><a class="el" href="theoraenc_8h.html#a3e7fab53b902b54135522ba286f45e33" title="Drop frames to keep within bitrate buffer constraints.">TH_RATECTL_DROP_FRAMES</a>|<a class="el" href="theoraenc_8h.html#a32f9983b344a431334493cefb0b9337c" title="Ignore bitrate buffer overflows.">TH_RATECTL_CAP_OVERFLOW</a></code>.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: Any combination of <a class="el" href="theoraenc_8h.html#ratectlflags">the available flags</a>:</p>
<ul>
<li><a class="el" href="theoraenc_8h.html#a3e7fab53b902b54135522ba286f45e33" title="Drop frames to keep within bitrate buffer constraints.">TH_RATECTL_DROP_FRAMES</a>: Enable frame dropping.</li>
<li><a class="el" href="theoraenc_8h.html#a32f9983b344a431334493cefb0b9337c" title="Ignore bitrate buffer overflows.">TH_RATECTL_CAP_OVERFLOW</a>: Don't bank excess bits for later use.</li>
<li><a class="el" href="theoraenc_8h.html#ad0d62d9dce542caf5296b03b97e020a6" title="Ignore bitrate buffer underflows.">TH_RATECTL_CAP_UNDERFLOW</a>: Don't try to make up shortfalls later. </li>
</ul>
</td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code> or rate control is not enabled. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation in the current encoding mode. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="abd9fbcb6a25a77d991d3620164fe59d6"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_SPLEVEL" ref="abd9fbcb6a25a77d991d3620164fe59d6" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_SPLEVEL&nbsp;&nbsp;&nbsp;(14)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sets the speed level. </p>
<p>The current speed level may be retrieved using <a class="el" href="theoraenc_8h.html#a114b7c552f50b7b8d881a39489af1f61" title="Gets the current speed level.">TH_ENCCTL_GET_SPLEVEL</a>.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: The new encoding speed level. 0 is slowest, larger values use less CPU. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code>, or the encoding speed level is out of bounds. The maximum encoding speed level may be implementation- and encoding mode-specific, and can be obtained via <a class="el" href="theoraenc_8h.html#a9baf5bdd206e80c78a8fd44687e89783" title="Gets the maximum speed level.">TH_ENCCTL_GET_SPLEVEL_MAX</a>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation in the current encoding mode. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a382d685a39a34d8e6ba76b00d804efd8"></a><!-- doxytag: member="theoraenc.h::TH_ENCCTL_SET_VP3_COMPATIBLE" ref="a382d685a39a34d8e6ba76b00d804efd8" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_ENCCTL_SET_VP3_COMPATIBLE&nbsp;&nbsp;&nbsp;(10)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Disables any encoder features that would prevent lossless transcoding back to VP3. </p>
<p>This primarily means disabling block-adaptive quantization and always coding all four luma blocks in a macro block when 4MV is used. It also includes using the VP3 quantization tables and Huffman codes; if you set them explicitly after calling this function, the resulting stream will not be VP3-compatible. If you enable VP3-compatibility when encoding 4:2:2 or 4:4:4 source material, or when using a picture region smaller than the full frame (e.g. a non-multiple-of-16 width or height), then non-VP3 bitstream features will still be disabled, but the stream will still not be VP3-compatible, as VP3 was not capable of encoding such formats. If you call this after encoding has already begun, then the quantization tables and codebooks cannot be changed, but the frame-level features will be enabled or disabled as requested.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: a non-zero value to enable VP3 compatibility, or 0 to disable it (the default). </td></tr>
<tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>_buf</em>&nbsp;</td><td><code>int</code>: 1 if all bitstream features required for VP3-compatibility could be set, and 0 otherwise. The latter will be returned if the pixel format is not 4:2:0, the picture region is smaller than the full frame, or if encoding has begun, preventing the quantization tables and codebooks from being set. </td></tr>
</table>
</dd>
</dl>
<dl><dt><b>Return values:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>TH_EFAULT</em>&nbsp;</td><td><em>_enc_ctx</em> or <em>_buf</em> is <code>NULL</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EINVAL</em>&nbsp;</td><td><em>_buf_sz</em> is not <code>sizeof(int)</code>. </td></tr>
<tr><td valign="top"></td><td valign="top"><em>TH_EIMPL</em>&nbsp;</td><td>Not supported by this implementation. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a32f9983b344a431334493cefb0b9337c"></a><!-- doxytag: member="theoraenc.h::TH_RATECTL_CAP_OVERFLOW" ref="a32f9983b344a431334493cefb0b9337c" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_RATECTL_CAP_OVERFLOW&nbsp;&nbsp;&nbsp;(0x2)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Ignore bitrate buffer overflows. </p>
<p>If the encoder uses so few bits that the reservoir of available bits overflows, ignore the excess. The encoder will not try to use these extra bits in future frames. At high rates this may cause the result to be undersized, but allows a client to play the stream using a finite buffer; it should normally be enabled. </p>
</div>
</div>
<a class="anchor" id="ad0d62d9dce542caf5296b03b97e020a6"></a><!-- doxytag: member="theoraenc.h::TH_RATECTL_CAP_UNDERFLOW" ref="ad0d62d9dce542caf5296b03b97e020a6" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_RATECTL_CAP_UNDERFLOW&nbsp;&nbsp;&nbsp;(0x4)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Ignore bitrate buffer underflows. </p>
<p>If the encoder uses so many bits that the reservoir of available bits underflows, ignore the deficit. The encoder will not try to make up these extra bits in future frames. At low rates this may cause the result to be oversized; it should normally be disabled. </p>
</div>
</div>
<a class="anchor" id="a3e7fab53b902b54135522ba286f45e33"></a><!-- doxytag: member="theoraenc.h::TH_RATECTL_DROP_FRAMES" ref="a3e7fab53b902b54135522ba286f45e33" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define TH_RATECTL_DROP_FRAMES&nbsp;&nbsp;&nbsp;(0x1)</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Drop frames to keep within bitrate buffer constraints. </p>
<p>This can have a severe impact on quality, but is the only way to ensure that bitrate targets are met at low rates during sudden bursts of activity. </p>
</div>
</div>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="af5cc40472b925456d42526a035d66edd"></a><!-- doxytag: member="theoraenc.h::th_enc_ctx" ref="af5cc40472b925456d42526a035d66edd" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a> <a class="el" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">th_enc_ctx</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The encoder context. </p>
</div>
</div>
<hr/><h2>Variable Documentation</h2>
<a class="anchor" id="aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e"></a><!-- doxytag: member="theoraenc.h::TH_VP31_HUFF_CODES" ref="aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e" args="[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="structth__huff__code.html">th_huff_code</a> <a class="el" href="theoraenc_8h.html#aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e">TH_VP31_HUFF_CODES</a>[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The Huffman tables used by VP3. </p>
</div>
</div>
<a class="anchor" id="a3b1b462989f4e7a5a98e6e697f1a7f7d"></a><!-- doxytag: member="theoraenc.h::TH_VP31_QUANT_INFO" ref="a3b1b462989f4e7a5a98e6e697f1a7f7d" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="structth__quant__info.html">th_quant_info</a> <a class="el" href="theoraenc_8h.html#a3b1b462989f4e7a5a98e6e697f1a7f7d">TH_VP31_QUANT_INFO</a></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>The quantization parameters used by VP3. </p>
</div>
</div>
</div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,117 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libtheora: theoraenc.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.1 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div class="tabs">
<ul>
<li><a href="files.html"><span>File&nbsp;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
<h1>theoraenc.h</h1><a href="theoraenc_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/********************************************************************</span>
<a name="l00002"></a>00002 <span class="comment"> * *</span>
<a name="l00003"></a>00003 <span class="comment"> * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE. *</span>
<a name="l00004"></a>00004 <span class="comment"> * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *</span>
<a name="l00005"></a>00005 <span class="comment"> * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *</span>
<a name="l00006"></a>00006 <span class="comment"> * IN &apos;COPYING&apos;. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *</span>
<a name="l00007"></a>00007 <span class="comment"> * *</span>
<a name="l00008"></a>00008 <span class="comment"> * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *</span>
<a name="l00009"></a>00009 <span class="comment"> * by the Xiph.Org Foundation http://www.xiph.org/ *</span>
<a name="l00010"></a>00010 <span class="comment"> * *</span>
<a name="l00011"></a>00011 <span class="comment"> ********************************************************************</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment"> function:</span>
<a name="l00014"></a>00014 <span class="comment"> last mod: $Id: theora.h,v 1.8 2004/03/15 22:17:32 derf Exp $</span>
<a name="l00015"></a>00015 <span class="comment"></span>
<a name="l00016"></a>00016 <span class="comment"> ********************************************************************/</span>
<a name="l00017"></a>00017
<a name="l00021"></a>00021 <span class="preprocessor">#if !defined(_O_THEORA_THEORAENC_H_)</span>
<a name="l00022"></a><a class="code" href="theoraenc_8h.html#ab915dd90f069a2431454fd62365e9381">00022</a> <span class="preprocessor"></span><span class="preprocessor"># define _O_THEORA_THEORAENC_H_ (1)</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor"># include &lt;stddef.h&gt;</span>
<a name="l00024"></a>00024 <span class="preprocessor"># include &lt;ogg/ogg.h&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor"># include &quot;<a class="code" href="codec_8h.html" title="The shared libtheoradec and libtheoraenc C API.">codec.h</a>&quot;</span>
<a name="l00026"></a>00026
<a name="l00027"></a>00027 <span class="preprocessor">#if defined(__cplusplus)</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span>
<a name="l00031"></a>00031
<a name="l00032"></a>00032
<a name="l00053"></a><a class="code" href="theoraenc_8h.html#a0165348788e560a19b7c61ae8f0c2283">00053</a> <span class="preprocessor">#define TH_ENCCTL_SET_HUFFMAN_CODES (0)</span>
<a name="l00054"></a>00054 <span class="preprocessor"></span>
<a name="l00066"></a><a class="code" href="theoraenc_8h.html#a3befcdd66678f8d27034f9c4b16d1b9c">00066</a> <span class="preprocessor">#define TH_ENCCTL_SET_QUANT_PARAMS (2)</span>
<a name="l00067"></a>00067 <span class="preprocessor"></span>
<a name="l00079"></a><a class="code" href="theoraenc_8h.html#a27e755e15b4b5604c54974b304037a49">00079</a> <span class="preprocessor">#define TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE (4)</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span>
<a name="l00107"></a><a class="code" href="theoraenc_8h.html#a382d685a39a34d8e6ba76b00d804efd8">00107</a> <span class="preprocessor">#define TH_ENCCTL_SET_VP3_COMPATIBLE (10)</span>
<a name="l00108"></a>00108 <span class="preprocessor"></span>
<a name="l00121"></a><a class="code" href="theoraenc_8h.html#a9baf5bdd206e80c78a8fd44687e89783">00121</a> <span class="preprocessor">#define TH_ENCCTL_GET_SPLEVEL_MAX (12)</span>
<a name="l00122"></a>00122 <span class="preprocessor"></span>
<a name="l00135"></a><a class="code" href="theoraenc_8h.html#abd9fbcb6a25a77d991d3620164fe59d6">00135</a> <span class="preprocessor">#define TH_ENCCTL_SET_SPLEVEL (14)</span>
<a name="l00136"></a>00136 <span class="preprocessor"></span>
<a name="l00149"></a><a class="code" href="theoraenc_8h.html#a114b7c552f50b7b8d881a39489af1f61">00149</a> <span class="preprocessor">#define TH_ENCCTL_GET_SPLEVEL (16)</span>
<a name="l00150"></a>00150 <span class="preprocessor"></span>
<a name="l00175"></a><a class="code" href="theoraenc_8h.html#a8bb9b05471c42a09f8684a2583b8a1df">00175</a> <span class="preprocessor">#define TH_ENCCTL_SET_DUP_COUNT (18)</span>
<a name="l00176"></a>00176 <span class="preprocessor"></span>
<a name="l00195"></a><a class="code" href="theoraenc_8h.html#a026502e08fbe1af0a1063f39bd18129c">00195</a> <span class="preprocessor">#define TH_ENCCTL_SET_RATE_FLAGS (20)</span>
<a name="l00196"></a>00196 <span class="preprocessor"></span>
<a name="l00221"></a><a class="code" href="theoraenc_8h.html#aaefb515876b2a180ad5c3120fc584a52">00221</a> <span class="preprocessor">#define TH_ENCCTL_SET_RATE_BUFFER (22)</span>
<a name="l00222"></a>00222 <span class="preprocessor"></span>
<a name="l00251"></a><a class="code" href="theoraenc_8h.html#ac3751b9c3838888ec2e3f0b0d2823282">00251</a> <span class="preprocessor">#define TH_ENCCTL_2PASS_OUT (24)</span>
<a name="l00252"></a>00252 <span class="preprocessor"></span>
<a name="l00297"></a><a class="code" href="theoraenc_8h.html#a4a84f982cdd9a3e3c803a29bbde9df0b">00297</a> <span class="preprocessor">#define TH_ENCCTL_2PASS_IN (26)</span>
<a name="l00298"></a>00298 <span class="preprocessor"></span>
<a name="l00313"></a><a class="code" href="theoraenc_8h.html#aac087983fa951b9148c9db6bc2e81ef4">00313</a> <span class="preprocessor">#define TH_ENCCTL_SET_QUALITY (28)</span>
<a name="l00314"></a>00314 <span class="preprocessor"></span>
<a name="l00334"></a><a class="code" href="theoraenc_8h.html#a9b969df55ecad1acd1ae207fad42592e">00334</a> <span class="preprocessor">#define TH_ENCCTL_SET_BITRATE (30)</span>
<a name="l00335"></a>00335 <span class="preprocessor"></span>
<a name="l00346"></a><a class="code" href="theoraenc_8h.html#a3e7fab53b902b54135522ba286f45e33">00346</a> <span class="preprocessor">#define TH_RATECTL_DROP_FRAMES (0x1)</span>
<a name="l00347"></a>00347 <span class="preprocessor"></span>
<a name="l00354"></a><a class="code" href="theoraenc_8h.html#a32f9983b344a431334493cefb0b9337c">00354</a> <span class="preprocessor">#define TH_RATECTL_CAP_OVERFLOW (0x2)</span>
<a name="l00355"></a>00355 <span class="preprocessor"></span>
<a name="l00361"></a><a class="code" href="theoraenc_8h.html#ad0d62d9dce542caf5296b03b97e020a6">00361</a> <span class="preprocessor">#define TH_RATECTL_CAP_UNDERFLOW (0x4)</span>
<a name="l00362"></a>00362 <span class="preprocessor"></span>
<a name="l00367"></a>00367 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structth__quant__info.html" title="A complete set of quantization parameters.">th_quant_info</a> <a class="code" href="theoraenc_8h.html#a3b1b462989f4e7a5a98e6e697f1a7f7d" title="The quantization parameters used by VP3.">TH_VP31_QUANT_INFO</a>;
<a name="l00368"></a>00368
<a name="l00370"></a>00370 <span class="keyword">extern</span> <span class="keyword">const</span> <a class="code" href="structth__huff__code.html" title="A Huffman code for a Theora DCT token.">th_huff_code</a>
<a name="l00371"></a>00371 <a class="code" href="theoraenc_8h.html#aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e" title="The Huffman tables used by VP3.">TH_VP31_HUFF_CODES</a>[<a class="code" href="codec_8h.html#a49bf449eae33c5320f0c308f32c6ae42" title="The number of Huffman tables used by Theora.">TH_NHUFFMAN_TABLES</a>][<a class="code" href="codec_8h.html#a2a44f48084e76a58cae48fb5d47cd422" title="The number of DCT token values in each table.">TH_NDCT_TOKENS</a>];
<a name="l00372"></a>00372
<a name="l00373"></a>00373
<a name="l00374"></a>00374
<a name="l00382"></a><a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd">00382</a> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> <a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a>;
<a name="l00412"></a>00412 <span class="keyword">extern</span> <a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> *<a class="code" href="group__encfuncs.html#gaa91e47bc9dd5f6ee52045bd7b815e5a7" title="Allocates an encoder instance.">th_encode_alloc</a>(<span class="keyword">const</span> <a class="code" href="structth__info.html" title="Theora bitstream information.">th_info</a> *_info);
<a name="l00421"></a>00421 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__encfuncs.html#ga3a427f6514dfdc01ea72172c469d51d9" title="Encoder control function.">th_encode_ctl</a>(<a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> *_enc,<span class="keywordtype">int</span> _req,<span class="keywordtype">void</span> *_buf,<span class="keywordtype">size_t</span> _buf_sz);
<a name="l00439"></a>00439 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__encfuncs.html#ga9439d61b566039d194ff782681fbc408" title="Outputs the next header packet.">th_encode_flushheader</a>(<a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> *_enc,
<a name="l00440"></a>00440 <a class="code" href="structth__comment.html" title="The comment information.">th_comment</a> *_comments,ogg_packet *_op);
<a name="l00449"></a>00449 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__encfuncs.html#gadbe7dd66b411c2d61ab8153c15308750" title="Submits an uncompressed frame to the encoder.">th_encode_ycbcr_in</a>(<a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> *_enc,<a class="code" href="codec_8h.html#a343f7cfabad179cc4fe527cf06873f45" title="A complete image buffer for an uncompressed frame.">th_ycbcr_buffer</a> _ycbcr);
<a name="l00473"></a>00473 <span class="keyword">extern</span> <span class="keywordtype">int</span> <a class="code" href="group__encfuncs.html#ga96d8ac1dda53187455352f99bbb5b04b" title="Retrieves encoded video data packets.">th_encode_packetout</a>(<a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> *_enc,<span class="keywordtype">int</span> _last,ogg_packet *_op);
<a name="l00476"></a>00476 <span class="keyword">extern</span> <span class="keywordtype">void</span> <a class="code" href="group__encfuncs.html#ga36b23d216532231925c4107894204680" title="Frees an allocated encoder instance.">th_encode_free</a>(<a class="code" href="theoraenc_8h.html#af5cc40472b925456d42526a035d66edd" title="The encoder context.">th_enc_ctx</a> *_enc);
<a name="l00479"></a>00479
<a name="l00480"></a>00480
<a name="l00481"></a>00481
<a name="l00482"></a>00482 <span class="preprocessor">#if defined(__cplusplus)</span>
<a name="l00483"></a>00483 <span class="preprocessor"></span>}
<a name="l00484"></a>00484 <span class="preprocessor">#endif</span>
<a name="l00485"></a>00485 <span class="preprocessor"></span>
<a name="l00486"></a>00486 <span class="preprocessor">#endif</span>
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated on 28 Sep 2009 for libtheora by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

View file

@ -0,0 +1,39 @@
all: clean refman.dvi
ps: refman.ps
pdf: refman.pdf
ps_2on1: refman_2on1.ps
pdf_2on1: refman_2on1.pdf
refman.ps: refman.dvi
dvips -o refman.ps refman.dvi
refman.pdf: refman.ps
ps2pdf refman.ps refman.pdf
refman.dvi: refman.tex doxygen.sty
echo "Running latex..."
latex refman.tex
echo "Running makeindex..."
makeindex refman.idx
echo "Rerunning latex...."
latex refman.tex
latex_count=5 ; \
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
do \
echo "Rerunning latex...." ;\
latex refman.tex ;\
latex_count=`expr $$latex_count - 1` ;\
done
refman_2on1.ps: refman.ps
psnup -2 refman.ps >refman_2on1.ps
refman_2on1.pdf: refman_2on1.ps
ps2pdf refman_2on1.ps refman_2on1.pdf
clean:
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf

View file

@ -0,0 +1,14 @@
\section{Data Structures}
Here are the data structures with brief descriptions:\begin{DoxyCompactList}
\item\contentsline{section}{{\bf th\_\-comment} (The comment information )}{\pageref{structth__comment}}{}
\item\contentsline{section}{{\bf th\_\-huff\_\-code} (A Huffman code for a Theora DCT token )}{\pageref{structth__huff__code}}{}
\item\contentsline{section}{{\bf th\_\-img\_\-plane} (A buffer for a single color plane in an uncompressed image )}{\pageref{structth__img__plane}}{}
\item\contentsline{section}{{\bf th\_\-info} (Theora bitstream information )}{\pageref{structth__info}}{}
\item\contentsline{section}{{\bf th\_\-quant\_\-info} (A complete set of quantization parameters )}{\pageref{structth__quant__info}}{}
\item\contentsline{section}{{\bf th\_\-quant\_\-ranges} (A set of {\itshape qi\/} ranges )}{\pageref{structth__quant__ranges}}{}
\item\contentsline{section}{{\bf th\_\-stripe\_\-callback} (The striped decode callback data to pass to \doxyref{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}{p.}{theoradec_8h_ac95cc9e109474b0fa4bb920ab2cfdf1e} )}{\pageref{structth__stripe__callback}}{}
\item\contentsline{section}{{\bf theora\_\-comment} (Comment header metadata )}{\pageref{structtheora__comment}}{}
\item\contentsline{section}{{\bf theora\_\-info} (Theora bitstream info )}{\pageref{structtheora__info}}{}
\item\contentsline{section}{{\bf theora\_\-state} (Codec internal state and context )}{\pageref{structtheora__state}}{}
\item\contentsline{section}{{\bf yuv\_\-buffer} (A YUV buffer for passing uncompressed frames to and from the codec )}{\pageref{structyuv__buffer}}{}
\end{DoxyCompactList}

View file

@ -0,0 +1,233 @@
\section{codec.h File Reference}
\label{codec_8h}\index{codec.h@{codec.h}}
The shared {\ttfamily libtheoradec} and {\ttfamily libtheoraenc} C API.
{\ttfamily \#include $<$ogg/ogg.h$>$}\par
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
struct {\bf th\_\-img\_\-plane}
\begin{DoxyCompactList}\small\item\em A buffer for a single color plane in an uncompressed image. \item\end{DoxyCompactList}\item
struct {\bf th\_\-info}
\begin{DoxyCompactList}\small\item\em Theora bitstream information. \item\end{DoxyCompactList}\item
struct {\bf th\_\-comment}
\begin{DoxyCompactList}\small\item\em The comment information. \item\end{DoxyCompactList}\item
struct {\bf th\_\-quant\_\-ranges}
\begin{DoxyCompactList}\small\item\em A set of {\itshape qi\/} ranges. \item\end{DoxyCompactList}\item
struct {\bf th\_\-quant\_\-info}
\begin{DoxyCompactList}\small\item\em A complete set of quantization parameters. \item\end{DoxyCompactList}\item
struct {\bf th\_\-huff\_\-code}
\begin{DoxyCompactList}\small\item\em A Huffman code for a Theora DCT token. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Defines}
\begin{DoxyCompactItemize}
\item
\#define {\bf \_\-O\_\-THEORA\_\-CODEC\_\-H\_\-}~(1)
\item
\#define {\bf TH\_\-NHUFFMAN\_\-TABLES}~(80)
\begin{DoxyCompactList}\small\item\em The number of Huffman tables used by Theora. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-NDCT\_\-TOKENS}~(32)
\begin{DoxyCompactList}\small\item\em The number of DCT token values in each table. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\begin{Indent}{\bf Return codes}\par
{\em \label{_amgrp800007e5fae550658ee577ca16693452}
}\begin{DoxyCompactItemize}
\item
\#define {\bf TH\_\-EFAULT}~(-\/1)
\begin{DoxyCompactList}\small\item\em An invalid pointer was provided. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-EINVAL}~(-\/10)
\begin{DoxyCompactList}\small\item\em An invalid argument was provided. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-EBADHEADER}~(-\/20)
\begin{DoxyCompactList}\small\item\em The contents of the header were incomplete, invalid, or unexpected. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENOTFORMAT}~(-\/21)
\begin{DoxyCompactList}\small\item\em The header does not belong to a Theora stream. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-EVERSION}~(-\/22)
\begin{DoxyCompactList}\small\item\em The bitstream version is too high. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-EIMPL}~(-\/23)
\begin{DoxyCompactList}\small\item\em The specified function is not implemented. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-EBADPACKET}~(-\/24)
\begin{DoxyCompactList}\small\item\em There were errors in the video data packet. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DUPFRAME}~(1)
\begin{DoxyCompactList}\small\item\em The decoded packet represented a dropped frame. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item
typedef {\bf th\_\-img\_\-plane} {\bf th\_\-ycbcr\_\-buffer} [3]
\begin{DoxyCompactList}\small\item\em A complete image buffer for an uncompressed frame. \item\end{DoxyCompactList}\item
typedef unsigned char {\bf th\_\-quant\_\-base} [64]
\begin{DoxyCompactList}\small\item\em A single base matrix. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Enumerations}
\begin{DoxyCompactItemize}
\item
enum {\bf th\_\-colorspace} \{ {\bf TH\_\-CS\_\-UNSPECIFIED},
{\bf TH\_\-CS\_\-ITU\_\-REC\_\-470M},
{\bf TH\_\-CS\_\-ITU\_\-REC\_\-470BG},
{\bf TH\_\-CS\_\-NSPACES}
\}
\begin{DoxyCompactList}\small\item\em The currently defined color space tags. \item\end{DoxyCompactList}\item
enum {\bf th\_\-pixel\_\-fmt} \{ \par
{\bf TH\_\-PF\_\-420},
{\bf TH\_\-PF\_\-RSVD},
{\bf TH\_\-PF\_\-422},
{\bf TH\_\-PF\_\-444},
\par
{\bf TH\_\-PF\_\-NFORMATS}
\}
\begin{DoxyCompactList}\small\item\em The currently defined pixel format tags. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{Indent}{\bf Basic shared functions}\par
{\em \label{_amgrpb625c22fa07613c734f71c378fe32d7a}
}\begin{DoxyCompactItemize}
\item
const char $\ast$ {\bf th\_\-version\_\-string} (void)
\begin{DoxyCompactList}\small\item\em Retrieves a human-\/readable string to identify the library vendor and version. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf th\_\-version\_\-number} (void)
\begin{DoxyCompactList}\small\item\em Retrieves the library version number. \item\end{DoxyCompactList}\item
ogg\_\-int64\_\-t {\bf th\_\-granule\_\-frame} (void $\ast$\_\-encdec, ogg\_\-int64\_\-t \_\-granpos)
\begin{DoxyCompactList}\small\item\em Converts a granule position to an absolute frame index, starting at {\ttfamily 0}. \item\end{DoxyCompactList}\item
double {\bf th\_\-granule\_\-time} (void $\ast$\_\-encdec, ogg\_\-int64\_\-t \_\-granpos)
\begin{DoxyCompactList}\small\item\em Converts a granule position to an absolute time in seconds. \item\end{DoxyCompactList}\item
int {\bf th\_\-packet\_\-isheader} (ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Determines whether a Theora packet is a header or not. \item\end{DoxyCompactList}\item
int {\bf th\_\-packet\_\-iskeyframe} (ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Determines whether a theora packet is a key frame or not. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\begin{Indent}{\bf Functions for manipulating header data}\par
{\em \label{_amgrp14ef5f819e97c870c128539ed1f334e3}
}\begin{DoxyCompactItemize}
\item
void {\bf th\_\-info\_\-init} ({\bf th\_\-info} $\ast$\_\-info)
\begin{DoxyCompactList}\small\item\em Initializes a \doxyref{th\_\-info}{p.}{structth__info} structure. \item\end{DoxyCompactList}\item
void {\bf th\_\-info\_\-clear} ({\bf th\_\-info} $\ast$\_\-info)
\begin{DoxyCompactList}\small\item\em Clears a \doxyref{th\_\-info}{p.}{structth__info} structure. \item\end{DoxyCompactList}\item
void {\bf th\_\-comment\_\-init} ({\bf th\_\-comment} $\ast$\_\-tc)
\begin{DoxyCompactList}\small\item\em Initialize a \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item\end{DoxyCompactList}\item
void {\bf th\_\-comment\_\-add} ({\bf th\_\-comment} $\ast$\_\-tc, char $\ast$\_\-comment)
\begin{DoxyCompactList}\small\item\em Add a comment to an initialized \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item\end{DoxyCompactList}\item
void {\bf th\_\-comment\_\-add\_\-tag} ({\bf th\_\-comment} $\ast$\_\-tc, char $\ast$\_\-tag, char $\ast$\_\-val)
\begin{DoxyCompactList}\small\item\em Add a comment to an initialized \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item\end{DoxyCompactList}\item
char $\ast$ {\bf th\_\-comment\_\-query} ({\bf th\_\-comment} $\ast$\_\-tc, char $\ast$\_\-tag, int \_\-count)
\begin{DoxyCompactList}\small\item\em Look up a comment value by its tag. \item\end{DoxyCompactList}\item
int {\bf th\_\-comment\_\-query\_\-count} ({\bf th\_\-comment} $\ast$\_\-tc, char $\ast$\_\-tag)
\begin{DoxyCompactList}\small\item\em Look up the number of instances of a tag. \item\end{DoxyCompactList}\item
void {\bf th\_\-comment\_\-clear} ({\bf th\_\-comment} $\ast$\_\-tc)
\begin{DoxyCompactList}\small\item\em Clears a \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection{Detailed Description}
The shared {\ttfamily libtheoradec} and {\ttfamily libtheoraenc} C API. You don't need to include this directly.
\subsection{Define Documentation}
\index{codec.h@{codec.h}!\_\-O\_\-THEORA\_\-CODEC\_\-H\_\-@{\_\-O\_\-THEORA\_\-CODEC\_\-H\_\-}}
\index{\_\-O\_\-THEORA\_\-CODEC\_\-H\_\-@{\_\-O\_\-THEORA\_\-CODEC\_\-H\_\-}!codec.h@{codec.h}}
\subsubsection[{\_\-O\_\-THEORA\_\-CODEC\_\-H\_\-}]{\setlength{\rightskip}{0pt plus 5cm}\#define \_\-O\_\-THEORA\_\-CODEC\_\-H\_\-~(1)}\label{codec_8h_a15352a6a862d25ab00a8f06ea65ee75b}
\index{codec.h@{codec.h}!TH\_\-DUPFRAME@{TH\_\-DUPFRAME}}
\index{TH\_\-DUPFRAME@{TH\_\-DUPFRAME}!codec.h@{codec.h}}
\subsubsection[{TH\_\-DUPFRAME}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DUPFRAME~(1)}\label{codec_8h_ab10e7b64f17a02707fc9348ea9832d09}
The decoded packet represented a dropped frame. The player can continue to display the current frame, as the contents of the decoded frame buffer have not changed. \index{codec.h@{codec.h}!TH\_\-EBADHEADER@{TH\_\-EBADHEADER}}
\index{TH\_\-EBADHEADER@{TH\_\-EBADHEADER}!codec.h@{codec.h}}
\subsubsection[{TH\_\-EBADHEADER}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-EBADHEADER~(-\/20)}\label{codec_8h_af00f7ecc5242d12a717202537324a510}
The contents of the header were incomplete, invalid, or unexpected. \index{codec.h@{codec.h}!TH\_\-EBADPACKET@{TH\_\-EBADPACKET}}
\index{TH\_\-EBADPACKET@{TH\_\-EBADPACKET}!codec.h@{codec.h}}
\subsubsection[{TH\_\-EBADPACKET}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-EBADPACKET~(-\/24)}\label{codec_8h_a6efb84e9c2213a8840003eee2847b27f}
There were errors in the video data packet. \index{codec.h@{codec.h}!TH\_\-EFAULT@{TH\_\-EFAULT}}
\index{TH\_\-EFAULT@{TH\_\-EFAULT}!codec.h@{codec.h}}
\subsubsection[{TH\_\-EFAULT}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-EFAULT~(-\/1)}\label{codec_8h_a4d8d8e34fc5ec39ffa05d61a310a0407}
An invalid pointer was provided. \index{codec.h@{codec.h}!TH\_\-EIMPL@{TH\_\-EIMPL}}
\index{TH\_\-EIMPL@{TH\_\-EIMPL}!codec.h@{codec.h}}
\subsubsection[{TH\_\-EIMPL}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-EIMPL~(-\/23)}\label{codec_8h_a921c47accc17841f220af5a6afb79efe}
The specified function is not implemented. \index{codec.h@{codec.h}!TH\_\-EINVAL@{TH\_\-EINVAL}}
\index{TH\_\-EINVAL@{TH\_\-EINVAL}!codec.h@{codec.h}}
\subsubsection[{TH\_\-EINVAL}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-EINVAL~(-\/10)}\label{codec_8h_afbbd9f19fbf292aeb62a37792cecb870}
An invalid argument was provided. \index{codec.h@{codec.h}!TH\_\-ENOTFORMAT@{TH\_\-ENOTFORMAT}}
\index{TH\_\-ENOTFORMAT@{TH\_\-ENOTFORMAT}!codec.h@{codec.h}}
\subsubsection[{TH\_\-ENOTFORMAT}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENOTFORMAT~(-\/21)}\label{codec_8h_a3dc08a00a9aba231be398f3e31726d9c}
The header does not belong to a Theora stream. \index{codec.h@{codec.h}!TH\_\-EVERSION@{TH\_\-EVERSION}}
\index{TH\_\-EVERSION@{TH\_\-EVERSION}!codec.h@{codec.h}}
\subsubsection[{TH\_\-EVERSION}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-EVERSION~(-\/22)}\label{codec_8h_ac3a45ef2b24f75259258edc481e3a122}
The bitstream version is too high. \index{codec.h@{codec.h}!TH\_\-NDCT\_\-TOKENS@{TH\_\-NDCT\_\-TOKENS}}
\index{TH\_\-NDCT\_\-TOKENS@{TH\_\-NDCT\_\-TOKENS}!codec.h@{codec.h}}
\subsubsection[{TH\_\-NDCT\_\-TOKENS}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-NDCT\_\-TOKENS~(32)}\label{codec_8h_a2a44f48084e76a58cae48fb5d47cd422}
The number of DCT token values in each table. \index{codec.h@{codec.h}!TH\_\-NHUFFMAN\_\-TABLES@{TH\_\-NHUFFMAN\_\-TABLES}}
\index{TH\_\-NHUFFMAN\_\-TABLES@{TH\_\-NHUFFMAN\_\-TABLES}!codec.h@{codec.h}}
\subsubsection[{TH\_\-NHUFFMAN\_\-TABLES}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-NHUFFMAN\_\-TABLES~(80)}\label{codec_8h_a49bf449eae33c5320f0c308f32c6ae42}
The number of Huffman tables used by Theora.
\subsection{Typedef Documentation}
\index{codec.h@{codec.h}!th\_\-quant\_\-base@{th\_\-quant\_\-base}}
\index{th\_\-quant\_\-base@{th\_\-quant\_\-base}!codec.h@{codec.h}}
\subsubsection[{th\_\-quant\_\-base}]{\setlength{\rightskip}{0pt plus 5cm}typedef unsigned char {\bf th\_\-quant\_\-base}[64]}\label{codec_8h_a6a1426d16beef8a311d7f0e9d2e96326}
A single base matrix. \index{codec.h@{codec.h}!th\_\-ycbcr\_\-buffer@{th\_\-ycbcr\_\-buffer}}
\index{th\_\-ycbcr\_\-buffer@{th\_\-ycbcr\_\-buffer}!codec.h@{codec.h}}
\subsubsection[{th\_\-ycbcr\_\-buffer}]{\setlength{\rightskip}{0pt plus 5cm}typedef {\bf th\_\-img\_\-plane} {\bf th\_\-ycbcr\_\-buffer}[3]}\label{codec_8h_a343f7cfabad179cc4fe527cf06873f45}
A complete image buffer for an uncompressed frame. The chroma planes may be decimated by a factor of two in either direction, as indicated by \doxyref{th\_\-info::pixel\_\-fmt}{p.}{structth__info_a2301388ef3755c41ab12fd144c1fc54e}. The width and height of the Y' plane must be multiples of 16. They may need to be cropped for display, using the rectangle specified by \doxyref{th\_\-info::pic\_\-x}{p.}{structth__info_a5b3f834bcf141564e7bb14f49101870f}, \doxyref{th\_\-info::pic\_\-y}{p.}{structth__info_a8aacc575cab2dfe3735001c2ad32aa14}, \doxyref{th\_\-info::pic\_\-width}{p.}{structth__info_a5048edf77b141dd3e9a92ca85e317345}, and \doxyref{th\_\-info::pic\_\-height}{p.}{structth__info_a775178474283c5990ba73f9ba7f6b88b}. All samples are 8 bits. \begin{DoxyNote}{Note}
The term YUV often used to describe a colorspace is ambiguous. The exact parameters of the RGB to YUV conversion process aside, in many contexts the U and V channels actually have opposite meanings. To avoid this confusion, we are explicit: the name of the color channels are Y'CbCr, and they appear in that order, always. The prime symbol denotes that the Y channel is non-\/linear. Cb and Cr stand for \char`\"{}Chroma blue\char`\"{} and \char`\"{}Chroma red\char`\"{}, respectively.
\end{DoxyNote}
\subsection{Enumeration Type Documentation}
\index{codec.h@{codec.h}!th\_\-colorspace@{th\_\-colorspace}}
\index{th\_\-colorspace@{th\_\-colorspace}!codec.h@{codec.h}}
\subsubsection[{th\_\-colorspace}]{\setlength{\rightskip}{0pt plus 5cm}enum {\bf th\_\-colorspace}}\label{codec_8h_a4ce7a695ce353b1582d29b6c1ddf31a0}
The currently defined color space tags. See {\tt the Theora specification}, Chapter 4, for exact details on the meaning of each of these color spaces. \begin{Desc}
\item[Enumerator: ]\par
\begin{description}
\index{TH\_\-CS\_\-UNSPECIFIED@{TH\_\-CS\_\-UNSPECIFIED}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-CS\_\-UNSPECIFIED@{TH\_\-CS\_\-UNSPECIFIED}}\item[{\em
TH\_\-CS\_\-UNSPECIFIED\label{codec_8h_a4ce7a695ce353b1582d29b6c1ddf31a0adb9a17a3283c8d490652e507db2427cf}
}]The color space was not specified at the encoder. It may be conveyed by an external means. \index{TH\_\-CS\_\-ITU\_\-REC\_\-470M@{TH\_\-CS\_\-ITU\_\-REC\_\-470M}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-CS\_\-ITU\_\-REC\_\-470M@{TH\_\-CS\_\-ITU\_\-REC\_\-470M}}\item[{\em
TH\_\-CS\_\-ITU\_\-REC\_\-470M\label{codec_8h_a4ce7a695ce353b1582d29b6c1ddf31a0a1a19346bbfb8192baa4c185df73d3397}
}]A color space designed for NTSC content. \index{TH\_\-CS\_\-ITU\_\-REC\_\-470BG@{TH\_\-CS\_\-ITU\_\-REC\_\-470BG}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-CS\_\-ITU\_\-REC\_\-470BG@{TH\_\-CS\_\-ITU\_\-REC\_\-470BG}}\item[{\em
TH\_\-CS\_\-ITU\_\-REC\_\-470BG\label{codec_8h_a4ce7a695ce353b1582d29b6c1ddf31a0a009021d50836ddb0ec6004a2803775fe}
}]A color space designed for PAL/SECAM content. \index{TH\_\-CS\_\-NSPACES@{TH\_\-CS\_\-NSPACES}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-CS\_\-NSPACES@{TH\_\-CS\_\-NSPACES}}\item[{\em
TH\_\-CS\_\-NSPACES\label{codec_8h_a4ce7a695ce353b1582d29b6c1ddf31a0a0fa8ea07f583ee57943520ddb2f6e62e}
}]The total number of currently defined color spaces. \end{description}
\end{Desc}
\index{codec.h@{codec.h}!th\_\-pixel\_\-fmt@{th\_\-pixel\_\-fmt}}
\index{th\_\-pixel\_\-fmt@{th\_\-pixel\_\-fmt}!codec.h@{codec.h}}
\subsubsection[{th\_\-pixel\_\-fmt}]{\setlength{\rightskip}{0pt plus 5cm}enum {\bf th\_\-pixel\_\-fmt}}\label{codec_8h_a5c9e7f2f0c7ed209c9ca3ed0abd328bc}
The currently defined pixel format tags. See {\tt the Theora specification}, Section 4.4, for details on the precise sample locations. \begin{Desc}
\item[Enumerator: ]\par
\begin{description}
\index{TH\_\-PF\_\-420@{TH\_\-PF\_\-420}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-PF\_\-420@{TH\_\-PF\_\-420}}\item[{\em
TH\_\-PF\_\-420\label{codec_8h_a5c9e7f2f0c7ed209c9ca3ed0abd328bcafed7ad7ee4345930255827bff6055162}
}]Chroma decimation by 2 in both the X and Y directions (4:2:0). The Cb and Cr chroma planes are half the width and half the height of the luma plane. \index{TH\_\-PF\_\-RSVD@{TH\_\-PF\_\-RSVD}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-PF\_\-RSVD@{TH\_\-PF\_\-RSVD}}\item[{\em
TH\_\-PF\_\-RSVD\label{codec_8h_a5c9e7f2f0c7ed209c9ca3ed0abd328bca9e60af0159d42b20806d7eb4a8b833e6}
}]Currently reserved. \index{TH\_\-PF\_\-422@{TH\_\-PF\_\-422}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-PF\_\-422@{TH\_\-PF\_\-422}}\item[{\em
TH\_\-PF\_\-422\label{codec_8h_a5c9e7f2f0c7ed209c9ca3ed0abd328bca0271d01babf2f51512479f4a6245b9fa}
}]Chroma decimation by 2 in the X direction (4:2:2). The Cb and Cr chroma planes are half the width of the luma plane, but full height. \index{TH\_\-PF\_\-444@{TH\_\-PF\_\-444}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-PF\_\-444@{TH\_\-PF\_\-444}}\item[{\em
TH\_\-PF\_\-444\label{codec_8h_a5c9e7f2f0c7ed209c9ca3ed0abd328bca2ac50ac048ea75501a5e0f99a63c8c86}
}]No chroma decimation (4:4:4). The Cb and Cr chroma planes are full width and full height. \index{TH\_\-PF\_\-NFORMATS@{TH\_\-PF\_\-NFORMATS}!codec.h@{codec.h}}\index{codec.h@{codec.h}!TH\_\-PF\_\-NFORMATS@{TH\_\-PF\_\-NFORMATS}}\item[{\em
TH\_\-PF\_\-NFORMATS\label{codec_8h_a5c9e7f2f0c7ed209c9ca3ed0abd328bca2d6d78b9df1df086bb60f32f963a31eb}
}]The total number of currently defined pixel formats. \end{description}
\end{Desc}

View file

@ -0,0 +1,351 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{doxygen}
% Packages used by this style file
\RequirePackage{alltt}
\RequirePackage{array}
\RequirePackage{calc}
\RequirePackage{color}
\RequirePackage{fancyhdr}
\RequirePackage{verbatim}
% Setup fancy headings
\pagestyle{fancyplain}
\newcommand{\clearemptydoublepage}{%
\newpage{\pagestyle{empty}\cleardoublepage}%
}
\renewcommand{\chaptermark}[1]{%
\markboth{#1}{}%
}
\renewcommand{\sectionmark}[1]{%
\markright{\thesection\ #1}%
}
\lhead[\fancyplain{}{\bfseries\thepage}]{%
\fancyplain{}{\bfseries\rightmark}%
}
\rhead[\fancyplain{}{\bfseries\leftmark}]{%
\fancyplain{}{\bfseries\thepage}%
}
\rfoot[\fancyplain{}{\bfseries\scriptsize%
Generated on Mon Sep 28 11:02:24 2009 for libtheora by Doxygen }]{}
\lfoot[]{\fancyplain{}{\bfseries\scriptsize%
Generated on Mon Sep 28 11:02:24 2009 for libtheora by Doxygen }}
\cfoot{}
%---------- Internal commands used in this style file ----------------
% Generic environment used by all paragraph-based environments defined
% below. Note that the command \title{...} needs to be defined inside
% those environments!
\newenvironment{DoxyDesc}[1]{%
\begin{list}{}%
{%
\settowidth{\labelwidth}{40pt}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\parsep}{0pt}%
\setlength{\itemsep}{-4pt}%
\renewcommand{\makelabel}{\entrylabel}%
}%
\item[#1:]%
}{%
\end{list}%
}
%---------- Commands used by doxygen LaTeX output generator ----------
% Used by <pre> ... </pre>
\newenvironment{DoxyPre}{%
\small%
\begin{alltt}%
}{%
\end{alltt}%
\normalsize%
}
% Used by @code ... @endcode
\newenvironment{DoxyCode}{%
\footnotesize%
\verbatim%
}{%
\endverbatim%
\normalsize%
}
% Used by @example, @include, @includelineno and @dontinclude
\newenvironment{DoxyCodeInclude}{%
\DoxyCode%
}{%
\endDoxyCode%
}
% Used by @verbatim ... @endverbatim
\newenvironment{DoxyVerb}{%
\footnotesize%
\verbatim%
}{%
\endverbatim%
\normalsize%
}
% Used by @verbinclude
\newenvironment{DoxyVerbInclude}{%
\DoxyVerb%
}{%
\endDoxyVerb%
}
% Used by numbered lists (using '-#' or <ol> ... </ol>)
\newenvironment{DoxyEnumerate}{%
\enumerate%
}{%
\endenumerate%
}
% Used by bullet lists (using '-', @li, @arg, or <ul> ... </ul>)
\newenvironment{DoxyItemize}{%
\itemize%
}{%
\enditemize%
}
% Used by description lists (using <dl> ... </dl>)
\newenvironment{DoxyDescription}{%
\description%
}{%
\enddescription%
}
% Used by @image, @dotfile, and @dot ... @enddot
% (only if caption is specified)
\newenvironment{DoxyImage}{%
\begin{figure}[H]%
\begin{center}%
}{%
\end{center}%
\end{figure}%
}
% Used by @image, @dotfile, @dot ... @enddot, and @msc ... @endmsc
% (only if no caption is specified)
\newenvironment{DoxyImageNoCaption}{%
}{%
}
% Used by @attention
\newenvironment{DoxyAttention}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @author and @authors
\newenvironment{DoxyAuthor}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @date
\newenvironment{DoxyDate}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @invariant
\newenvironment{DoxyInvariant}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @note
\newenvironment{DoxyNote}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @post
\newenvironment{DoxyPostcond}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @pre
\newenvironment{DoxyPrecond}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @remark
\newenvironment{DoxyRemark}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @return
\newenvironment{DoxyReturn}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @since
\newenvironment{DoxySince}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @see
\newenvironment{DoxySeeAlso}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @version
\newenvironment{DoxyVersion}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @warning
\newenvironment{DoxyWarning}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @internal
\newenvironment{DoxyInternal}[1]{%
\begin{DoxyDesc}{#1}%
}{%
\end{DoxyDesc}%
}
% Used by @par and @paragraph
\newenvironment{DoxyParagraph}[1]{%
\begin{list}{}%
{%
\settowidth{\labelwidth}{40pt}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\parsep}{0pt}%
\setlength{\itemsep}{-4pt}%
\renewcommand{\makelabel}{\entrylabel}%
}%
\item[#1]%
}{%
\end{list}%
}
% Used by parameter lists
\newenvironment{DoxyParams}[1]{%
\begin{DoxyDesc}{#1}%
\begin{description}%
}{%
\end{description}%
\end{DoxyDesc}%
}
% Used by return value lists
\newenvironment{DoxyRetVals}[1]{%
\begin{DoxyDesc}{#1}%
\begin{description}%
}{%
\end{description}%
\end{DoxyDesc}%
}
% Used by exception lists
\newenvironment{DoxyExceptions}[1]{%
\begin{DoxyDesc}{#1}%
\begin{description}%
}{%
\end{description}%
\end{DoxyDesc}%
}
% Used by template parameter lists
\newenvironment{DoxyTemplParams}[1]{%
\begin{DoxyDesc}{#1}%
\begin{description}%
}{%
\end{description}%
\end{DoxyDesc}%
}
\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})}
\newenvironment{DoxyCompactList}
{\begin{list}{}{
\setlength{\leftmargin}{0.5cm}
\setlength{\itemsep}{0pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
\renewcommand{\makelabel}{\hfill}}}
{\end{list}}
\newenvironment{DoxyCompactItemize}
{
\begin{itemize}
\setlength{\itemsep}{-3pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
}
{\end{itemize}}
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
\newlength{\tmplength}
\newenvironment{TabularC}[1]
{
\setlength{\tmplength}
{\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}
\par\begin{tabular*}{\linewidth}
{*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}
}
{\end{tabular*}\par}
\newcommand{\entrylabel}[1]{
{\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}}
\newenvironment{Desc}
{\begin{list}{}
{
\settowidth{\labelwidth}{40pt}
\setlength{\leftmargin}{\labelwidth}
\setlength{\parsep}{0pt}
\setlength{\itemsep}{-4pt}
\renewcommand{\makelabel}{\entrylabel}
}
}
{\end{list}}
\newenvironment{Indent}
{\begin{list}{}{\setlength{\leftmargin}{0.5cm}}
\item[]\ignorespaces}
{\unskip\end{list}}
\setlength{\parindent}{0cm}
\setlength{\parskip}{0.2cm}
\addtocounter{secnumdepth}{1}
\sloppy
\usepackage[T1]{fontenc}
\makeatletter
\renewcommand{\paragraph}{\@startsection{paragraph}{4}{0ex}%
{-3.25ex plus -1ex minus -0.2ex}%
{1.5ex plus 0.2ex}%
{\normalfont\normalsize\bfseries}}
\makeatother
\stepcounter{secnumdepth}
\stepcounter{tocdepth}
\definecolor{comment}{rgb}{0.5,0.0,0.0}
\definecolor{keyword}{rgb}{0.0,0.5,0.0}
\definecolor{keywordtype}{rgb}{0.38,0.25,0.125}
\definecolor{keywordflow}{rgb}{0.88,0.5,0.0}
\definecolor{preprocessor}{rgb}{0.5,0.38,0.125}
\definecolor{stringliteral}{rgb}{0.0,0.125,0.25}
\definecolor{charliteral}{rgb}{0.0,0.5,0.5}
\definecolor{vhdldigit}{rgb}{1.0,0.0,1.0}
\definecolor{vhdlkeyword}{rgb}{0.43,0.0,0.43}
\definecolor{vhdllogic}{rgb}{1.0,0.0,0.0}
\definecolor{vhdlchar}{rgb}{0.0,0.0,0.0}

View file

@ -0,0 +1,7 @@
\section{File List}
Here is a list of all files with brief descriptions:\begin{DoxyCompactList}
\item\contentsline{section}{{\bf codec.h} (The shared {\ttfamily libtheoradec} and {\ttfamily libtheoraenc} C API )}{\pageref{codec_8h}}{}
\item\contentsline{section}{{\bf theora.h} (The libtheora pre-\/1.0 legacy C API )}{\pageref{theora_8h}}{}
\item\contentsline{section}{{\bf theoradec.h} (The {\ttfamily libtheoradec} C decoding API )}{\pageref{theoradec_8h}}{}
\item\contentsline{section}{{\bf theoraenc.h} (The {\ttfamily libtheoraenc} C encoding API )}{\pageref{theoraenc_8h}}{}
\end{DoxyCompactList}

View file

@ -0,0 +1,190 @@
\section{Functions Shared by Encode and Decode}
\label{group__basefuncs}\index{Functions Shared by Encode and Decode@{Functions Shared by Encode and Decode}}
\subsection*{Basic shared functions}
\label{_amgrpb625c22fa07613c734f71c378fe32d7a}
\begin{DoxyCompactItemize}
\item
const char $\ast$ {\bf th\_\-version\_\-string} (void)
\begin{DoxyCompactList}\small\item\em Retrieves a human-\/readable string to identify the library vendor and version. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf th\_\-version\_\-number} (void)
\begin{DoxyCompactList}\small\item\em Retrieves the library version number. \item\end{DoxyCompactList}\item
ogg\_\-int64\_\-t {\bf th\_\-granule\_\-frame} (void $\ast$\_\-encdec, ogg\_\-int64\_\-t \_\-granpos)
\begin{DoxyCompactList}\small\item\em Converts a granule position to an absolute frame index, starting at {\ttfamily 0}. \item\end{DoxyCompactList}\item
double {\bf th\_\-granule\_\-time} (void $\ast$\_\-encdec, ogg\_\-int64\_\-t \_\-granpos)
\begin{DoxyCompactList}\small\item\em Converts a granule position to an absolute time in seconds. \item\end{DoxyCompactList}\item
int {\bf th\_\-packet\_\-isheader} (ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Determines whether a Theora packet is a header or not. \item\end{DoxyCompactList}\item
int {\bf th\_\-packet\_\-iskeyframe} (ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Determines whether a theora packet is a key frame or not. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions for manipulating header data}
\label{_amgrp14ef5f819e97c870c128539ed1f334e3}
\begin{DoxyCompactItemize}
\item
void {\bf th\_\-info\_\-init} ({\bf th\_\-info} $\ast$\_\-info)
\begin{DoxyCompactList}\small\item\em Initializes a \doxyref{th\_\-info}{p.}{structth__info} structure. \item\end{DoxyCompactList}\item
void {\bf th\_\-info\_\-clear} ({\bf th\_\-info} $\ast$\_\-info)
\begin{DoxyCompactList}\small\item\em Clears a \doxyref{th\_\-info}{p.}{structth__info} structure. \item\end{DoxyCompactList}\item
void {\bf th\_\-comment\_\-init} ({\bf th\_\-comment} $\ast$\_\-tc)
\begin{DoxyCompactList}\small\item\em Initialize a \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item\end{DoxyCompactList}\item
void {\bf th\_\-comment\_\-add} ({\bf th\_\-comment} $\ast$\_\-tc, char $\ast$\_\-comment)
\begin{DoxyCompactList}\small\item\em Add a comment to an initialized \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item\end{DoxyCompactList}\item
void {\bf th\_\-comment\_\-add\_\-tag} ({\bf th\_\-comment} $\ast$\_\-tc, char $\ast$\_\-tag, char $\ast$\_\-val)
\begin{DoxyCompactList}\small\item\em Add a comment to an initialized \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item\end{DoxyCompactList}\item
char $\ast$ {\bf th\_\-comment\_\-query} ({\bf th\_\-comment} $\ast$\_\-tc, char $\ast$\_\-tag, int \_\-count)
\begin{DoxyCompactList}\small\item\em Look up a comment value by its tag. \item\end{DoxyCompactList}\item
int {\bf th\_\-comment\_\-query\_\-count} ({\bf th\_\-comment} $\ast$\_\-tc, char $\ast$\_\-tag)
\begin{DoxyCompactList}\small\item\em Look up the number of instances of a tag. \item\end{DoxyCompactList}\item
void {\bf th\_\-comment\_\-clear} ({\bf th\_\-comment} $\ast$\_\-tc)
\begin{DoxyCompactList}\small\item\em Clears a \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Function Documentation}
\index{basefuncs@{basefuncs}!th\_\-comment\_\-add@{th\_\-comment\_\-add}}
\index{th\_\-comment\_\-add@{th\_\-comment\_\-add}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-comment\_\-add}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-comment\_\-add ({\bf th\_\-comment} $\ast$ {\em \_\-tc}, \/ char $\ast$ {\em \_\-comment})}\label{group__basefuncs_ga19a1f7b8032db957df151a34e5ac9272}
Add a comment to an initialized \doxyref{th\_\-comment}{p.}{structth__comment} structure. \begin{DoxyNote}{Note}
Neither \doxyref{th\_\-comment\_\-add()}{p.}{group__basefuncs_ga19a1f7b8032db957df151a34e5ac9272} nor \doxyref{th\_\-comment\_\-add\_\-tag()}{p.}{group__basefuncs_ga6c5edc201ca220a30787ca6c1ddcaeaf} support comments containing null values, although the bitstream format does support them. To add such comments you will need to manipulate the \doxyref{th\_\-comment}{p.}{structth__comment} structure directly.
\end{DoxyNote}
\begin{DoxyParams}{Parameters}
\item[{\em \_\-tc}]The \doxyref{th\_\-comment}{p.}{structth__comment} struct to add the comment to. \item[{\em \_\-comment}]Must be a null-\/terminated UTF-\/8 string containing the comment in \char`\"{}TAG=the value\char`\"{} form. \end{DoxyParams}
\index{basefuncs@{basefuncs}!th\_\-comment\_\-add\_\-tag@{th\_\-comment\_\-add\_\-tag}}
\index{th\_\-comment\_\-add\_\-tag@{th\_\-comment\_\-add\_\-tag}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-comment\_\-add\_\-tag}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-comment\_\-add\_\-tag ({\bf th\_\-comment} $\ast$ {\em \_\-tc}, \/ char $\ast$ {\em \_\-tag}, \/ char $\ast$ {\em \_\-val})}\label{group__basefuncs_ga6c5edc201ca220a30787ca6c1ddcaeaf}
Add a comment to an initialized \doxyref{th\_\-comment}{p.}{structth__comment} structure. \begin{DoxyNote}{Note}
Neither \doxyref{th\_\-comment\_\-add()}{p.}{group__basefuncs_ga19a1f7b8032db957df151a34e5ac9272} nor \doxyref{th\_\-comment\_\-add\_\-tag()}{p.}{group__basefuncs_ga6c5edc201ca220a30787ca6c1ddcaeaf} support comments containing null values, although the bitstream format does support them. To add such comments you will need to manipulate the \doxyref{th\_\-comment}{p.}{structth__comment} structure directly.
\end{DoxyNote}
\begin{DoxyParams}{Parameters}
\item[{\em \_\-tc}]The \doxyref{th\_\-comment}{p.}{structth__comment} struct to add the comment to. \item[{\em \_\-tag}]A null-\/terminated string containing the tag associated with the comment. \item[{\em \_\-val}]The corresponding value as a null-\/terminated string. \end{DoxyParams}
\index{basefuncs@{basefuncs}!th\_\-comment\_\-clear@{th\_\-comment\_\-clear}}
\index{th\_\-comment\_\-clear@{th\_\-comment\_\-clear}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-comment\_\-clear}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-comment\_\-clear ({\bf th\_\-comment} $\ast$ {\em \_\-tc})}\label{group__basefuncs_gae736c1afa514947a3feb223143af95e3}
Clears a \doxyref{th\_\-comment}{p.}{structth__comment} structure. This should be called on a \doxyref{th\_\-comment}{p.}{structth__comment} structure after it is no longer needed. It will free all memory used by the structure members.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-tc}]The \doxyref{th\_\-comment}{p.}{structth__comment} struct to clear. \end{DoxyParams}
\index{basefuncs@{basefuncs}!th\_\-comment\_\-init@{th\_\-comment\_\-init}}
\index{th\_\-comment\_\-init@{th\_\-comment\_\-init}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-comment\_\-init}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-comment\_\-init ({\bf th\_\-comment} $\ast$ {\em \_\-tc})}\label{group__basefuncs_ga6c8ab25988e7ea9d7b1e31a54cf58f09}
Initialize a \doxyref{th\_\-comment}{p.}{structth__comment} structure. This should be called on a freshly allocated \doxyref{th\_\-comment}{p.}{structth__comment} structure before attempting to use it.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-tc}]The \doxyref{th\_\-comment}{p.}{structth__comment} struct to initialize. \end{DoxyParams}
\index{basefuncs@{basefuncs}!th\_\-comment\_\-query@{th\_\-comment\_\-query}}
\index{th\_\-comment\_\-query@{th\_\-comment\_\-query}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-comment\_\-query}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ th\_\-comment\_\-query ({\bf th\_\-comment} $\ast$ {\em \_\-tc}, \/ char $\ast$ {\em \_\-tag}, \/ int {\em \_\-count})}\label{group__basefuncs_ga33c8b4f57a03217636d704c2ebb211fa}
Look up a comment value by its tag.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-tc}]An initialized \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item[{\em \_\-tag}]The tag to look up. \item[{\em \_\-count}]The instance of the tag. The same tag can appear multiple times, each with a distinct value, so an index is required to retrieve them all. The order in which these values appear is significant and should be preserved. Use \doxyref{th\_\-comment\_\-query\_\-count()}{p.}{group__basefuncs_ga81d518dc4426f63ceaedcbe2668679fc} to get the legal range for the {\itshape \_\-count\/} parameter. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
A pointer to the queried tag's value. This points directly to data in the \doxyref{th\_\-comment}{p.}{structth__comment} structure. It should not be modified or freed by the application, and modifications to the structure may invalidate the pointer.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em NULL}]If no matching tag is found. \end{DoxyRetVals}
\index{basefuncs@{basefuncs}!th\_\-comment\_\-query\_\-count@{th\_\-comment\_\-query\_\-count}}
\index{th\_\-comment\_\-query\_\-count@{th\_\-comment\_\-query\_\-count}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-comment\_\-query\_\-count}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-comment\_\-query\_\-count ({\bf th\_\-comment} $\ast$ {\em \_\-tc}, \/ char $\ast$ {\em \_\-tag})}\label{group__basefuncs_ga81d518dc4426f63ceaedcbe2668679fc}
Look up the number of instances of a tag. Call this first when querying for a specific tag and then iterate over the number of instances with separate calls to \doxyref{th\_\-comment\_\-query()}{p.}{group__basefuncs_ga33c8b4f57a03217636d704c2ebb211fa} to retrieve all the values for that tag in order.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-tc}]An initialized \doxyref{th\_\-comment}{p.}{structth__comment} structure. \item[{\em \_\-tag}]The tag to look up. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The number on instances of this particular tag.
\end{DoxyReturn}
\index{basefuncs@{basefuncs}!th\_\-granule\_\-frame@{th\_\-granule\_\-frame}}
\index{th\_\-granule\_\-frame@{th\_\-granule\_\-frame}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-granule\_\-frame}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-int64\_\-t th\_\-granule\_\-frame (void $\ast$ {\em \_\-encdec}, \/ ogg\_\-int64\_\-t {\em \_\-granpos})}\label{group__basefuncs_ga95b10e76fc4c05d0240ea2dfd9fd62bd}
Converts a granule position to an absolute frame index, starting at {\ttfamily 0}. The granule position is interpreted in the context of a given \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} or \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle (either will suffice).
\begin{DoxyParams}{Parameters}
\item[{\em \_\-encdec}]A previously allocated \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} or \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle. \item[{\em \_\-granpos}]The granule position to convert. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The absolute frame index corresponding to {\itshape \_\-granpos\/}.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em -\/1}]The given granule position was invalid (i.e. negative). \end{DoxyRetVals}
\index{basefuncs@{basefuncs}!th\_\-granule\_\-time@{th\_\-granule\_\-time}}
\index{th\_\-granule\_\-time@{th\_\-granule\_\-time}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-granule\_\-time}]{\setlength{\rightskip}{0pt plus 5cm}double th\_\-granule\_\-time (void $\ast$ {\em \_\-encdec}, \/ ogg\_\-int64\_\-t {\em \_\-granpos})}\label{group__basefuncs_ga707e1e281de788af0df39ef00f3fb432}
Converts a granule position to an absolute time in seconds. The granule position is interpreted in the context of a given \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} or \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle (either will suffice).
\begin{DoxyParams}{Parameters}
\item[{\em \_\-encdec}]A previously allocated \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} or \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle. \item[{\em \_\-granpos}]The granule position to convert. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The absolute time in seconds corresponding to {\itshape \_\-granpos\/}. This is the \char`\"{}end time\char`\"{} for the frame, or the latest time it should be displayed. It is not the presentation time.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em -\/1}]The given granule position was invalid (i.e. negative). \end{DoxyRetVals}
\index{basefuncs@{basefuncs}!th\_\-info\_\-clear@{th\_\-info\_\-clear}}
\index{th\_\-info\_\-clear@{th\_\-info\_\-clear}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-info\_\-clear}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-info\_\-clear ({\bf th\_\-info} $\ast$ {\em \_\-info})}\label{group__basefuncs_gab3d6441ab4a4969859ef5fd78a9e3c1c}
Clears a \doxyref{th\_\-info}{p.}{structth__info} structure. This should be called on a \doxyref{th\_\-info}{p.}{structth__info} structure after it is no longer needed.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-info}]The \doxyref{th\_\-info}{p.}{structth__info} struct to clear. \end{DoxyParams}
\index{basefuncs@{basefuncs}!th\_\-info\_\-init@{th\_\-info\_\-init}}
\index{th\_\-info\_\-init@{th\_\-info\_\-init}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-info\_\-init}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-info\_\-init ({\bf th\_\-info} $\ast$ {\em \_\-info})}\label{group__basefuncs_ga430d9c605816a6ca0bdce3a0b965b926}
Initializes a \doxyref{th\_\-info}{p.}{structth__info} structure. This should be called on a freshly allocated \doxyref{th\_\-info}{p.}{structth__info} structure before attempting to use it.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-info}]The \doxyref{th\_\-info}{p.}{structth__info} struct to initialize. \end{DoxyParams}
\index{basefuncs@{basefuncs}!th\_\-packet\_\-isheader@{th\_\-packet\_\-isheader}}
\index{th\_\-packet\_\-isheader@{th\_\-packet\_\-isheader}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-packet\_\-isheader}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-packet\_\-isheader (ogg\_\-packet $\ast$ {\em \_\-op})}\label{group__basefuncs_ga02f3f38261a9b39452d8a5e6f8737cc1}
Determines whether a Theora packet is a header or not. This function does no verification beyond checking the packet type bit, so it should not be used for bitstream identification; use \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50} for that. As per the Theora specification, an empty (0-\/byte) packet is treated as a data packet (a delta frame with no coded blocks).
\begin{DoxyParams}{Parameters}
\item[{\em \_\-op}]An {\ttfamily ogg\_\-packet} containing encoded Theora data. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 1}]The packet is a header packet \item[{\em 0}]The packet is a video data packet. \end{DoxyRetVals}
\index{basefuncs@{basefuncs}!th\_\-packet\_\-iskeyframe@{th\_\-packet\_\-iskeyframe}}
\index{th\_\-packet\_\-iskeyframe@{th\_\-packet\_\-iskeyframe}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-packet\_\-iskeyframe}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-packet\_\-iskeyframe (ogg\_\-packet $\ast$ {\em \_\-op})}\label{group__basefuncs_gafe95cfd06f0fef413266c9168a66248a}
Determines whether a theora packet is a key frame or not. This function does no verification beyond checking the packet type and key frame bits, so it should not be used for bitstream identification; use \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50} for that. As per the Theora specification, an empty (0-\/byte) packet is treated as a delta frame (with no coded blocks).
\begin{DoxyParams}{Parameters}
\item[{\em \_\-op}]An {\ttfamily ogg\_\-packet} containing encoded Theora data. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 1}]The packet contains a key frame. \item[{\em 0}]The packet contains a delta frame. \item[{\em -\/1}]The packet is not a video data packet. \end{DoxyRetVals}
\index{basefuncs@{basefuncs}!th\_\-version\_\-number@{th\_\-version\_\-number}}
\index{th\_\-version\_\-number@{th\_\-version\_\-number}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-version\_\-number}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t th\_\-version\_\-number (void)}\label{group__basefuncs_gab723a75c0f95b3eb817f7f769846016b}
Retrieves the library version number. This is the highest bitstream version that the encoder library will produce, or that the decoder library can decode. This number is composed of a 16-\/bit major version, 8-\/bit minor version and 8 bit sub-\/version, composed as follows:
\begin{DoxyCode}
(VERSION_MAJOR<<16)+(VERSION_MINOR<<8)+(VERSION_SUBMINOR)
\end{DoxyCode}
\begin{DoxyReturn}{Returns}
the version number.
\end{DoxyReturn}
\index{basefuncs@{basefuncs}!th\_\-version\_\-string@{th\_\-version\_\-string}}
\index{th\_\-version\_\-string@{th\_\-version\_\-string}!basefuncs@{basefuncs}}
\subsubsection[{th\_\-version\_\-string}]{\setlength{\rightskip}{0pt plus 5cm}const char$\ast$ th\_\-version\_\-string (void)}\label{group__basefuncs_ga04846066738d9f2024fc9961162b2dbc}
Retrieves a human-\/readable string to identify the library vendor and version. \begin{DoxyReturn}{Returns}
the version string.
\end{DoxyReturn}

View file

@ -0,0 +1,111 @@
\section{Functions for Decoding}
\label{group__decfuncs}\index{Functions for Decoding@{Functions for Decoding}}
\subsection*{Functions for decoding}
\label{_amgrp9d29c94aa62f20426aa5ff062c7daedd}
You must link to {\ttfamily libtheoradec} if you use any of the functions in this section.
The functions are listed in the order they are used in a typical decode. The basic steps are:
\begin{DoxyItemize}
\item Parse the header packets by repeatedly calling \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50}.
\item Allocate a \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle with \doxyref{th\_\-decode\_\-alloc()}{p.}{group__decfuncs_ga0ef07a9a97849054aa606c595a2d807e}.
\item Call \doxyref{th\_\-setup\_\-free()}{p.}{group__decfuncs_gadef55431b68aaa59d0d7b32b2f118f27} to free any memory used for codec setup information.
\item Perform any additional decoder configuration with \doxyref{th\_\-decode\_\-ctl()}{p.}{group__decfuncs_ga1a8051958d75b1012573b6e3c8f670e1}.
\item For each video data packet:
\begin{DoxyItemize}
\item Submit the packet to the decoder via \doxyref{th\_\-decode\_\-packetin()}{p.}{group__decfuncs_ga31c814bf09b2232aff69c57ae20f04eb}.
\item Retrieve the uncompressed video data via \doxyref{th\_\-decode\_\-ycbcr\_\-out()}{p.}{group__decfuncs_gaa9cc8af63fa8540e0fc95572f259cdcb}.
\end{DoxyItemize}
\item Call \doxyref{th\_\-decode\_\-free()}{p.}{group__decfuncs_gafb6684ad8ba507b71112bc9de148e7d0} to release all decoder memory.
\end{DoxyItemize}\begin{DoxyCompactItemize}
\item
int {\bf th\_\-decode\_\-headerin} ({\bf th\_\-info} $\ast$\_\-info, {\bf th\_\-comment} $\ast$\_\-tc, {\bf th\_\-setup\_\-info} $\ast$$\ast$\_\-setup, ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Decodes the header packets of a Theora stream. \item\end{DoxyCompactList}\item
{\bf th\_\-dec\_\-ctx} $\ast$ {\bf th\_\-decode\_\-alloc} (const {\bf th\_\-info} $\ast$\_\-info, const {\bf th\_\-setup\_\-info} $\ast$\_\-setup)
\begin{DoxyCompactList}\small\item\em Allocates a decoder instance. \item\end{DoxyCompactList}\item
void {\bf th\_\-setup\_\-free} ({\bf th\_\-setup\_\-info} $\ast$\_\-setup)
\begin{DoxyCompactList}\small\item\em Releases all storage used for the decoder setup information. \item\end{DoxyCompactList}\item
int {\bf th\_\-decode\_\-ctl} ({\bf th\_\-dec\_\-ctx} $\ast$\_\-dec, int \_\-req, void $\ast$\_\-buf, size\_\-t \_\-buf\_\-sz)
\begin{DoxyCompactList}\small\item\em Decoder control function. \item\end{DoxyCompactList}\item
int {\bf th\_\-decode\_\-packetin} ({\bf th\_\-dec\_\-ctx} $\ast$\_\-dec, const ogg\_\-packet $\ast$\_\-op, ogg\_\-int64\_\-t $\ast$\_\-granpos)
\begin{DoxyCompactList}\small\item\em Submits a packet containing encoded video data to the decoder. \item\end{DoxyCompactList}\item
int {\bf th\_\-decode\_\-ycbcr\_\-out} ({\bf th\_\-dec\_\-ctx} $\ast$\_\-dec, {\bf th\_\-ycbcr\_\-buffer} \_\-ycbcr)
\begin{DoxyCompactList}\small\item\em Outputs the next available frame of decoded Y'CbCr data. \item\end{DoxyCompactList}\item
void {\bf th\_\-decode\_\-free} ({\bf th\_\-dec\_\-ctx} $\ast$\_\-dec)
\begin{DoxyCompactList}\small\item\em Frees an allocated decoder instance. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Function Documentation}
\index{decfuncs@{decfuncs}!th\_\-decode\_\-alloc@{th\_\-decode\_\-alloc}}
\index{th\_\-decode\_\-alloc@{th\_\-decode\_\-alloc}!decfuncs@{decfuncs}}
\subsubsection[{th\_\-decode\_\-alloc}]{\setlength{\rightskip}{0pt plus 5cm}{\bf th\_\-dec\_\-ctx}$\ast$ th\_\-decode\_\-alloc (const {\bf th\_\-info} $\ast$ {\em \_\-info}, \/ const {\bf th\_\-setup\_\-info} $\ast$ {\em \_\-setup})}\label{group__decfuncs_ga0ef07a9a97849054aa606c595a2d807e}
Allocates a decoder instance. {\bfseries Security Warning:} The Theora format supports very large frame sizes, potentially even larger than the address space of a 32-\/bit machine, and creating a decoder context allocates the space for several frames of data. If the allocation fails here, your program will crash, possibly at some future point because the OS kernel returned a valid memory range and will only fail when it tries to map the pages in it the first time they are used. Even if it succeeds, you may experience a denial of service if the frame size is large enough to cause excessive paging. If you are integrating libtheora in a larger application where such things are undesirable, it is highly recommended that you check the frame size in {\itshape \_\-info\/} before calling this function and refuse to decode streams where it is larger than some reasonable maximum. libtheora will not check this for you, because there may be machines that can handle such streams and applications that wish to.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-info}]A \doxyref{th\_\-info}{p.}{structth__info} struct filled via \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50}. \item[{\em \_\-setup}]A \doxyref{th\_\-setup\_\-info}{p.}{theoradec_8h_ab71cd2657455cc27d6c0127c66a89f28} handle returned via \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50}. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The initialized \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em NULL}]If the decoding parameters were invalid. \end{DoxyRetVals}
\index{decfuncs@{decfuncs}!th\_\-decode\_\-ctl@{th\_\-decode\_\-ctl}}
\index{th\_\-decode\_\-ctl@{th\_\-decode\_\-ctl}!decfuncs@{decfuncs}}
\subsubsection[{th\_\-decode\_\-ctl}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-decode\_\-ctl ({\bf th\_\-dec\_\-ctx} $\ast$ {\em \_\-dec}, \/ int {\em \_\-req}, \/ void $\ast$ {\em \_\-buf}, \/ size\_\-t {\em \_\-buf\_\-sz})}\label{group__decfuncs_ga1a8051958d75b1012573b6e3c8f670e1}
Decoder control function. This is used to provide advanced control of the decoding process.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-dec}]A \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle. \item[{\em \_\-req}]The control code to process. See \doxyref{the list of available control codes}{p.}{theoradec_8h_decctlcodes} for details. \item[{\em \_\-buf}]The parameters for this control code. \item[{\em \_\-buf\_\-sz}]The size of the parameter buffer. \end{DoxyParams}
\index{decfuncs@{decfuncs}!th\_\-decode\_\-free@{th\_\-decode\_\-free}}
\index{th\_\-decode\_\-free@{th\_\-decode\_\-free}!decfuncs@{decfuncs}}
\subsubsection[{th\_\-decode\_\-free}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-decode\_\-free ({\bf th\_\-dec\_\-ctx} $\ast$ {\em \_\-dec})}\label{group__decfuncs_gafb6684ad8ba507b71112bc9de148e7d0}
Frees an allocated decoder instance.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-dec}]A \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle. \end{DoxyParams}
\index{decfuncs@{decfuncs}!th\_\-decode\_\-headerin@{th\_\-decode\_\-headerin}}
\index{th\_\-decode\_\-headerin@{th\_\-decode\_\-headerin}!decfuncs@{decfuncs}}
\subsubsection[{th\_\-decode\_\-headerin}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-decode\_\-headerin ({\bf th\_\-info} $\ast$ {\em \_\-info}, \/ {\bf th\_\-comment} $\ast$ {\em \_\-tc}, \/ {\bf th\_\-setup\_\-info} $\ast$$\ast$ {\em \_\-setup}, \/ ogg\_\-packet $\ast$ {\em \_\-op})}\label{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50}
Decodes the header packets of a Theora stream. This should be called on the initial packets of the stream, in succession, until it returns {\ttfamily 0}, indicating that all headers have been processed, or an error is encountered. At least three header packets are required, and additional optional header packets may follow. This can be used on the first packet of any logical stream to determine if that stream is a Theora stream.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-info}]A \doxyref{th\_\-info}{p.}{structth__info} structure to fill in. This must have been previously initialized with \doxyref{th\_\-info\_\-init()}{p.}{group__basefuncs_ga430d9c605816a6ca0bdce3a0b965b926}. The application may immediately begin using the contents of this structure after the first header is decoded, though it must continue to be passed in on all subsequent calls. \item[{\em \_\-tc}]A \doxyref{th\_\-comment}{p.}{structth__comment} structure to fill in. The application may immediately begin using the contents of this structure after the second header is decoded, though it must continue to be passed in on all subsequent calls. \item[{\em \_\-setup}]Returns a pointer to additional, private setup information needed by the decoder. The contents of this pointer must be initialized to {\ttfamily NULL} on the first call, and the returned value must continue to be passed in on all subsequent calls. \item[{\em \_\-op}]An {\ttfamily ogg\_\-packet} structure which contains one of the initial packets of an Ogg logical stream. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
A positive value indicates that a Theora header was successfully processed.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]The first video data packet was encountered after all required header packets were parsed. The packet just passed in on this call should be saved and fed to \doxyref{th\_\-decode\_\-packetin()}{p.}{group__decfuncs_ga31c814bf09b2232aff69c57ae20f04eb} to begin decoding video data. \item[{\em TH\_\-EFAULT}]One of {\itshape \_\-info\/}, {\itshape \_\-tc\/}, or {\itshape \_\-setup\/} was {\ttfamily NULL}. \item[{\em TH\_\-EBADHEADER}]{\itshape \_\-op\/} was {\ttfamily NULL}, the packet was not the next header packet in the expected sequence, or the format of the header data was invalid. \item[{\em TH\_\-EVERSION}]The packet data was a Theora info header, but for a bitstream version not decodable with this version of {\ttfamily libtheoradec}. \item[{\em TH\_\-ENOTFORMAT}]The packet was not a Theora header. \end{DoxyRetVals}
\index{decfuncs@{decfuncs}!th\_\-decode\_\-packetin@{th\_\-decode\_\-packetin}}
\index{th\_\-decode\_\-packetin@{th\_\-decode\_\-packetin}!decfuncs@{decfuncs}}
\subsubsection[{th\_\-decode\_\-packetin}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-decode\_\-packetin ({\bf th\_\-dec\_\-ctx} $\ast$ {\em \_\-dec}, \/ const ogg\_\-packet $\ast$ {\em \_\-op}, \/ ogg\_\-int64\_\-t $\ast$ {\em \_\-granpos})}\label{group__decfuncs_ga31c814bf09b2232aff69c57ae20f04eb}
Submits a packet containing encoded video data to the decoder.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-dec}]A \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle. \item[{\em \_\-op}]An {\ttfamily ogg\_\-packet} containing encoded video data. \item[{\em \_\-granpos}]Returns the granule position of the decoded packet. If non-\/{\ttfamily NULL}, the granule position for this specific packet is stored in this location. This is computed incrementally from previously decoded packets. After a seek, the correct granule position must be set via \doxyref{TH\_\-DECCTL\_\-SET\_\-GRANPOS}{p.}{theoradec_8h_a1e870c654d35394f0d490045df04e0f5} for this to work properly. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success. A new decoded frame can be retrieved by calling \doxyref{th\_\-decode\_\-ycbcr\_\-out()}{p.}{group__decfuncs_gaa9cc8af63fa8540e0fc95572f259cdcb}. \item[{\em TH\_\-DUPFRAME}]The packet represented a dropped (0-\/byte) frame. The player can skip the call to \doxyref{th\_\-decode\_\-ycbcr\_\-out()}{p.}{group__decfuncs_gaa9cc8af63fa8540e0fc95572f259cdcb}, as the contents of the decoded frame buffer have not changed. \item[{\em TH\_\-EFAULT}]{\itshape \_\-dec\/} or {\itshape \_\-op\/} was {\ttfamily NULL}. \item[{\em TH\_\-EBADPACKET}]{\itshape \_\-op\/} does not contain encoded video data. \item[{\em TH\_\-EIMPL}]The video data uses bitstream features which this library does not support. \end{DoxyRetVals}
\index{decfuncs@{decfuncs}!th\_\-decode\_\-ycbcr\_\-out@{th\_\-decode\_\-ycbcr\_\-out}}
\index{th\_\-decode\_\-ycbcr\_\-out@{th\_\-decode\_\-ycbcr\_\-out}!decfuncs@{decfuncs}}
\subsubsection[{th\_\-decode\_\-ycbcr\_\-out}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-decode\_\-ycbcr\_\-out ({\bf th\_\-dec\_\-ctx} $\ast$ {\em \_\-dec}, \/ {\bf th\_\-ycbcr\_\-buffer} {\em \_\-ycbcr})}\label{group__decfuncs_gaa9cc8af63fa8540e0fc95572f259cdcb}
Outputs the next available frame of decoded Y'CbCr data. If a striped decode callback has been set with \doxyref{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}{p.}{theoradec_8h_ac95cc9e109474b0fa4bb920ab2cfdf1e}, then the application does not need to call this function.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-dec}]A \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle. \item[{\em \_\-ycbcr}]A video buffer structure to fill in. {\ttfamily libtheoradec} will fill in all the members of this structure, including the pointers to the uncompressed video data. The memory for this video data is owned by {\ttfamily libtheoradec}. It may be freed or overwritten without notification when subsequent frames are decoded. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success \item[{\em TH\_\-EFAULT}]{\itshape \_\-dec\/} or {\itshape \_\-ycbcr\/} was {\ttfamily NULL}. \end{DoxyRetVals}
\index{decfuncs@{decfuncs}!th\_\-setup\_\-free@{th\_\-setup\_\-free}}
\index{th\_\-setup\_\-free@{th\_\-setup\_\-free}!decfuncs@{decfuncs}}
\subsubsection[{th\_\-setup\_\-free}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-setup\_\-free ({\bf th\_\-setup\_\-info} $\ast$ {\em \_\-setup})}\label{group__decfuncs_gadef55431b68aaa59d0d7b32b2f118f27}
Releases all storage used for the decoder setup information. This should be called after you no longer want to create any decoders for a stream whose headers you have parsed with \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50}.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-setup}]The setup information to free. This can safely be {\ttfamily NULL}. \end{DoxyParams}

View file

@ -0,0 +1,107 @@
\section{Functions for Encoding}
\label{group__encfuncs}\index{Functions for Encoding@{Functions for Encoding}}
\subsection*{Functions for encoding}
\label{_amgrpc58fb8743a7ca83eb895d57e29e032c8}
You must link to {\ttfamily libtheoraenc} and {\ttfamily libtheoradec} if you use any of the functions in this section.
The functions are listed in the order they are used in a typical encode. The basic steps are:
\begin{DoxyItemize}
\item Fill in a \doxyref{th\_\-info}{p.}{structth__info} structure with details on the format of the video you wish to encode.
\item Allocate a \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle with \doxyref{th\_\-encode\_\-alloc()}{p.}{group__encfuncs_gaa91e47bc9dd5f6ee52045bd7b815e5a7}.
\item Perform any additional encoder configuration required with \doxyref{th\_\-encode\_\-ctl()}{p.}{group__encfuncs_ga3a427f6514dfdc01ea72172c469d51d9}.
\item Repeatedly call \doxyref{th\_\-encode\_\-flushheader()}{p.}{group__encfuncs_ga9439d61b566039d194ff782681fbc408} to retrieve all the header packets.
\item For each uncompressed frame:
\begin{DoxyItemize}
\item Submit the uncompressed frame via \doxyref{th\_\-encode\_\-ycbcr\_\-in()}{p.}{group__encfuncs_gadbe7dd66b411c2d61ab8153c15308750}
\item Repeatedly call \doxyref{th\_\-encode\_\-packetout()}{p.}{group__encfuncs_ga96d8ac1dda53187455352f99bbb5b04b} to retrieve any video data packets that are ready.
\end{DoxyItemize}
\item Call \doxyref{th\_\-encode\_\-free()}{p.}{group__encfuncs_ga36b23d216532231925c4107894204680} to release all encoder memory.
\end{DoxyItemize}\begin{DoxyCompactItemize}
\item
{\bf th\_\-enc\_\-ctx} $\ast$ {\bf th\_\-encode\_\-alloc} (const {\bf th\_\-info} $\ast$\_\-info)
\begin{DoxyCompactList}\small\item\em Allocates an encoder instance. \item\end{DoxyCompactList}\item
int {\bf th\_\-encode\_\-ctl} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc, int \_\-req, void $\ast$\_\-buf, size\_\-t \_\-buf\_\-sz)
\begin{DoxyCompactList}\small\item\em Encoder control function. \item\end{DoxyCompactList}\item
int {\bf th\_\-encode\_\-flushheader} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc, {\bf th\_\-comment} $\ast$\_\-comments, ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Outputs the next header packet. \item\end{DoxyCompactList}\item
int {\bf th\_\-encode\_\-ycbcr\_\-in} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc, {\bf th\_\-ycbcr\_\-buffer} \_\-ycbcr)
\begin{DoxyCompactList}\small\item\em Submits an uncompressed frame to the encoder. \item\end{DoxyCompactList}\item
int {\bf th\_\-encode\_\-packetout} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc, int \_\-last, ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Retrieves encoded video data packets. \item\end{DoxyCompactList}\item
void {\bf th\_\-encode\_\-free} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc)
\begin{DoxyCompactList}\small\item\em Frees an allocated encoder instance. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Function Documentation}
\index{encfuncs@{encfuncs}!th\_\-encode\_\-alloc@{th\_\-encode\_\-alloc}}
\index{th\_\-encode\_\-alloc@{th\_\-encode\_\-alloc}!encfuncs@{encfuncs}}
\subsubsection[{th\_\-encode\_\-alloc}]{\setlength{\rightskip}{0pt plus 5cm}{\bf th\_\-enc\_\-ctx}$\ast$ th\_\-encode\_\-alloc (const {\bf th\_\-info} $\ast$ {\em \_\-info})}\label{group__encfuncs_gaa91e47bc9dd5f6ee52045bd7b815e5a7}
Allocates an encoder instance.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-info}]A \doxyref{th\_\-info}{p.}{structth__info} struct filled with the desired encoding parameters. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The initialized \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em NULL}]If the encoding parameters were invalid. \end{DoxyRetVals}
\index{encfuncs@{encfuncs}!th\_\-encode\_\-ctl@{th\_\-encode\_\-ctl}}
\index{th\_\-encode\_\-ctl@{th\_\-encode\_\-ctl}!encfuncs@{encfuncs}}
\subsubsection[{th\_\-encode\_\-ctl}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-encode\_\-ctl ({\bf th\_\-enc\_\-ctx} $\ast$ {\em \_\-enc}, \/ int {\em \_\-req}, \/ void $\ast$ {\em \_\-buf}, \/ size\_\-t {\em \_\-buf\_\-sz})}\label{group__encfuncs_ga3a427f6514dfdc01ea72172c469d51d9}
Encoder control function. This is used to provide advanced control the encoding process.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-enc}]A \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \item[{\em \_\-req}]The control code to process. See \doxyref{the list of available control codes}{p.}{theoraenc_8h_encctlcodes} for details. \item[{\em \_\-buf}]The parameters for this control code. \item[{\em \_\-buf\_\-sz}]The size of the parameter buffer. \end{DoxyParams}
\index{encfuncs@{encfuncs}!th\_\-encode\_\-flushheader@{th\_\-encode\_\-flushheader}}
\index{th\_\-encode\_\-flushheader@{th\_\-encode\_\-flushheader}!encfuncs@{encfuncs}}
\subsubsection[{th\_\-encode\_\-flushheader}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-encode\_\-flushheader ({\bf th\_\-enc\_\-ctx} $\ast$ {\em \_\-enc}, \/ {\bf th\_\-comment} $\ast$ {\em \_\-comments}, \/ ogg\_\-packet $\ast$ {\em \_\-op})}\label{group__encfuncs_ga9439d61b566039d194ff782681fbc408}
Outputs the next header packet. This should be called repeatedly after encoder initialization until it returns 0 in order to get all of the header packets, in order, before encoding actual video data.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-enc}]A \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \item[{\em \_\-comments}]The metadata to place in the comment header, when it is encoded. \item[{\em \_\-op}]An {\ttfamily ogg\_\-packet} structure to fill. All of the elements of this structure will be set, including a pointer to the header data. The memory for the header data is owned by {\ttfamily libtheoraenc}, and may be invalidated when the next encoder function is called. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
A positive value indicates that a header packet was successfully produced.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]No packet was produced, and no more header packets remain. \item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\/}, {\itshape \_\-comments\/}, or {\itshape \_\-op\/} was {\ttfamily NULL}. \end{DoxyRetVals}
\index{encfuncs@{encfuncs}!th\_\-encode\_\-free@{th\_\-encode\_\-free}}
\index{th\_\-encode\_\-free@{th\_\-encode\_\-free}!encfuncs@{encfuncs}}
\subsubsection[{th\_\-encode\_\-free}]{\setlength{\rightskip}{0pt plus 5cm}void th\_\-encode\_\-free ({\bf th\_\-enc\_\-ctx} $\ast$ {\em \_\-enc})}\label{group__encfuncs_ga36b23d216532231925c4107894204680}
Frees an allocated encoder instance.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-enc}]A \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \end{DoxyParams}
\index{encfuncs@{encfuncs}!th\_\-encode\_\-packetout@{th\_\-encode\_\-packetout}}
\index{th\_\-encode\_\-packetout@{th\_\-encode\_\-packetout}!encfuncs@{encfuncs}}
\subsubsection[{th\_\-encode\_\-packetout}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-encode\_\-packetout ({\bf th\_\-enc\_\-ctx} $\ast$ {\em \_\-enc}, \/ int {\em \_\-last}, \/ ogg\_\-packet $\ast$ {\em \_\-op})}\label{group__encfuncs_ga96d8ac1dda53187455352f99bbb5b04b}
Retrieves encoded video data packets. This should be called repeatedly after each frame is submitted to flush any encoded packets, until it returns 0. The encoder will not buffer these packets as subsequent frames are compressed, so a failure to do so will result in lost video data. \begin{DoxyNote}{Note}
Currently the encoder operates in a one-\/frame-\/in, one-\/packet-\/out manner. However, this may be changed in the future.
\end{DoxyNote}
\begin{DoxyParams}{Parameters}
\item[{\em \_\-enc}]A \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \item[{\em \_\-last}]Set this flag to a non-\/zero value if no more uncompressed frames will be submitted. This ensures that a proper EOS flag is set on the last packet. \item[{\em \_\-op}]An {\ttfamily ogg\_\-packet} structure to fill. All of the elements of this structure will be set, including a pointer to the video data. The memory for the video data is owned by {\ttfamily libtheoraenc}, and may be invalidated when the next encoder function is called. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
A positive value indicates that a video data packet was successfully produced.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]No packet was produced, and no more encoded video data remains. \item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\/} or {\itshape \_\-op\/} was {\ttfamily NULL}. \end{DoxyRetVals}
\index{encfuncs@{encfuncs}!th\_\-encode\_\-ycbcr\_\-in@{th\_\-encode\_\-ycbcr\_\-in}}
\index{th\_\-encode\_\-ycbcr\_\-in@{th\_\-encode\_\-ycbcr\_\-in}!encfuncs@{encfuncs}}
\subsubsection[{th\_\-encode\_\-ycbcr\_\-in}]{\setlength{\rightskip}{0pt plus 5cm}int th\_\-encode\_\-ycbcr\_\-in ({\bf th\_\-enc\_\-ctx} $\ast$ {\em \_\-enc}, \/ {\bf th\_\-ycbcr\_\-buffer} {\em \_\-ycbcr})}\label{group__encfuncs_gadbe7dd66b411c2d61ab8153c15308750}
Submits an uncompressed frame to the encoder.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-enc}]A \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle. \item[{\em \_\-ycbcr}]A buffer of Y'CbCr data to encode. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success. \item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\/} or {\itshape \_\-ycbcr\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]The buffer size does not match the frame size the encoder was initialized with, or encoding has already completed. \end{DoxyRetVals}

View file

@ -0,0 +1,611 @@
\section{Legacy pre-\/1.0 C API}
\label{group__oldfuncs}\index{Legacy pre-\/1.0 C API@{Legacy pre-\/1.0 C API}}
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
struct {\bf yuv\_\-buffer}
\begin{DoxyCompactList}\small\item\em A YUV buffer for passing uncompressed frames to and from the codec. \item\end{DoxyCompactList}\item
struct {\bf theora\_\-info}
\begin{DoxyCompactList}\small\item\em Theora bitstream info. \item\end{DoxyCompactList}\item
struct {\bf theora\_\-state}
\begin{DoxyCompactList}\small\item\em Codec internal state and context. \item\end{DoxyCompactList}\item
struct {\bf theora\_\-comment}
\begin{DoxyCompactList}\small\item\em Comment header metadata. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Files}
\begin{DoxyCompactItemize}
\item
file {\bf theora.h}
\begin{DoxyCompactList}\small\item\em The libtheora pre-\/1.0 legacy C API. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Defines}
\begin{DoxyCompactItemize}
\item
\#define {\bf OC\_\-FAULT}~-\/1
\begin{DoxyCompactList}\small\item\em General failure. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-EINVAL}~-\/10
\begin{DoxyCompactList}\small\item\em Library encountered invalid internal data. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-DISABLED}~-\/11
\begin{DoxyCompactList}\small\item\em Requested action is disabled. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-BADHEADER}~-\/20
\begin{DoxyCompactList}\small\item\em Header packet was corrupt/invalid. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-NOTFORMAT}~-\/21
\begin{DoxyCompactList}\small\item\em Packet is not a theora packet. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-VERSION}~-\/22
\begin{DoxyCompactList}\small\item\em Bitstream version is not handled. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-IMPL}~-\/23
\begin{DoxyCompactList}\small\item\em Feature or action not implemented. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-BADPACKET}~-\/24
\begin{DoxyCompactList}\small\item\em Packet is corrupt. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-NEWPACKET}~-\/25
\begin{DoxyCompactList}\small\item\em Packet is an (ignorable) unhandled extension. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-DUPFRAME}~1
\begin{DoxyCompactList}\small\item\em Packet is a dropped frame. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Enumerations}
\begin{DoxyCompactItemize}
\item
enum {\bf theora\_\-colorspace} \{ {\bf OC\_\-CS\_\-UNSPECIFIED},
{\bf OC\_\-CS\_\-ITU\_\-REC\_\-470M},
{\bf OC\_\-CS\_\-ITU\_\-REC\_\-470BG},
{\bf OC\_\-CS\_\-NSPACES}
\}
\begin{DoxyCompactList}\small\item\em A Colorspace. \item\end{DoxyCompactList}\item
enum {\bf theora\_\-pixelformat} \{ {\bf OC\_\-PF\_\-420},
{\bf OC\_\-PF\_\-RSVD},
{\bf OC\_\-PF\_\-422},
{\bf OC\_\-PF\_\-444}
\}
\begin{DoxyCompactList}\small\item\em A Chroma subsampling. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item
const char $\ast$ {\bf theora\_\-version\_\-string} (void)
\begin{DoxyCompactList}\small\item\em Retrieve a human-\/readable string to identify the encoder vendor and version. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf theora\_\-version\_\-number} (void)
\begin{DoxyCompactList}\small\item\em Retrieve a 32-\/bit version number. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-init} ({\bf theora\_\-state} $\ast$th, {\bf theora\_\-info} $\ast$ti)
\begin{DoxyCompactList}\small\item\em Initialize the theora encoder. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-YUVin} ({\bf theora\_\-state} $\ast$t, {\bf yuv\_\-buffer} $\ast$yuv)
\begin{DoxyCompactList}\small\item\em Submit a YUV buffer to the theora encoder. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-packetout} ({\bf theora\_\-state} $\ast$t, int last\_\-p, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Request the next packet of encoded video. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-header} ({\bf theora\_\-state} $\ast$t, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Request a packet containing the initial header. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-comment} ({\bf theora\_\-comment} $\ast$tc, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Request a comment header packet from provided metadata. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-tables} ({\bf theora\_\-state} $\ast$t, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Request a packet containing the codebook tables for the stream. \item\end{DoxyCompactList}\item
int {\bf theora\_\-decode\_\-header} ({\bf theora\_\-info} $\ast$ci, {\bf theora\_\-comment} $\ast$cc, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Decode an Ogg packet, with the expectation that the packet contains an initial header, comment data or codebook tables. \item\end{DoxyCompactList}\item
int {\bf theora\_\-decode\_\-init} ({\bf theora\_\-state} $\ast$th, {\bf theora\_\-info} $\ast$c)
\begin{DoxyCompactList}\small\item\em Initialize a \doxyref{theora\_\-state}{p.}{structtheora__state} handle for decoding. \item\end{DoxyCompactList}\item
int {\bf theora\_\-decode\_\-packetin} ({\bf theora\_\-state} $\ast$th, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Input a packet containing encoded data into the theora decoder. \item\end{DoxyCompactList}\item
int {\bf theora\_\-decode\_\-YUVout} ({\bf theora\_\-state} $\ast$th, {\bf yuv\_\-buffer} $\ast$yuv)
\begin{DoxyCompactList}\small\item\em Output the next available frame of decoded YUV data. \item\end{DoxyCompactList}\item
int {\bf theora\_\-packet\_\-isheader} (ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Report whether a theora packet is a header or not This function does no verification beyond checking the header flag bit so it should not be used for bitstream identification; use \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} for that. \item\end{DoxyCompactList}\item
int {\bf theora\_\-packet\_\-iskeyframe} (ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Report whether a theora packet is a keyframe or not. \item\end{DoxyCompactList}\item
int {\bf theora\_\-granule\_\-shift} ({\bf theora\_\-info} $\ast$ti)
\begin{DoxyCompactList}\small\item\em Report the granulepos shift radix. \item\end{DoxyCompactList}\item
ogg\_\-int64\_\-t {\bf theora\_\-granule\_\-frame} ({\bf theora\_\-state} $\ast$th, ogg\_\-int64\_\-t granulepos)
\begin{DoxyCompactList}\small\item\em Convert a granulepos to an absolute frame index, starting at 0. \item\end{DoxyCompactList}\item
double {\bf theora\_\-granule\_\-time} ({\bf theora\_\-state} $\ast$th, ogg\_\-int64\_\-t granulepos)
\begin{DoxyCompactList}\small\item\em Convert a granulepos to absolute time in seconds. \item\end{DoxyCompactList}\item
void {\bf theora\_\-info\_\-init} ({\bf theora\_\-info} $\ast$c)
\begin{DoxyCompactList}\small\item\em Initialize a \doxyref{theora\_\-info}{p.}{structtheora__info} structure. \item\end{DoxyCompactList}\item
void {\bf theora\_\-info\_\-clear} ({\bf theora\_\-info} $\ast$c)
\begin{DoxyCompactList}\small\item\em Clear a \doxyref{theora\_\-info}{p.}{structtheora__info} structure. \item\end{DoxyCompactList}\item
void {\bf theora\_\-clear} ({\bf theora\_\-state} $\ast$t)
\begin{DoxyCompactList}\small\item\em Free all internal data associated with a \doxyref{theora\_\-state}{p.}{structtheora__state} handle. \item\end{DoxyCompactList}\item
void {\bf theora\_\-comment\_\-init} ({\bf theora\_\-comment} $\ast$tc)
\begin{DoxyCompactList}\small\item\em Initialize an allocated \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure. \item\end{DoxyCompactList}\item
void {\bf theora\_\-comment\_\-add} ({\bf theora\_\-comment} $\ast$tc, char $\ast$comment)
\begin{DoxyCompactList}\small\item\em Add a comment to an initialized \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure. \item\end{DoxyCompactList}\item
void {\bf theora\_\-comment\_\-add\_\-tag} ({\bf theora\_\-comment} $\ast$tc, char $\ast$tag, char $\ast$value)
\begin{DoxyCompactList}\small\item\em Add a comment to an initialized \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure. \item\end{DoxyCompactList}\item
char $\ast$ {\bf theora\_\-comment\_\-query} ({\bf theora\_\-comment} $\ast$tc, char $\ast$tag, int count)
\begin{DoxyCompactList}\small\item\em Look up a comment value by tag. \item\end{DoxyCompactList}\item
int {\bf theora\_\-comment\_\-query\_\-count} ({\bf theora\_\-comment} $\ast$tc, char $\ast$tag)
\begin{DoxyCompactList}\small\item\em Look up the number of instances of a tag. \item\end{DoxyCompactList}\item
void {\bf theora\_\-comment\_\-clear} ({\bf theora\_\-comment} $\ast$tc)
\begin{DoxyCompactList}\small\item\em Clear an allocated \doxyref{theora\_\-comment}{p.}{structtheora__comment} struct so that it can be freed. \item\end{DoxyCompactList}\item
int {\bf theora\_\-control} ({\bf theora\_\-state} $\ast$th, int req, void $\ast$buf, size\_\-t buf\_\-sz)
\begin{DoxyCompactList}\small\item\em Encoder control function. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{theora\_\-control() codes}
\label{_amgrp13fd61986cff4566fe89a40e30b74ad9}
\begin{DoxyCompactItemize}
\item
\#define {\bf TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}~(1)
\begin{DoxyCompactList}\small\item\em Get the maximum post-\/processing level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-PPLEVEL}~(3)
\begin{DoxyCompactList}\small\item\em Set the post-\/processing level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}~(4)
\begin{DoxyCompactList}\small\item\em Sets the maximum distance between key frames. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-GRANPOS}~(5)
\begin{DoxyCompactList}\small\item\em Set the granule position. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}~(2)
\begin{DoxyCompactList}\small\item\em Sets the quantization parameters to use. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}~(10)
\begin{DoxyCompactList}\small\item\em Disables any encoder features that would prevent lossless transcoding back to VP3. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}~(12)
\begin{DoxyCompactList}\small\item\em Gets the maximum speed level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}~(14)
\begin{DoxyCompactList}\small\item\em Sets the speed level. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Define Documentation}
\index{oldfuncs@{oldfuncs}!OC\_\-BADHEADER@{OC\_\-BADHEADER}}
\index{OC\_\-BADHEADER@{OC\_\-BADHEADER}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-BADHEADER}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-BADHEADER~-\/20}\label{group__oldfuncs_ga809cbad2eb36be17a235a3cadfb737ba}
Header packet was corrupt/invalid. \index{oldfuncs@{oldfuncs}!OC\_\-BADPACKET@{OC\_\-BADPACKET}}
\index{OC\_\-BADPACKET@{OC\_\-BADPACKET}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-BADPACKET}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-BADPACKET~-\/24}\label{group__oldfuncs_ga117774c062a63dfad2a5b4d092fa2bb1}
Packet is corrupt. \index{oldfuncs@{oldfuncs}!OC\_\-DISABLED@{OC\_\-DISABLED}}
\index{OC\_\-DISABLED@{OC\_\-DISABLED}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-DISABLED}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-DISABLED~-\/11}\label{group__oldfuncs_ga38b9fa0af856d5930c534db26e2ac2d1}
Requested action is disabled. \index{oldfuncs@{oldfuncs}!OC\_\-DUPFRAME@{OC\_\-DUPFRAME}}
\index{OC\_\-DUPFRAME@{OC\_\-DUPFRAME}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-DUPFRAME}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-DUPFRAME~1}\label{group__oldfuncs_ga84a8d2f5080ad62b415a4e7551941cbb}
Packet is a dropped frame. \index{oldfuncs@{oldfuncs}!OC\_\-EINVAL@{OC\_\-EINVAL}}
\index{OC\_\-EINVAL@{OC\_\-EINVAL}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-EINVAL}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-EINVAL~-\/10}\label{group__oldfuncs_ga43d15091b1a03a734a124e9a04d3be55}
Library encountered invalid internal data. \index{oldfuncs@{oldfuncs}!OC\_\-FAULT@{OC\_\-FAULT}}
\index{OC\_\-FAULT@{OC\_\-FAULT}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-FAULT}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-FAULT~-\/1}\label{group__oldfuncs_gaa4370e13ed3aea6441ccf69dcab2506e}
General failure. \index{oldfuncs@{oldfuncs}!OC\_\-IMPL@{OC\_\-IMPL}}
\index{OC\_\-IMPL@{OC\_\-IMPL}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-IMPL}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-IMPL~-\/23}\label{group__oldfuncs_ga895dc2597b3bf9c97bf7701c6eff5b0c}
Feature or action not implemented. \index{oldfuncs@{oldfuncs}!OC\_\-NEWPACKET@{OC\_\-NEWPACKET}}
\index{OC\_\-NEWPACKET@{OC\_\-NEWPACKET}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-NEWPACKET}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-NEWPACKET~-\/25}\label{group__oldfuncs_ga60be4dc92c933eac3542bce3ce076496}
Packet is an (ignorable) unhandled extension. \index{oldfuncs@{oldfuncs}!OC\_\-NOTFORMAT@{OC\_\-NOTFORMAT}}
\index{OC\_\-NOTFORMAT@{OC\_\-NOTFORMAT}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-NOTFORMAT}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-NOTFORMAT~-\/21}\label{group__oldfuncs_ga9558d6d9eacd2273c8da27f945d725ad}
Packet is not a theora packet. \index{oldfuncs@{oldfuncs}!OC\_\-VERSION@{OC\_\-VERSION}}
\index{OC\_\-VERSION@{OC\_\-VERSION}!oldfuncs@{oldfuncs}}
\subsubsection[{OC\_\-VERSION}]{\setlength{\rightskip}{0pt plus 5cm}\#define OC\_\-VERSION~-\/22}\label{group__oldfuncs_ga4611cfd61160405721d1e2ab0ec2564b}
Bitstream version is not handled. \index{oldfuncs@{oldfuncs}!TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX@{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}}
\index{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX@{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}!oldfuncs@{oldfuncs}}
\subsubsection[{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX~(1)}\label{group__oldfuncs_gab31f251c9319f2140d247585d30b3d07}
Get the maximum post-\/processing level. The decoder supports a post-\/processing filter that can improve the appearance of the decoded images. This returns the highest level setting for this post-\/processor, corresponding to maximum improvement and computational expense. \index{oldfuncs@{oldfuncs}!TH\_\-DECCTL\_\-SET\_\-GRANPOS@{TH\_\-DECCTL\_\-SET\_\-GRANPOS}}
\index{TH\_\-DECCTL\_\-SET\_\-GRANPOS@{TH\_\-DECCTL\_\-SET\_\-GRANPOS}!oldfuncs@{oldfuncs}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-GRANPOS}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-GRANPOS~(5)}\label{group__oldfuncs_ga1e870c654d35394f0d490045df04e0f5}
Set the granule position. Call this after a seek, to update the internal granulepos in the decoder, to insure that subsequent frames are marked properly. If you track timestamps yourself and do not use the granule postion returned by the decoder, then you do not need to use this control. \index{oldfuncs@{oldfuncs}!TH\_\-DECCTL\_\-SET\_\-PPLEVEL@{TH\_\-DECCTL\_\-SET\_\-PPLEVEL}}
\index{TH\_\-DECCTL\_\-SET\_\-PPLEVEL@{TH\_\-DECCTL\_\-SET\_\-PPLEVEL}!oldfuncs@{oldfuncs}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-PPLEVEL}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-PPLEVEL~(3)}\label{group__oldfuncs_ga87774c35e1a755a84e2d705b38ebef0d}
Set the post-\/processing level. Sets the level of post-\/processing to use when decoding the compressed stream. This must be a value between zero (off) and the maximum returned by TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX. \index{oldfuncs@{oldfuncs}!TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX@{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}}
\index{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX@{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}!oldfuncs@{oldfuncs}}
\subsubsection[{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX~(12)}\label{group__oldfuncs_ga9baf5bdd206e80c78a8fd44687e89783}
Gets the maximum speed level. Higher speed levels favor quicker encoding over better quality per bit. Depending on the encoding mode, and the internal algorithms used, quality may actually improve, but in this case bitrate will also likely increase. In any case, overall rate/distortion performance will probably decrease. The maximum value, and the meaning of each value, may change depending on the current encoding mode (VBR vs. CQI, etc.).
\begin{DoxyParams}{Parameters}
\item[\mbox{$\rightarrow$} {\em buf}]int: The maximum encoding speed level. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em OC\_\-FAULT}]{\itshape \doxyref{theora\_\-state}{p.}{structtheora__state}\/} or {\itshape buf\/} is {\ttfamily NULL}. \item[{\em OC\_\-EINVAL}]{\itshape buf\_\-sz\/} is not {\ttfamily sizeof(int)}. \item[{\em OC\_\-IMPL}]Not supported by this implementation in the current encoding mode. \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE@{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}}
\index{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE@{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}!oldfuncs@{oldfuncs}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE~(4)}\label{group__oldfuncs_ga27e755e15b4b5604c54974b304037a49}
Sets the maximum distance between key frames. This can be changed during an encode, but will be bounded by {\ttfamily 1$<$$<$\doxyref{th\_\-info::keyframe\_\-granule\_\-shift}{p.}{structth__info_a693ca4ab11fbc0c3f32594b4bb8766ed}}. If it is set before encoding begins, \doxyref{th\_\-info::keyframe\_\-granule\_\-shift}{p.}{structth__info_a693ca4ab11fbc0c3f32594b4bb8766ed} will be enlarged appropriately.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em buf}]{\ttfamily ogg\_\-uint32\_\-t}: The maximum distance between key frames. \item[\mbox{$\rightarrow$} {\em buf}]{\ttfamily ogg\_\-uint32\_\-t}: The actual maximum distance set. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em OC\_\-FAULT}]{\itshape \doxyref{theora\_\-state}{p.}{structtheora__state}\/} or {\itshape buf\/} is {\ttfamily NULL}. \item[{\em OC\_\-EINVAL}]{\itshape buf\_\-sz\/} is not {\ttfamily sizeof(ogg\_\-uint32\_\-t)}. \item[{\em OC\_\-IMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS@{TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}}
\index{TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS@{TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}!oldfuncs@{oldfuncs}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS~(2)}\label{group__oldfuncs_ga3befcdd66678f8d27034f9c4b16d1b9c}
Sets the quantization parameters to use. \label{group__oldfuncs_encctlcodes_old}
The parameters are copied, not stored by reference, so they can be freed after this call. {\ttfamily NULL} may be specified to revert to the default parameters.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em buf}]\doxyref{th\_\-quant\_\-info}{p.}{structth__quant__info} \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em OC\_\-FAULT}]{\itshape \doxyref{theora\_\-state}{p.}{structtheora__state}\/} is {\ttfamily NULL}. \item[{\em OC\_\-EINVAL}]Encoding has already begun, the quantization parameters are not acceptable to this version of the encoder, {\itshape buf\/} is {\ttfamily NULL} and {\itshape buf\_\-sz\/} is not zero, or {\itshape buf\/} is non-\/{\ttfamily NULL} and {\itshape buf\_\-sz\/} is not {\ttfamily sizeof(\doxyref{th\_\-quant\_\-info}{p.}{structth__quant__info})}. \item[{\em OC\_\-IMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!TH\_\-ENCCTL\_\-SET\_\-SPLEVEL@{TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}}
\index{TH\_\-ENCCTL\_\-SET\_\-SPLEVEL@{TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}!oldfuncs@{oldfuncs}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-SPLEVEL~(14)}\label{group__oldfuncs_gabd9fbcb6a25a77d991d3620164fe59d6}
Sets the speed level. By default a speed value of 1 is used.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em buf}]int: The new encoding speed level. 0 is slowest, larger values use less CPU. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em OC\_\-FAULT}]{\itshape \doxyref{theora\_\-state}{p.}{structtheora__state}\/} or {\itshape buf\/} is {\ttfamily NULL}. \item[{\em OC\_\-EINVAL}]{\itshape buf\_\-sz\/} is not {\ttfamily sizeof(int)}, or the encoding speed level is out of bounds. The maximum encoding speed level may be implementation-\/ and encoding mode-\/specific, and can be obtained via \doxyref{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}{p.}{theoraenc_8h_a9baf5bdd206e80c78a8fd44687e89783}. \item[{\em OC\_\-IMPL}]Not supported by this implementation in the current encoding mode. \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE@{TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}}
\index{TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE@{TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}!oldfuncs@{oldfuncs}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE~(10)}\label{group__oldfuncs_ga382d685a39a34d8e6ba76b00d804efd8}
Disables any encoder features that would prevent lossless transcoding back to VP3. This primarily means disabling block-\/level QI values and not using 4MV mode when any of the luma blocks in a macro block are not coded. It also includes using the VP3 quantization tables and Huffman codes; if you set them explicitly after calling this function, the resulting stream will not be VP3-\/compatible. If you enable VP3-\/compatibility when encoding 4:2:2 or 4:4:4 source material, or when using a picture region smaller than the full frame (e.g. a non-\/multiple-\/of-\/16 width or height), then non-\/VP3 bitstream features will still be disabled, but the stream will still not be VP3-\/compatible, as VP3 was not capable of encoding such formats. If you call this after encoding has already begun, then the quantization tables and codebooks cannot be changed, but the frame-\/level features will be enabled or disabled as requested.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em buf}]{\ttfamily int}: a non-\/zero value to enable VP3 compatibility, or 0 to disable it (the default). \item[\mbox{$\rightarrow$} {\em buf}]{\ttfamily int}: 1 if all bitstream features required for VP3-\/compatibility could be set, and 0 otherwise. The latter will be returned if the pixel format is not 4:2:0, the picture region is smaller than the full frame, or if encoding has begun, preventing the quantization tables and codebooks from being set. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em OC\_\-FAULT}]{\itshape \doxyref{theora\_\-state}{p.}{structtheora__state}\/} or {\itshape buf\/} is {\ttfamily NULL}. \item[{\em OC\_\-EINVAL}]{\itshape buf\_\-sz\/} is not {\ttfamily sizeof(int)}. \item[{\em OC\_\-IMPL}]Not supported by this implementation. \end{DoxyRetVals}
\subsection{Enumeration Type Documentation}
\index{oldfuncs@{oldfuncs}!theora\_\-colorspace@{theora\_\-colorspace}}
\index{theora\_\-colorspace@{theora\_\-colorspace}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-colorspace}]{\setlength{\rightskip}{0pt plus 5cm}enum {\bf theora\_\-colorspace}}\label{group__oldfuncs_gaa567da4ce591f7373149ce3ef3acdac9}
A Colorspace. \begin{Desc}
\item[Enumerator: ]\par
\begin{description}
\index{OC\_\-CS\_\-UNSPECIFIED@{OC\_\-CS\_\-UNSPECIFIED}!oldfuncs@{oldfuncs}}\index{oldfuncs@{oldfuncs}!OC\_\-CS\_\-UNSPECIFIED@{OC\_\-CS\_\-UNSPECIFIED}}\item[{\em
OC\_\-CS\_\-UNSPECIFIED\label{group__oldfuncs_ggaa567da4ce591f7373149ce3ef3acdac9abf217cf83d7d7cbf73295e6689f5cf5f}
}]The colorspace is unknown or unspecified. \index{OC\_\-CS\_\-ITU\_\-REC\_\-470M@{OC\_\-CS\_\-ITU\_\-REC\_\-470M}!oldfuncs@{oldfuncs}}\index{oldfuncs@{oldfuncs}!OC\_\-CS\_\-ITU\_\-REC\_\-470M@{OC\_\-CS\_\-ITU\_\-REC\_\-470M}}\item[{\em
OC\_\-CS\_\-ITU\_\-REC\_\-470M\label{group__oldfuncs_ggaa567da4ce591f7373149ce3ef3acdac9ab20c9851a21ab148fef0bf2c00c0a294}
}]This is the best option for 'NTSC' content. \index{OC\_\-CS\_\-ITU\_\-REC\_\-470BG@{OC\_\-CS\_\-ITU\_\-REC\_\-470BG}!oldfuncs@{oldfuncs}}\index{oldfuncs@{oldfuncs}!OC\_\-CS\_\-ITU\_\-REC\_\-470BG@{OC\_\-CS\_\-ITU\_\-REC\_\-470BG}}\item[{\em
OC\_\-CS\_\-ITU\_\-REC\_\-470BG\label{group__oldfuncs_ggaa567da4ce591f7373149ce3ef3acdac9a04f8fa2da26f9ec513f514163705666a}
}]This is the best option for 'PAL' content. \index{OC\_\-CS\_\-NSPACES@{OC\_\-CS\_\-NSPACES}!oldfuncs@{oldfuncs}}\index{oldfuncs@{oldfuncs}!OC\_\-CS\_\-NSPACES@{OC\_\-CS\_\-NSPACES}}\item[{\em
OC\_\-CS\_\-NSPACES\label{group__oldfuncs_ggaa567da4ce591f7373149ce3ef3acdac9a640b572f11fa7102d434e1c605aaa186}
}]This marks the end of the defined colorspaces. \end{description}
\end{Desc}
\index{oldfuncs@{oldfuncs}!theora\_\-pixelformat@{theora\_\-pixelformat}}
\index{theora\_\-pixelformat@{theora\_\-pixelformat}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-pixelformat}]{\setlength{\rightskip}{0pt plus 5cm}enum {\bf theora\_\-pixelformat}}\label{group__oldfuncs_gae169da05bfaaf4e964a6866552d45079}
A Chroma subsampling. These enumerate the available chroma subsampling options supported by the theora format. See Section 4.4 of the specification for exact definitions. \begin{Desc}
\item[Enumerator: ]\par
\begin{description}
\index{OC\_\-PF\_\-420@{OC\_\-PF\_\-420}!oldfuncs@{oldfuncs}}\index{oldfuncs@{oldfuncs}!OC\_\-PF\_\-420@{OC\_\-PF\_\-420}}\item[{\em
OC\_\-PF\_\-420\label{group__oldfuncs_ggae169da05bfaaf4e964a6866552d45079a4e451af01be2645511b0e431f5225d2b}
}]Chroma subsampling by 2 in each direction (4:2:0). \index{OC\_\-PF\_\-RSVD@{OC\_\-PF\_\-RSVD}!oldfuncs@{oldfuncs}}\index{oldfuncs@{oldfuncs}!OC\_\-PF\_\-RSVD@{OC\_\-PF\_\-RSVD}}\item[{\em
OC\_\-PF\_\-RSVD\label{group__oldfuncs_ggae169da05bfaaf4e964a6866552d45079a7d21c63341ad299766839c83ed1216eb}
}]Reserved value. \index{OC\_\-PF\_\-422@{OC\_\-PF\_\-422}!oldfuncs@{oldfuncs}}\index{oldfuncs@{oldfuncs}!OC\_\-PF\_\-422@{OC\_\-PF\_\-422}}\item[{\em
OC\_\-PF\_\-422\label{group__oldfuncs_ggae169da05bfaaf4e964a6866552d45079a36a88c55b7ddd5aedeac2d61d57fee5b}
}]Horizonatal chroma subsampling by 2 (4:2:2). \index{OC\_\-PF\_\-444@{OC\_\-PF\_\-444}!oldfuncs@{oldfuncs}}\index{oldfuncs@{oldfuncs}!OC\_\-PF\_\-444@{OC\_\-PF\_\-444}}\item[{\em
OC\_\-PF\_\-444\label{group__oldfuncs_ggae169da05bfaaf4e964a6866552d45079a1d5c6d1b0365e06b4a87880b7825f044}
}]No chroma subsampling at all (4:4:4). \end{description}
\end{Desc}
\subsection{Function Documentation}
\index{oldfuncs@{oldfuncs}!theora\_\-clear@{theora\_\-clear}}
\index{theora\_\-clear@{theora\_\-clear}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-clear}]{\setlength{\rightskip}{0pt plus 5cm}void theora\_\-clear ({\bf theora\_\-state} $\ast$ {\em t})}\label{group__oldfuncs_gab252d5d81b925136dda72e8f1c09c5eb}
Free all internal data associated with a \doxyref{theora\_\-state}{p.}{structtheora__state} handle.
\begin{DoxyParams}{Parameters}
\item[{\em t}]A \doxyref{theora\_\-state}{p.}{structtheora__state} handle. \end{DoxyParams}
\index{oldfuncs@{oldfuncs}!theora\_\-comment\_\-add@{theora\_\-comment\_\-add}}
\index{theora\_\-comment\_\-add@{theora\_\-comment\_\-add}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-comment\_\-add}]{\setlength{\rightskip}{0pt plus 5cm}void theora\_\-comment\_\-add ({\bf theora\_\-comment} $\ast$ {\em tc}, \/ char $\ast$ {\em comment})}\label{group__oldfuncs_ga650642ed23894e41109bbc42ec393ed4}
Add a comment to an initialized \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure.
\begin{DoxyParams}{Parameters}
\item[{\em tc}]A previously initialized theora comment structure \item[{\em comment}]A null-\/terminated string encoding the comment in the form \char`\"{}TAG=the value\char`\"{}\end{DoxyParams}
Neither \doxyref{theora\_\-comment\_\-add()}{p.}{group__oldfuncs_ga650642ed23894e41109bbc42ec393ed4} nor \doxyref{theora\_\-comment\_\-add\_\-tag()}{p.}{group__oldfuncs_ga339bd80b5bf4bb168b7052d8ec0b5a92} support comments containing null values, although the bitstream format supports this. To add such comments you will need to manipulate the \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure directly. \index{oldfuncs@{oldfuncs}!theora\_\-comment\_\-add\_\-tag@{theora\_\-comment\_\-add\_\-tag}}
\index{theora\_\-comment\_\-add\_\-tag@{theora\_\-comment\_\-add\_\-tag}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-comment\_\-add\_\-tag}]{\setlength{\rightskip}{0pt plus 5cm}void theora\_\-comment\_\-add\_\-tag ({\bf theora\_\-comment} $\ast$ {\em tc}, \/ char $\ast$ {\em tag}, \/ char $\ast$ {\em value})}\label{group__oldfuncs_ga339bd80b5bf4bb168b7052d8ec0b5a92}
Add a comment to an initialized \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure.
\begin{DoxyParams}{Parameters}
\item[{\em tc}]A previously initialized theora comment structure \item[{\em tag}]A null-\/terminated string containing the tag associated with the comment. \item[{\em value}]The corresponding value as a null-\/terminated string\end{DoxyParams}
Neither \doxyref{theora\_\-comment\_\-add()}{p.}{group__oldfuncs_ga650642ed23894e41109bbc42ec393ed4} nor \doxyref{theora\_\-comment\_\-add\_\-tag()}{p.}{group__oldfuncs_ga339bd80b5bf4bb168b7052d8ec0b5a92} support comments containing null values, although the bitstream format supports this. To add such comments you will need to manipulate the \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure directly. \index{oldfuncs@{oldfuncs}!theora\_\-comment\_\-clear@{theora\_\-comment\_\-clear}}
\index{theora\_\-comment\_\-clear@{theora\_\-comment\_\-clear}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-comment\_\-clear}]{\setlength{\rightskip}{0pt plus 5cm}void theora\_\-comment\_\-clear ({\bf theora\_\-comment} $\ast$ {\em tc})}\label{group__oldfuncs_ga04c07c2eefba3a433e43f9fbde14719f}
Clear an allocated \doxyref{theora\_\-comment}{p.}{structtheora__comment} struct so that it can be freed.
\begin{DoxyParams}{Parameters}
\item[{\em tc}]An allocated \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure. \end{DoxyParams}
\index{oldfuncs@{oldfuncs}!theora\_\-comment\_\-init@{theora\_\-comment\_\-init}}
\index{theora\_\-comment\_\-init@{theora\_\-comment\_\-init}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-comment\_\-init}]{\setlength{\rightskip}{0pt plus 5cm}void theora\_\-comment\_\-init ({\bf theora\_\-comment} $\ast$ {\em tc})}\label{group__oldfuncs_ga811b92785df3bdbbebb3de612d9d6ce0}
Initialize an allocated \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure.
\begin{DoxyParams}{Parameters}
\item[{\em tc}]An allocated \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure \end{DoxyParams}
\index{oldfuncs@{oldfuncs}!theora\_\-comment\_\-query@{theora\_\-comment\_\-query}}
\index{theora\_\-comment\_\-query@{theora\_\-comment\_\-query}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-comment\_\-query}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ theora\_\-comment\_\-query ({\bf theora\_\-comment} $\ast$ {\em tc}, \/ char $\ast$ {\em tag}, \/ int {\em count})}\label{group__oldfuncs_ga4361f6001abb5c83c36a2ddfb648a8dc}
Look up a comment value by tag.
\begin{DoxyParams}{Parameters}
\item[{\em tc}]Tn initialized \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure \item[{\em tag}]The tag to look up \item[{\em count}]The instance of the tag. The same tag can appear multiple times, each with a distinct and ordered value, so an index is required to retrieve them all. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
A pointer to the queried tag's value
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em NULL}]No matching tag is found\end{DoxyRetVals}
\begin{DoxyNote}{Note}
Use \doxyref{theora\_\-comment\_\-query\_\-count()}{p.}{group__oldfuncs_ga10f66a3c752442a3e0c0098e0f88df8b} to get the legal range for the count parameter.
\end{DoxyNote}
\index{oldfuncs@{oldfuncs}!theora\_\-comment\_\-query\_\-count@{theora\_\-comment\_\-query\_\-count}}
\index{theora\_\-comment\_\-query\_\-count@{theora\_\-comment\_\-query\_\-count}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-comment\_\-query\_\-count}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-comment\_\-query\_\-count ({\bf theora\_\-comment} $\ast$ {\em tc}, \/ char $\ast$ {\em tag})}\label{group__oldfuncs_ga10f66a3c752442a3e0c0098e0f88df8b}
Look up the number of instances of a tag.
\begin{DoxyParams}{Parameters}
\item[{\em tc}]An initialized \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure \item[{\em tag}]The tag to look up \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The number on instances of a particular tag.
\end{DoxyReturn}
Call this first when querying for a specific tag and then interate over the number of instances with separate calls to \doxyref{theora\_\-comment\_\-query()}{p.}{group__oldfuncs_ga4361f6001abb5c83c36a2ddfb648a8dc} to retrieve all instances in order. \index{oldfuncs@{oldfuncs}!theora\_\-control@{theora\_\-control}}
\index{theora\_\-control@{theora\_\-control}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-control}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-control ({\bf theora\_\-state} $\ast$ {\em th}, \/ int {\em req}, \/ void $\ast$ {\em buf}, \/ size\_\-t {\em buf\_\-sz})}\label{group__oldfuncs_ga186773db3bc8cd550047e7df1b2ba2c9}
Encoder control function. This is used to provide advanced control the encoding process.
\begin{DoxyParams}{Parameters}
\item[{\em th}]A \doxyref{theora\_\-state}{p.}{structtheora__state} handle. \item[{\em req}]The control code to process. See \doxyref{the list of available }{p.}{group__oldfuncs_encctlcodes_old} control codes for details. \item[{\em buf}]The parameters for this control code. \item[{\em buf\_\-sz}]The size of the parameter buffer. \end{DoxyParams}
\index{oldfuncs@{oldfuncs}!theora\_\-decode\_\-header@{theora\_\-decode\_\-header}}
\index{theora\_\-decode\_\-header@{theora\_\-decode\_\-header}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-decode\_\-header}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-decode\_\-header ({\bf theora\_\-info} $\ast$ {\em ci}, \/ {\bf theora\_\-comment} $\ast$ {\em cc}, \/ ogg\_\-packet $\ast$ {\em op})}\label{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82}
Decode an Ogg packet, with the expectation that the packet contains an initial header, comment data or codebook tables.
\begin{DoxyParams}{Parameters}
\item[{\em ci}]A \doxyref{theora\_\-info}{p.}{structtheora__info} structure to fill. This must have been previously initialized with \doxyref{theora\_\-info\_\-init()}{p.}{group__oldfuncs_ga3091c87d48f1faba018c5956379a6d90}. If {\itshape op\/} contains an initial header, \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} will fill {\itshape ci\/} with the parsed header values. If {\itshape op\/} contains codebook tables, \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} will parse these and attach an internal representation to {\itshape ci-\/$>$codec\_\-setup\/}. \item[{\em cc}]A \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure to fill. If {\itshape op\/} contains comment data, \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} will fill {\itshape cc\/} with the parsed comments. \item[{\em op}]An ogg\_\-packet structure which you expect contains an initial header, comment data or codebook tables.\end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em OC\_\-BADHEADER}]{\itshape op\/} is NULL; OR the first byte of {\itshape op-\/$>$packet\/} has the signature of an initial packet, but op is not a b\_\-o\_\-s packet; OR this packet has the signature of an initial header packet, but an initial header packet has already been seen; OR this packet has the signature of a comment packet, but the initial header has not yet been seen; OR this packet has the signature of a comment packet, but contains invalid data; OR this packet has the signature of codebook tables, but the initial header or comments have not yet been seen; OR this packet has the signature of codebook tables, but contains invalid data; OR the stream being decoded has a compatible version but this packet does not have the signature of a theora initial header, comments, or codebook packet \item[{\em OC\_\-VERSION}]The packet data of {\itshape op\/} is an initial header with a version which is incompatible with this version of libtheora. \item[{\em OC\_\-NEWPACKET}]the stream being decoded has an incompatible (future) version and contains an unknown signature. \item[{\em 0}]Success\end{DoxyRetVals}
\begin{DoxyNote}{Note}
The normal usage is that \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} be called on the first three packets of a theora logical bitstream in succession.
\end{DoxyNote}
\index{oldfuncs@{oldfuncs}!theora\_\-decode\_\-init@{theora\_\-decode\_\-init}}
\index{theora\_\-decode\_\-init@{theora\_\-decode\_\-init}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-decode\_\-init}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-decode\_\-init ({\bf theora\_\-state} $\ast$ {\em th}, \/ {\bf theora\_\-info} $\ast$ {\em c})}\label{group__oldfuncs_ga264907c66003799ff77ecbd09eb33d2c}
Initialize a \doxyref{theora\_\-state}{p.}{structtheora__state} handle for decoding.
\begin{DoxyParams}{Parameters}
\item[{\em th}]The \doxyref{theora\_\-state}{p.}{structtheora__state} handle to initialize. \item[{\em c}]A \doxyref{theora\_\-info}{p.}{structtheora__info} struct filled with the desired decoding parameters. This is of course usually obtained from a previous call to \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82}. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-decode\_\-packetin@{theora\_\-decode\_\-packetin}}
\index{theora\_\-decode\_\-packetin@{theora\_\-decode\_\-packetin}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-decode\_\-packetin}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-decode\_\-packetin ({\bf theora\_\-state} $\ast$ {\em th}, \/ ogg\_\-packet $\ast$ {\em op})}\label{group__oldfuncs_gaa65a9e53b46fd54ab344bd599fa96975}
Input a packet containing encoded data into the theora decoder.
\begin{DoxyParams}{Parameters}
\item[{\em th}]A \doxyref{theora\_\-state}{p.}{structtheora__state} handle previously initialized for decoding. \item[{\em op}]An ogg\_\-packet containing encoded theora data. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success \item[{\em OC\_\-BADPACKET}]{\itshape op\/} does not contain encoded video data \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-decode\_\-YUVout@{theora\_\-decode\_\-YUVout}}
\index{theora\_\-decode\_\-YUVout@{theora\_\-decode\_\-YUVout}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-decode\_\-YUVout}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-decode\_\-YUVout ({\bf theora\_\-state} $\ast$ {\em th}, \/ {\bf yuv\_\-buffer} $\ast$ {\em yuv})}\label{group__oldfuncs_ga09d47c80e1e94bff0a46a496816b8daa}
Output the next available frame of decoded YUV data.
\begin{DoxyParams}{Parameters}
\item[{\em th}]A \doxyref{theora\_\-state}{p.}{structtheora__state} handle previously initialized for decoding. \item[{\em yuv}]A \doxyref{yuv\_\-buffer}{p.}{structyuv__buffer} in which libtheora should place the decoded data. Note that the buffer struct itself is allocated by the user, but that the luma and chroma pointers will be filled in by the library. Also note that these luma and chroma regions should be considered read-\/only by the user. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-encode\_\-comment@{theora\_\-encode\_\-comment}}
\index{theora\_\-encode\_\-comment@{theora\_\-encode\_\-comment}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-encode\_\-comment}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-encode\_\-comment ({\bf theora\_\-comment} $\ast$ {\em tc}, \/ ogg\_\-packet $\ast$ {\em op})}\label{group__oldfuncs_ga45e8db0713eaaca0f1144f3724cb834a}
Request a comment header packet from provided metadata. A pointer to the comment data is placed in a user-\/provided ogg\_\-packet structure.
\begin{DoxyParams}{Parameters}
\item[{\em tc}]A \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure filled with the desired metadata \item[{\em op}]An ogg\_\-packet structure to fill. libtheora will set all elements of this structure, including a pointer to the encoded comment data. The memory for the comment data is owned by libtheora. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-encode\_\-header@{theora\_\-encode\_\-header}}
\index{theora\_\-encode\_\-header@{theora\_\-encode\_\-header}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-encode\_\-header}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-encode\_\-header ({\bf theora\_\-state} $\ast$ {\em t}, \/ ogg\_\-packet $\ast$ {\em op})}\label{group__oldfuncs_ga451feb58d6bde726edbae193689887be}
Request a packet containing the initial header. A pointer to the header data is placed in a user-\/provided ogg\_\-packet structure.
\begin{DoxyParams}{Parameters}
\item[{\em t}]A \doxyref{theora\_\-state}{p.}{structtheora__state} handle previously initialized for encoding. \item[{\em op}]An ogg\_\-packet structure to fill. libtheora will set all elements of this structure, including a pointer to the header data. The memory for the header data is owned by libtheora. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-encode\_\-init@{theora\_\-encode\_\-init}}
\index{theora\_\-encode\_\-init@{theora\_\-encode\_\-init}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-encode\_\-init}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-encode\_\-init ({\bf theora\_\-state} $\ast$ {\em th}, \/ {\bf theora\_\-info} $\ast$ {\em ti})}\label{group__oldfuncs_ga0f7ad4d4b2343278cb4ba8fb2bd5109a}
Initialize the theora encoder.
\begin{DoxyParams}{Parameters}
\item[{\em th}]The \doxyref{theora\_\-state}{p.}{structtheora__state} handle to initialize for encoding. \item[{\em ti}]A \doxyref{theora\_\-info}{p.}{structtheora__info} struct filled with the desired encoding parameters. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-encode\_\-packetout@{theora\_\-encode\_\-packetout}}
\index{theora\_\-encode\_\-packetout@{theora\_\-encode\_\-packetout}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-encode\_\-packetout}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-encode\_\-packetout ({\bf theora\_\-state} $\ast$ {\em t}, \/ int {\em last\_\-p}, \/ ogg\_\-packet $\ast$ {\em op})}\label{group__oldfuncs_ga5f4929677a735bc2198c2309d235f1b3}
Request the next packet of encoded video. The encoded data is placed in a user-\/provided ogg\_\-packet structure.
\begin{DoxyParams}{Parameters}
\item[{\em t}]A \doxyref{theora\_\-state}{p.}{structtheora__state} handle previously initialized for encoding. \item[{\em last\_\-p}]whether this is the last packet the encoder should produce. \item[{\em op}]An ogg\_\-packet structure to fill. libtheora will set all elements of this structure, including a pointer to encoded data. The memory for the encoded data is owned by libtheora. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]No internal storage exists OR no packet is ready \item[{\em -\/1}]The encoding process has completed \item[{\em 1}]Success \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-encode\_\-tables@{theora\_\-encode\_\-tables}}
\index{theora\_\-encode\_\-tables@{theora\_\-encode\_\-tables}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-encode\_\-tables}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-encode\_\-tables ({\bf theora\_\-state} $\ast$ {\em t}, \/ ogg\_\-packet $\ast$ {\em op})}\label{group__oldfuncs_ga5085baf20855b283fa01fc948505d9d2}
Request a packet containing the codebook tables for the stream. A pointer to the codebook data is placed in a user-\/provided ogg\_\-packet structure.
\begin{DoxyParams}{Parameters}
\item[{\em t}]A \doxyref{theora\_\-state}{p.}{structtheora__state} handle previously initialized for encoding. \item[{\em op}]An ogg\_\-packet structure to fill. libtheora will set all elements of this structure, including a pointer to the codebook data. The memory for the header data is owned by libtheora. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-encode\_\-YUVin@{theora\_\-encode\_\-YUVin}}
\index{theora\_\-encode\_\-YUVin@{theora\_\-encode\_\-YUVin}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-encode\_\-YUVin}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-encode\_\-YUVin ({\bf theora\_\-state} $\ast$ {\em t}, \/ {\bf yuv\_\-buffer} $\ast$ {\em yuv})}\label{group__oldfuncs_gac0d33d896ca70cedfc94c5986d947078}
Submit a YUV buffer to the theora encoder.
\begin{DoxyParams}{Parameters}
\item[{\em t}]A \doxyref{theora\_\-state}{p.}{structtheora__state} handle previously initialized for encoding. \item[{\em yuv}]A buffer of YUV data to encode. Note that both the \doxyref{yuv\_\-buffer}{p.}{structyuv__buffer} struct and the luma/chroma buffers within should be allocated by the user. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em OC\_\-EINVAL}]Encoder is not ready, or is finished. \item[{\em -\/1}]The size of the given frame differs from those previously input \item[{\em 0}]Success \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-granule\_\-frame@{theora\_\-granule\_\-frame}}
\index{theora\_\-granule\_\-frame@{theora\_\-granule\_\-frame}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-granule\_\-frame}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-int64\_\-t theora\_\-granule\_\-frame ({\bf theora\_\-state} $\ast$ {\em th}, \/ ogg\_\-int64\_\-t {\em granulepos})}\label{group__oldfuncs_ga7bfa3ceb2fb4b41a282456c56e1dd269}
Convert a granulepos to an absolute frame index, starting at 0. The granulepos is interpreted in the context of a given \doxyref{theora\_\-state}{p.}{structtheora__state} handle.
Note that while the granulepos encodes the frame count (i.e. starting from 1) this call returns the frame index, starting from zero. Thus One can calculate the presentation time by multiplying the index by the rate.
\begin{DoxyParams}{Parameters}
\item[{\em th}]A previously initialized \doxyref{theora\_\-state}{p.}{structtheora__state} handle (encode or decode) \item[{\em granulepos}]The granulepos to convert. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The frame index corresponding to {\itshape granulepos\/}.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em -\/1}]The given granulepos is undefined (i.e. negative)\end{DoxyRetVals}
Thus function was added in the 1.0alpha4 release. \index{oldfuncs@{oldfuncs}!theora\_\-granule\_\-shift@{theora\_\-granule\_\-shift}}
\index{theora\_\-granule\_\-shift@{theora\_\-granule\_\-shift}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-granule\_\-shift}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-granule\_\-shift ({\bf theora\_\-info} $\ast$ {\em ti})}\label{group__oldfuncs_gacd9360e6a47139c761002410af457a02}
Report the granulepos shift radix. When embedded in Ogg, Theora uses a two-\/part granulepos, splitting the 64-\/bit field into two pieces. The more-\/significant section represents the frame count at the last keyframe, and the less-\/significant section represents the count of frames since the last keyframe. In this way the overall field is still non-\/decreasing with time, but usefully encodes a pointer to the last keyframe, which is necessary for correctly restarting decode after a seek.
This function reports the number of bits used to represent the distance to the last keyframe, and thus how the granulepos field must be shifted or masked to obtain the two parts.
Since libtheora returns compressed data in an ogg\_\-packet structure, this may be generally useful even if the Theora packets are not being used in an Ogg container.
\begin{DoxyParams}{Parameters}
\item[{\em ti}]A previously initialized \doxyref{theora\_\-info}{p.}{structtheora__info} struct \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The bit shift dividing the two granulepos fields
\end{DoxyReturn}
This function was added in the 1.0alpha5 release. \index{oldfuncs@{oldfuncs}!theora\_\-granule\_\-time@{theora\_\-granule\_\-time}}
\index{theora\_\-granule\_\-time@{theora\_\-granule\_\-time}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-granule\_\-time}]{\setlength{\rightskip}{0pt plus 5cm}double theora\_\-granule\_\-time ({\bf theora\_\-state} $\ast$ {\em th}, \/ ogg\_\-int64\_\-t {\em granulepos})}\label{group__oldfuncs_ga4376358b12b9fa23ce6fe21cb5c65ac6}
Convert a granulepos to absolute time in seconds. The granulepos is interpreted in the context of a given \doxyref{theora\_\-state}{p.}{structtheora__state} handle, and gives the end time of a frame's presentation as used in Ogg mux ordering.
\begin{DoxyParams}{Parameters}
\item[{\em th}]A previously initialized \doxyref{theora\_\-state}{p.}{structtheora__state} handle (encode or decode) \item[{\em granulepos}]The granulepos to convert. \end{DoxyParams}
\begin{DoxyReturn}{Returns}
The absolute time in seconds corresponding to {\itshape granulepos\/}. This is the \char`\"{}end time\char`\"{} for the frame, or the latest time it should be displayed. It is not the presentation time.
\end{DoxyReturn}
\begin{DoxyRetVals}{Return values}
\item[{\em -\/1.}]The given granulepos is undefined (i.e. negative), or \item[{\em -\/1.}]The function has been disabled because floating point support is not available. \end{DoxyRetVals}
\index{oldfuncs@{oldfuncs}!theora\_\-info\_\-clear@{theora\_\-info\_\-clear}}
\index{theora\_\-info\_\-clear@{theora\_\-info\_\-clear}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-info\_\-clear}]{\setlength{\rightskip}{0pt plus 5cm}void theora\_\-info\_\-clear ({\bf theora\_\-info} $\ast$ {\em c})}\label{group__oldfuncs_gaba7022d58edbc4825cacad03f68b3e0d}
Clear a \doxyref{theora\_\-info}{p.}{structtheora__info} structure. All values within the given \doxyref{theora\_\-info}{p.}{structtheora__info} structure are cleared, and associated internal codec setup data is freed.
\begin{DoxyParams}{Parameters}
\item[{\em c}]A \doxyref{theora\_\-info}{p.}{structtheora__info} struct to initialize. \end{DoxyParams}
\index{oldfuncs@{oldfuncs}!theora\_\-info\_\-init@{theora\_\-info\_\-init}}
\index{theora\_\-info\_\-init@{theora\_\-info\_\-init}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-info\_\-init}]{\setlength{\rightskip}{0pt plus 5cm}void theora\_\-info\_\-init ({\bf theora\_\-info} $\ast$ {\em c})}\label{group__oldfuncs_ga3091c87d48f1faba018c5956379a6d90}
Initialize a \doxyref{theora\_\-info}{p.}{structtheora__info} structure. All values within the given \doxyref{theora\_\-info}{p.}{structtheora__info} structure are initialized, and space is allocated within libtheora for internal codec setup data.
\begin{DoxyParams}{Parameters}
\item[{\em c}]A \doxyref{theora\_\-info}{p.}{structtheora__info} struct to initialize. \end{DoxyParams}
\index{oldfuncs@{oldfuncs}!theora\_\-packet\_\-isheader@{theora\_\-packet\_\-isheader}}
\index{theora\_\-packet\_\-isheader@{theora\_\-packet\_\-isheader}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-packet\_\-isheader}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-packet\_\-isheader (ogg\_\-packet $\ast$ {\em op})}\label{group__oldfuncs_gab969f9d0407683f0e5abe73d0839a25b}
Report whether a theora packet is a header or not This function does no verification beyond checking the header flag bit so it should not be used for bitstream identification; use \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} for that.
\begin{DoxyParams}{Parameters}
\item[{\em op}]An ogg\_\-packet containing encoded theora data. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 1}]The packet is a header packet \item[{\em 0}]The packet is not a header packet (and so contains frame data)\end{DoxyRetVals}
Thus function was added in the 1.0alpha4 release. \index{oldfuncs@{oldfuncs}!theora\_\-packet\_\-iskeyframe@{theora\_\-packet\_\-iskeyframe}}
\index{theora\_\-packet\_\-iskeyframe@{theora\_\-packet\_\-iskeyframe}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-packet\_\-iskeyframe}]{\setlength{\rightskip}{0pt plus 5cm}int theora\_\-packet\_\-iskeyframe (ogg\_\-packet $\ast$ {\em op})}\label{group__oldfuncs_ga39ccc8f847a748d7074c926b4fdd12b2}
Report whether a theora packet is a keyframe or not.
\begin{DoxyParams}{Parameters}
\item[{\em op}]An ogg\_\-packet containing encoded theora data. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 1}]The packet contains a keyframe image \item[{\em 0}]The packet is contains an interframe delta \item[{\em -\/1}]The packet is not an image data packet at all\end{DoxyRetVals}
Thus function was added in the 1.0alpha4 release. \index{oldfuncs@{oldfuncs}!theora\_\-version\_\-number@{theora\_\-version\_\-number}}
\index{theora\_\-version\_\-number@{theora\_\-version\_\-number}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-version\_\-number}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t theora\_\-version\_\-number (void)}\label{group__oldfuncs_gad181f4b19d455dcc2bef2533530b84c8}
Retrieve a 32-\/bit version number. This number is composed of a 16-\/bit major version, 8-\/bit minor version and 8 bit sub-\/version, composed as follows:
\begin{DoxyPre}
(VERSION\_MAJOR<<16) + (VERSION\_MINOR<<8) + (VERSION\_SUB)
\end{DoxyPre}
\begin{DoxyReturn}{Returns}
The version number.
\end{DoxyReturn}
\index{oldfuncs@{oldfuncs}!theora\_\-version\_\-string@{theora\_\-version\_\-string}}
\index{theora\_\-version\_\-string@{theora\_\-version\_\-string}!oldfuncs@{oldfuncs}}
\subsubsection[{theora\_\-version\_\-string}]{\setlength{\rightskip}{0pt plus 5cm}const char$\ast$ theora\_\-version\_\-string (void)}\label{group__oldfuncs_ga5a3da8fd262a60f055f96536eec06df2}
Retrieve a human-\/readable string to identify the encoder vendor and version. \begin{DoxyReturn}{Returns}
A version string.
\end{DoxyReturn}

View file

@ -0,0 +1,12 @@
\section{Introduction}\label{index_intro}
This is the documentation for {\ttfamily libtheora} C API. The current reference implementation for {\tt Theora}, a free, patent-\/unencumbered video codec. Theora is derived from On2's VP3 codec with additional features and integration with Ogg multimedia formats by {\tt the Xiph.Org Foundation}. Complete documentation of the format itself is available in {\tt the Theora specification}.\subsection{Organization}\label{index_Organization}
The functions documented here are actually subdivided into three separate libraries:
\begin{DoxyItemize}
\item {\ttfamily libtheoraenc} contains the encoder interface, described in \doxyref{Functions for Encoding}{p.}{group__encfuncs}.
\item {\ttfamily libtheoradec} contains the decoder interface and routines shared with the encoder. You must also link to this if you link to {\ttfamily libtheoraenc}. The routines in this library are described in \doxyref{Functions for Decoding}{p.}{group__decfuncs} and \doxyref{Functions Shared by Encode and Decode}{p.}{group__basefuncs}.
\item {\ttfamily libtheora} contains the \doxyref{Legacy pre-\/1.0 C API}{p.}{group__oldfuncs}.
\end{DoxyItemize}
New code should link to {\ttfamily libtheoradec} and, if using encoder features, {\ttfamily libtheoraenc}. Together these two export both the standard and the legacy API, so this is all that is needed by any code. The older {\ttfamily libtheora} library is provided just for compatibility with older build configurations.
In general the recommended 1.x API symbols can be distinguished by their {\ttfamily th\_\-} or {\ttfamily TH\_\-} namespace prefix. The older, legacy API uses {\ttfamily theora\_\-} or {\ttfamily OC\_\-} prefixes instead.

View file

@ -0,0 +1,7 @@
\section{Modules}
Here is a list of all modules:\begin{DoxyCompactList}
\item \contentsline{section}{Functions Shared by Encode and Decode}{\pageref{group__basefuncs}}{}
\item \contentsline{section}{Legacy pre-\/1.0 C API}{\pageref{group__oldfuncs}}{}
\item \contentsline{section}{Functions for Decoding}{\pageref{group__decfuncs}}{}
\item \contentsline{section}{Functions for Encoding}{\pageref{group__encfuncs}}{}
\end{DoxyCompactList}

View file

@ -0,0 +1,64 @@
\documentclass[a4paper]{book}
\usepackage{a4wide}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{float}
\usepackage{listings}
\usepackage{color}
\usepackage{textcomp}
\usepackage{alltt}
\usepackage[utf8]{inputenc}
\usepackage{doxygen}
\lstset{language=C++,inputencoding=utf8,basicstyle=\footnotesize,breaklines=true,breakatwhitespace=true,tabsize=8,numbers=left }
\makeindex
\setcounter{tocdepth}{3}
\renewcommand{\footrulewidth}{0.4pt}
\begin{document}
\begin{titlepage}
\vspace*{7cm}
\begin{center}
{\Large libtheora \\[1ex]\large 1.1.0+svn }\\
\vspace*{1cm}
{\large Generated by Doxygen 1.6.1}\\
\vspace*{0.5cm}
{\small Mon Sep 28 11:02:24 2009}\\
\end{center}
\end{titlepage}
\clearemptydoublepage
\pagenumbering{roman}
\tableofcontents
\clearemptydoublepage
\pagenumbering{arabic}
\chapter{Main Page}
\label{index}\input{index}
\chapter{Module Index}
\input{modules}
\chapter{Data Structure Index}
\input{annotated}
\chapter{File Index}
\input{files}
\chapter{Module Documentation}
\input{group__basefuncs}
\include{group__oldfuncs}
\include{group__decfuncs}
\include{group__encfuncs}
\chapter{Data Structure Documentation}
\input{structth__comment}
\include{structth__huff__code}
\include{structth__img__plane}
\include{structth__info}
\include{structth__quant__info}
\include{structth__quant__ranges}
\include{structth__stripe__callback}
\include{structtheora__comment}
\include{structtheora__info}
\include{structtheora__state}
\include{structyuv__buffer}
\chapter{File Documentation}
\input{codec_8h}
\include{theora_8h}
\include{theoradec_8h}
\include{theoraenc_8h}
\printindex
\end{document}

View file

@ -0,0 +1,53 @@
\section{th\_\-comment Struct Reference}
\label{structth__comment}\index{th\_\-comment@{th\_\-comment}}
The comment information.
{\ttfamily \#include $<$codec.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
char $\ast$$\ast$ {\bf user\_\-comments}
\begin{DoxyCompactList}\small\item\em The array of comment string vectors. \item\end{DoxyCompactList}\item
int $\ast$ {\bf comment\_\-lengths}
\begin{DoxyCompactList}\small\item\em An array of the corresponding length of each vector, in bytes. \item\end{DoxyCompactList}\item
int {\bf comments}
\begin{DoxyCompactList}\small\item\em The total number of comment strings. \item\end{DoxyCompactList}\item
char $\ast$ {\bf vendor}
\begin{DoxyCompactList}\small\item\em The null-\/terminated vendor string. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
The comment information. This structure holds the in-\/stream metadata corresponding to the 'comment' header packet. The comment header is meant to be used much like someone jotting a quick note on the label of a video. It should be a short, to the point text note that can be more than a couple words, but not more than a short paragraph.
The metadata is stored as a series of (tag, value) pairs, in length-\/encoded string vectors. The first occurrence of the '=' character delimits the tag and value. A particular tag may occur more than once, and order is significant. The character set encoding for the strings is always UTF-\/8, but the tag names are limited to ASCII, and treated as case-\/insensitive. See {\tt the Theora specification}, Section 6.3.3 for details.
In filling in this structure, \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50} will null-\/terminate the user\_\-comment strings for safety. However, the bitstream format itself treats them as 8-\/bit clean vectors, possibly containing null characters, and so the length array should be treated as their authoritative length.
\subsection{Field Documentation}
\index{th\_\-comment@{th\_\-comment}!comment\_\-lengths@{comment\_\-lengths}}
\index{comment\_\-lengths@{comment\_\-lengths}!th_comment@{th\_\-comment}}
\subsubsection[{comment\_\-lengths}]{\setlength{\rightskip}{0pt plus 5cm}int$\ast$ {\bf th\_\-comment::comment\_\-lengths}}\label{structth__comment_a723dc6fdf75757e70e28eea864b10898}
An array of the corresponding length of each vector, in bytes. \index{th\_\-comment@{th\_\-comment}!comments@{comments}}
\index{comments@{comments}!th_comment@{th\_\-comment}}
\subsubsection[{comments}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-comment::comments}}\label{structth__comment_a5990c34932376f070ad0fc314daaeb78}
The total number of comment strings. \index{th\_\-comment@{th\_\-comment}!user\_\-comments@{user\_\-comments}}
\index{user\_\-comments@{user\_\-comments}!th_comment@{th\_\-comment}}
\subsubsection[{user\_\-comments}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$$\ast$ {\bf th\_\-comment::user\_\-comments}}\label{structth__comment_ad72830e183e707bb0df423eb73b00de4}
The array of comment string vectors. \index{th\_\-comment@{th\_\-comment}!vendor@{vendor}}
\index{vendor@{vendor}!th_comment@{th\_\-comment}}
\subsubsection[{vendor}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ {\bf th\_\-comment::vendor}}\label{structth__comment_a93fbe894d23603f56843be15b0cbdba0}
The null-\/terminated vendor string. This identifies the software used to encode the stream.
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf codec.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,35 @@
\section{th\_\-huff\_\-code Struct Reference}
\label{structth__huff__code}\index{th\_\-huff\_\-code@{th\_\-huff\_\-code}}
A Huffman code for a Theora DCT token.
{\ttfamily \#include $<$codec.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
ogg\_\-uint32\_\-t {\bf pattern}
\begin{DoxyCompactList}\small\item\em The bit pattern for the code, with the LSbit of the pattern aligned in the LSbit of the word. \item\end{DoxyCompactList}\item
int {\bf nbits}
\begin{DoxyCompactList}\small\item\em The number of bits in the code. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
A Huffman code for a Theora DCT token. Each set of Huffman codes in a given table must form a complete, prefix-\/free code. There is no requirement that all the tokens in a table have a valid code, but the current encoder is not optimized to take advantage of this. If each of the five grouops of 16 tables does not contain at least one table with a code for every token, then the encoder may fail to encode certain frames. The complete table in the first group of 16 does not have to be in the same place as the complete table in the other groups, but the complete tables in the remaining four groups must all be in the same place.
\subsection{Field Documentation}
\index{th\_\-huff\_\-code@{th\_\-huff\_\-code}!nbits@{nbits}}
\index{nbits@{nbits}!th_huff_code@{th\_\-huff\_\-code}}
\subsubsection[{nbits}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-huff\_\-code::nbits}}\label{structth__huff__code_aaf97b8f2f90042f7bc136a7b2bc35e35}
The number of bits in the code. This must be between 0 and 32, inclusive. \index{th\_\-huff\_\-code@{th\_\-huff\_\-code}!pattern@{pattern}}
\index{pattern@{pattern}!th_huff_code@{th\_\-huff\_\-code}}
\subsubsection[{pattern}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-huff\_\-code::pattern}}\label{structth__huff__code_a6dd29e3aa5a0c5a2dd5ce1f45b1162b4}
The bit pattern for the code, with the LSbit of the pattern aligned in the LSbit of the word.
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf codec.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,49 @@
\section{th\_\-img\_\-plane Struct Reference}
\label{structth__img__plane}\index{th\_\-img\_\-plane@{th\_\-img\_\-plane}}
A buffer for a single color plane in an uncompressed image.
{\ttfamily \#include $<$codec.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
int {\bf width}
\begin{DoxyCompactList}\small\item\em The width of this plane. \item\end{DoxyCompactList}\item
int {\bf height}
\begin{DoxyCompactList}\small\item\em The height of this plane. \item\end{DoxyCompactList}\item
int {\bf stride}
\begin{DoxyCompactList}\small\item\em The offset in bytes between successive rows. \item\end{DoxyCompactList}\item
unsigned char $\ast$ {\bf data}
\begin{DoxyCompactList}\small\item\em A pointer to the beginning of the first row. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
A buffer for a single color plane in an uncompressed image. This contains the image data in a left-\/to-\/right, top-\/down format. Each row of pixels is stored contiguously in memory, but successive rows need not be. Use {\itshape stride\/} to compute the offset of the next row. The encoder accepts both positive {\itshape stride\/} values (top-\/down in memory) and negative (bottom-\/up in memory). The decoder currently always generates images with positive strides.
\subsection{Field Documentation}
\index{th\_\-img\_\-plane@{th\_\-img\_\-plane}!data@{data}}
\index{data@{data}!th_img_plane@{th\_\-img\_\-plane}}
\subsubsection[{data}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char$\ast$ {\bf th\_\-img\_\-plane::data}}\label{structth__img__plane_af8133681516ce88b5a201c1b4b7e6ba2}
A pointer to the beginning of the first row. \index{th\_\-img\_\-plane@{th\_\-img\_\-plane}!height@{height}}
\index{height@{height}!th_img_plane@{th\_\-img\_\-plane}}
\subsubsection[{height}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-img\_\-plane::height}}\label{structth__img__plane_a21aea1367894468de489d529d7eaf44d}
The height of this plane. \index{th\_\-img\_\-plane@{th\_\-img\_\-plane}!stride@{stride}}
\index{stride@{stride}!th_img_plane@{th\_\-img\_\-plane}}
\subsubsection[{stride}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-img\_\-plane::stride}}\label{structth__img__plane_ab1100f071ffee3b37e07e3222f819bad}
The offset in bytes between successive rows. \index{th\_\-img\_\-plane@{th\_\-img\_\-plane}!width@{width}}
\index{width@{width}!th_img_plane@{th\_\-img\_\-plane}}
\subsubsection[{width}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-img\_\-plane::width}}\label{structth__img__plane_a58cc297a99cd4594c3d30e56f2ed6b74}
The width of this plane.
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf codec.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,164 @@
\section{th\_\-info Struct Reference}
\label{structth__info}\index{th\_\-info@{th\_\-info}}
Theora bitstream information.
{\ttfamily \#include $<$codec.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
ogg\_\-uint32\_\-t {\bf frame\_\-width}
\begin{DoxyCompactList}\small\item\em The encoded frame width. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf frame\_\-height}
\begin{DoxyCompactList}\small\item\em The encoded frame height. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf pic\_\-width}
\begin{DoxyCompactList}\small\item\em The displayed picture width. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf pic\_\-height}
\begin{DoxyCompactList}\small\item\em The displayed picture height. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf pic\_\-x}
\begin{DoxyCompactList}\small\item\em The X offset of the displayed picture. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf pic\_\-y}
\begin{DoxyCompactList}\small\item\em The Y offset of the displayed picture. \item\end{DoxyCompactList}\item
{\bf th\_\-colorspace} {\bf colorspace}
\begin{DoxyCompactList}\small\item\em The color space. \item\end{DoxyCompactList}\item
{\bf th\_\-pixel\_\-fmt} {\bf pixel\_\-fmt}
\begin{DoxyCompactList}\small\item\em The pixel format. \item\end{DoxyCompactList}\item
int {\bf target\_\-bitrate}
\begin{DoxyCompactList}\small\item\em The target bit-\/rate in bits per second. \item\end{DoxyCompactList}\item
int {\bf quality}
\begin{DoxyCompactList}\small\item\em The target quality level. \item\end{DoxyCompactList}\item
int {\bf keyframe\_\-granule\_\-shift}
\begin{DoxyCompactList}\small\item\em The amount to shift to extract the last keyframe number from the granule position. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\begin{Indent}{\bf Theora version}\par
{\em \label{_amgrpf735645ddddaaf44dc0647da0e883f6c}
Bitstream version information.}\begin{DoxyCompactItemize}
\item
unsigned char {\bf version\_\-major}
\item
unsigned char {\bf version\_\-minor}
\item
unsigned char {\bf version\_\-subminor}
\end{DoxyCompactItemize}
\end{Indent}
\begin{Indent}{\bf Frame rate}\par
{\em \label{_amgrp801309c4a0e25a4db3fe5739b322b0a7}
The frame rate, as a fraction.
If either is 0, the frame rate is undefined. }\begin{DoxyCompactItemize}
\item
ogg\_\-uint32\_\-t {\bf fps\_\-numerator}
\item
ogg\_\-uint32\_\-t {\bf fps\_\-denominator}
\end{DoxyCompactItemize}
\end{Indent}
\begin{Indent}{\bf Aspect ratio}\par
{\em \label{_amgrpdeca19914b5126815a2220f15d067c9b}
The aspect ratio of the pixels.
If either value is zero, the aspect ratio is undefined. If not specified by any external means, 1:1 should be assumed. The aspect ratio of the full picture can be computed as
\begin{DoxyCode}
aspect_numerator*pic_width/(aspect_denominator*pic_height).
\end{DoxyCode}
}\begin{DoxyCompactItemize}
\item
ogg\_\-uint32\_\-t {\bf aspect\_\-numerator}
\item
ogg\_\-uint32\_\-t {\bf aspect\_\-denominator}
\end{DoxyCompactItemize}
\end{Indent}
\subsection{Detailed Description}
Theora bitstream information. This contains the basic playback parameters for a stream, and corresponds to the initial 'info' header packet. To initialize an encoder, the application fills in this structure and passes it to \doxyref{th\_\-encode\_\-alloc()}{p.}{group__encfuncs_gaa91e47bc9dd5f6ee52045bd7b815e5a7}. A default encoding mode is chosen based on the values of the \doxyref{quality}{p.}{structth__info_aa4cdcf96cb46b256821993e9a830ee02} and \doxyref{target\_\-bitrate}{p.}{structth__info_a1d9c8d768a4ae623269f5bd8f6f7a015} fields. On decode, it is filled in by \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50}, and then passed to \doxyref{th\_\-decode\_\-alloc()}{p.}{group__decfuncs_ga0ef07a9a97849054aa606c595a2d807e}.
Encoded Theora frames must be a multiple of 16 in size; this is what the \doxyref{frame\_\-width}{p.}{structth__info_a6b8087a4d831da53011a43b8d74087a0} and \doxyref{frame\_\-height}{p.}{structth__info_a6b1adc3a16a8336a72692b0a5937214c} members represent. To handle arbitrary picture sizes, a crop rectangle is specified in the \doxyref{pic\_\-x}{p.}{structth__info_a5b3f834bcf141564e7bb14f49101870f}, \doxyref{pic\_\-y}{p.}{structth__info_a8aacc575cab2dfe3735001c2ad32aa14}, \doxyref{pic\_\-width}{p.}{structth__info_a5048edf77b141dd3e9a92ca85e317345} and \doxyref{pic\_\-height}{p.}{structth__info_a775178474283c5990ba73f9ba7f6b88b} members.
All frame buffers contain pointers to the full, padded frame. However, the current encoder {\itshape will not\/} reference pixels outside of the cropped picture region, and the application does not need to fill them in. The decoder {\itshape will\/} allocate storage for a full frame, but the application {\itshape should not\/} rely on the padding containing sensible data.
It is also generally recommended that the offsets and sizes should still be multiples of 2 to avoid chroma sampling shifts when chroma is sub-\/sampled. See {\tt the Theora specification}, Section 4.4, for more details.
Frame rate, in frames per second, is stored as a rational fraction, as is the pixel aspect ratio. Note that this refers to the aspect ratio of the individual pixels, not of the overall frame itself. The frame aspect ratio can be computed from pixel aspect ratio using the image dimensions.
\subsection{Field Documentation}
\index{th\_\-info@{th\_\-info}!aspect\_\-denominator@{aspect\_\-denominator}}
\index{aspect\_\-denominator@{aspect\_\-denominator}!th_info@{th\_\-info}}
\subsubsection[{aspect\_\-denominator}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::aspect\_\-denominator}}\label{structth__info_a04c0bd477222d747a76085d8720322e2}
\index{th\_\-info@{th\_\-info}!aspect\_\-numerator@{aspect\_\-numerator}}
\index{aspect\_\-numerator@{aspect\_\-numerator}!th_info@{th\_\-info}}
\subsubsection[{aspect\_\-numerator}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::aspect\_\-numerator}}\label{structth__info_a5be65dac9f75e37864cf73dd543570cd}
\index{th\_\-info@{th\_\-info}!colorspace@{colorspace}}
\index{colorspace@{colorspace}!th_info@{th\_\-info}}
\subsubsection[{colorspace}]{\setlength{\rightskip}{0pt plus 5cm}{\bf th\_\-colorspace} {\bf th\_\-info::colorspace}}\label{structth__info_a8c7828cd0e023e9d21108160d53659a6}
The color space. \index{th\_\-info@{th\_\-info}!fps\_\-denominator@{fps\_\-denominator}}
\index{fps\_\-denominator@{fps\_\-denominator}!th_info@{th\_\-info}}
\subsubsection[{fps\_\-denominator}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::fps\_\-denominator}}\label{structth__info_aa619408f70c03935529f1d3eda7a3ec2}
\index{th\_\-info@{th\_\-info}!fps\_\-numerator@{fps\_\-numerator}}
\index{fps\_\-numerator@{fps\_\-numerator}!th_info@{th\_\-info}}
\subsubsection[{fps\_\-numerator}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::fps\_\-numerator}}\label{structth__info_a20606e61676f585a7e59cfc96de190a5}
\index{th\_\-info@{th\_\-info}!frame\_\-height@{frame\_\-height}}
\index{frame\_\-height@{frame\_\-height}!th_info@{th\_\-info}}
\subsubsection[{frame\_\-height}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::frame\_\-height}}\label{structth__info_a6b1adc3a16a8336a72692b0a5937214c}
The encoded frame height. This must be a multiple of 16, and less than 1048576. \index{th\_\-info@{th\_\-info}!frame\_\-width@{frame\_\-width}}
\index{frame\_\-width@{frame\_\-width}!th_info@{th\_\-info}}
\subsubsection[{frame\_\-width}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::frame\_\-width}}\label{structth__info_a6b8087a4d831da53011a43b8d74087a0}
The encoded frame width. This must be a multiple of 16, and less than 1048576. \index{th\_\-info@{th\_\-info}!keyframe\_\-granule\_\-shift@{keyframe\_\-granule\_\-shift}}
\index{keyframe\_\-granule\_\-shift@{keyframe\_\-granule\_\-shift}!th_info@{th\_\-info}}
\subsubsection[{keyframe\_\-granule\_\-shift}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-info::keyframe\_\-granule\_\-shift}}\label{structth__info_a693ca4ab11fbc0c3f32594b4bb8766ed}
The amount to shift to extract the last keyframe number from the granule position. This can be at most 31. \doxyref{th\_\-info\_\-init()}{p.}{group__basefuncs_ga430d9c605816a6ca0bdce3a0b965b926} will set this to a default value (currently {\ttfamily 6}, which is good for streaming applications), but you can set it to 0 to make every frame a keyframe. The maximum distance between key frames is {\ttfamily 1$<$$<$\doxyref{keyframe\_\-granule\_\-shift}{p.}{structth__info_a693ca4ab11fbc0c3f32594b4bb8766ed}}. The keyframe frequency can be more finely controlled with \doxyref{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}{p.}{theoraenc_8h_a27e755e15b4b5604c54974b304037a49}, which can also be adjusted during encoding (for example, to force the next frame to be a keyframe), but it cannot be set larger than the amount permitted by this field after the headers have been output. \index{th\_\-info@{th\_\-info}!pic\_\-height@{pic\_\-height}}
\index{pic\_\-height@{pic\_\-height}!th_info@{th\_\-info}}
\subsubsection[{pic\_\-height}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::pic\_\-height}}\label{structth__info_a775178474283c5990ba73f9ba7f6b88b}
The displayed picture height. This must be no larger than height. \index{th\_\-info@{th\_\-info}!pic\_\-width@{pic\_\-width}}
\index{pic\_\-width@{pic\_\-width}!th_info@{th\_\-info}}
\subsubsection[{pic\_\-width}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::pic\_\-width}}\label{structth__info_a5048edf77b141dd3e9a92ca85e317345}
The displayed picture width. This must be no larger than width. \index{th\_\-info@{th\_\-info}!pic\_\-x@{pic\_\-x}}
\index{pic\_\-x@{pic\_\-x}!th_info@{th\_\-info}}
\subsubsection[{pic\_\-x}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::pic\_\-x}}\label{structth__info_a5b3f834bcf141564e7bb14f49101870f}
The X offset of the displayed picture. This must be no larger than \doxyref{frame\_\-width}{p.}{structth__info_a6b8087a4d831da53011a43b8d74087a0}-\/\doxyref{pic\_\-width}{p.}{structth__info_a5048edf77b141dd3e9a92ca85e317345} or 255, whichever is smaller. \index{th\_\-info@{th\_\-info}!pic\_\-y@{pic\_\-y}}
\index{pic\_\-y@{pic\_\-y}!th_info@{th\_\-info}}
\subsubsection[{pic\_\-y}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf th\_\-info::pic\_\-y}}\label{structth__info_a8aacc575cab2dfe3735001c2ad32aa14}
The Y offset of the displayed picture. This must be no larger than \doxyref{frame\_\-height}{p.}{structth__info_a6b1adc3a16a8336a72692b0a5937214c}-\/\doxyref{pic\_\-height}{p.}{structth__info_a775178474283c5990ba73f9ba7f6b88b}, and \doxyref{frame\_\-height}{p.}{structth__info_a6b1adc3a16a8336a72692b0a5937214c}-\/\doxyref{pic\_\-height}{p.}{structth__info_a775178474283c5990ba73f9ba7f6b88b}-\/\doxyref{pic\_\-y}{p.}{structth__info_a8aacc575cab2dfe3735001c2ad32aa14} must be no larger than 255. This slightly funny restriction is due to the fact that the offset is specified from the top of the image for consistency with the standard graphics left-\/handed coordinate system used throughout this API, while it is stored in the encoded stream as an offset from the bottom. \index{th\_\-info@{th\_\-info}!pixel\_\-fmt@{pixel\_\-fmt}}
\index{pixel\_\-fmt@{pixel\_\-fmt}!th_info@{th\_\-info}}
\subsubsection[{pixel\_\-fmt}]{\setlength{\rightskip}{0pt plus 5cm}{\bf th\_\-pixel\_\-fmt} {\bf th\_\-info::pixel\_\-fmt}}\label{structth__info_a2301388ef3755c41ab12fd144c1fc54e}
The pixel format. \index{th\_\-info@{th\_\-info}!quality@{quality}}
\index{quality@{quality}!th_info@{th\_\-info}}
\subsubsection[{quality}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-info::quality}}\label{structth__info_aa4cdcf96cb46b256821993e9a830ee02}
The target quality level. Valid values range from 0 to 63, inclusive, with higher values giving higher quality. If initializing an encoder with this struct, and \doxyref{target\_\-bitrate}{p.}{structth__info_a1d9c8d768a4ae623269f5bd8f6f7a015} is set to zero, VBR encoding at this quality will be activated by default. \index{th\_\-info@{th\_\-info}!target\_\-bitrate@{target\_\-bitrate}}
\index{target\_\-bitrate@{target\_\-bitrate}!th_info@{th\_\-info}}
\subsubsection[{target\_\-bitrate}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-info::target\_\-bitrate}}\label{structth__info_a1d9c8d768a4ae623269f5bd8f6f7a015}
The target bit-\/rate in bits per second. If initializing an encoder with this struct, set this field to a non-\/zero value to activate CBR encoding by default. \index{th\_\-info@{th\_\-info}!version\_\-major@{version\_\-major}}
\index{version\_\-major@{version\_\-major}!th_info@{th\_\-info}}
\subsubsection[{version\_\-major}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char {\bf th\_\-info::version\_\-major}}\label{structth__info_a60b3e2cac006fee0e105a918d6a5a9f9}
\index{th\_\-info@{th\_\-info}!version\_\-minor@{version\_\-minor}}
\index{version\_\-minor@{version\_\-minor}!th_info@{th\_\-info}}
\subsubsection[{version\_\-minor}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char {\bf th\_\-info::version\_\-minor}}\label{structth__info_abb1d4887a8079c6c5aaa6d7229f243d7}
\index{th\_\-info@{th\_\-info}!version\_\-subminor@{version\_\-subminor}}
\index{version\_\-subminor@{version\_\-subminor}!th_info@{th\_\-info}}
\subsubsection[{version\_\-subminor}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char {\bf th\_\-info::version\_\-subminor}}\label{structth__info_abfacc79b7cabae12b6ac2484f76602d3}
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf codec.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,81 @@
\section{th\_\-quant\_\-info Struct Reference}
\label{structth__quant__info}\index{th\_\-quant\_\-info@{th\_\-quant\_\-info}}
A complete set of quantization parameters.
{\ttfamily \#include $<$codec.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
ogg\_\-uint16\_\-t {\bf dc\_\-scale} [64]
\begin{DoxyCompactList}\small\item\em The DC scaling factors. \item\end{DoxyCompactList}\item
ogg\_\-uint16\_\-t {\bf ac\_\-scale} [64]
\begin{DoxyCompactList}\small\item\em The AC scaling factors. \item\end{DoxyCompactList}\item
unsigned char {\bf loop\_\-filter\_\-limits} [64]
\begin{DoxyCompactList}\small\item\em The loop filter limit values. \item\end{DoxyCompactList}\item
{\bf th\_\-quant\_\-ranges} {\bf qi\_\-ranges} [2][3]
\begin{DoxyCompactList}\small\item\em The {\itshape qi\/} ranges for each {\itshape ci\/} and {\itshape pli\/}. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
A complete set of quantization parameters. The quantizer for each coefficient is calculated as:
\begin{DoxyCode}
Q=MAX(MIN(qmin[qti][ci!=0],scale[ci!=0][qi]*base[qti][pli][qi][ci]/100),
1024).
\end{DoxyCode}
{\itshape qti\/} is the quantization type index: 0 for intra, 1 for inter. {\ttfamily ci!=0} is 0 for the DC coefficient and 1 for AC coefficients. {\itshape qi\/} is the quality index, ranging between 0 (low quality) and 63 (high quality). {\itshape pli\/} is the color plane index: 0 for Y', 1 for Cb, 2 for Cr. {\itshape ci\/} is the DCT coefficient index. Coefficient indices correspond to the normal 2D DCT block ordering-\/-\/row-\/major with low frequencies first-\/-\/{\itshape not\/} zig-\/zag order.
Minimum quantizers are constant, and are given by:
\begin{DoxyCode}
qmin[2][2]={{4,2},{8,4}}.
\end{DoxyCode}
Parameters that can be stored in the bitstream are as follows:
\begin{DoxyItemize}
\item The two scale matrices ac\_\-scale and dc\_\-scale.
\begin{DoxyCode}
scale[2][64]={dc_scale,ac_scale}.
\end{DoxyCode}
\item The base matrices for each {\itshape qi\/}, {\itshape qti\/} and {\itshape pli\/} (up to 384 in all). In order to avoid storing a full 384 base matrices, only a sparse set of matrices are stored, and the rest are linearly interpolated. This is done as follows. For each {\itshape qti\/} and {\itshape pli\/}, a series of {\itshape n\/} {\itshape qi\/} ranges is defined. The size of each {\itshape qi\/} range can vary arbitrarily, but they must sum to 63. Then, {\ttfamily n+1} matrices are specified, one for each endpoint of the ranges. For interpolation purposes, each range's endpoints are the first {\itshape qi\/} value it contains and one past the last {\itshape qi\/} value it contains. Fractional values are rounded to the nearest integer, with ties rounded away from zero.
\end{DoxyItemize}
Base matrices are stored by reference, so if the same matrices are used multiple times, they will only appear once in the bitstream. The bitstream is also capable of omitting an entire set of ranges and its associated matrices if they are the same as either the previous set (indexed in row-\/major order) or if the inter set is the same as the intra set.
\begin{DoxyItemize}
\item Loop filter limit values. The same limits are used for the loop filter in all color planes, despite potentially differing levels of quantization in each.
\end{DoxyItemize}
For the current encoder, {\ttfamily scale[ci!=0][qi]} must be no greater than {\ttfamily scale[ci!=0][qi-\/1]} and {\ttfamily base[qti][pli][qi][ci]} must be no greater than {\ttfamily base[qti][pli][qi-\/1][ci]}. These two conditions ensure that the actual quantizer for a given {\itshape qti\/}, {\itshape pli\/}, and {\itshape ci\/} does not increase as {\itshape qi\/} increases. This is not required by the decoder.
\subsection{Field Documentation}
\index{th\_\-quant\_\-info@{th\_\-quant\_\-info}!ac\_\-scale@{ac\_\-scale}}
\index{ac\_\-scale@{ac\_\-scale}!th_quant_info@{th\_\-quant\_\-info}}
\subsubsection[{ac\_\-scale}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint16\_\-t {\bf th\_\-quant\_\-info::ac\_\-scale}[64]}\label{structth__quant__info_a102f079c8f4a135dc0895c10768aeb06}
The AC scaling factors. \index{th\_\-quant\_\-info@{th\_\-quant\_\-info}!dc\_\-scale@{dc\_\-scale}}
\index{dc\_\-scale@{dc\_\-scale}!th_quant_info@{th\_\-quant\_\-info}}
\subsubsection[{dc\_\-scale}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint16\_\-t {\bf th\_\-quant\_\-info::dc\_\-scale}[64]}\label{structth__quant__info_ad5c1c0d1aa4127fcf864ae747d732ed9}
The DC scaling factors. \index{th\_\-quant\_\-info@{th\_\-quant\_\-info}!loop\_\-filter\_\-limits@{loop\_\-filter\_\-limits}}
\index{loop\_\-filter\_\-limits@{loop\_\-filter\_\-limits}!th_quant_info@{th\_\-quant\_\-info}}
\subsubsection[{loop\_\-filter\_\-limits}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char {\bf th\_\-quant\_\-info::loop\_\-filter\_\-limits}[64]}\label{structth__quant__info_a4ac56bf0a45b5743b36daf85d5cd9e33}
The loop filter limit values. \index{th\_\-quant\_\-info@{th\_\-quant\_\-info}!qi\_\-ranges@{qi\_\-ranges}}
\index{qi\_\-ranges@{qi\_\-ranges}!th_quant_info@{th\_\-quant\_\-info}}
\subsubsection[{qi\_\-ranges}]{\setlength{\rightskip}{0pt plus 5cm}{\bf th\_\-quant\_\-ranges} {\bf th\_\-quant\_\-info::qi\_\-ranges}[2][3]}\label{structth__quant__info_a6feacf4b365e305a7df7b93d87ee7bb8}
The {\itshape qi\/} ranges for each {\itshape ci\/} and {\itshape pli\/}.
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf codec.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,42 @@
\section{th\_\-quant\_\-ranges Struct Reference}
\label{structth__quant__ranges}\index{th\_\-quant\_\-ranges@{th\_\-quant\_\-ranges}}
A set of {\itshape qi\/} ranges.
{\ttfamily \#include $<$codec.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
int {\bf nranges}
\begin{DoxyCompactList}\small\item\em The number of ranges in the set. \item\end{DoxyCompactList}\item
const int $\ast$ {\bf sizes}
\begin{DoxyCompactList}\small\item\em The size of each of the \doxyref{nranges}{p.}{structth__quant__ranges_a53e5a3d7f7a112100b4b670929b3ebab} ranges. \item\end{DoxyCompactList}\item
const {\bf th\_\-quant\_\-base} $\ast$ {\bf base\_\-matrices}
\begin{DoxyCompactList}\small\item\em \doxyref{nranges}{p.}{structth__quant__ranges_a53e5a3d7f7a112100b4b670929b3ebab} {\ttfamily +1} base matrices. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
A set of {\itshape qi\/} ranges.
\subsection{Field Documentation}
\index{th\_\-quant\_\-ranges@{th\_\-quant\_\-ranges}!base\_\-matrices@{base\_\-matrices}}
\index{base\_\-matrices@{base\_\-matrices}!th_quant_ranges@{th\_\-quant\_\-ranges}}
\subsubsection[{base\_\-matrices}]{\setlength{\rightskip}{0pt plus 5cm}const {\bf th\_\-quant\_\-base}$\ast$ {\bf th\_\-quant\_\-ranges::base\_\-matrices}}\label{structth__quant__ranges_a52cb432f034737087492ea448de20bdb}
\doxyref{nranges}{p.}{structth__quant__ranges_a53e5a3d7f7a112100b4b670929b3ebab} {\ttfamily +1} base matrices. Matrices {\itshape i\/} and {\ttfamily i+1} form the endpoints of range {\itshape i\/}. \index{th\_\-quant\_\-ranges@{th\_\-quant\_\-ranges}!nranges@{nranges}}
\index{nranges@{nranges}!th_quant_ranges@{th\_\-quant\_\-ranges}}
\subsubsection[{nranges}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf th\_\-quant\_\-ranges::nranges}}\label{structth__quant__ranges_a53e5a3d7f7a112100b4b670929b3ebab}
The number of ranges in the set. \index{th\_\-quant\_\-ranges@{th\_\-quant\_\-ranges}!sizes@{sizes}}
\index{sizes@{sizes}!th_quant_ranges@{th\_\-quant\_\-ranges}}
\subsubsection[{sizes}]{\setlength{\rightskip}{0pt plus 5cm}const int$\ast$ {\bf th\_\-quant\_\-ranges::sizes}}\label{structth__quant__ranges_af3188a373bc0b8ffaa330d0ab4c1a194}
The size of each of the \doxyref{nranges}{p.}{structth__quant__ranges_a53e5a3d7f7a112100b4b670929b3ebab} ranges. These must sum to 63.
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf codec.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,35 @@
\section{th\_\-stripe\_\-callback Struct Reference}
\label{structth__stripe__callback}\index{th\_\-stripe\_\-callback@{th\_\-stripe\_\-callback}}
The striped decode callback data to pass to \doxyref{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}{p.}{theoradec_8h_ac95cc9e109474b0fa4bb920ab2cfdf1e}.
{\ttfamily \#include $<$theoradec.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
void $\ast$ {\bf ctx}
\begin{DoxyCompactList}\small\item\em An application-\/provided context pointer. \item\end{DoxyCompactList}\item
{\bf th\_\-stripe\_\-decoded\_\-func} {\bf stripe\_\-decoded}
\begin{DoxyCompactList}\small\item\em The callback function pointer. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
The striped decode callback data to pass to \doxyref{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}{p.}{theoradec_8h_ac95cc9e109474b0fa4bb920ab2cfdf1e}.
\subsection{Field Documentation}
\index{th\_\-stripe\_\-callback@{th\_\-stripe\_\-callback}!ctx@{ctx}}
\index{ctx@{ctx}!th_stripe_callback@{th\_\-stripe\_\-callback}}
\subsubsection[{ctx}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ {\bf th\_\-stripe\_\-callback::ctx}}\label{structth__stripe__callback_ab895162ce29a411fa98e0ba9661f47d4}
An application-\/provided context pointer. This will be passed back verbatim to the application. \index{th\_\-stripe\_\-callback@{th\_\-stripe\_\-callback}!stripe\_\-decoded@{stripe\_\-decoded}}
\index{stripe\_\-decoded@{stripe\_\-decoded}!th_stripe_callback@{th\_\-stripe\_\-callback}}
\subsubsection[{stripe\_\-decoded}]{\setlength{\rightskip}{0pt plus 5cm}{\bf th\_\-stripe\_\-decoded\_\-func} {\bf th\_\-stripe\_\-callback::stripe\_\-decoded}}\label{structth__stripe__callback_a977c725680a37e3446e459f063b1f4a5}
The callback function pointer.
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf theoradec.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,53 @@
\section{theora\_\-comment Struct Reference}
\label{structtheora__comment}\index{theora\_\-comment@{theora\_\-comment}}
Comment header metadata.
{\ttfamily \#include $<$theora.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
char $\ast$$\ast$ {\bf user\_\-comments}
\begin{DoxyCompactList}\small\item\em An array of comment string vectors. \item\end{DoxyCompactList}\item
int $\ast$ {\bf comment\_\-lengths}
\begin{DoxyCompactList}\small\item\em An array of corresponding string vector lengths in bytes. \item\end{DoxyCompactList}\item
int {\bf comments}
\begin{DoxyCompactList}\small\item\em The total number of comment string vectors. \item\end{DoxyCompactList}\item
char $\ast$ {\bf vendor}
\begin{DoxyCompactList}\small\item\em The vendor string identifying the encoder, null terminated. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
Comment header metadata. This structure holds the in-\/stream metadata corresponding to the 'comment' header packet.
Meta data is stored as a series of (tag, value) pairs, in length-\/encoded string vectors. The first occurence of the '=' character delimits the tag and value. A particular tag may occur more than once. The character set encoding for the strings is always UTF-\/8, but the tag names are limited to case-\/insensitive ASCII. See the spec for details.
In filling in this structure, \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} will null-\/terminate the user\_\-comment strings for safety. However, the bitstream format itself treats them as 8-\/bit clean, and so the length array should be treated as authoritative for their length.
\subsection{Field Documentation}
\index{theora\_\-comment@{theora\_\-comment}!comment\_\-lengths@{comment\_\-lengths}}
\index{comment\_\-lengths@{comment\_\-lengths}!theora_comment@{theora\_\-comment}}
\subsubsection[{comment\_\-lengths}]{\setlength{\rightskip}{0pt plus 5cm}int$\ast$ {\bf theora\_\-comment::comment\_\-lengths}}\label{structtheora__comment_a5ab4a376d3c217282a684577c9c9f49a}
An array of corresponding string vector lengths in bytes. \index{theora\_\-comment@{theora\_\-comment}!comments@{comments}}
\index{comments@{comments}!theora_comment@{theora\_\-comment}}
\subsubsection[{comments}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf theora\_\-comment::comments}}\label{structtheora__comment_a122393035c8352ff9be42d69e73aee00}
The total number of comment string vectors. \index{theora\_\-comment@{theora\_\-comment}!user\_\-comments@{user\_\-comments}}
\index{user\_\-comments@{user\_\-comments}!theora_comment@{theora\_\-comment}}
\subsubsection[{user\_\-comments}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$$\ast$ {\bf theora\_\-comment::user\_\-comments}}\label{structtheora__comment_a1e236fd180dfce19be89081399444cf5}
An array of comment string vectors. \index{theora\_\-comment@{theora\_\-comment}!vendor@{vendor}}
\index{vendor@{vendor}!theora_comment@{theora\_\-comment}}
\subsubsection[{vendor}]{\setlength{\rightskip}{0pt plus 5cm}char$\ast$ {\bf theora\_\-comment::vendor}}\label{structtheora__comment_adb371baf8f0daed42af8b875cf8430ef}
The vendor string identifying the encoder, null terminated.
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf theora.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,197 @@
\section{theora\_\-info Struct Reference}
\label{structtheora__info}\index{theora\_\-info@{theora\_\-info}}
Theora bitstream info.
{\ttfamily \#include $<$theora.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
ogg\_\-uint32\_\-t {\bf width}
\begin{DoxyCompactList}\small\item\em encoded frame width \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf height}
\begin{DoxyCompactList}\small\item\em encoded frame height \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf frame\_\-width}
\begin{DoxyCompactList}\small\item\em display frame width \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf frame\_\-height}
\begin{DoxyCompactList}\small\item\em display frame height \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf offset\_\-x}
\begin{DoxyCompactList}\small\item\em horizontal offset of the displayed frame \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf offset\_\-y}
\begin{DoxyCompactList}\small\item\em vertical offset of the displayed frame \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf fps\_\-numerator}
\begin{DoxyCompactList}\small\item\em frame rate numerator \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf fps\_\-denominator}
\begin{DoxyCompactList}\small\item\em frame rate denominator \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf aspect\_\-numerator}
\begin{DoxyCompactList}\small\item\em pixel aspect ratio numerator \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf aspect\_\-denominator}
\begin{DoxyCompactList}\small\item\em pixel aspect ratio denominator \item\end{DoxyCompactList}\item
{\bf theora\_\-colorspace} {\bf colorspace}
\begin{DoxyCompactList}\small\item\em colorspace \item\end{DoxyCompactList}\item
int {\bf target\_\-bitrate}
\begin{DoxyCompactList}\small\item\em nominal bitrate in bits per second \item\end{DoxyCompactList}\item
int {\bf quality}
\begin{DoxyCompactList}\small\item\em Nominal quality setting, 0-\/63. \item\end{DoxyCompactList}\item
int {\bf quick\_\-p}
\begin{DoxyCompactList}\small\item\em Quick encode/decode. \item\end{DoxyCompactList}\item
unsigned char {\bf version\_\-major}
\item
unsigned char {\bf version\_\-minor}
\item
unsigned char {\bf version\_\-subminor}
\item
void $\ast$ {\bf codec\_\-setup}
\item
int {\bf dropframes\_\-p}
\item
int {\bf keyframe\_\-auto\_\-p}
\item
ogg\_\-uint32\_\-t {\bf keyframe\_\-frequency}
\item
ogg\_\-uint32\_\-t {\bf keyframe\_\-frequency\_\-force}
\item
ogg\_\-uint32\_\-t {\bf keyframe\_\-data\_\-target\_\-bitrate}
\item
ogg\_\-int32\_\-t {\bf keyframe\_\-auto\_\-threshold}
\item
ogg\_\-uint32\_\-t {\bf keyframe\_\-mindistance}
\item
ogg\_\-int32\_\-t {\bf noise\_\-sensitivity}
\item
ogg\_\-int32\_\-t {\bf sharpness}
\item
{\bf theora\_\-pixelformat} {\bf pixelformat}
\begin{DoxyCompactList}\small\item\em chroma subsampling mode to expect \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
Theora bitstream info. Contains the basic playback parameters for a stream, corresponding to the initial 'info' header packet.
Encoded theora frames must be a multiple of 16 in width and height. To handle other frame sizes, a crop rectangle is specified in frame\_\-height and frame\_\-width, offset\_\-x and $\ast$ offset\_\-y. The offset and size should still be a multiple of 2 to avoid chroma sampling shifts. Offset values in this structure are measured from the upper left of the image.
Frame rate, in frames per second, is stored as a rational fraction. Aspect ratio is also stored as a rational fraction, and refers to the aspect ratio of the frame pixels, not of the overall frame itself.
See {\tt examples/encoder\_\-example.c} for usage examples of the other paramters and good default settings for the encoder parameters.
\subsection{Field Documentation}
\index{theora\_\-info@{theora\_\-info}!aspect\_\-denominator@{aspect\_\-denominator}}
\index{aspect\_\-denominator@{aspect\_\-denominator}!theora_info@{theora\_\-info}}
\subsubsection[{aspect\_\-denominator}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::aspect\_\-denominator}}\label{structtheora__info_afebc4d0cbfb34b68c833a8c79e83ae12}
pixel aspect ratio denominator \index{theora\_\-info@{theora\_\-info}!aspect\_\-numerator@{aspect\_\-numerator}}
\index{aspect\_\-numerator@{aspect\_\-numerator}!theora_info@{theora\_\-info}}
\subsubsection[{aspect\_\-numerator}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::aspect\_\-numerator}}\label{structtheora__info_a5a3ed8c79815fba1aa06c3f7d8e48b35}
pixel aspect ratio numerator \index{theora\_\-info@{theora\_\-info}!codec\_\-setup@{codec\_\-setup}}
\index{codec\_\-setup@{codec\_\-setup}!theora_info@{theora\_\-info}}
\subsubsection[{codec\_\-setup}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ {\bf theora\_\-info::codec\_\-setup}}\label{structtheora__info_a719a1d77a4a3bfeab79aa5747dbbb04c}
\index{theora\_\-info@{theora\_\-info}!colorspace@{colorspace}}
\index{colorspace@{colorspace}!theora_info@{theora\_\-info}}
\subsubsection[{colorspace}]{\setlength{\rightskip}{0pt plus 5cm}{\bf theora\_\-colorspace} {\bf theora\_\-info::colorspace}}\label{structtheora__info_a5eaba99c96706d47b426ab7b7602dc5d}
colorspace \index{theora\_\-info@{theora\_\-info}!dropframes\_\-p@{dropframes\_\-p}}
\index{dropframes\_\-p@{dropframes\_\-p}!theora_info@{theora\_\-info}}
\subsubsection[{dropframes\_\-p}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf theora\_\-info::dropframes\_\-p}}\label{structtheora__info_af294db65a8363a0bcf43f4727763b291}
\index{theora\_\-info@{theora\_\-info}!fps\_\-denominator@{fps\_\-denominator}}
\index{fps\_\-denominator@{fps\_\-denominator}!theora_info@{theora\_\-info}}
\subsubsection[{fps\_\-denominator}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::fps\_\-denominator}}\label{structtheora__info_a9aa7e826e0323a4ae8cd8646a6cfbfea}
frame rate denominator \index{theora\_\-info@{theora\_\-info}!fps\_\-numerator@{fps\_\-numerator}}
\index{fps\_\-numerator@{fps\_\-numerator}!theora_info@{theora\_\-info}}
\subsubsection[{fps\_\-numerator}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::fps\_\-numerator}}\label{structtheora__info_a3478199aa5ab213816c1819f70085ad7}
frame rate numerator \index{theora\_\-info@{theora\_\-info}!frame\_\-height@{frame\_\-height}}
\index{frame\_\-height@{frame\_\-height}!theora_info@{theora\_\-info}}
\subsubsection[{frame\_\-height}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::frame\_\-height}}\label{structtheora__info_a287e4c194f1d2e6deb39d59f1748ea48}
display frame height \index{theora\_\-info@{theora\_\-info}!frame\_\-width@{frame\_\-width}}
\index{frame\_\-width@{frame\_\-width}!theora_info@{theora\_\-info}}
\subsubsection[{frame\_\-width}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::frame\_\-width}}\label{structtheora__info_a8f28f4018a25634d40e4ae861fbbccfa}
display frame width \index{theora\_\-info@{theora\_\-info}!height@{height}}
\index{height@{height}!theora_info@{theora\_\-info}}
\subsubsection[{height}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::height}}\label{structtheora__info_ae6f0274fc4a7f285c422d91abb35f9c6}
encoded frame height \index{theora\_\-info@{theora\_\-info}!keyframe\_\-auto\_\-p@{keyframe\_\-auto\_\-p}}
\index{keyframe\_\-auto\_\-p@{keyframe\_\-auto\_\-p}!theora_info@{theora\_\-info}}
\subsubsection[{keyframe\_\-auto\_\-p}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf theora\_\-info::keyframe\_\-auto\_\-p}}\label{structtheora__info_a23648173369174f687085c0ce85ef30e}
\index{theora\_\-info@{theora\_\-info}!keyframe\_\-auto\_\-threshold@{keyframe\_\-auto\_\-threshold}}
\index{keyframe\_\-auto\_\-threshold@{keyframe\_\-auto\_\-threshold}!theora_info@{theora\_\-info}}
\subsubsection[{keyframe\_\-auto\_\-threshold}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-int32\_\-t {\bf theora\_\-info::keyframe\_\-auto\_\-threshold}}\label{structtheora__info_a95cb8958e29ad3d24047ee8f9e7fd99b}
\index{theora\_\-info@{theora\_\-info}!keyframe\_\-data\_\-target\_\-bitrate@{keyframe\_\-data\_\-target\_\-bitrate}}
\index{keyframe\_\-data\_\-target\_\-bitrate@{keyframe\_\-data\_\-target\_\-bitrate}!theora_info@{theora\_\-info}}
\subsubsection[{keyframe\_\-data\_\-target\_\-bitrate}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::keyframe\_\-data\_\-target\_\-bitrate}}\label{structtheora__info_a588942d1ee90a26a7effdf6a0e98b9ce}
\index{theora\_\-info@{theora\_\-info}!keyframe\_\-frequency@{keyframe\_\-frequency}}
\index{keyframe\_\-frequency@{keyframe\_\-frequency}!theora_info@{theora\_\-info}}
\subsubsection[{keyframe\_\-frequency}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::keyframe\_\-frequency}}\label{structtheora__info_a03e1b3e337af5f9dabaaaeb9050f145a}
\index{theora\_\-info@{theora\_\-info}!keyframe\_\-frequency\_\-force@{keyframe\_\-frequency\_\-force}}
\index{keyframe\_\-frequency\_\-force@{keyframe\_\-frequency\_\-force}!theora_info@{theora\_\-info}}
\subsubsection[{keyframe\_\-frequency\_\-force}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::keyframe\_\-frequency\_\-force}}\label{structtheora__info_ad9d2e22c44a53473010e6d1042dfe0d8}
\index{theora\_\-info@{theora\_\-info}!keyframe\_\-mindistance@{keyframe\_\-mindistance}}
\index{keyframe\_\-mindistance@{keyframe\_\-mindistance}!theora_info@{theora\_\-info}}
\subsubsection[{keyframe\_\-mindistance}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::keyframe\_\-mindistance}}\label{structtheora__info_aa79ca8c0e77a884d4487fd627fae32e9}
\index{theora\_\-info@{theora\_\-info}!noise\_\-sensitivity@{noise\_\-sensitivity}}
\index{noise\_\-sensitivity@{noise\_\-sensitivity}!theora_info@{theora\_\-info}}
\subsubsection[{noise\_\-sensitivity}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-int32\_\-t {\bf theora\_\-info::noise\_\-sensitivity}}\label{structtheora__info_ac4789034f547b57d1075e035050eeed9}
\index{theora\_\-info@{theora\_\-info}!offset\_\-x@{offset\_\-x}}
\index{offset\_\-x@{offset\_\-x}!theora_info@{theora\_\-info}}
\subsubsection[{offset\_\-x}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::offset\_\-x}}\label{structtheora__info_af5949a02bef29512f2705e6f6c944e3b}
horizontal offset of the displayed frame \index{theora\_\-info@{theora\_\-info}!offset\_\-y@{offset\_\-y}}
\index{offset\_\-y@{offset\_\-y}!theora_info@{theora\_\-info}}
\subsubsection[{offset\_\-y}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::offset\_\-y}}\label{structtheora__info_a91c3922097ba32a85acd584a01dc2c93}
vertical offset of the displayed frame \index{theora\_\-info@{theora\_\-info}!pixelformat@{pixelformat}}
\index{pixelformat@{pixelformat}!theora_info@{theora\_\-info}}
\subsubsection[{pixelformat}]{\setlength{\rightskip}{0pt plus 5cm}{\bf theora\_\-pixelformat} {\bf theora\_\-info::pixelformat}}\label{structtheora__info_a65ab4376ab5242ee82e06c78fb7008ab}
chroma subsampling mode to expect \index{theora\_\-info@{theora\_\-info}!quality@{quality}}
\index{quality@{quality}!theora_info@{theora\_\-info}}
\subsubsection[{quality}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf theora\_\-info::quality}}\label{structtheora__info_a71a4748a5f31bd58d0e403b7806c980d}
Nominal quality setting, 0-\/63. \index{theora\_\-info@{theora\_\-info}!quick\_\-p@{quick\_\-p}}
\index{quick\_\-p@{quick\_\-p}!theora_info@{theora\_\-info}}
\subsubsection[{quick\_\-p}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf theora\_\-info::quick\_\-p}}\label{structtheora__info_a2dfae4fd175dbd19254eaf0697778ff5}
Quick encode/decode. \index{theora\_\-info@{theora\_\-info}!sharpness@{sharpness}}
\index{sharpness@{sharpness}!theora_info@{theora\_\-info}}
\subsubsection[{sharpness}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-int32\_\-t {\bf theora\_\-info::sharpness}}\label{structtheora__info_a3fb695de2b2f56dd0203b9e2eb0df1cc}
\index{theora\_\-info@{theora\_\-info}!target\_\-bitrate@{target\_\-bitrate}}
\index{target\_\-bitrate@{target\_\-bitrate}!theora_info@{theora\_\-info}}
\subsubsection[{target\_\-bitrate}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf theora\_\-info::target\_\-bitrate}}\label{structtheora__info_a0cfba041767ae2416dd190a406afe713}
nominal bitrate in bits per second \index{theora\_\-info@{theora\_\-info}!version\_\-major@{version\_\-major}}
\index{version\_\-major@{version\_\-major}!theora_info@{theora\_\-info}}
\subsubsection[{version\_\-major}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char {\bf theora\_\-info::version\_\-major}}\label{structtheora__info_a7c5ebb9e6700aaef87f29f7c6074e474}
\index{theora\_\-info@{theora\_\-info}!version\_\-minor@{version\_\-minor}}
\index{version\_\-minor@{version\_\-minor}!theora_info@{theora\_\-info}}
\subsubsection[{version\_\-minor}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char {\bf theora\_\-info::version\_\-minor}}\label{structtheora__info_a75eda4f30270d833c7b9dba43932a06a}
\index{theora\_\-info@{theora\_\-info}!version\_\-subminor@{version\_\-subminor}}
\index{version\_\-subminor@{version\_\-subminor}!theora_info@{theora\_\-info}}
\subsubsection[{version\_\-subminor}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char {\bf theora\_\-info::version\_\-subminor}}\label{structtheora__info_aa07967ecd6e20bd2928ead42b6397b3d}
\index{theora\_\-info@{theora\_\-info}!width@{width}}
\index{width@{width}!theora_info@{theora\_\-info}}
\subsubsection[{width}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-uint32\_\-t {\bf theora\_\-info::width}}\label{structtheora__info_a17c2fc651bb3329f1ea6b13ff1d3957b}
encoded frame width
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf theora.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,41 @@
\section{theora\_\-state Struct Reference}
\label{structtheora__state}\index{theora\_\-state@{theora\_\-state}}
Codec internal state and context.
{\ttfamily \#include $<$theora.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
{\bf theora\_\-info} $\ast$ {\bf i}
\item
ogg\_\-int64\_\-t {\bf granulepos}
\item
void $\ast$ {\bf internal\_\-encode}
\item
void $\ast$ {\bf internal\_\-decode}
\end{DoxyCompactItemize}
\subsection{Detailed Description}
Codec internal state and context.
\subsection{Field Documentation}
\index{theora\_\-state@{theora\_\-state}!granulepos@{granulepos}}
\index{granulepos@{granulepos}!theora_state@{theora\_\-state}}
\subsubsection[{granulepos}]{\setlength{\rightskip}{0pt plus 5cm}ogg\_\-int64\_\-t {\bf theora\_\-state::granulepos}}\label{structtheora__state_a5dd344a3f79ea7501b18c756772fab7b}
\index{theora\_\-state@{theora\_\-state}!i@{i}}
\index{i@{i}!theora_state@{theora\_\-state}}
\subsubsection[{i}]{\setlength{\rightskip}{0pt plus 5cm}{\bf theora\_\-info}$\ast$ {\bf theora\_\-state::i}}\label{structtheora__state_a0efc7ac581ef260b0ca17f518ace0731}
\index{theora\_\-state@{theora\_\-state}!internal\_\-decode@{internal\_\-decode}}
\index{internal\_\-decode@{internal\_\-decode}!theora_state@{theora\_\-state}}
\subsubsection[{internal\_\-decode}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ {\bf theora\_\-state::internal\_\-decode}}\label{structtheora__state_ad20c4eebbc5ed9764cf03ba8b90e796e}
\index{theora\_\-state@{theora\_\-state}!internal\_\-encode@{internal\_\-encode}}
\index{internal\_\-encode@{internal\_\-encode}!theora_state@{theora\_\-state}}
\subsubsection[{internal\_\-encode}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ {\bf theora\_\-state::internal\_\-encode}}\label{structtheora__state_a1fbfd82fb7210cbcc4233cb680ec2af6}
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf theora.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,90 @@
\section{yuv\_\-buffer Struct Reference}
\label{structyuv__buffer}\index{yuv\_\-buffer@{yuv\_\-buffer}}
A YUV buffer for passing uncompressed frames to and from the codec.
{\ttfamily \#include $<$theora.h$>$}\subsection*{Data Fields}
\begin{DoxyCompactItemize}
\item
int {\bf y\_\-width}
\begin{DoxyCompactList}\small\item\em Width of the Y' luminance plane. \item\end{DoxyCompactList}\item
int {\bf y\_\-height}
\begin{DoxyCompactList}\small\item\em Height of the luminance plane. \item\end{DoxyCompactList}\item
int {\bf y\_\-stride}
\begin{DoxyCompactList}\small\item\em Offset in bytes between successive rows. \item\end{DoxyCompactList}\item
int {\bf uv\_\-width}
\begin{DoxyCompactList}\small\item\em Width of the Cb and Cr chroma planes. \item\end{DoxyCompactList}\item
int {\bf uv\_\-height}
\begin{DoxyCompactList}\small\item\em Height of the chroma planes. \item\end{DoxyCompactList}\item
int {\bf uv\_\-stride}
\begin{DoxyCompactList}\small\item\em Offset between successive chroma rows. \item\end{DoxyCompactList}\item
unsigned char $\ast$ {\bf y}
\begin{DoxyCompactList}\small\item\em Pointer to start of luminance data. \item\end{DoxyCompactList}\item
unsigned char $\ast$ {\bf u}
\begin{DoxyCompactList}\small\item\em Pointer to start of Cb data. \item\end{DoxyCompactList}\item
unsigned char $\ast$ {\bf v}
\begin{DoxyCompactList}\small\item\em Pointer to start of Cr data. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
A YUV buffer for passing uncompressed frames to and from the codec. This holds a Y'CbCr frame in planar format. The CbCr planes can be subsampled and have their own separate dimensions and row stride offsets. Note that the strides may be negative in some configurations. For theora the width and height of the largest plane must be a multiple of 16. The actual meaningful picture size and offset are stored in the \doxyref{theora\_\-info}{p.}{structtheora__info} structure; frames returned by the decoder may need to be cropped for display.
All samples are 8 bits. Within each plane samples are ordered by row from the top of the frame to the bottom. Within each row samples are ordered from left to right.
During decode, the \doxyref{yuv\_\-buffer}{p.}{structyuv__buffer} struct is allocated by the user, but all fields (including luma and chroma pointers) are filled by the library. These pointers address library-\/internal memory and their contents should not be modified.
Conversely, during encode the user allocates the struct and fills out all fields. The user also manages the data addressed by the luma and chroma pointers. See the encoder\_\-example.c and dump\_\-video.c example files in theora/examples/ for more information.
\subsection{Field Documentation}
\index{yuv\_\-buffer@{yuv\_\-buffer}!u@{u}}
\index{u@{u}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{u}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char$\ast$ {\bf yuv\_\-buffer::u}}\label{structyuv__buffer_a8b1857afe3ffac28f259499a57a559e1}
Pointer to start of Cb data. \index{yuv\_\-buffer@{yuv\_\-buffer}!uv\_\-height@{uv\_\-height}}
\index{uv\_\-height@{uv\_\-height}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{uv\_\-height}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf yuv\_\-buffer::uv\_\-height}}\label{structyuv__buffer_a640f1a0b456d3807f9f0538b22f10097}
Height of the chroma planes. \index{yuv\_\-buffer@{yuv\_\-buffer}!uv\_\-stride@{uv\_\-stride}}
\index{uv\_\-stride@{uv\_\-stride}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{uv\_\-stride}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf yuv\_\-buffer::uv\_\-stride}}\label{structyuv__buffer_ab265cc24ffb5650bf52daf223b0debb9}
Offset between successive chroma rows. \index{yuv\_\-buffer@{yuv\_\-buffer}!uv\_\-width@{uv\_\-width}}
\index{uv\_\-width@{uv\_\-width}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{uv\_\-width}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf yuv\_\-buffer::uv\_\-width}}\label{structyuv__buffer_a8c59a57c35af0be519ee47f15e49fe2b}
Width of the Cb and Cr chroma planes. \index{yuv\_\-buffer@{yuv\_\-buffer}!v@{v}}
\index{v@{v}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{v}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char$\ast$ {\bf yuv\_\-buffer::v}}\label{structyuv__buffer_aa429491dd112adb0254672c59ef55075}
Pointer to start of Cr data. \index{yuv\_\-buffer@{yuv\_\-buffer}!y@{y}}
\index{y@{y}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{y}]{\setlength{\rightskip}{0pt plus 5cm}unsigned char$\ast$ {\bf yuv\_\-buffer::y}}\label{structyuv__buffer_a725727c70eeced6b8c90866973399ac1}
Pointer to start of luminance data. \index{yuv\_\-buffer@{yuv\_\-buffer}!y\_\-height@{y\_\-height}}
\index{y\_\-height@{y\_\-height}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{y\_\-height}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf yuv\_\-buffer::y\_\-height}}\label{structyuv__buffer_a5a8b60e012247e2caffcbbaca99414e0}
Height of the luminance plane. \index{yuv\_\-buffer@{yuv\_\-buffer}!y\_\-stride@{y\_\-stride}}
\index{y\_\-stride@{y\_\-stride}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{y\_\-stride}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf yuv\_\-buffer::y\_\-stride}}\label{structyuv__buffer_a9cdf61834c11b2351640a4a243ad0549}
Offset in bytes between successive rows. \index{yuv\_\-buffer@{yuv\_\-buffer}!y\_\-width@{y\_\-width}}
\index{y\_\-width@{y\_\-width}!yuv_buffer@{yuv\_\-buffer}}
\subsubsection[{y\_\-width}]{\setlength{\rightskip}{0pt plus 5cm}int {\bf yuv\_\-buffer::y\_\-width}}\label{structyuv__buffer_aaa6c06c071da933231647238418d5fc0}
Width of the Y' luminance plane.
The documentation for this struct was generated from the following file:\begin{DoxyCompactItemize}
\item
{\bf theora.h}\end{DoxyCompactItemize}

View file

@ -0,0 +1,185 @@
\section{theora.h File Reference}
\label{theora_8h}\index{theora.h@{theora.h}}
The libtheora pre-\/1.0 legacy C API.
{\ttfamily \#include $<$stddef.h$>$}\par
{\ttfamily \#include $<$ogg/ogg.h$>$}\par
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
struct {\bf yuv\_\-buffer}
\begin{DoxyCompactList}\small\item\em A YUV buffer for passing uncompressed frames to and from the codec. \item\end{DoxyCompactList}\item
struct {\bf theora\_\-info}
\begin{DoxyCompactList}\small\item\em Theora bitstream info. \item\end{DoxyCompactList}\item
struct {\bf theora\_\-state}
\begin{DoxyCompactList}\small\item\em Codec internal state and context. \item\end{DoxyCompactList}\item
struct {\bf theora\_\-comment}
\begin{DoxyCompactList}\small\item\em Comment header metadata. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Defines}
\begin{DoxyCompactItemize}
\item
\#define {\bf OC\_\-FAULT}~-\/1
\begin{DoxyCompactList}\small\item\em General failure. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-EINVAL}~-\/10
\begin{DoxyCompactList}\small\item\em Library encountered invalid internal data. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-DISABLED}~-\/11
\begin{DoxyCompactList}\small\item\em Requested action is disabled. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-BADHEADER}~-\/20
\begin{DoxyCompactList}\small\item\em Header packet was corrupt/invalid. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-NOTFORMAT}~-\/21
\begin{DoxyCompactList}\small\item\em Packet is not a theora packet. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-VERSION}~-\/22
\begin{DoxyCompactList}\small\item\em Bitstream version is not handled. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-IMPL}~-\/23
\begin{DoxyCompactList}\small\item\em Feature or action not implemented. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-BADPACKET}~-\/24
\begin{DoxyCompactList}\small\item\em Packet is corrupt. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-NEWPACKET}~-\/25
\begin{DoxyCompactList}\small\item\em Packet is an (ignorable) unhandled extension. \item\end{DoxyCompactList}\item
\#define {\bf OC\_\-DUPFRAME}~1
\begin{DoxyCompactList}\small\item\em Packet is a dropped frame. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\begin{Indent}{\bf theora\_\-control() codes}\par
{\em \label{_amgrp13fd61986cff4566fe89a40e30b74ad9}
}\begin{DoxyCompactItemize}
\item
\#define {\bf TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}~(1)
\begin{DoxyCompactList}\small\item\em Get the maximum post-\/processing level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-PPLEVEL}~(3)
\begin{DoxyCompactList}\small\item\em Set the post-\/processing level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}~(4)
\begin{DoxyCompactList}\small\item\em Sets the maximum distance between key frames. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-GRANPOS}~(5)
\begin{DoxyCompactList}\small\item\em Set the granule position. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}~(2)
\begin{DoxyCompactList}\small\item\em Sets the quantization parameters to use. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}~(10)
\begin{DoxyCompactList}\small\item\em Disables any encoder features that would prevent lossless transcoding back to VP3. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}~(12)
\begin{DoxyCompactList}\small\item\em Gets the maximum speed level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}~(14)
\begin{DoxyCompactList}\small\item\em Sets the speed level. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Enumerations}
\begin{DoxyCompactItemize}
\item
enum {\bf theora\_\-colorspace} \{ {\bf OC\_\-CS\_\-UNSPECIFIED},
{\bf OC\_\-CS\_\-ITU\_\-REC\_\-470M},
{\bf OC\_\-CS\_\-ITU\_\-REC\_\-470BG},
{\bf OC\_\-CS\_\-NSPACES}
\}
\begin{DoxyCompactList}\small\item\em A Colorspace. \item\end{DoxyCompactList}\item
enum {\bf theora\_\-pixelformat} \{ {\bf OC\_\-PF\_\-420},
{\bf OC\_\-PF\_\-RSVD},
{\bf OC\_\-PF\_\-422},
{\bf OC\_\-PF\_\-444}
\}
\begin{DoxyCompactList}\small\item\em A Chroma subsampling. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item
const char $\ast$ {\bf theora\_\-version\_\-string} (void)
\begin{DoxyCompactList}\small\item\em Retrieve a human-\/readable string to identify the encoder vendor and version. \item\end{DoxyCompactList}\item
ogg\_\-uint32\_\-t {\bf theora\_\-version\_\-number} (void)
\begin{DoxyCompactList}\small\item\em Retrieve a 32-\/bit version number. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-init} ({\bf theora\_\-state} $\ast$th, {\bf theora\_\-info} $\ast$ti)
\begin{DoxyCompactList}\small\item\em Initialize the theora encoder. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-YUVin} ({\bf theora\_\-state} $\ast$t, {\bf yuv\_\-buffer} $\ast$yuv)
\begin{DoxyCompactList}\small\item\em Submit a YUV buffer to the theora encoder. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-packetout} ({\bf theora\_\-state} $\ast$t, int last\_\-p, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Request the next packet of encoded video. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-header} ({\bf theora\_\-state} $\ast$t, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Request a packet containing the initial header. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-comment} ({\bf theora\_\-comment} $\ast$tc, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Request a comment header packet from provided metadata. \item\end{DoxyCompactList}\item
int {\bf theora\_\-encode\_\-tables} ({\bf theora\_\-state} $\ast$t, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Request a packet containing the codebook tables for the stream. \item\end{DoxyCompactList}\item
int {\bf theora\_\-decode\_\-header} ({\bf theora\_\-info} $\ast$ci, {\bf theora\_\-comment} $\ast$cc, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Decode an Ogg packet, with the expectation that the packet contains an initial header, comment data or codebook tables. \item\end{DoxyCompactList}\item
int {\bf theora\_\-decode\_\-init} ({\bf theora\_\-state} $\ast$th, {\bf theora\_\-info} $\ast$c)
\begin{DoxyCompactList}\small\item\em Initialize a \doxyref{theora\_\-state}{p.}{structtheora__state} handle for decoding. \item\end{DoxyCompactList}\item
int {\bf theora\_\-decode\_\-packetin} ({\bf theora\_\-state} $\ast$th, ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Input a packet containing encoded data into the theora decoder. \item\end{DoxyCompactList}\item
int {\bf theora\_\-decode\_\-YUVout} ({\bf theora\_\-state} $\ast$th, {\bf yuv\_\-buffer} $\ast$yuv)
\begin{DoxyCompactList}\small\item\em Output the next available frame of decoded YUV data. \item\end{DoxyCompactList}\item
int {\bf theora\_\-packet\_\-isheader} (ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Report whether a theora packet is a header or not This function does no verification beyond checking the header flag bit so it should not be used for bitstream identification; use \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} for that. \item\end{DoxyCompactList}\item
int {\bf theora\_\-packet\_\-iskeyframe} (ogg\_\-packet $\ast$op)
\begin{DoxyCompactList}\small\item\em Report whether a theora packet is a keyframe or not. \item\end{DoxyCompactList}\item
int {\bf theora\_\-granule\_\-shift} ({\bf theora\_\-info} $\ast$ti)
\begin{DoxyCompactList}\small\item\em Report the granulepos shift radix. \item\end{DoxyCompactList}\item
ogg\_\-int64\_\-t {\bf theora\_\-granule\_\-frame} ({\bf theora\_\-state} $\ast$th, ogg\_\-int64\_\-t granulepos)
\begin{DoxyCompactList}\small\item\em Convert a granulepos to an absolute frame index, starting at 0. \item\end{DoxyCompactList}\item
double {\bf theora\_\-granule\_\-time} ({\bf theora\_\-state} $\ast$th, ogg\_\-int64\_\-t granulepos)
\begin{DoxyCompactList}\small\item\em Convert a granulepos to absolute time in seconds. \item\end{DoxyCompactList}\item
void {\bf theora\_\-info\_\-init} ({\bf theora\_\-info} $\ast$c)
\begin{DoxyCompactList}\small\item\em Initialize a \doxyref{theora\_\-info}{p.}{structtheora__info} structure. \item\end{DoxyCompactList}\item
void {\bf theora\_\-info\_\-clear} ({\bf theora\_\-info} $\ast$c)
\begin{DoxyCompactList}\small\item\em Clear a \doxyref{theora\_\-info}{p.}{structtheora__info} structure. \item\end{DoxyCompactList}\item
void {\bf theora\_\-clear} ({\bf theora\_\-state} $\ast$t)
\begin{DoxyCompactList}\small\item\em Free all internal data associated with a \doxyref{theora\_\-state}{p.}{structtheora__state} handle. \item\end{DoxyCompactList}\item
void {\bf theora\_\-comment\_\-init} ({\bf theora\_\-comment} $\ast$tc)
\begin{DoxyCompactList}\small\item\em Initialize an allocated \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure. \item\end{DoxyCompactList}\item
void {\bf theora\_\-comment\_\-add} ({\bf theora\_\-comment} $\ast$tc, char $\ast$comment)
\begin{DoxyCompactList}\small\item\em Add a comment to an initialized \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure. \item\end{DoxyCompactList}\item
void {\bf theora\_\-comment\_\-add\_\-tag} ({\bf theora\_\-comment} $\ast$tc, char $\ast$tag, char $\ast$value)
\begin{DoxyCompactList}\small\item\em Add a comment to an initialized \doxyref{theora\_\-comment}{p.}{structtheora__comment} structure. \item\end{DoxyCompactList}\item
char $\ast$ {\bf theora\_\-comment\_\-query} ({\bf theora\_\-comment} $\ast$tc, char $\ast$tag, int count)
\begin{DoxyCompactList}\small\item\em Look up a comment value by tag. \item\end{DoxyCompactList}\item
int {\bf theora\_\-comment\_\-query\_\-count} ({\bf theora\_\-comment} $\ast$tc, char $\ast$tag)
\begin{DoxyCompactList}\small\item\em Look up the number of instances of a tag. \item\end{DoxyCompactList}\item
void {\bf theora\_\-comment\_\-clear} ({\bf theora\_\-comment} $\ast$tc)
\begin{DoxyCompactList}\small\item\em Clear an allocated \doxyref{theora\_\-comment}{p.}{structtheora__comment} struct so that it can be freed. \item\end{DoxyCompactList}\item
int {\bf theora\_\-control} ({\bf theora\_\-state} $\ast$th, int req, void $\ast$buf, size\_\-t buf\_\-sz)
\begin{DoxyCompactList}\small\item\em Encoder control function. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
The libtheora pre-\/1.0 legacy C API. \subsection{Introduction}\label{index_intro}
This is the documentation for the libtheora legacy C API, declared in the \doxyref{theora.h}{p.}{theora_8h} header, which describes the old interface used before the 1.0 release. This API was widely deployed for several years and remains supported, but for new code we recommend the cleaner API declared in \doxyref{theoradec.h}{p.}{theoradec_8h} and \doxyref{theoraenc.h}{p.}{theoraenc_8h}.
libtheora is the reference implementation for {\tt Theora}, a free video codec. Theora is derived from On2's VP3 codec with improved integration with Ogg multimedia formats by {\tt Xiph.Org}.\subsection{Overview}\label{theora_8h_overview}
This library will both decode and encode theora packets to/from raw YUV frames. In either case, the packets will most likely either come from or need to be embedded in an Ogg stream. Use {\tt libogg} or {\tt liboggz} to extract/package these packets.\subsection{Decoding Process}\label{theora_8h_decoding}
Decoding can be separated into the following steps:
\begin{DoxyEnumerate}
\item initialise \doxyref{theora\_\-info}{p.}{structtheora__info} and \doxyref{theora\_\-comment}{p.}{structtheora__comment} structures using \doxyref{theora\_\-info\_\-init()}{p.}{group__oldfuncs_ga3091c87d48f1faba018c5956379a6d90} and \doxyref{theora\_\-comment\_\-init()}{p.}{group__oldfuncs_ga811b92785df3bdbbebb3de612d9d6ce0}: \begin{DoxyVerb}
theora_info info;
theora_comment comment;
theora_info_init(&info);
theora_comment_init(&comment);
\end{DoxyVerb}
\item retrieve header packets from Ogg stream (there should be 3) and decode into \doxyref{theora\_\-info}{p.}{structtheora__info} and \doxyref{theora\_\-comment}{p.}{structtheora__comment} structures using \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82}. See \doxyref{Identifying Theora Packets}{p.}{theora_8h_identification} for more information on identifying which packets are theora packets. \begin{DoxyVerb}
int i;
for (i = 0; i < 3; i++)
{
(get a theora packet "op" from the Ogg stream)
theora_decode_header(&info, &comment, op);
}
\end{DoxyVerb}
\item initialise the decoder based on the information retrieved into the \doxyref{theora\_\-info}{p.}{structtheora__info} struct by \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82}. You will need a \doxyref{theora\_\-state}{p.}{structtheora__state} struct. \begin{DoxyVerb}
theora_state state;
theora_decode_init(&state, &info);
\end{DoxyVerb}
\item pass in packets and retrieve decoded frames! See the \doxyref{yuv\_\-buffer}{p.}{structyuv__buffer} documentation for information on how to retrieve raw YUV data. \begin{DoxyVerb}
yuf_buffer buffer;
while (last packet was not e_o_s) {
(get a theora packet "op" from the Ogg stream)
theora_decode_packetin(&state, op);
theora_decode_YUVout(&state, &buffer);
}
\end{DoxyVerb}
\end{DoxyEnumerate}\subsubsection{Identifying Theora Packets}\label{theora_8h_identification}
All streams inside an Ogg file have a unique serial\_\-no attached to the stream. Typically, you will want to
\begin{DoxyItemize}
\item retrieve the serial\_\-no for each b\_\-o\_\-s (beginning of stream) page encountered within the Ogg file;
\item test the first (only) packet on that page to determine if it is a theora packet;
\item once you have found a theora b\_\-o\_\-s page then use the retrieved serial\_\-no to identify future packets belonging to the same theora stream.
\end{DoxyItemize}
Note that you {\itshape cannot\/} use \doxyref{theora\_\-packet\_\-isheader()}{p.}{group__oldfuncs_gab969f9d0407683f0e5abe73d0839a25b} to determine if a packet is a theora packet or not, as this function does not perform any checking beyond whether a header bit is present. Instead, use the \doxyref{theora\_\-decode\_\-header()}{p.}{group__oldfuncs_ga02915e63c1bd733ee291f577a8b75a82} function and check the return value; or examine the header bytes at the beginning of the Ogg page.

View file

@ -0,0 +1,194 @@
\section{theoradec.h File Reference}
\label{theoradec_8h}\index{theoradec.h@{theoradec.h}}
The {\ttfamily libtheoradec} C decoding API.
{\ttfamily \#include $<$stddef.h$>$}\par
{\ttfamily \#include $<$ogg/ogg.h$>$}\par
{\ttfamily \#include \char`\"{}codec.h\char`\"{}}\par
\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item
struct {\bf th\_\-stripe\_\-callback}
\begin{DoxyCompactList}\small\item\em The striped decode callback data to pass to \doxyref{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}{p.}{theoradec_8h_ac95cc9e109474b0fa4bb920ab2cfdf1e}. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Defines}
\begin{DoxyCompactItemize}
\item
\#define {\bf \_\-O\_\-THEORA\_\-THEORADEC\_\-H\_\-}~(1)
\end{DoxyCompactItemize}
\begin{Indent}{\bf th\_\-decode\_\-ctl() codes}\par
{\em \label{_amgrp638dfd34390d0a936dbf76caf938d78d}
\label{theoradec_8h_decctlcodes}
These are the available request codes for \doxyref{th\_\-decode\_\-ctl()}{p.}{group__decfuncs_ga1a8051958d75b1012573b6e3c8f670e1}. By convention, these are odd, to distinguish them from the \doxyref{encoder control codes}{p.}{theoraenc_8h_encctlcodes}. Keep any experimental or vendor-\/specific values above {\ttfamily 0x8000}. }\begin{DoxyCompactItemize}
\item
\#define {\bf TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}~(1)
\begin{DoxyCompactList}\small\item\em Gets the maximum post-\/processing level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-PPLEVEL}~(3)
\begin{DoxyCompactList}\small\item\em Sets the post-\/processing level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-GRANPOS}~(5)
\begin{DoxyCompactList}\small\item\em Sets the granule position. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}~(7)
\begin{DoxyCompactList}\small\item\em Sets the striped decode callback function. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MBMODE}~(9)
\begin{DoxyCompactList}\small\item\em Enables telemetry and sets the macroblock display mode. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MV}~(11)
\begin{DoxyCompactList}\small\item\em Enables telemetry and sets the motion vector display mode. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-QI}~(13)
\begin{DoxyCompactList}\small\item\em Enables telemetry and sets the adaptive quantization display mode. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-BITS}~(15)
\begin{DoxyCompactList}\small\item\em Enables telemetry and sets the bitstream breakdown visualization mode. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item
typedef void($\ast$ {\bf th\_\-stripe\_\-decoded\_\-func} )(void $\ast$\_\-ctx, {\bf th\_\-ycbcr\_\-buffer} \_\-buf, int \_\-yfrag0, int \_\-yfrag\_\-end)
\begin{DoxyCompactList}\small\item\em A callback function for striped decode. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\begin{Indent}{\bf Decoder state}\par
{\em \label{_amgrp20ad7456b6a1ebc1cb57f3e51d4d7bc3}
The following data structures are opaque, and their contents are not publicly defined by this API.
Referring to their internals directly is unsupported, and may break without warning. }\begin{DoxyCompactItemize}
\item
typedef struct {\bf th\_\-dec\_\-ctx} {\bf th\_\-dec\_\-ctx}
\begin{DoxyCompactList}\small\item\em The decoder context. \item\end{DoxyCompactList}\item
typedef struct {\bf th\_\-setup\_\-info} {\bf th\_\-setup\_\-info}
\begin{DoxyCompactList}\small\item\em Setup information. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Functions}
\begin{Indent}{\bf Functions for decoding}\par
{\em \label{_amgrp9d29c94aa62f20426aa5ff062c7daedd}
You must link to {\ttfamily libtheoradec} if you use any of the functions in this section.
The functions are listed in the order they are used in a typical decode. The basic steps are:
\begin{DoxyItemize}
\item Parse the header packets by repeatedly calling \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50}.
\item Allocate a \doxyref{th\_\-dec\_\-ctx}{p.}{theoradec_8h_a843d70bb02563885a8d54b9c1a781729} handle with \doxyref{th\_\-decode\_\-alloc()}{p.}{group__decfuncs_ga0ef07a9a97849054aa606c595a2d807e}.
\item Call \doxyref{th\_\-setup\_\-free()}{p.}{group__decfuncs_gadef55431b68aaa59d0d7b32b2f118f27} to free any memory used for codec setup information.
\item Perform any additional decoder configuration with \doxyref{th\_\-decode\_\-ctl()}{p.}{group__decfuncs_ga1a8051958d75b1012573b6e3c8f670e1}.
\item For each video data packet:
\begin{DoxyItemize}
\item Submit the packet to the decoder via \doxyref{th\_\-decode\_\-packetin()}{p.}{group__decfuncs_ga31c814bf09b2232aff69c57ae20f04eb}.
\item Retrieve the uncompressed video data via \doxyref{th\_\-decode\_\-ycbcr\_\-out()}{p.}{group__decfuncs_gaa9cc8af63fa8540e0fc95572f259cdcb}.
\end{DoxyItemize}
\item Call \doxyref{th\_\-decode\_\-free()}{p.}{group__decfuncs_gafb6684ad8ba507b71112bc9de148e7d0} to release all decoder memory.
\end{DoxyItemize}}\begin{DoxyCompactItemize}
\item
int {\bf th\_\-decode\_\-headerin} ({\bf th\_\-info} $\ast$\_\-info, {\bf th\_\-comment} $\ast$\_\-tc, {\bf th\_\-setup\_\-info} $\ast$$\ast$\_\-setup, ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Decodes the header packets of a Theora stream. \item\end{DoxyCompactList}\item
{\bf th\_\-dec\_\-ctx} $\ast$ {\bf th\_\-decode\_\-alloc} (const {\bf th\_\-info} $\ast$\_\-info, const {\bf th\_\-setup\_\-info} $\ast$\_\-setup)
\begin{DoxyCompactList}\small\item\em Allocates a decoder instance. \item\end{DoxyCompactList}\item
void {\bf th\_\-setup\_\-free} ({\bf th\_\-setup\_\-info} $\ast$\_\-setup)
\begin{DoxyCompactList}\small\item\em Releases all storage used for the decoder setup information. \item\end{DoxyCompactList}\item
int {\bf th\_\-decode\_\-ctl} ({\bf th\_\-dec\_\-ctx} $\ast$\_\-dec, int \_\-req, void $\ast$\_\-buf, size\_\-t \_\-buf\_\-sz)
\begin{DoxyCompactList}\small\item\em Decoder control function. \item\end{DoxyCompactList}\item
int {\bf th\_\-decode\_\-packetin} ({\bf th\_\-dec\_\-ctx} $\ast$\_\-dec, const ogg\_\-packet $\ast$\_\-op, ogg\_\-int64\_\-t $\ast$\_\-granpos)
\begin{DoxyCompactList}\small\item\em Submits a packet containing encoded video data to the decoder. \item\end{DoxyCompactList}\item
int {\bf th\_\-decode\_\-ycbcr\_\-out} ({\bf th\_\-dec\_\-ctx} $\ast$\_\-dec, {\bf th\_\-ycbcr\_\-buffer} \_\-ycbcr)
\begin{DoxyCompactList}\small\item\em Outputs the next available frame of decoded Y'CbCr data. \item\end{DoxyCompactList}\item
void {\bf th\_\-decode\_\-free} ({\bf th\_\-dec\_\-ctx} $\ast$\_\-dec)
\begin{DoxyCompactList}\small\item\em Frees an allocated decoder instance. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection{Detailed Description}
The {\ttfamily libtheoradec} C decoding API.
\subsection{Define Documentation}
\index{theoradec.h@{theoradec.h}!\_\-O\_\-THEORA\_\-THEORADEC\_\-H\_\-@{\_\-O\_\-THEORA\_\-THEORADEC\_\-H\_\-}}
\index{\_\-O\_\-THEORA\_\-THEORADEC\_\-H\_\-@{\_\-O\_\-THEORA\_\-THEORADEC\_\-H\_\-}!theoradec.h@{theoradec.h}}
\subsubsection[{\_\-O\_\-THEORA\_\-THEORADEC\_\-H\_\-}]{\setlength{\rightskip}{0pt plus 5cm}\#define \_\-O\_\-THEORA\_\-THEORADEC\_\-H\_\-~(1)}\label{theoradec_8h_a0d78767a326c34dbf84d5b845cba7b4a}
\index{theoradec.h@{theoradec.h}!TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX@{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}}
\index{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX@{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}!theoradec.h@{theoradec.h}}
\subsubsection[{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX~(1)}\label{theoradec_8h_ab31f251c9319f2140d247585d30b3d07}
Gets the maximum post-\/processing level. The decoder supports a post-\/processing filter that can improve the appearance of the decoded images. This returns the highest level setting for this post-\/processor, corresponding to maximum improvement and computational expense.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\rightarrow$} {\em \_\-buf}]int: The maximum post-\/processing level. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-dec\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoradec.h@{theoradec.h}!TH\_\-DECCTL\_\-SET\_\-GRANPOS@{TH\_\-DECCTL\_\-SET\_\-GRANPOS}}
\index{TH\_\-DECCTL\_\-SET\_\-GRANPOS@{TH\_\-DECCTL\_\-SET\_\-GRANPOS}!theoradec.h@{theoradec.h}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-GRANPOS}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-GRANPOS~(5)}\label{theoradec_8h_a1e870c654d35394f0d490045df04e0f5}
Sets the granule position. Call this after a seek, before decoding the first frame, to ensure that the proper granule position is returned for all subsequent frames. If you track timestamps yourself and do not use the granule position returned by the decoder, then you need not call this function.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily ogg\_\-int64\_\-t}: The granule position of the next frame. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-dec\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(ogg\_\-int64\_\-t)}, or the granule position is negative. \end{DoxyRetVals}
\index{theoradec.h@{theoradec.h}!TH\_\-DECCTL\_\-SET\_\-PPLEVEL@{TH\_\-DECCTL\_\-SET\_\-PPLEVEL}}
\index{TH\_\-DECCTL\_\-SET\_\-PPLEVEL@{TH\_\-DECCTL\_\-SET\_\-PPLEVEL}!theoradec.h@{theoradec.h}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-PPLEVEL}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-PPLEVEL~(3)}\label{theoradec_8h_a87774c35e1a755a84e2d705b38ebef0d}
Sets the post-\/processing level. By default, post-\/processing is disabled.
Sets the level of post-\/processing to use when decoding the compressed stream. This must be a value between zero (off) and the maximum returned by TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]int: The new post-\/processing level. 0 to disable; larger values use more CPU. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-dec\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)}, or the post-\/processing level is out of bounds. The maximum post-\/processing level may be implementation-\/specific, and can be obtained via \doxyref{TH\_\-DECCTL\_\-GET\_\-PPLEVEL\_\-MAX}{p.}{theoradec_8h_ab31f251c9319f2140d247585d30b3d07}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoradec.h@{theoradec.h}!TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB@{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}}
\index{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB@{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}!theoradec.h@{theoradec.h}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-STRIPE\_\-CB~(7)}\label{theoradec_8h_ac95cc9e109474b0fa4bb920ab2cfdf1e}
Sets the striped decode callback function. If set, this function will be called as each piece of a frame is fully decoded in \doxyref{th\_\-decode\_\-packetin()}{p.}{group__decfuncs_ga31c814bf09b2232aff69c57ae20f04eb}. You can pass in a \doxyref{th\_\-stripe\_\-callback}{p.}{structth__stripe__callback} with \doxyref{th\_\-stripe\_\-callback::stripe\_\-decoded}{p.}{structth__stripe__callback_a977c725680a37e3446e459f063b1f4a5} set to {\ttfamily NULL} to disable the callbacks at any point. Enabling striped decode does not prevent you from calling \doxyref{th\_\-decode\_\-ycbcr\_\-out()}{p.}{group__decfuncs_gaa9cc8af63fa8540e0fc95572f259cdcb} after the frame is fully decoded.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]\doxyref{th\_\-stripe\_\-callback}{p.}{structth__stripe__callback}: The callback parameters. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-dec\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(th\_\-stripe\_\-callback)}. \end{DoxyRetVals}
\index{theoradec.h@{theoradec.h}!TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-BITS@{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-BITS}}
\index{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-BITS@{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-BITS}!theoradec.h@{theoradec.h}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-BITS}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-BITS~(15)}\label{theoradec_8h_a7f43fec07486f8a5f00e92aab7d44a25}
Enables telemetry and sets the bitstream breakdown visualization mode. \index{theoradec.h@{theoradec.h}!TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MBMODE@{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MBMODE}}
\index{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MBMODE@{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MBMODE}!theoradec.h@{theoradec.h}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MBMODE}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MBMODE~(9)}\label{theoradec_8h_a8d5e0b9b4c8898f93f241acbeb7e7ffb}
Enables telemetry and sets the macroblock display mode. \index{theoradec.h@{theoradec.h}!TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MV@{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MV}}
\index{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MV@{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MV}!theoradec.h@{theoradec.h}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MV}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-MV~(11)}\label{theoradec_8h_a829285a03d24832c583f33c6357df8aa}
Enables telemetry and sets the motion vector display mode. \index{theoradec.h@{theoradec.h}!TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-QI@{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-QI}}
\index{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-QI@{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-QI}!theoradec.h@{theoradec.h}}
\subsubsection[{TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-QI}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-DECCTL\_\-SET\_\-TELEMETRY\_\-QI~(13)}\label{theoradec_8h_ae3e2f7674ad92fe67b63915d48c9df5b}
Enables telemetry and sets the adaptive quantization display mode.
\subsection{Typedef Documentation}
\index{theoradec.h@{theoradec.h}!th\_\-dec\_\-ctx@{th\_\-dec\_\-ctx}}
\index{th\_\-dec\_\-ctx@{th\_\-dec\_\-ctx}!theoradec.h@{theoradec.h}}
\subsubsection[{th\_\-dec\_\-ctx}]{\setlength{\rightskip}{0pt plus 5cm}typedef struct {\bf th\_\-dec\_\-ctx} {\bf th\_\-dec\_\-ctx}}\label{theoradec_8h_a843d70bb02563885a8d54b9c1a781729}
The decoder context. \index{theoradec.h@{theoradec.h}!th\_\-setup\_\-info@{th\_\-setup\_\-info}}
\index{th\_\-setup\_\-info@{th\_\-setup\_\-info}!theoradec.h@{theoradec.h}}
\subsubsection[{th\_\-setup\_\-info}]{\setlength{\rightskip}{0pt plus 5cm}typedef struct {\bf th\_\-setup\_\-info} {\bf th\_\-setup\_\-info}}\label{theoradec_8h_ab71cd2657455cc27d6c0127c66a89f28}
Setup information. This contains auxiliary information (Huffman tables and quantization parameters) decoded from the setup header by \doxyref{th\_\-decode\_\-headerin()}{p.}{group__decfuncs_ga006d01d36fbe64768c571e6a12b7fc50} to be passed to \doxyref{th\_\-decode\_\-alloc()}{p.}{group__decfuncs_ga0ef07a9a97849054aa606c595a2d807e}. It can be re-\/used to initialize any number of decoders, and can be freed via \doxyref{th\_\-setup\_\-free()}{p.}{group__decfuncs_gadef55431b68aaa59d0d7b32b2f118f27} at any time. \index{theoradec.h@{theoradec.h}!th\_\-stripe\_\-decoded\_\-func@{th\_\-stripe\_\-decoded\_\-func}}
\index{th\_\-stripe\_\-decoded\_\-func@{th\_\-stripe\_\-decoded\_\-func}!theoradec.h@{theoradec.h}}
\subsubsection[{th\_\-stripe\_\-decoded\_\-func}]{\setlength{\rightskip}{0pt plus 5cm}typedef void($\ast$ {\bf th\_\-stripe\_\-decoded\_\-func})(void $\ast$\_\-ctx, {\bf th\_\-ycbcr\_\-buffer} \_\-buf, int \_\-yfrag0, int \_\-yfrag\_\-end)}\label{theoradec_8h_a25dfc8713157545abd81eda476ca4b54}
A callback function for striped decode. This is a function pointer to an application-\/provided function that will be called each time a section of the image is fully decoded in \doxyref{th\_\-decode\_\-packetin()}{p.}{group__decfuncs_ga31c814bf09b2232aff69c57ae20f04eb}. This allows the application to process the section immediately, while it is still in cache. Note that the frame is decoded bottom to top, so {\itshape \_\-yfrag0\/} will steadily decrease with each call until it reaches 0, at which point the full frame is decoded. The number of fragment rows made available in each call depends on the pixel format and the number of post-\/processing filters enabled, and may not even be constant for the entire frame. If a non-\/{\ttfamily NULL} {\itshape \_\-granpos\/} pointer is passed to \doxyref{th\_\-decode\_\-packetin()}{p.}{group__decfuncs_ga31c814bf09b2232aff69c57ae20f04eb}, the granule position for the frame will be stored in it before the first callback is made. If an entire frame is dropped (a 0-\/byte packet), then no callbacks will be made at all for that frame.
\begin{DoxyParams}{Parameters}
\item[{\em \_\-ctx}]An application-\/provided context pointer. \item[{\em \_\-buf}]The image buffer for the decoded frame. \item[{\em \_\-yfrag0}]The Y coordinate of the first row of 8x8 fragments decoded. Multiply this by 8 to obtain the pixel row number in the luma plane. If the chroma planes are subsampled in the Y direction, this will always be divisible by two. \item[{\em \_\-yfrag\_\-end}]The Y coordinate of the first row of 8x8 fragments past the newly decoded section. If the chroma planes are subsampled in the Y direction, this will always be divisible by two. I.e., this section contains fragment rows {\ttfamily {\itshape \_\-yfrag0\/} ...{\itshape \_\-yfrag\_\-end\/} -\/1}. \end{DoxyParams}

View file

@ -0,0 +1,343 @@
\section{theoraenc.h File Reference}
\label{theoraenc_8h}\index{theoraenc.h@{theoraenc.h}}
The {\ttfamily libtheoraenc} C encoding API.
{\ttfamily \#include $<$stddef.h$>$}\par
{\ttfamily \#include $<$ogg/ogg.h$>$}\par
{\ttfamily \#include \char`\"{}codec.h\char`\"{}}\par
\subsection*{Defines}
\begin{DoxyCompactItemize}
\item
\#define {\bf \_\-O\_\-THEORA\_\-THEORAENC\_\-H\_\-}~(1)
\end{DoxyCompactItemize}
\begin{Indent}{\bf th\_\-encode\_\-ctl() codes}\par
{\em \label{_amgrp652c8d6bf1cea216ce117704a398b5f8}
\label{theoraenc_8h_encctlcodes}
These are the available request codes for \doxyref{th\_\-encode\_\-ctl()}{p.}{group__encfuncs_ga3a427f6514dfdc01ea72172c469d51d9}. By convention, these are even, to distinguish them from the \doxyref{decoder control codes}{p.}{theoradec_8h_decctlcodes}. Keep any experimental or vendor-\/specific values above {\ttfamily 0x8000}. }\begin{DoxyCompactItemize}
\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-HUFFMAN\_\-CODES}~(0)
\begin{DoxyCompactList}\small\item\em Sets the Huffman tables to use. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}~(2)
\begin{DoxyCompactList}\small\item\em Sets the quantization parameters to use. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}~(4)
\begin{DoxyCompactList}\small\item\em Sets the maximum distance between key frames. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}~(10)
\begin{DoxyCompactList}\small\item\em Disables any encoder features that would prevent lossless transcoding back to VP3. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}~(12)
\begin{DoxyCompactList}\small\item\em Gets the maximum speed level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}~(14)
\begin{DoxyCompactList}\small\item\em Sets the speed level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-GET\_\-SPLEVEL}~(16)
\begin{DoxyCompactList}\small\item\em Gets the current speed level. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-DUP\_\-COUNT}~(18)
\begin{DoxyCompactList}\small\item\em Sets the number of duplicates of the next frame to produce. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS}~(20)
\begin{DoxyCompactList}\small\item\em Modifies the default bitrate management behavior. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-RATE\_\-BUFFER}~(22)
\begin{DoxyCompactList}\small\item\em Sets the size of the bitrate management bit reservoir as a function of number of frames. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-2PASS\_\-OUT}~(24)
\begin{DoxyCompactList}\small\item\em Enable pass 1 of two-\/pass encoding mode and retrieve the first pass metrics. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-2PASS\_\-IN}~(26)
\begin{DoxyCompactList}\small\item\em Submits two-\/pass encoding metric data collected the first encoding pass to the second pass. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-QUALITY}~(28)
\begin{DoxyCompactList}\small\item\em Sets the current encoding quality. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-ENCCTL\_\-SET\_\-BITRATE}~(30)
\begin{DoxyCompactList}\small\item\em Sets the current encoding bitrate. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\begin{Indent}{\bf TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS flags}\par
{\em \label{_amgrp6d70796e675cce22589d15a73cb3a16b}
\label{theoraenc_8h_ratectlflags}
These are the flags available for use with \doxyref{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS}{p.}{theoraenc_8h_a026502e08fbe1af0a1063f39bd18129c}. }\begin{DoxyCompactItemize}
\item
\#define {\bf TH\_\-RATECTL\_\-DROP\_\-FRAMES}~(0x1)
\begin{DoxyCompactList}\small\item\em Drop frames to keep within bitrate buffer constraints. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-RATECTL\_\-CAP\_\-OVERFLOW}~(0x2)
\begin{DoxyCompactList}\small\item\em Ignore bitrate buffer overflows. \item\end{DoxyCompactList}\item
\#define {\bf TH\_\-RATECTL\_\-CAP\_\-UNDERFLOW}~(0x4)
\begin{DoxyCompactList}\small\item\em Ignore bitrate buffer underflows. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Typedefs}
\begin{Indent}{\bf Encoder state}\par
{\em \label{_amgrp4ebc85bd8522a8b6128225c02b31c8b7}
The following data structure is opaque, and its contents are not publicly defined by this API.
Referring to its internals directly is unsupported, and may break without warning. }\begin{DoxyCompactItemize}
\item
typedef struct {\bf th\_\-enc\_\-ctx} {\bf th\_\-enc\_\-ctx}
\begin{DoxyCompactList}\small\item\em The encoder context. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Functions}
\begin{Indent}{\bf Functions for encoding}\par
{\em \label{_amgrpc58fb8743a7ca83eb895d57e29e032c8}
You must link to {\ttfamily libtheoraenc} and {\ttfamily libtheoradec} if you use any of the functions in this section.
The functions are listed in the order they are used in a typical encode. The basic steps are:
\begin{DoxyItemize}
\item Fill in a \doxyref{th\_\-info}{p.}{structth__info} structure with details on the format of the video you wish to encode.
\item Allocate a \doxyref{th\_\-enc\_\-ctx}{p.}{theoraenc_8h_af5cc40472b925456d42526a035d66edd} handle with \doxyref{th\_\-encode\_\-alloc()}{p.}{group__encfuncs_gaa91e47bc9dd5f6ee52045bd7b815e5a7}.
\item Perform any additional encoder configuration required with \doxyref{th\_\-encode\_\-ctl()}{p.}{group__encfuncs_ga3a427f6514dfdc01ea72172c469d51d9}.
\item Repeatedly call \doxyref{th\_\-encode\_\-flushheader()}{p.}{group__encfuncs_ga9439d61b566039d194ff782681fbc408} to retrieve all the header packets.
\item For each uncompressed frame:
\begin{DoxyItemize}
\item Submit the uncompressed frame via \doxyref{th\_\-encode\_\-ycbcr\_\-in()}{p.}{group__encfuncs_gadbe7dd66b411c2d61ab8153c15308750}
\item Repeatedly call \doxyref{th\_\-encode\_\-packetout()}{p.}{group__encfuncs_ga96d8ac1dda53187455352f99bbb5b04b} to retrieve any video data packets that are ready.
\end{DoxyItemize}
\item Call \doxyref{th\_\-encode\_\-free()}{p.}{group__encfuncs_ga36b23d216532231925c4107894204680} to release all encoder memory.
\end{DoxyItemize}}\begin{DoxyCompactItemize}
\item
{\bf th\_\-enc\_\-ctx} $\ast$ {\bf th\_\-encode\_\-alloc} (const {\bf th\_\-info} $\ast$\_\-info)
\begin{DoxyCompactList}\small\item\em Allocates an encoder instance. \item\end{DoxyCompactList}\item
int {\bf th\_\-encode\_\-ctl} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc, int \_\-req, void $\ast$\_\-buf, size\_\-t \_\-buf\_\-sz)
\begin{DoxyCompactList}\small\item\em Encoder control function. \item\end{DoxyCompactList}\item
int {\bf th\_\-encode\_\-flushheader} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc, {\bf th\_\-comment} $\ast$\_\-comments, ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Outputs the next header packet. \item\end{DoxyCompactList}\item
int {\bf th\_\-encode\_\-ycbcr\_\-in} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc, {\bf th\_\-ycbcr\_\-buffer} \_\-ycbcr)
\begin{DoxyCompactList}\small\item\em Submits an uncompressed frame to the encoder. \item\end{DoxyCompactList}\item
int {\bf th\_\-encode\_\-packetout} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc, int \_\-last, ogg\_\-packet $\ast$\_\-op)
\begin{DoxyCompactList}\small\item\em Retrieves encoded video data packets. \item\end{DoxyCompactList}\item
void {\bf th\_\-encode\_\-free} ({\bf th\_\-enc\_\-ctx} $\ast$\_\-enc)
\begin{DoxyCompactList}\small\item\em Frees an allocated encoder instance. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\end{Indent}
\subsection*{Variables}
\begin{DoxyCompactItemize}
\item
const {\bf th\_\-quant\_\-info} {\bf TH\_\-VP31\_\-QUANT\_\-INFO}
\begin{DoxyCompactList}\small\item\em The quantization parameters used by VP3. \item\end{DoxyCompactList}\item
const {\bf th\_\-huff\_\-code} {\bf TH\_\-VP31\_\-HUFF\_\-CODES} [TH\_\-NHUFFMAN\_\-TABLES][TH\_\-NDCT\_\-TOKENS]
\begin{DoxyCompactList}\small\item\em The Huffman tables used by VP3. \item\end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection{Detailed Description}
The {\ttfamily libtheoraenc} C encoding API.
\subsection{Define Documentation}
\index{theoraenc.h@{theoraenc.h}!\_\-O\_\-THEORA\_\-THEORAENC\_\-H\_\-@{\_\-O\_\-THEORA\_\-THEORAENC\_\-H\_\-}}
\index{\_\-O\_\-THEORA\_\-THEORAENC\_\-H\_\-@{\_\-O\_\-THEORA\_\-THEORAENC\_\-H\_\-}!theoraenc.h@{theoraenc.h}}
\subsubsection[{\_\-O\_\-THEORA\_\-THEORAENC\_\-H\_\-}]{\setlength{\rightskip}{0pt plus 5cm}\#define \_\-O\_\-THEORA\_\-THEORAENC\_\-H\_\-~(1)}\label{theoraenc_8h_ab915dd90f069a2431454fd62365e9381}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-2PASS\_\-IN@{TH\_\-ENCCTL\_\-2PASS\_\-IN}}
\index{TH\_\-ENCCTL\_\-2PASS\_\-IN@{TH\_\-ENCCTL\_\-2PASS\_\-IN}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-2PASS\_\-IN}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-2PASS\_\-IN~(26)}\label{theoraenc_8h_a4a84f982cdd9a3e3c803a29bbde9df0b}
Submits two-\/pass encoding metric data collected the first encoding pass to the second pass. The first call must be made before the first frame is encoded, and a target bitrate must have already been specified to the encoder. It sets the encoder to pass 2 mode implicitly; this cannot be disabled. The encoder may require reading data from some or all of the frames in advance, depending on, e.g., the reservoir size used in the second pass. You must call this function repeatedly before each frame to provide data until either a) it fails to consume all of the data presented or b) all of the pass 1 data has been consumed. In the first case, you must save the remaining data to be presented after the next frame. You can call this function with a NULL argument to get an upper bound on the number of bytes that will be required before the next frame.
When pass 2 is first enabled, the default bit reservoir is set to the entire file; this gives maximum flexibility but can lead to very high peak rates. You can subsequently set it to another value with \doxyref{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-BUFFER}{p.}{theoraenc_8h_aaefb515876b2a180ad5c3120fc584a52} (e.g., to set it to the keyframe interval for non-\/live streaming), however, you may then need to provide more data before the next frame.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily char[]}: A buffer containing the data returned by \doxyref{TH\_\-ENCCTL\_\-2PASS\_\-OUT}{p.}{theoraenc_8h_ac3751b9c3838888ec2e3f0b0d2823282} in pass 1. You may pass {\ttfamily NULL} for {\itshape \_\-buf\/} to return an upper bound on the number of additional bytes needed before the next frame. The summary data returned at the end of pass 1 must be at the head of the buffer on the first call with a non-\/{\ttfamily NULL} {\itshape \_\-buf\/}, and the placeholder data returned at the start of pass 1 should be omitted. After each call you should advance this buffer by the number of bytes consumed. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em $>$0}]The number of bytes of metric data required/consumed. \item[{\em 0}]No more data is required before the next frame. \item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]No target bitrate has been set, or the first call was made after the first frame was submitted for encoding. \item[{\em TH\_\-ENOTFORMAT}]The data did not appear to be pass 1 from a compatible implementation of this library. \item[{\em TH\_\-EBADHEADER}]The data was invalid; this may be returned when attempting to read an aborted pass 1 file that still has the placeholder data in place of the summary data. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-2PASS\_\-OUT@{TH\_\-ENCCTL\_\-2PASS\_\-OUT}}
\index{TH\_\-ENCCTL\_\-2PASS\_\-OUT@{TH\_\-ENCCTL\_\-2PASS\_\-OUT}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-2PASS\_\-OUT}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-2PASS\_\-OUT~(24)}\label{theoraenc_8h_ac3751b9c3838888ec2e3f0b0d2823282}
Enable pass 1 of two-\/pass encoding mode and retrieve the first pass metrics. Pass 1 mode must be enabled before the first frame is encoded, and a target bitrate must have already been specified to the encoder. Although this does not have to be the exact rate that will be used in the second pass, closer values may produce better results. The first call returns the size of the two-\/pass header data, along with some placeholder content, and sets the encoder into pass 1 mode implicitly. This call sets the encoder to pass 1 mode implicitly. Then, a subsequent call must be made after each call to \doxyref{th\_\-encode\_\-ycbcr\_\-in()}{p.}{group__encfuncs_gadbe7dd66b411c2d61ab8153c15308750} to retrieve the metrics for that frame. An additional, final call must be made to retrieve the summary data, containing such information as the total number of frames, etc. This must be stored in place of the placeholder data that was returned in the first call, before the frame metrics data. All of this data must be presented back to the encoder during pass 2 using \doxyref{TH\_\-ENCCTL\_\-2PASS\_\-IN}{p.}{theoraenc_8h_a4a84f982cdd9a3e3c803a29bbde9df0b}.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\rightarrow$} {\em $<$tt$>$char}]$\ast$\_\-buf: Returns a pointer to internal storage containing the two pass metrics data. This storage is only valid until the next call, or until the encoder context is freed, and must be copied by the application. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em $>$=0}]The number of bytes of metric data available in the returned buffer. \item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(char $\ast$)}, no target bitrate has been set, or the first call was made after the first frame was submitted for encoding. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-GET\_\-SPLEVEL@{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL}}
\index{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL@{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-GET\_\-SPLEVEL~(16)}\label{theoraenc_8h_a114b7c552f50b7b8d881a39489af1f61}
Gets the current speed level. The default speed level may vary according to encoder implementation, but if this control code is not supported (it returns \doxyref{TH\_\-EIMPL}{p.}{codec_8h_a921c47accc17841f220af5a6afb79efe}), the default may be assumed to be the slowest available speed (0). The maximum encoding speed level may be implementation-\/ and encoding mode-\/specific, and can be obtained via \doxyref{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}{p.}{theoraenc_8h_a9baf5bdd206e80c78a8fd44687e89783}.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\rightarrow$} {\em \_\-buf}]{\ttfamily int}: The current encoding speed level. 0 is slowest, larger values use less CPU. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation in the current encoding mode. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX@{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}}
\index{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX@{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX~(12)}\label{theoraenc_8h_a9baf5bdd206e80c78a8fd44687e89783}
Gets the maximum speed level. Higher speed levels favor quicker encoding over better quality per bit. Depending on the encoding mode, and the internal algorithms used, quality may actually improve, but in this case bitrate will also likely increase. In any case, overall rate/distortion performance will probably decrease. The maximum value, and the meaning of each value, may change depending on the current encoding mode (VBR vs. constant quality, etc.).
\begin{DoxyParams}{Parameters}
\item[\mbox{$\rightarrow$} {\em \_\-buf}]{\ttfamily int}: The maximum encoding speed level. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation in the current encoding mode. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-BITRATE@{TH\_\-ENCCTL\_\-SET\_\-BITRATE}}
\index{TH\_\-ENCCTL\_\-SET\_\-BITRATE@{TH\_\-ENCCTL\_\-SET\_\-BITRATE}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-BITRATE}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-BITRATE~(30)}\label{theoraenc_8h_a9b969df55ecad1acd1ae207fad42592e}
Sets the current encoding bitrate. Once a bitrate is set, the encoder must use a rate-\/controlled mode for all future frames (this restriction may be relaxed in a future version). If it is set before the headers are emitted, the target bitrate encoded in them will be updated. Due to the buffer delay, the exact bitrate of each section of the encode is not guaranteed. The encoder may have already used more bits than allowed for the frames it has encoded, expecting to make them up in future frames, or it may have used fewer, holding the excess in reserve. The exact transition between the two bitrates is not well-\/defined by this API, but may be affected by flags set with \doxyref{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS}{p.}{theoraenc_8h_a026502e08fbe1af0a1063f39bd18129c}. After a number of frames equal to the buffer delay, one may expect further output to average at the target bitrate.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily long}: The new target bitrate, in bits per second. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success. \item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]The target bitrate was not positive. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-DUP\_\-COUNT@{TH\_\-ENCCTL\_\-SET\_\-DUP\_\-COUNT}}
\index{TH\_\-ENCCTL\_\-SET\_\-DUP\_\-COUNT@{TH\_\-ENCCTL\_\-SET\_\-DUP\_\-COUNT}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-DUP\_\-COUNT}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-DUP\_\-COUNT~(18)}\label{theoraenc_8h_a8bb9b05471c42a09f8684a2583b8a1df}
Sets the number of duplicates of the next frame to produce. Although libtheora can encode duplicate frames very cheaply, it costs some amount of CPU to detect them, and a run of duplicates cannot span a keyframe boundary. This control code tells the encoder to produce the specified number of extra duplicates of the next frame. This allows the encoder to make smarter keyframe placement decisions and rate control decisions, and reduces CPU usage as well, when compared to just submitting the same frame for encoding multiple times. This setting only applies to the next frame submitted for encoding. You MUST call \doxyref{th\_\-encode\_\-packetout()}{p.}{group__encfuncs_ga96d8ac1dda53187455352f99bbb5b04b} repeatedly until it returns 0, or the extra duplicate frames will be lost.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily int}: The number of duplicates to produce. If this is negative or zero, no duplicates will be produced. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)}, or the number of duplicates is greater than or equal to the maximum keyframe interval. In the latter case, NO duplicate frames will be produced. You must ensure that the maximum keyframe interval is set larger than the maximum number of duplicates you will ever wish to insert prior to encoding. \item[{\em TH\_\-EIMPL}]Not supported by this implementation in the current encoding mode. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-HUFFMAN\_\-CODES@{TH\_\-ENCCTL\_\-SET\_\-HUFFMAN\_\-CODES}}
\index{TH\_\-ENCCTL\_\-SET\_\-HUFFMAN\_\-CODES@{TH\_\-ENCCTL\_\-SET\_\-HUFFMAN\_\-CODES}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-HUFFMAN\_\-CODES}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-HUFFMAN\_\-CODES~(0)}\label{theoraenc_8h_a0165348788e560a19b7c61ae8f0c2283}
Sets the Huffman tables to use. The tables are copied, not stored by reference, so they can be freed after this call. {\ttfamily NULL} may be specified to revert to the default tables.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily \doxyref{th\_\-huff\_\-code}{p.}{structth__huff__code}[\doxyref{TH\_\-NHUFFMAN\_\-TABLES}{p.}{codec_8h_a49bf449eae33c5320f0c308f32c6ae42}][\doxyref{TH\_\-NDCT\_\-TOKENS}{p.}{codec_8h_a2a44f48084e76a58cae48fb5d47cd422}]} \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]Encoding has already begun or one or more of the given tables is not full or prefix-\/free, {\itshape \_\-buf\/} is {\ttfamily NULL} and {\itshape \_\-buf\_\-sz\/} is not zero, or {\itshape \_\-buf\/} is non-\/{\ttfamily NULL} and {\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(\doxyref{th\_\-huff\_\-code}{p.}{structth__huff__code})$\ast$\doxyref{TH\_\-NHUFFMAN\_\-TABLES}{p.}{codec_8h_a49bf449eae33c5320f0c308f32c6ae42}$\ast$\doxyref{TH\_\-NDCT\_\-TOKENS}{p.}{codec_8h_a2a44f48084e76a58cae48fb5d47cd422}}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE@{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}}
\index{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE@{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-KEYFRAME\_\-FREQUENCY\_\-FORCE~(4)}\label{theoraenc_8h_a27e755e15b4b5604c54974b304037a49}
Sets the maximum distance between key frames. This can be changed during an encode, but will be bounded by {\ttfamily 1$<$$<$\doxyref{th\_\-info::keyframe\_\-granule\_\-shift}{p.}{structth__info_a693ca4ab11fbc0c3f32594b4bb8766ed}}. If it is set before encoding begins, \doxyref{th\_\-info::keyframe\_\-granule\_\-shift}{p.}{structth__info_a693ca4ab11fbc0c3f32594b4bb8766ed} will be enlarged appropriately.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily ogg\_\-uint32\_\-t}: The maximum distance between key frames. \item[\mbox{$\rightarrow$} {\em \_\-buf}]{\ttfamily ogg\_\-uint32\_\-t}: The actual maximum distance set. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(ogg\_\-uint32\_\-t)}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-QUALITY@{TH\_\-ENCCTL\_\-SET\_\-QUALITY}}
\index{TH\_\-ENCCTL\_\-SET\_\-QUALITY@{TH\_\-ENCCTL\_\-SET\_\-QUALITY}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-QUALITY}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-QUALITY~(28)}\label{theoraenc_8h_aac087983fa951b9148c9db6bc2e81ef4}
Sets the current encoding quality. This is only valid so long as no bitrate has been specified, either through the \doxyref{th\_\-info}{p.}{structth__info} struct used to initialize the encoder or through \doxyref{TH\_\-ENCCTL\_\-SET\_\-BITRATE}{p.}{theoraenc_8h_a9b969df55ecad1acd1ae207fad42592e} (this restriction may be relaxed in a future version). If it is set before the headers are emitted, the target quality encoded in them will be updated.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily int}: The new target quality, in the range 0...63, inclusive. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em 0}]Success. \item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]A target bitrate has already been specified, or the quality index was not in the range 0...63. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS@{TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}}
\index{TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS@{TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-QUANT\_\-PARAMS~(2)}\label{theoraenc_8h_a3befcdd66678f8d27034f9c4b16d1b9c}
Sets the quantization parameters to use. The parameters are copied, not stored by reference, so they can be freed after this call. {\ttfamily NULL} may be specified to revert to the default parameters.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]\doxyref{th\_\-quant\_\-info}{p.}{structth__quant__info} \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]Encoding has already begun, {\itshape \_\-buf\/} is {\ttfamily NULL} and {\itshape \_\-buf\_\-sz\/} is not zero, or {\itshape \_\-buf\/} is non-\/{\ttfamily NULL} and {\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(\doxyref{th\_\-quant\_\-info}{p.}{structth__quant__info})}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-RATE\_\-BUFFER@{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-BUFFER}}
\index{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-BUFFER@{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-BUFFER}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-BUFFER}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-RATE\_\-BUFFER~(22)}\label{theoraenc_8h_aaefb515876b2a180ad5c3120fc584a52}
Sets the size of the bitrate management bit reservoir as a function of number of frames. The reservoir size affects how quickly bitrate management reacts to instantaneous changes in the video complexity. Larger reservoirs react more slowly, and provide better overall quality, but require more buffering by a client, adding more latency to live streams. By default, libtheora sets the reservoir to the maximum distance between keyframes, subject to a minimum and maximum limit. This call may be used to increase or decrease the reservoir, increasing or decreasing the allowed temporary variance in bitrate. An implementation may impose some limits on the size of a reservoir it can handle, in which case the actual reservoir size may not be exactly what was requested. The actual value set will be returned.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily int}: Requested size of the reservoir measured in frames. \item[\mbox{$\rightarrow$} {\em \_\-buf}]{\ttfamily int}: The actual size of the reservoir set. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)}, or rate control is not enabled. The buffer has an implementation defined minimum and maximum size and the value in \_\-buf will be adjusted to match the actual value set. \item[{\em TH\_\-EIMPL}]Not supported by this implementation in the current encoding mode. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS@{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS}}
\index{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS@{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-RATE\_\-FLAGS~(20)}\label{theoraenc_8h_a026502e08fbe1af0a1063f39bd18129c}
Modifies the default bitrate management behavior. Use to allow or disallow frame dropping, and to enable or disable capping bit reservoir overflows and underflows. See \doxyref{the list of available flags}{p.}{theoraenc_8h_encctlcodes}. The flags are set by default to {\ttfamily \doxyref{TH\_\-RATECTL\_\-DROP\_\-FRAMES}{p.}{theoraenc_8h_a3e7fab53b902b54135522ba286f45e33}$|$\doxyref{TH\_\-RATECTL\_\-CAP\_\-OVERFLOW}{p.}{theoraenc_8h_a32f9983b344a431334493cefb0b9337c}}.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily int}: Any combination of \doxyref{the available flags}{p.}{theoraenc_8h_ratectlflags}:
\begin{DoxyItemize}
\item \doxyref{TH\_\-RATECTL\_\-DROP\_\-FRAMES}{p.}{theoraenc_8h_a3e7fab53b902b54135522ba286f45e33}: Enable frame dropping.
\item \doxyref{TH\_\-RATECTL\_\-CAP\_\-OVERFLOW}{p.}{theoraenc_8h_a32f9983b344a431334493cefb0b9337c}: Don't bank excess bits for later use.
\item \doxyref{TH\_\-RATECTL\_\-CAP\_\-UNDERFLOW}{p.}{theoraenc_8h_ad0d62d9dce542caf5296b03b97e020a6}: Don't try to make up shortfalls later.
\end{DoxyItemize}\end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)} or rate control is not enabled. \item[{\em TH\_\-EIMPL}]Not supported by this implementation in the current encoding mode. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-SPLEVEL@{TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}}
\index{TH\_\-ENCCTL\_\-SET\_\-SPLEVEL@{TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-SPLEVEL}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-SPLEVEL~(14)}\label{theoraenc_8h_abd9fbcb6a25a77d991d3620164fe59d6}
Sets the speed level. The current speed level may be retrieved using \doxyref{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL}{p.}{theoraenc_8h_a114b7c552f50b7b8d881a39489af1f61}.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily int}: The new encoding speed level. 0 is slowest, larger values use less CPU. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)}, or the encoding speed level is out of bounds. The maximum encoding speed level may be implementation-\/ and encoding mode-\/specific, and can be obtained via \doxyref{TH\_\-ENCCTL\_\-GET\_\-SPLEVEL\_\-MAX}{p.}{theoraenc_8h_a9baf5bdd206e80c78a8fd44687e89783}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation in the current encoding mode. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE@{TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}}
\index{TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE@{TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-ENCCTL\_\-SET\_\-VP3\_\-COMPATIBLE~(10)}\label{theoraenc_8h_a382d685a39a34d8e6ba76b00d804efd8}
Disables any encoder features that would prevent lossless transcoding back to VP3. This primarily means disabling block-\/adaptive quantization and always coding all four luma blocks in a macro block when 4MV is used. It also includes using the VP3 quantization tables and Huffman codes; if you set them explicitly after calling this function, the resulting stream will not be VP3-\/compatible. If you enable VP3-\/compatibility when encoding 4:2:2 or 4:4:4 source material, or when using a picture region smaller than the full frame (e.g. a non-\/multiple-\/of-\/16 width or height), then non-\/VP3 bitstream features will still be disabled, but the stream will still not be VP3-\/compatible, as VP3 was not capable of encoding such formats. If you call this after encoding has already begun, then the quantization tables and codebooks cannot be changed, but the frame-\/level features will be enabled or disabled as requested.
\begin{DoxyParams}{Parameters}
\item[\mbox{$\leftarrow$} {\em \_\-buf}]{\ttfamily int}: a non-\/zero value to enable VP3 compatibility, or 0 to disable it (the default). \item[\mbox{$\rightarrow$} {\em \_\-buf}]{\ttfamily int}: 1 if all bitstream features required for VP3-\/compatibility could be set, and 0 otherwise. The latter will be returned if the pixel format is not 4:2:0, the picture region is smaller than the full frame, or if encoding has begun, preventing the quantization tables and codebooks from being set. \end{DoxyParams}
\begin{DoxyRetVals}{Return values}
\item[{\em TH\_\-EFAULT}]{\itshape \_\-enc\_\-ctx\/} or {\itshape \_\-buf\/} is {\ttfamily NULL}. \item[{\em TH\_\-EINVAL}]{\itshape \_\-buf\_\-sz\/} is not {\ttfamily sizeof(int)}. \item[{\em TH\_\-EIMPL}]Not supported by this implementation. \end{DoxyRetVals}
\index{theoraenc.h@{theoraenc.h}!TH\_\-RATECTL\_\-CAP\_\-OVERFLOW@{TH\_\-RATECTL\_\-CAP\_\-OVERFLOW}}
\index{TH\_\-RATECTL\_\-CAP\_\-OVERFLOW@{TH\_\-RATECTL\_\-CAP\_\-OVERFLOW}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-RATECTL\_\-CAP\_\-OVERFLOW}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-RATECTL\_\-CAP\_\-OVERFLOW~(0x2)}\label{theoraenc_8h_a32f9983b344a431334493cefb0b9337c}
Ignore bitrate buffer overflows. If the encoder uses so few bits that the reservoir of available bits overflows, ignore the excess. The encoder will not try to use these extra bits in future frames. At high rates this may cause the result to be undersized, but allows a client to play the stream using a finite buffer; it should normally be enabled. \index{theoraenc.h@{theoraenc.h}!TH\_\-RATECTL\_\-CAP\_\-UNDERFLOW@{TH\_\-RATECTL\_\-CAP\_\-UNDERFLOW}}
\index{TH\_\-RATECTL\_\-CAP\_\-UNDERFLOW@{TH\_\-RATECTL\_\-CAP\_\-UNDERFLOW}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-RATECTL\_\-CAP\_\-UNDERFLOW}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-RATECTL\_\-CAP\_\-UNDERFLOW~(0x4)}\label{theoraenc_8h_ad0d62d9dce542caf5296b03b97e020a6}
Ignore bitrate buffer underflows. If the encoder uses so many bits that the reservoir of available bits underflows, ignore the deficit. The encoder will not try to make up these extra bits in future frames. At low rates this may cause the result to be oversized; it should normally be disabled. \index{theoraenc.h@{theoraenc.h}!TH\_\-RATECTL\_\-DROP\_\-FRAMES@{TH\_\-RATECTL\_\-DROP\_\-FRAMES}}
\index{TH\_\-RATECTL\_\-DROP\_\-FRAMES@{TH\_\-RATECTL\_\-DROP\_\-FRAMES}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-RATECTL\_\-DROP\_\-FRAMES}]{\setlength{\rightskip}{0pt plus 5cm}\#define TH\_\-RATECTL\_\-DROP\_\-FRAMES~(0x1)}\label{theoraenc_8h_a3e7fab53b902b54135522ba286f45e33}
Drop frames to keep within bitrate buffer constraints. This can have a severe impact on quality, but is the only way to ensure that bitrate targets are met at low rates during sudden bursts of activity.
\subsection{Typedef Documentation}
\index{theoraenc.h@{theoraenc.h}!th\_\-enc\_\-ctx@{th\_\-enc\_\-ctx}}
\index{th\_\-enc\_\-ctx@{th\_\-enc\_\-ctx}!theoraenc.h@{theoraenc.h}}
\subsubsection[{th\_\-enc\_\-ctx}]{\setlength{\rightskip}{0pt plus 5cm}typedef struct {\bf th\_\-enc\_\-ctx} {\bf th\_\-enc\_\-ctx}}\label{theoraenc_8h_af5cc40472b925456d42526a035d66edd}
The encoder context.
\subsection{Variable Documentation}
\index{theoraenc.h@{theoraenc.h}!TH\_\-VP31\_\-HUFF\_\-CODES@{TH\_\-VP31\_\-HUFF\_\-CODES}}
\index{TH\_\-VP31\_\-HUFF\_\-CODES@{TH\_\-VP31\_\-HUFF\_\-CODES}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-VP31\_\-HUFF\_\-CODES}]{\setlength{\rightskip}{0pt plus 5cm}const {\bf th\_\-huff\_\-code} {\bf TH\_\-VP31\_\-HUFF\_\-CODES}[TH\_\-NHUFFMAN\_\-TABLES][TH\_\-NDCT\_\-TOKENS]}\label{theoraenc_8h_aee1f7cb1fa0d3b7cc1d4ca0f17e6ae5e}
The Huffman tables used by VP3. \index{theoraenc.h@{theoraenc.h}!TH\_\-VP31\_\-QUANT\_\-INFO@{TH\_\-VP31\_\-QUANT\_\-INFO}}
\index{TH\_\-VP31\_\-QUANT\_\-INFO@{TH\_\-VP31\_\-QUANT\_\-INFO}!theoraenc.h@{theoraenc.h}}
\subsubsection[{TH\_\-VP31\_\-QUANT\_\-INFO}]{\setlength{\rightskip}{0pt plus 5cm}const {\bf th\_\-quant\_\-info} {\bf TH\_\-VP31\_\-QUANT\_\-INFO}}\label{theoraenc_8h_a3b1b462989f4e7a5a98e6e697f1a7f7d}
The quantization parameters used by VP3.

View file

@ -0,0 +1,83 @@
## Process this file with automake to produce Makefile.in
# makefile to generate the spec document from sources
# requires transfig and pdflatex
docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION)
built_docs = Theora.pdf
if BUILD_SPEC
doc_DATA = $(built_docs)
endif
SPEC_SRCS = spec.tex spec.bib
FIG_SRCS = pic-frame.fig hilbert-mb.fig hilbert-block.fig xifish.fig \
superblock.fig macroblock.fig raster-block.fig reference-frames.fig \
pixel444.fig pixel422.fig pixel420.fig idct.fig fdct.fig \
pic_even.fig pic_even_odd.fig pic_odd.fig pic_odd_even.fig \
lflim.fig
FIG_TEXS = $(FIG_SRCS:.fig=.tex)
FIG_AUXS = $(FIG_SRCS:.fig=.aux)
FIG_PDFS = $(FIG_SRCS:.fig=.pdf)
# add any native-pdf figures here
FIG_OBJS = $(FIG_PDFS)
EXTRA_DIST = $(built_docs) $(SPEC_SRCS) $(FIG_SRCS) ltablex.sty
if BUILD_SPEC
# latex three times is the charm with references
# long tables require the .aux file to start from scratch
Theora.pdf : $(SPEC_SRCS) $(FIG_OBJS) vp3huff.tex spec.bib
-$(RM) spec.aux
pdflatex -interaction nonstopmode spec.tex
bibtex spec.aux
pdflatex -interaction nonstopmode spec.tex
pdflatex -interaction nonstopmode spec.tex
mv spec.pdf $@
else
Theora.pdf :
echo "*** Warning: Missing tools; $@ will not be built."
endif
vp3huff.tex : vp3huff
./vp3huff > $@
noinst_PROGRAMS = vp3huff
vp3huff_SOURCES = vp3huff.c
figures : $(FIG_OBJS)
# rules to generate latex and pdf versions of the xfig figures
.fig.tex:
fig2dev -L latex $< $@
.fig.pdf:
fig2dev -L pdf -p 0 $< $@
SUFFIXES = .fig .tex .pdf
# clean targets
clean-local:
-$(RM) $(FIG_TEXS)
-$(RM) $(FIG_AUXS)
-$(RM) $(FIG_PDFS)
-$(RM) vp3huff
-$(RM) vp3huff.tex
-$(RM) vp3huff.aux
-$(RM) spec.aux
-$(RM) spec.log
-$(RM) spec.lof
-$(RM) spec.lot
-$(RM) spec.out
-$(RM) spec.bbl
-$(RM) spec.blg
-$(RM) spec.toc
maintainer-clean-local:
-$(RM) $(built_docs)
maintainerclean: maintainer-clean

498
theora/doc/spec/Makefile.in Normal file
View file

@ -0,0 +1,498 @@
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# 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@
# makefile to generate the spec document from sources
# requires transfig and pdflatex
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ../..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@
AMTAR = @AMTAR@
AR = @AR@
ARGZ_H = @ARGZ_H@
AS = @AS@
AWK = @AWK@
BUILDABLE_EXAMPLES = @BUILDABLE_EXAMPLES@
CAIRO_CFLAGS = @CAIRO_CFLAGS@
CAIRO_LIBS = @CAIRO_LIBS@
CC = @CC@
CPP = @CPP@
CXX = @CXX@
CXXCPP = @CXXCPP@
DEBUG = @DEBUG@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
F77 = @F77@
GCJ = @GCJ@
GCJFLAGS = @GCJFLAGS@
GETOPT_OBJS = @GETOPT_OBJS@
GREP = @GREP@
HAVE_BIBTEX = @HAVE_BIBTEX@
HAVE_DOXYGEN = @HAVE_DOXYGEN@
HAVE_PDFLATEX = @HAVE_PDFLATEX@
HAVE_PKG_CONFIG = @HAVE_PKG_CONFIG@
HAVE_TRANSFIG = @HAVE_TRANSFIG@
HAVE_VALGRIND = @HAVE_VALGRIND@
INCLTDL = @INCLTDL@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LIBADD_DL = @LIBADD_DL@
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
LIBADD_DLOPEN = @LIBADD_DLOPEN@
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
LIBLTDL = @LIBLTDL@
LIBM = @LIBM@
LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTDLDEPS = @LTDLDEPS@
LTDLINCL = @LTDLINCL@
LTDLOPEN = @LTDLOPEN@
LT_CONFIG_H = @LT_CONFIG_H@
LT_DLLOADERS = @LT_DLLOADERS@
LT_DLPREOPEN = @LT_DLPREOPEN@
MAINT = @MAINT@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OSS_LIBS = @OSS_LIBS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PKG_CONFIG = @PKG_CONFIG@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
PROFILE = @PROFILE@
RANLIB = @RANLIB@
RC = @RC@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SED = @SED@
STRIP = @STRIP@
THDEC_LIB_AGE = @THDEC_LIB_AGE@
THDEC_LIB_CURRENT = @THDEC_LIB_CURRENT@
THDEC_LIB_REVISION = @THDEC_LIB_REVISION@
THENC_LIB_AGE = @THENC_LIB_AGE@
THENC_LIB_CURRENT = @THENC_LIB_CURRENT@
THENC_LIB_REVISION = @THENC_LIB_REVISION@
THEORADEC_LDFLAGS = @THEORADEC_LDFLAGS@
THEORAENC_LDFLAGS = @THEORAENC_LDFLAGS@
THEORA_LDFLAGS = @THEORA_LDFLAGS@
TH_LIB_AGE = @TH_LIB_AGE@
TH_LIB_CURRENT = @TH_LIB_CURRENT@
TH_LIB_REVISION = @TH_LIB_REVISION@
VALGRIND_ENVIRONMENT = @VALGRIND_ENVIRONMENT@
VERSION = @VERSION@
VORBISENC_LIBS = @VORBISENC_LIBS@
VORBISFILE_LIBS = @VORBISFILE_LIBS@
VORBIS_CFLAGS = @VORBIS_CFLAGS@
VORBIS_LIBS = @VORBIS_LIBS@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
lt_ECHO = @lt_ECHO@
ltdl_LIBOBJS = @ltdl_LIBOBJS@
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
sys_symbol_underscore = @sys_symbol_underscore@
docdir = $(datadir)/doc/$(PACKAGE)-$(VERSION)
built_docs = Theora.pdf
@BUILD_SPEC_TRUE@doc_DATA = $(built_docs)
SPEC_SRCS = spec.tex spec.bib
FIG_SRCS = pic-frame.fig hilbert-mb.fig hilbert-block.fig xifish.fig \
superblock.fig macroblock.fig raster-block.fig reference-frames.fig \
pixel444.fig pixel422.fig pixel420.fig idct.fig fdct.fig \
pic_even.fig pic_even_odd.fig pic_odd.fig pic_odd_even.fig \
lflim.fig
FIG_TEXS = $(FIG_SRCS:.fig=.tex)
FIG_AUXS = $(FIG_SRCS:.fig=.aux)
FIG_PDFS = $(FIG_SRCS:.fig=.pdf)
# add any native-pdf figures here
FIG_OBJS = $(FIG_PDFS)
EXTRA_DIST = $(built_docs) $(SPEC_SRCS) $(FIG_SRCS) ltablex.sty
noinst_PROGRAMS = vp3huff
vp3huff_SOURCES = vp3huff.c
SUFFIXES = .fig .tex .pdf
subdir = doc/spec
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
noinst_PROGRAMS = vp3huff$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am_vp3huff_OBJECTS = vp3huff.$(OBJEXT)
vp3huff_OBJECTS = $(am_vp3huff_OBJECTS)
vp3huff_LDADD = $(LDADD)
vp3huff_DEPENDENCIES =
vp3huff_LDFLAGS =
DEFS = @DEFS@
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/vp3huff.Po
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
DIST_SOURCES = $(vp3huff_SOURCES)
DATA = $(doc_DATA)
DIST_COMMON = Makefile.am Makefile.in
SOURCES = $(vp3huff_SOURCES)
all: all-am
.SUFFIXES:
.SUFFIXES: .fig .tex .pdf .c .lo .o .obj
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/spec/Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
clean-noinstPROGRAMS:
@list='$(noinst_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
vp3huff$(EXEEXT): $(vp3huff_OBJECTS) $(vp3huff_DEPENDENCIES)
@rm -f vp3huff$(EXEEXT)
$(LINK) $(vp3huff_LDFLAGS) $(vp3huff_OBJECTS) $(vp3huff_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT) core *.core
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vp3huff.Po@am__quote@
distclean-depend:
-rm -rf ./$(DEPDIR)
.c.o:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
.c.obj:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `cygpath -w $<`
.c.lo:
@AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
CCDEPMODE = @CCDEPMODE@
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
docDATA_INSTALL = $(INSTALL_DATA)
install-docDATA: $(doc_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(docdir)
@list='$(doc_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(docDATA_INSTALL) $$d$$p $(DESTDIR)$(docdir)/$$f"; \
$(docDATA_INSTALL) $$d$$p $(DESTDIR)$(docdir)/$$f; \
done
uninstall-docDATA:
@$(NORMAL_UNINSTALL)
@list='$(doc_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(docdir)/$$f"; \
rm -f $(DESTDIR)$(docdir)/$$f; \
done
ETAGS = etags
ETAGSFLAGS =
tags: TAGS
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; } \
END { for (i in files) print i; }'`; \
mkid -fID $$unique
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
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; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$tags$$unique" \
|| $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_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
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ../..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkinstalldirs) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \
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 $(PROGRAMS) $(DATA)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(docdir)
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_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(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 clean-local clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
distclean-am: clean-am distclean-compile distclean-depend \
distclean-generic distclean-libtool distclean-tags
dvi: dvi-am
dvi-am:
info: info-am
info-am:
install-data-am: install-docDATA
install-exec-am:
install-info: install-info-am
install-man:
installcheck-am:
maintainer-clean: maintainer-clean-am
maintainer-clean-am: distclean-am maintainer-clean-generic \
maintainer-clean-local
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
uninstall-am: uninstall-docDATA uninstall-info-am
.PHONY: GTAGS all all-am check check-am clean clean-generic \
clean-libtool clean-local clean-noinstPROGRAMS distclean \
distclean-compile distclean-depend distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am info \
info-am install install-am install-data install-data-am \
install-docDATA install-exec install-exec-am install-info \
install-info-am install-man install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic maintainer-clean-local mostlyclean \
mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
tags uninstall uninstall-am uninstall-docDATA uninstall-info-am
# latex three times is the charm with references
# long tables require the .aux file to start from scratch
@BUILD_SPEC_TRUE@Theora.pdf : $(SPEC_SRCS) $(FIG_OBJS) vp3huff.tex spec.bib
@BUILD_SPEC_TRUE@ -$(RM) spec.aux
@BUILD_SPEC_TRUE@ pdflatex -interaction nonstopmode spec.tex
@BUILD_SPEC_TRUE@ bibtex spec.aux
@BUILD_SPEC_TRUE@ pdflatex -interaction nonstopmode spec.tex
@BUILD_SPEC_TRUE@ pdflatex -interaction nonstopmode spec.tex
@BUILD_SPEC_TRUE@ mv spec.pdf $@
@BUILD_SPEC_FALSE@Theora.pdf :
@BUILD_SPEC_FALSE@ echo "*** Warning: Missing tools; $@ will not be built."
vp3huff.tex : vp3huff
./vp3huff > $@
figures : $(FIG_OBJS)
# rules to generate latex and pdf versions of the xfig figures
.fig.tex:
fig2dev -L latex $< $@
.fig.pdf:
fig2dev -L pdf -p 0 $< $@
# clean targets
clean-local:
-$(RM) $(FIG_TEXS)
-$(RM) $(FIG_AUXS)
-$(RM) $(FIG_PDFS)
-$(RM) vp3huff
-$(RM) vp3huff.tex
-$(RM) vp3huff.aux
-$(RM) spec.aux
-$(RM) spec.log
-$(RM) spec.lof
-$(RM) spec.lot
-$(RM) spec.out
-$(RM) spec.bbl
-$(RM) spec.blg
-$(RM) spec.toc
maintainer-clean-local:
-$(RM) $(built_docs)
maintainerclean: maintainer-clean
# 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:

20770
theora/doc/spec/Theora.pdf Normal file

File diff suppressed because it is too large Load diff

371
theora/doc/spec/fdct.fig Normal file
View file

@ -0,0 +1,371 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
6 1350 4650 1650 4950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 1500 4800 75 75 1500 4800 1500 4725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
1450 4800 1550 4800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
1500 4850 1500 4750
-6
6 1350 450 1650 750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 1500 600 75 75 1500 600 1500 525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
1450 600 1550 600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
1500 650 1500 550
-6
6 1950 1050 2250 1350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2100 1200 75 75 2100 1200 2100 1125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2050 1200 2150 1200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2100 1250 2100 1150
-6
6 3150 2850 3450 3150
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3300 3000 75 75 3300 3000 3300 2925
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3250 3000 3350 3000
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3300 3050 3300 2950
-6
6 3150 2250 3450 2550
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3300 2400 75 75 3300 2400 3300 2325
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3250 2400 3350 2400
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3300 2450 3300 2350
-6
6 2550 3450 2850 3750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2700 3600 75 75 2700 3600 2700 3525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2650 3600 2750 3600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2700 3650 2700 3550
-6
6 2550 1650 2850 1950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2700 1800 75 75 2700 1800 2700 1725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2650 1800 2750 1800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2700 1850 2700 1750
-6
6 1950 4050 2250 4350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2100 4200 75 75 2100 4200 2100 4125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2050 4200 2150 4200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2100 4250 2100 4150
-6
6 2250 3600 2550 3900
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2400 3750 75 75 2400 3750 2400 3675
4 1 0 40 -1 0 12 0.0000 4 15 60 2400 3800 -\001
-6
6 1650 4200 1950 4500
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 1800 4350 75 75 1800 4350 1800 4275
4 1 0 40 -1 0 12 0.0000 4 15 60 1800 4400 -\001
-6
6 1050 4800 1350 5100
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 1200 4950 75 75 1200 4950 1200 4875
4 1 0 40 -1 0 12 0.0000 4 15 60 1200 5000 -\001
-6
6 2850 3000 3150 3300
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3000 3150 75 75 3000 3150 3000 3075
4 1 0 40 -1 0 12 0.0000 4 15 60 3000 3200 -\001
-6
6 4350 4050 4650 4350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4500 4200 75 75 4500 4200 4500 4125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4450 4200 4550 4200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4500 4250 4500 4150
-6
6 4350 3450 4650 3750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4500 3600 75 75 4500 3600 4500 3525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4450 3600 4550 3600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4500 3650 4500 3550
-6
6 4050 3300 4350 3600
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4200 3450 75 75 4200 3450 4200 3375
4 1 0 40 -1 0 12 0.0000 4 15 60 4200 3500 -\001
-6
6 4350 2250 4650 2550
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4500 2400 75 75 4500 2400 4500 2325
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4450 2400 4550 2400
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4500 2450 4500 2350
-6
6 4350 450 4650 750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4500 600 75 75 4500 600 4500 525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4450 600 4550 600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4500 650 4500 550
-6
6 4050 2400 4350 2700
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4200 2550 75 75 4200 2550 4200 2475
4 1 0 40 -1 0 12 0.0000 4 15 60 4200 2600 -\001
-6
6 4950 1050 5250 1350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 5100 1200 75 75 5100 1200 5100 1125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5050 1200 5150 1200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5100 1250 5100 1150
-6
6 4950 1650 5250 1950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 5100 1800 75 75 5100 1800 5100 1725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5050 1800 5150 1800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5100 1850 5100 1750
-6
6 4650 1800 4950 2100
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4800 1950 75 75 4800 1950 4800 1875
4 1 0 40 -1 0 12 0.0000 4 15 60 4800 2000 -\001
-6
6 4725 3525 4875 4275
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4800 4200 25 25 4800 4200 4800 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4800 3600 25 25 4800 3600 4800 3575
-6
6 6150 4650 6450 4950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 4800 75 75 6300 4800 6300 4725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 4800 6350 4800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 4850 6300 4750
-6
6 6150 4050 6450 4350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 4200 75 75 6300 4200 6300 4125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 4200 6350 4200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 4250 6300 4150
-6
6 5850 3900 6150 4200
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6000 4050 75 75 6000 4050 6000 3975
4 1 0 40 -1 0 12 0.0000 4 15 60 6000 4100 -\001
-6
6 6150 2850 6450 3150
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 3000 75 75 6300 3000 6300 2925
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 3000 6350 3000
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 3050 6300 2950
-6
6 6150 3450 6450 3750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 3600 75 75 6300 3600 6300 3525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 3600 6350 3600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 3650 6300 3550
-6
6 5850 3600 6150 3900
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6000 3750 75 75 6000 3750 6000 3675
4 1 0 40 -1 0 12 0.0000 4 15 60 6000 3800 -\001
-6
6 6150 1050 6450 1350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 1200 75 75 6300 1200 6300 1125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 1200 6350 1200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 1250 6300 1150
-6
6 6150 450 6450 750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 600 75 75 6300 600 6300 525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 600 6350 600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 650 6300 550
-6
6 6150 2250 6450 2550
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 2400 75 75 6300 2400 6300 2325
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 2400 6350 2400
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 2450 6300 2350
-6
6 6150 1650 6450 1950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 1800 75 75 6300 1800 6300 1725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 1800 6350 1800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 1850 6300 1750
-6
6 5850 1200 6150 1500
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6000 1350 75 75 6000 1350 6000 1275
4 1 0 40 -1 0 12 0.0000 4 15 60 6000 1400 -\001
-6
6 7350 4650 7650 4950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 7500 4800 75 75 7500 4800 7500 4725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
7450 4800 7550 4800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
7500 4850 7500 4750
-6
6 7350 2850 7650 3150
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 7500 3000 75 75 7500 3000 7500 2925
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
7450 3000 7550 3000
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
7500 3050 7500 2950
-6
6 7950 4050 8250 4350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 8100 4200 75 75 8100 4200 8100 4125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
8050 4200 8150 4200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
8100 4250 8100 4150
-6
6 7950 3450 8250 3750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 8100 3600 75 75 8100 3600 8100 3525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
8050 3600 8150 3600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
8100 3650 8100 3550
-6
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 900 4800 25 25 900 4800 900 4775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 900 600 25 25 900 600 900 575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 1500 1200 25 25 1500 1200 1500 1175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 2700 3000 25 25 2700 3000 2700 2975
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 2700 2400 25 25 2700 2400 2700 2375
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 2100 3600 25 25 2100 3600 2100 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 1500 4200 25 25 1500 4200 1500 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 3900 4200 25 25 3900 4200 3900 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 3900 3600 25 25 3900 3600 3900 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 3900 2400 25 25 3900 2400 3900 2375
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 3900 600 25 25 3900 600 3900 575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4500 1200 25 25 4500 1200 4500 1175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4500 1800 25 25 4500 1800 4500 1775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 4800 25 25 5700 4800 5700 4775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 4200 25 25 5700 4200 5700 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 3600 25 25 5700 3600 5700 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 3000 25 25 5700 3000 5700 2975
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 1200 25 25 5700 1200 5700 1175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 600 25 25 5700 600 5700 575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 2400 25 25 5700 2400 5700 2375
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5725 1800 25 25 5725 1800 5725 1775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 6900 4800 25 25 6900 4800 6900 4775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 6900 3000 25 25 6900 3000 6900 2975
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 7500 4200 25 25 7500 4200 7500 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 7500 3600 25 25 7500 3600 7500 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 7500 1200 25 25 7500 1200 7500 1175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 7500 600 25 25 7500 600 7500 575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 2100 1800 25 25 2100 1800 2100 1775
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 600 8400 600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 2400 8400 2400
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 3000 8400 3000
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 4800 8400 4800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 1200 8400 1200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 3600 8400 3600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 1800 8400 1800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 4200 8400 4200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
900 4800 1500 600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
900 600 1500 4800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
1500 1200 2100 4275
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
1500 4200 2100 1200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
2100 3600 2700 1800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
2700 2400 3300 3000
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
2100 1800 2700 3600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
2700 3000 3300 2400
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
3900 3600 4500 4200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
3900 4200 4500 3600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
3900 600 4500 2400
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
3900 2400 4500 600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
4500 1800 5100 1200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
4500 1200 5100 1800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
5700 4200 6300 4800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
5700 3600 6300 3000
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
5700 3000 6300 3600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
5700 4800 6300 4200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
5700 1200 6300 600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
5700 600 6300 1200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
5700 1800 6300 2400
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
5700 2400 6300 1800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
6900 3000 7500 4800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
6900 4800 7500 3000
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
7500 4200 8100 3600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
7500 3600 8100 4200
4 1 0 40 -1 0 12 0.0000 4 135 210 4800 4125 C4\001
4 1 0 40 -1 0 12 0.0000 4 135 210 4800 3525 C4\001
4 1 0 40 -1 0 12 0.0000 4 135 210 6000 2350 C6\001
4 1 0 40 -1 0 12 0.0000 4 135 255 6300 2275 -S6\001
4 1 0 40 -1 0 12 0.0000 4 135 210 6000 1750 C6\001
4 1 0 40 -1 0 12 0.0000 4 135 195 6300 2050 S6\001
4 1 0 40 -1 0 12 0.0000 4 135 210 7200 2950 C7\001
4 1 0 40 -1 0 12 0.0000 4 135 195 7500 3375 S7\001
4 1 0 40 -1 0 12 0.0000 4 135 210 7200 4750 C7\001
4 1 0 40 -1 0 12 0.0000 4 135 255 7500 4575 -S7\001
4 1 0 40 -1 0 12 0.0000 4 135 210 7800 4150 C3\001
4 1 0 40 -1 0 12 0.0000 4 135 255 8100 4075 -S3\001
4 1 0 40 -1 0 12 0.0000 4 135 210 7800 3550 C3\001
4 1 0 40 -1 0 12 0.0000 4 135 195 8100 3850 S3\001
4 1 0 40 -1 0 12 0.0000 4 135 210 7500 1125 C4\001
4 1 0 40 -1 0 12 0.0000 4 135 210 7500 525 C4\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 675 0\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 1275 4\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 1875 2\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 2475 6\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 3675 5\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 4275 3\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 4875 7\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 3075 1\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 675 0\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 1275 1\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 1875 2\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 2475 3\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 3075 4\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 3675 5\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 4275 6\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 4875 7\001

View file

@ -0,0 +1,104 @@
#FIG 3.2 Produced by xfig version 3.2.5-alpha4
Landscape
Center
Metric
A4
100.00
Single
-2
1200 2
6 675 645 3825 3795
4 1 0 50 0 1 12 0.0000 0 150 105 900 3660 0\001
4 1 0 50 0 1 12 0.0000 0 150 105 1800 3660 1\001
4 1 0 50 0 1 12 0.0000 0 150 105 1800 2760 2\001
4 1 0 50 0 1 12 0.0000 0 150 105 900 2760 3\001
4 1 0 50 0 1 12 0.0000 0 150 105 900 1860 4\001
4 1 0 50 0 1 12 0.0000 0 150 105 900 960 5\001
4 1 0 50 0 1 12 0.0000 0 150 105 1800 960 6\001
4 1 0 50 0 1 12 0.0000 0 150 105 1800 1860 7\001
4 1 0 50 0 1 12 0.0000 0 150 105 2700 1860 8\001
4 1 0 50 0 1 12 0.0000 0 150 105 2700 960 9\001
4 1 0 50 0 1 12 0.0000 0 150 210 3600 960 10\001
4 1 0 50 0 1 12 0.0000 0 150 210 3600 1860 11\001
4 1 0 50 0 1 12 0.0000 0 150 210 3600 2760 12\001
4 1 0 50 0 1 12 0.0000 0 150 210 2700 2760 13\001
4 1 0 50 0 1 12 0.0000 0 150 210 2700 3660 14\001
4 1 0 50 0 1 12 0.0000 0 150 210 3600 3660 15\001
-6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1125 3600 1575 3600
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1800 3375 1800 2925
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1575 2700 1125 2700
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
900 2475 900 2025
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
900 1575 900 1125
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1125 900 1575 900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1800 1125 1800 1575
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
2025 1800 2475 1800
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
2700 1575 2700 1125
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
2925 900 3375 900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
3600 1125 3600 1575
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
3600 2025 3600 2475
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
3375 2700 2925 2700
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
2700 2925 2700 3375
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
2925 3600 3375 3600
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
450 450 1350 450 1350 1350 450 1350 450 450
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
1350 450 2250 450 2250 1350 1350 1350 1350 450
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2250 450 3150 450 3150 1350 2250 1350 2250 450
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3150 450 4050 450 4050 1350 3150 1350 3150 450
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
450 1350 1350 1350 1350 2250 450 2250 450 1350
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
1350 1350 2250 1350 2250 2250 1350 2250 1350 1350
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2250 1350 3150 1350 3150 2250 2250 2250 2250 1350
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3150 1350 4050 1350 4050 2250 3150 2250 3150 1350
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
450 2250 1350 2250 1350 3150 450 3150 450 2250
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
1350 2250 2250 2250 2250 3150 1350 3150 1350 2250
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2250 2250 3150 2250 3150 3150 2250 3150 2250 2250
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3150 2250 4050 2250 4050 3150 3150 3150 3150 2250
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
450 3150 1350 3150 1350 4050 450 4050 450 3150
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
1350 3150 2250 3150 2250 4050 1350 4050 1350 3150
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
2250 3150 3150 3150 3150 4050 2250 4050 2250 3150
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
3150 3150 4050 3150 4050 4050 3150 4050 3150 3150

View file

@ -0,0 +1,32 @@
#FIG 3.2 Produced by xfig version 3.2.5-alpha4
Landscape
Center
Metric
A4
100.00
Single
-2
1200 2
6 810 810 1890 1890
4 1 0 50 0 1 12 0.0000 0 150 105 900 1860 0\001
4 1 0 50 0 1 12 0.0000 0 150 105 900 960 1\001
4 1 0 50 0 1 12 0.0000 0 150 105 1800 960 2\001
4 1 0 50 0 1 12 0.0000 0 150 105 1800 1860 3\001
-6
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
900 1575 900 1125
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1125 900 1575 900
2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
1800 1125 1800 1575
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
450 450 1350 450 1350 1350 450 1350 450 450
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
1350 450 2250 450 2250 1350 1350 1350 1350 450
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
450 1350 1350 1350 1350 2250 450 2250 450 1350
2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
1350 1350 2250 1350 2250 2250 1350 2250 1350 1350

369
theora/doc/spec/idct.fig Normal file
View file

@ -0,0 +1,369 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
6 3150 4650 3450 4950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3300 4800 75 75 3300 4800 3300 4725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3250 4800 3350 4800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3300 4850 3300 4750
-6
6 3150 4050 3450 4350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3300 4200 75 75 3300 4200 3300 4125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3250 4200 3350 4200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3300 4250 3300 4150
-6
6 2850 3900 3150 4200
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3000 4050 75 75 3000 4050 3000 3975
4 1 0 40 -1 0 12 0.0000 4 15 60 3000 4100 -\001
-6
6 3150 2850 3450 3150
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3300 3000 75 75 3300 3000 3300 2925
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3250 3000 3350 3000
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3300 3050 3300 2950
-6
6 3150 3450 3450 3750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3300 3600 75 75 3300 3600 3300 3525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3250 3600 3350 3600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
3300 3650 3300 3550
-6
6 2850 3600 3150 3900
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 3000 3750 75 75 3000 3750 3000 3675
4 1 0 40 -1 0 12 0.0000 4 15 60 3000 3800 -\001
-6
6 1950 1050 2250 1350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2100 1200 75 75 2100 1200 2100 1125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2050 1200 2150 1200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2100 1250 2100 1150
-6
6 1950 450 2250 750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2100 600 75 75 2100 600 2100 525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2050 600 2150 600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2100 650 2100 550
-6
6 1950 2250 2250 2550
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2100 2400 75 75 2100 2400 2100 2325
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2050 2400 2150 2400
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2100 2450 2100 2350
-6
6 1950 1650 2250 1950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2100 1800 75 75 2100 1800 2100 1725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2050 1800 2150 1800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2100 1850 2100 1750
-6
6 1650 1200 1950 1500
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 1800 1350 75 75 1800 1350 1800 1275
4 1 0 40 -1 0 12 0.0000 4 15 60 1800 1400 -\001
-6
6 6150 4650 6450 4950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 4800 75 75 6300 4800 6300 4725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 4800 6350 4800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 4850 6300 4750
-6
6 6150 450 6450 750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6300 600 75 75 6300 600 6300 525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6250 600 6350 600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6300 650 6300 550
-6
6 6750 1050 7050 1350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6900 1200 75 75 6900 1200 6900 1125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6850 1200 6950 1200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6900 1250 6900 1150
-6
6 7950 2850 8250 3150
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 8100 3000 75 75 8100 3000 8100 2925
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
8050 3000 8150 3000
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
8100 3050 8100 2950
-6
6 7950 2250 8250 2550
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 8100 2400 75 75 8100 2400 8100 2325
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
8050 2400 8150 2400
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
8100 2450 8100 2350
-6
6 7350 3450 7650 3750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 7500 3600 75 75 7500 3600 7500 3525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
7450 3600 7550 3600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
7500 3650 7500 3550
-6
6 7350 1650 7650 1950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 7500 1800 75 75 7500 1800 7500 1725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
7450 1800 7550 1800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
7500 1850 7500 1750
-6
6 6750 4050 7050 4350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6900 4200 75 75 6900 4200 6900 4125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6850 4200 6950 4200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
6900 4250 6900 4150
-6
6 7050 3600 7350 3900
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 7200 3750 75 75 7200 3750 7200 3675
4 1 0 40 -1 0 12 0.0000 4 15 60 7200 3800 -\001
-6
6 6450 4200 6750 4500
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6600 4350 75 75 6600 4350 6600 4275
4 1 0 40 -1 0 12 0.0000 4 15 60 6600 4400 -\001
-6
6 5850 4800 6150 5100
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 6000 4950 75 75 6000 4950 6000 4875
4 1 0 40 -1 0 12 0.0000 4 15 60 6000 5000 -\001
-6
6 7650 3000 7950 3300
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 7800 3150 75 75 7800 3150 7800 3075
4 1 0 40 -1 0 12 0.0000 4 15 60 7800 3200 -\001
-6
6 4950 4050 5250 4350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 5100 4200 75 75 5100 4200 5100 4125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5050 4200 5150 4200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5100 4250 5100 4150
-6
6 4950 3450 5250 3750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 5100 3600 75 75 5100 3600 5100 3525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5050 3600 5150 3600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5100 3650 5100 3550
-6
6 4650 3300 4950 3600
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4800 3450 75 75 4800 3450 4800 3375
4 1 0 40 -1 0 12 0.0000 4 15 60 4800 3500 -\001
-6
6 4350 2250 4650 2550
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4500 2400 75 75 4500 2400 4500 2325
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4450 2400 4550 2400
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4500 2450 4500 2350
-6
6 4350 450 4650 750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4500 600 75 75 4500 600 4500 525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4450 600 4550 600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
4500 650 4500 550
-6
6 4050 2400 4350 2700
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4200 2550 75 75 4200 2550 4200 2475
4 1 0 40 -1 0 12 0.0000 4 15 60 4200 2600 -\001
-6
6 4950 1050 5250 1350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 5100 1200 75 75 5100 1200 5100 1125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5050 1200 5150 1200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5100 1250 5100 1150
-6
6 4950 1650 5250 1950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 5100 1800 75 75 5100 1800 5100 1725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5050 1800 5150 1800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
5100 1850 5100 1750
-6
6 1950 4050 2250 4350
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2100 4200 75 75 2100 4200 2100 4125
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2050 4200 2150 4200
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2100 4250 2100 4150
-6
6 1950 3450 2250 3750
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 2100 3600 75 75 2100 3600 2100 3525
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2050 3600 2150 3600
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
2100 3650 2100 3550
-6
6 1350 4650 1650 4950
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 1500 4800 75 75 1500 4800 1500 4725
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
1450 4800 1550 4800
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
1500 4850 1500 4750
-6
6 1350 2850 1650 3150
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 1500 3000 75 75 1500 3000 1500 2925
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
1450 3000 1550 3000
2 1 0 1 0 7 40 -1 20 4.000 0 0 7 0 0 2
1500 3050 1500 2950
-6
6 4650 1800 4950 2100
1 3 0 1 0 7 40 -1 20 4.000 1 0.0000 4800 1950 75 75 4800 1950 4800 1875
4 1 0 40 -1 0 12 0.0000 4 15 60 4800 2000 -\001
-6
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 2700 4800 25 25 2700 4800 2700 4775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 2700 4200 25 25 2700 4200 2700 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 2700 3600 25 25 2700 3600 2700 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 2700 3000 25 25 2700 3000 2700 2975
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 1500 1200 25 25 1500 1200 1500 1175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 1500 600 25 25 1500 600 1500 575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 1500 2400 25 25 1500 2400 1500 2375
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 1525 1800 25 25 1525 1800 1525 1775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 3000 1200 25 25 3000 1200 3000 1175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 3000 600 25 25 3000 600 3000 575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 4800 25 25 5700 4800 5700 4775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 5700 600 25 25 5700 600 5700 575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 6300 1200 25 25 6300 1200 6300 1175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 7500 3000 25 25 7500 3000 7500 2975
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 7500 2400 25 25 7500 2400 7500 2375
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 6900 3600 25 25 6900 3600 6900 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 6300 4200 25 25 6300 4200 6300 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4500 4200 25 25 4500 4200 4500 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4500 3600 25 25 4500 3600 4500 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4200 4200 25 25 4200 4200 4200 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4200 3600 25 25 4200 3600 4200 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 6900 1800 25 25 6900 1800 6900 1775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 3900 2400 25 25 3900 2400 3900 2375
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 3900 600 25 25 3900 600 3900 575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 1500 4200 25 25 1500 4200 1500 4175
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 1500 3600 25 25 1500 3600 1500 3575
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 900 4800 25 25 900 4800 900 4775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 900 3000 25 25 900 3000 900 2975
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4500 1800 25 25 4500 1800 4500 1775
1 3 0 1 0 0 40 -1 20 4.000 1 0.0000 4500 1200 25 25 4500 1200 4500 1175
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 600 8400 600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 2400 8400 2400
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 3000 8400 3000
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 4800 8400 4800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 1200 8400 1200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
2700 4200 3300 4800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
2700 3600 3300 3000
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
2700 3000 3300 3600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 3600 8400 3600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
2700 4800 3300 4200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 1800 8400 1800
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
600 4200 8400 4200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
1500 1200 2100 600
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
1500 600 2100 1200
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
1500 1800 2100 2400
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
1500 2400 2100 1800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
5700 4800 6300 600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
5700 600 6300 4800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
6300 1200 6900 4275
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
6300 4200 6900 1200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
6900 3600 7500 1800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
7500 2400 8100 3000
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
6900 1800 7500 3600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
7500 3000 8100 2400
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
4500 3600 5100 4200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
4500 4200 5100 3600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
3900 2400 4500 600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
3900 600 4500 2400
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
4500 1800 5100 1200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
4500 1200 5100 1800
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
1500 4200 2100 3600
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
1500 3600 2100 4200
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
900 4800 1500 3000
2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
900 3000 1500 4800
4 1 0 40 -1 0 12 0.0000 4 135 90 300 675 0\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 1275 4\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 1875 2\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 2475 6\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 3675 5\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 4275 3\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 4875 7\001
4 1 0 40 -1 0 12 0.0000 4 135 90 300 3075 1\001
4 1 0 40 -1 0 12 0.0000 4 135 210 1800 2350 C6\001
4 1 0 40 -1 0 12 0.0000 4 135 195 2100 2275 S6\001
4 1 0 40 -1 0 12 0.0000 4 135 210 1800 1750 C6\001
4 1 0 40 -1 0 12 0.0000 4 135 255 2100 2050 -S6\001
4 1 0 40 -1 0 12 0.0000 4 135 210 3000 1125 C4\001
4 1 0 40 -1 0 12 0.0000 4 135 210 3000 525 C4\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 675 0\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 1275 1\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 1875 2\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 2475 3\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 3075 4\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 3675 5\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 4275 6\001
4 1 0 40 -1 0 12 0.0000 4 135 90 8700 4875 7\001
4 1 0 40 -1 0 12 0.0000 4 135 210 4200 4125 C4\001
4 1 0 40 -1 0 12 0.0000 4 135 210 4200 3525 C4\001
4 1 0 40 -1 0 12 0.0000 4 135 210 1800 4150 C3\001
4 1 0 40 -1 0 12 0.0000 4 135 195 2100 4075 S3\001
4 1 0 40 -1 0 12 0.0000 4 135 210 1800 3550 C3\001
4 1 0 40 -1 0 12 0.0000 4 135 255 2100 3850 -S3\001
4 1 0 40 -1 0 12 0.0000 4 135 210 1200 2950 C7\001
4 1 0 40 -1 0 12 0.0000 4 135 255 1500 3375 -S7\001
4 1 0 40 -1 0 12 0.0000 4 135 210 1200 4750 C7\001
4 1 0 40 -1 0 12 0.0000 4 135 195 1500 4575 S7\001

Some files were not shown because too many files have changed in this diff Show more