Issue #2965 - Update libtheora to 1.2.0.

This commit is contained in:
Job Bautista 2026-02-25 20:55:00 +08:00 • committed by OwnedByWuigi
commit 9bda7819c9
56 changed files with 367 additions and 307 deletions

View file

@ -28,6 +28,8 @@ Cristian Adam
Sebastian Pippin Sebastian Pippin
Simon Hosie Simon Hosie
Brad Smith Brad Smith
Petter Reinholdtsen
Tristan Matthews
- Bug fixes, enhancements, build systems. - Bug fixes, enhancements, build systems.
Mauricio Piacentini Mauricio Piacentini

View file

@ -1,169 +1,218 @@
libteora 1.2.0alpha1 (2010 September 23) libtheora 1.2.0 (2025 March 29)
* Bumped minor SONAME versions as oc_comment_unpack() implementation
changed.
* Added example wrapper script encoder_example_ffmpeg (#1601 #2336).
* Improve comment handling on platforms where malloc(0) return NULL
(#2304).
* Added pragma in example code to quiet clang op precedenca warnings.
* Adjusted encoder_example help text.
* Adjusted README, CHANGES, pkg-config and spec files to better reflect
current release (#2331 #2328).
* Corrected english typos in source and build system.
* Switched http links to https in doc and comments where relevant.
Did not touch RFC drafts.
- New 'ptalarbvorm' encoder with better rate/distortion optimization libtheora 1.2.0beta1 (2025 March 15)
- New th_encode_ctl option for copying configuration from an existing * Bumped minor SONAME versions as <codec.h> methods changed constness
of arguments.
* Updated libogg dependency to version 1.3.4 for ogg_uint64_t.
* Updated doxygen setup.
* Updated autotools setup and support scripts (#1467 #1800 #1987 #2318
#2320).
* Added support for RISC OS.
* Fixed mingw build (#2141).
* Improved ARM support.
* Converted SCons setup to work with Python 3.
* Introduced new configure options --enable-mem-constraint and
--enable-gcc-sanitizers.
* Fixed all known compiler warnings and errors from gcc and clang.
* Improved examples for stability and correctness.
* Various speed, bug fixes and code quality improvements.
- Fixed build problem with Visual Studio (#2317).
- Avoids undefined bit shift of signed numbers (#2321, #2322).
- Avoids example encoder crash on bogus audio input (#2305).
- Fixed musl linking issue with asm enabled (#2287).
- Fixed some broken clamping in rate control (#2229).
- Added NULL check _tc and _setup even for data packets (#2279).
- Fixed mismatched oc_mb_fill_cmapping11 signature (#2068).
- Updated the documentation for theora_encode_comment() (#726).
- Adjusted build to only link libcompat with dump_video (#1587).
- Corrected an operator precedence error in the visualization
code (#1751).
- Fixed two spelling errors in the comments (#1804).
- Avoid negative bit shift operation in huffdec.c (CVE-2024-56431).
* Improved library documentation and specification text.
* Adjusted library dependencies so libtheoraenc do not depend on
libtheoradec.
* Handle fallout from CVE-2017-14633 in libvorbis, check return value
in encoder_example and transcoder_example.
libtheora 1.2.0alpha1 (2010 September 23)
* New 'ptalarbvorm' encoder with better rate/distortion optimization
* New th_encode_ctl option for copying configuration from an existing
setup header, useful for splicing streams. setup header, useful for splicing streams.
- Returns TH_DUPFRAME in more cases. * Returns TH_DUPFRAME in more cases.
- Add ARM optimizations * Add ARM optimizations
- Add TI C64x+ DSP optimizations * Add TI C64x+ DSP optimizations
- Other performance improvements * Other performance improvements
- Rename speedlevel 2 to 3 and provide a new speedlevel 2 * Rename speedlevel 2 to 3 and provide a new speedlevel 2
- Various minor bug fixes * Various minor bug fixes
libtheora 1.1.2 (unreleased snapshot) libtheora 1.1.2 (unreleased snapshot)
- Fix Huffman table decoding with OC_HUFF_SLUSH is set to 0 * Fix Huffman table decoding with OC_HUFF_SLUSH is set to 0
- Fix a frame size bug in player_example * Fix a frame size bug in player_example
- Add support for passing a buffer the size of the picture * Add support for passing a buffer the size of the picture
region, rather than a full padded frame to th_encode_ycbcr_in() region, rather than a full padded frame to th_encode_ycbcr_in()
as was possible with the legacy pre-1.0 API. as was possible with the legacy pre-1.0 API.
- 4:4:4 support in player_example using software yuv->rgb * 4:4:4 support in player_example using software yuv->rgb
- Better rgb->yuv conversion in png2theora * Better rgb->yuv conversion in png2theora
- Clean up warnings and local variables * Clean up warnings and local variables
- Build and documentation fixes * Build and documentation fixes
libtheora 1.1.1 (2009 October 1) libtheora 1.1.1 (2009 October 1)
- Fix problems with MSVC inline assembly * Fix problems with MSVC inline assembly
- Add the missing encoder_disabled.c to the distribution * Add the missing encoder_disabled.c to the distribution
- build updates: autogen.sh should work better after switching systems * build updates: autogen.sh should work better after switching systems
and the MSVC project now defaults to the dynamic runtime library and the MSVC project now defaults to the dynamic runtime library
- Namespace some variables to avoid conflicts on wince. * Namespace some variables to avoid conflicts on wince.
libtheora 1.1.0 (2009 September 24) libtheora 1.1.0 (2009 September 24)
- Fix various small issues with the example and telemetry code * Fix various small issues with the example and telemetry code
- Fix handing a zero-byte packet as the first frame * Fix handing a zero-byte packet as the first frame
- Documentation cleanup * Documentation cleanup
- Two minor build fixes * Two minor build fixes
libtheora 1.1beta3 (2009 August 22) libtheora 1.1beta3 (2009 August 22)
- Rate control fixes to smooth quality * Rate control fixes to smooth quality
- MSVC build now exports all of the 1.0 api * MSVC build now exports all of the 1.0 api
- Assorted small bug fixes * Assorted small bug fixes
libtheora 1.1beta2 (2009 August 12) libtheora 1.1beta2 (2009 August 12)
- Fix a rate control problem with difficult input * Fix a rate control problem with difficult input
- Build fixes for OpenBSD and Apple Xcode * Build fixes for OpenBSD and Apple Xcode
- Examples now all use the 1.0 api * Examples now all use the 1.0 api
- TH_ENCCTL_SET_SPLEVEL works again * TH_ENCCTL_SET_SPLEVEL works again
- Various bug fixes and source tree rearrangement * Various bug fixes and source tree rearrangement
libtheora 1.1beta1 (2009 August 5) libtheora 1.1beta1 (2009 August 5)
- Support for two-pass encoding * Support for two-pass encoding
- Performance optimization of both encoder and decoder * Performance optimization of both encoder and decoder
- Encoder supports dynamic adjustment of quality and * Encoder supports dynamic adjustment of quality and
bitrate targets bitrate targets
- Encoder is generally more configurable, and all * Encoder is generally more configurable, and all
rate control modes perform better rate control modes perform better
- Encoder now accepts 4:2:2 and 4:4:4 chroma sampling * Encoder now accepts 4:2:2 and 4:4:4 chroma sampling
- Decoder telemetry output shows quantization choice * Decoder telemetry output shows quantization choice
and a breakdown of bitrate usage in the frame and a breakdown of bitrate usage in the frame
- MSVC assembly optimizations up to date and functional * MSVC assembly optimizations up to date and functional
libtheora 1.1alpha2 (2009 May 26) libtheora 1.1alpha2 (2009 May 26)
- Reduce lambda for small quantizers. * Reduce lambda for small quantizers.
- New encoder fDCT does better on smooth gradients * New encoder fDCT does better on smooth gradients
- Use SATD for mode decisions (1-2% bitrate reduction) * Use SATD for mode decisions (1-2% bitrate reduction)
- Assembly rewrite for new features and general speed up * Assembly rewrite for new features and general speed up
- Share code between the encoder and decoder for performance * Share code between the encoder and decoder for performance
- Fix 4:2:2 decoding and telemetry * Fix 4:2:2 decoding and telemetry
- MSVC project files updated, but assembly is disabled. * MSVC project files updated, but assembly is disabled.
- New configure option --disable-spec to work around toolchain * New configure option --disable-spec to work around toolchain
detection failures. detection failures.
- Limit symbol exports on MacOS X. * Limit symbol exports on MacOS X.
- Port remaining unit tests from the 1.0 release. * Port remaining unit tests from the 1.0 release.
libtheora 1.1alpha1 (2009 March 27) libtheora 1.1alpha1 (2009 March 27)
- Encoder rewrite with much improved vbr quality/bitrate and * Encoder rewrite with much improved vbr quality/bitrate and
better tracking of the target rate in cbr mode. better tracking of the target rate in cbr mode.
- MSVC project files do not work in this release. * MSVC project files do not work in this release.
libtheora 1.0 (2008 November 3) libtheora 1.0 (2008 November 3)
- Merge x86 assembly for forward DCT from Thusnelda branch. * Merge x86 assembly for forward DCT from Thusnelda branch.
- Update 32 bit MMX with loop filter fix. * Update 32 bit MMX with loop filter fix.
- Check for an uninitialized state before dereferencing in propagating * Check for an uninitialized state before dereferencing in propagating
decode calls. decode calls.
- Remove all TH_DEBUG statements. * Remove all TH_DEBUG statements.
- Rename the bitpacker source files copied from libogg to avoid * Rename the bitpacker source files copied from libogg to avoid
confusing simple build systems using both libraries. confusing simple build systems using both libraries.
- Declare bitfield entries to be explicitly signed for Solaris cc. * Declare bitfield entries to be explicitly signed for Solaris cc.
- Set quantization parameters to default values when an empty buffer is * Set quantization parameters to default values when an empty buffer is
passed with TH_ENCCTL_SET_QUANT_PARAMS. passed with TH_ENCCTL_SET_QUANT_PARAMS.
- Split encoder and decoder tests depending on configure settings. * Split encoder and decoder tests depending on configure settings.
- Return lstylex.sty to the distribution. * Return lstylex.sty to the distribution.
- Disable inline assembly on gcc versions prior to 3.1. * Disable inline assembly on gcc versions prior to 3.1.
- Remove extern references for OC_*_QUANT_MIN. * Remove extern references for OC_*_QUANT_MIN.
- Make various data tables static const so they can be read-only. * Make various data tables static const so they can be read-only.
- Remove ENCCTL codes from the old encoder API. * Remove ENCCTL codes from the old encoder API.
- Implement TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE ctl. * Implement TH_ENCCTL_SET_KEYFRAME_FREQUENCY_FORCE ctl.
- Fix segfault when exactly one of the width or height is not a multiple * Fix segfault when exactly one of the width or height is not a multiple
of 16, but the other is. of 16, but the other is.
- Compute the correct vertical offset for chroma. * Compute the correct vertical offset for chroma.
- cpuid assembly fix for MSVC. * cpuid assembly fix for MSVC.
- Add VS2008 project files. * Add VS2008 project files.
- Build updates for 64-bit platforms, Mingw32, VS and XCode. * Build updates for 64-bit platforms, Mingw32, VS and XCode.
- Do not clobber the cropping rectangle. * Do not clobber the cropping rectangle.
- Declare ourselves 1.0final to pkg-config to sort after beta releases. * Declare ourselves 1.0final to pkg-config to sort after beta releases.
- Fix the scons build to include asm in libtheoradec/enc. * Fix the scons build to include asm in libtheoradec/enc.
libtheora 1.0beta3 (2008 April 16) libtheora 1.0beta3 (2008 April 16)
- Build new libtheoradec and libtheoraenc libraries * Build new libtheoradec and libtheoraenc libraries
supporting the new API from theora-exp. This API should supporting the new API from theora-exp. This API should
not be considered stable yet. not be considered stable yet.
- Change granule_frame() to return an index as documented. * Change granule_frame() to return an index as documented.
This is a change of behaviour from 1.0beta1. This is a change of behaviour from 1.0beta1.
- Document that granule_time() returns the end of the * Document that granule_time() returns the end of the
presentation interval. presentation interval.
- Use a custom copy of the libogg bitpacker in the decoder * Use a custom copy of the libogg bitpacker in the decoder
to avoid function call overhead. to avoid function call overhead.
- MMX code improved and ported to MSVC. * MMX code improved and ported to MSVC.
- Fix a problem with the MMX code on SELinux. * Fix a problem with the MMX code on SELinux.
- Fix a problem with decoder quantizer initialization. * Fix a problem with decoder quantizer initialization.
- Fix a page queue problem with png2theora. * Fix a page queue problem with png2theora.
- Improved robustness. * Improved robustness.
- Updated VS2005 project files. * Updated VS2005 project files.
- Dropped build support for Microsoft VS2003. * Dropped build support for Microsoft VS2003.
- Dropped build support for the unreleased libogg2. * Dropped build support for the unreleased libogg2.
- Added the specification to the autotools build. * Added the specification to the autotools build.
- Specification corrections. * Specification corrections.
libtheora 1.0beta2 (2007 October 12) libtheora 1.0beta2 (2007 October 12)
- Fix a crash bug on char-is-unsigned architectures (PowerPC) * Fix a crash bug on char-is-unsigned architectures (PowerPC)
- Fix a buffer sizing issue that caused rare encoder crashes * Fix a buffer sizing issue that caused rare encoder crashes
- Fix a buffer alignment issue * Fix a buffer alignment issue
- Build fixes for MingW32, MSVC * Build fixes for MingW32, MSVC
- Improved format documentation. * Improved format documentation.
libtheora 1.0beta1 (2007 September 22) libtheora 1.0beta1 (2007 September 22)
- Granulepos scheme modified to match other codecs. This bumps * Granulepos scheme modified to match other codecs. This bumps
the bitstream revision to 3.2.1. Bitstreams marked 3.2.0 are the bitstream revision to 3.2.1. Bitstreams marked 3.2.0 are
handled correctly by this decoder. Older decoders will show handled correctly by this decoder. Older decoders will show
a one frame sync error in the less noticeable direction. a one frame sync error in the less noticeable direction.
libtheora 1.0alpha8 (2007 September 18) libtheora 1.0alpha8 (2007 September 18)
- Switch to new spec compliant decoder from theora-exp branch. * Switch to new spec compliant decoder from theora-exp branch.
Written by Dr. Timothy Terriberry. Written by Dr. Timothy Terriberry.
- Add support to the encoder for using quantization settings * Add support to the encoder for using quantization settings
provided by the application. provided by the application.
- more assembly optimizations * more assembly optimizations
libtheora 1.0alpha7 (2006 June 20) libtheora 1.0alpha7 (2006 June 20)
- Enable mmx assembly by default * Enable mmx assembly by default
- Avoid some relocations that caused problems on SELinux * Avoid some relocations that caused problems on SELinux
- Other build fixes * Other build fixes
- time testing mode (-f) for the dump_video example * time testing mode (-f) for the dump_video example
libtheora 1.0alpha6 (2006 May 30) libtheora 1.0alpha6 (2006 May 30)
@ -183,7 +232,7 @@ libtheora 1.0alpha5 (2005 August 20)
* Fixed bitrate management bugs that caused popping and encode * Fixed bitrate management bugs that caused popping and encode
errors errors
* Fixed a crash problem with the theora_state internals not * Fixed a crash problem with the theora_state internals not
being intialized properly. being initialized properly.
* new utility function: * new utility function:
- theora_granule_shift() - theora_granule_shift()
* dump_video example now makes YUV4MPEG files by default, so * dump_video example now makes YUV4MPEG files by default, so
@ -220,7 +269,7 @@ libtheora 1.0alpha3 (2004 March 20)
- move the granulepos shift field to maintain byte alignment longer. - move the granulepos shift field to maintain byte alignment longer.
- reserve 5 additional bits for subsampling and interlace flags. - reserve 5 additional bits for subsampling and interlace flags.
* Bitstream setup header FORMAT CHANGES: * Bitstream setup header FORMAT CHANGES:
- support for a range of interpolated quant matricies. - support for a range of interpolated quant matrices.
- include the in-loop block filter coeff. - include the in-loop block filter coeff.
* Bitsteam data packet FORMAT CHANGES: * Bitsteam data packet FORMAT CHANGES:
- Reserve a bit for per-block Q index selection. - Reserve a bit for per-block Q index selection.

View file

@ -10,13 +10,13 @@ while allowing it a longer useful lifetime.
The 1.0 release decoder supported all the new features, but the The 1.0 release decoder supported all the new features, but the
encoder is nearly identical to the VP3 code. encoder is nearly identical to the VP3 code.
The 1.1 release featured a completely rewritten encoder, offering The 1.1 release, codenamed Thusnelda, featured a completely rewritten
better performance and compression, and making more complete use encoder, offering better performance and compression, and making more
of the format's feature set. complete use of the format's feature set.
The 1.2 release features significant additional improvements in The 1.2 release, codenamed Ptalarbvorm, features significant
compression and performance. Files produced by newer encoders can additional improvements in compression and performance. Files produced
be decoded by earlier releases. by newer encoders can be decoded by earlier releases.
### Where is Theora? ### Where is Theora?
@ -35,7 +35,7 @@ Requirements summary:
For libtheora: For libtheora:
* libogg 1.1 or newer. * libogg 1.3.4 or newer.
For example encoder: For example encoder:
@ -59,7 +59,9 @@ For the player only:
The provided build system is the GNU automake/autoconf system, and The provided build system is the GNU automake/autoconf system, and
the main library, libtheora, should already build smoothly on any the main library, libtheora, should already build smoothly on any
system. Failure of libtheora to build on a GNU-enabled system is system. Failure of libtheora to build on a GNU-enabled system is
considered a bug; please report problems to theora-dev@xiph.org. considered a bug; please report problems to theora-dev@xiph.org,
https://lists.xiph.org/mailman/listinfo/theora-dev or preferably to
https://gitlab.xiph.org/xiph/theora.
Windows build support is included in the win32 directory. Windows build support is included in the win32 directory.
@ -67,6 +69,9 @@ Project files for Apple XCode are included in the macosx directory.
There is also a more limited scons build. There is also a more limited scons build.
The mailing list theora@xiph.org has been created for discussing use
of the theora video codec, https://lists.xiph.org/mailman/listinfo/theora.
### How do I use the sample encoder? ### How do I use the sample encoder?
The sample encoder takes raw video in YUV4MPEG2 format, as used by The sample encoder takes raw video in YUV4MPEG2 format, as used by
@ -111,7 +116,7 @@ Jan Gerber's ffmpeg2theora is an excellent encoding front end.
encoder_internal.h:664: parse error before `ogg_uint16_t` 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 This means you have version of libogg prior to 1.3.4. A *complete* new Ogg
install, libs and headers is needed. install, libs and headers is needed.
Also be sure that there aren't multiple copies of Ogg installed in Also be sure that there aren't multiple copies of Ogg installed in
@ -122,7 +127,7 @@ for libs and headers.
undefined reference to `oggpackB_stream` undefined reference to `oggpackB_stream`
See above; you need libogg 1.1 or later. See above; you need libogg 1.3.4 or later.
### Link error, such as: ### Link error, such as:

View file

@ -4,4 +4,4 @@ made were those applied by update.sh and the addition/update of
Makefile.in files for the UXP build system. Makefile.in files for the UXP build system.
The upstream release used was https://gitlab.xiph.org/xiph/theora The upstream release used was https://gitlab.xiph.org/xiph/theora
The git revision used was 7180717276af1ebc7da15c83162d6c5d6203aabf. The version used was tagged v1.2.0.

View file

@ -6,12 +6,11 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: theora.h,v 1.8 2004/03/15 22:17:32 derf Exp $
********************************************************************/ ********************************************************************/
@ -22,13 +21,13 @@
* This is the documentation for the <tt>libtheora</tt> C API. * This is the documentation for the <tt>libtheora</tt> C API.
* *
* The \c libtheora package is the current reference * The \c libtheora package is the current reference
* implementation for <a href="http://www.theora.org/">Theora</a>, a free, * implementation for <a href="https://www.theora.org/">Theora</a>, a free,
* patent-unencumbered video codec. * patent-unencumbered video codec.
* Theora is derived from On2's VP3 codec with additional features and * Theora is derived from On2's VP3 codec with additional features and
* integration with Ogg multimedia formats by * integration with Ogg multimedia formats by
* <a href="http://www.xiph.org/">the Xiph.Org Foundation</a>. * <a href="https://www.xiph.org/">the Xiph.Org Foundation</a>.
* Complete documentation of the format itself is available in * Complete documentation of the format itself is available in
* <a href="http://www.theora.org/doc/Theora.pdf">the Theora * <a href="https://www.theora.org/doc/Theora.pdf">the Theora
* specification</a>. * specification</a>.
* *
* \section Organization * \section Organization
@ -47,7 +46,7 @@
* During initial development, prior to the 1.0 release, * During initial development, prior to the 1.0 release,
* \c libtheora exported a different \ref oldfuncs which * \c libtheora exported a different \ref oldfuncs which
* combined both encode and decode functions. * combined both encode and decode functions.
* In general, legacy API symbols can be indentified * In general, legacy API symbols can be identified
* by their \c theora_ or \c OC_ namespace prefixes. * by their \c theora_ or \c OC_ namespace prefixes.
* The current API uses \c th_ or \c TH_ instead. * The current API uses \c th_ or \c TH_ instead.
* *
@ -62,8 +61,8 @@
* The shared <tt>libtheoradec</tt> and <tt>libtheoraenc</tt> C API. * The shared <tt>libtheoradec</tt> and <tt>libtheoraenc</tt> C API.
* You don't need to include this directly.*/ * You don't need to include this directly.*/
#if !defined(_O_THEORA_CODEC_H_) #if !defined(OGG_THEORA_CODEC_HEADER)
# define _O_THEORA_CODEC_H_ (1) # define OGG_THEORA_CODEC_HEADER (1)
# include <ogg/ogg.h> # include <ogg/ogg.h>
#if defined(__cplusplus) #if defined(__cplusplus)
@ -95,7 +94,7 @@ extern "C" {
/*@}*/ /*@}*/
/**The currently defined color space tags. /**The currently defined color space tags.
* See <a href="http://www.theora.org/doc/Theora.pdf">the Theora * See <a href="https://www.theora.org/doc/Theora.pdf">the Theora
* specification</a>, Chapter 4, for exact details on the meaning * specification</a>, Chapter 4, for exact details on the meaning
* of each of these color spaces.*/ * of each of these color spaces.*/
typedef enum{ typedef enum{
@ -111,7 +110,7 @@ typedef enum{
}th_colorspace; }th_colorspace;
/**The currently defined pixel format tags. /**The currently defined pixel format tags.
* See <a href="http://www.theora.org/doc/Theora.pdf">the Theora * See <a href="https://www.theora.org/doc/Theora.pdf">the Theora
* specification</a>, Section 4.4, for details on the precise sample * specification</a>, Section 4.4, for details on the precise sample
* locations.*/ * locations.*/
typedef enum{ typedef enum{
@ -195,7 +194,7 @@ typedef th_img_plane th_ycbcr_buffer[3];
* *
* It is also generally recommended that the offsets and sizes should still be * 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. * 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 * See <a href="https://www.theora.org/doc/Theora.pdf">the Theora
* specification</a>, Section 4.4, for more details. * specification</a>, Section 4.4, for more details.
* *
* Frame rate, in frames per second, is stored as a rational fraction, as is * Frame rate, in frames per second, is stored as a rational fraction, as is
@ -314,7 +313,7 @@ typedef struct{
* A particular tag may occur more than once, and order is significant. * 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 * The character set encoding for the strings is always UTF-8, but the tag
* names are limited to ASCII, and treated as case-insensitive. * names are limited to ASCII, and treated as case-insensitive.
* See <a href="http://www.theora.org/doc/Theora.pdf">the Theora * See <a href="https://www.theora.org/doc/Theora.pdf">the Theora
* specification</a>, Section 6.3.3 for details. * specification</a>, Section 6.3.3 for details.
* *
* In filling in this structure, th_decode_headerin() will null-terminate * In filling in this structure, th_decode_headerin() will null-terminate
@ -603,4 +602,4 @@ extern void th_comment_clear(th_comment *_tc);
} }
#endif #endif
#endif #endif /* OGG_THEORA_CODEC_HEADER */

View file

@ -6,17 +6,16 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: theora.h,v 1.17 2003/12/06 18:06:19 arc Exp $
********************************************************************/ ********************************************************************/
#ifndef _O_THEORA_H_ #ifndef OGG_THEORA_HEADER
#define _O_THEORA_H_ #define OGG_THEORA_HEADER
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
@ -41,16 +40,16 @@ extern "C"
* declared in theoradec.h and theoraenc.h. * declared in theoradec.h and theoraenc.h.
* *
* libtheora is the reference implementation for * libtheora is the reference implementation for
* <a href="http://www.theora.org/">Theora</a>, a free video codec. * <a href="https://www.theora.org/">Theora</a>, a free video codec.
* Theora is derived from On2's VP3 codec with improved integration with * 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>. * Ogg multimedia formats by <a href="https://www.xiph.org/">Xiph.Org</a>.
* *
* \section overview Overview * \section overview Overview
* *
* This library will both decode and encode theora packets to/from raw YUV * 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 * frames. In either case, the packets will most likely either come from or
* need to be embedded in an Ogg stream. Use * need to be embedded in an Ogg stream. Use
* <a href="http://xiph.org/ogg/">libogg</a> or * <a href="https://www.xiph.org/ogg/">libogg</a> or
* <a href="http://www.annodex.net/software/liboggz/index.html">liboggz</a> * <a href="http://www.annodex.net/software/liboggz/index.html">liboggz</a>
* to extract/package these packets. * to extract/package these packets.
* *
@ -260,7 +259,7 @@ typedef struct{
* the 'comment' header packet. * the 'comment' header packet.
* *
* Meta data is stored as a series of (tag, value) pairs, in * Meta data is stored as a series of (tag, value) pairs, in
* length-encoded string vectors. The first occurence of the * length-encoded string vectors. The first occurrence of the
* '=' character delimits the tag and value. A particular tag * '=' character delimits the tag and value. A particular tag
* may occur more than once. The character set encoding for * may occur more than once. The character set encoding for
* the strings is always UTF-8, but the tag names are limited * the strings is always UTF-8, but the tag names are limited
@ -330,7 +329,7 @@ typedef struct theora_comment{
* Call this after a seek, to update the internal granulepos * Call this after a seek, to update the internal granulepos
* in the decoder, to insure that subsequent frames are marked * in the decoder, to insure that subsequent frames are marked
* properly. If you track timestamps yourself and do not use * properly. If you track timestamps yourself and do not use
* the granule postion returned by the decoder, then you do * the granule position returned by the decoder, then you do
* not need to use this control. * not need to use this control.
*/ */
#define TH_DECCTL_SET_GRANPOS (5) #define TH_DECCTL_SET_GRANPOS (5)
@ -755,7 +754,7 @@ extern char *theora_comment_query(theora_comment *tc, char *tag, int count);
* \param tag The tag to look up * \param tag The tag to look up
* \returns The number on instances of a particular tag. * \returns The number on instances of a particular tag.
* *
* Call this first when querying for a specific tag and then interate * Call this first when querying for a specific tag and then iterate
* over the number of instances with separate calls to * over the number of instances with separate calls to
* theora_comment_query() to retrieve all instances in order. * theora_comment_query() to retrieve all instances in order.
**/ **/
@ -783,4 +782,4 @@ extern int theora_control(theora_state *th,int req,void *buf,size_t buf_sz);
} }
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* _O_THEORA_H_ */ #endif /* OGG_THEORA_HEADER */

View file

@ -6,20 +6,19 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation http://www.xiph.org/ * * by the Xiph.Org Foundation https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: theora.h,v 1.8 2004/03/15 22:17:32 derf Exp $
********************************************************************/ ********************************************************************/
/**\file /**\file
* The <tt>libtheoradec</tt> C decoding API.*/ * The <tt>libtheoradec</tt> C decoding API.*/
#if !defined(_O_THEORA_THEORADEC_H_) #if !defined(OGG_THEORA_THEORADEC_HEADER)
# define _O_THEORA_THEORADEC_H_ (1) # define OGG_THEORA_THEORADEC_HEADER (1)
# include <stddef.h> # include <stddef.h>
# include <ogg/ogg.h> # include <ogg/ogg.h>
# include "codec.h" # include "codec.h"
@ -330,4 +329,4 @@ extern void th_decode_free(th_dec_ctx *_dec);
} }
#endif #endif
#endif #endif /* OGG_THEORA_THEORADEC_HEADER */

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: x86int.h 17344 2010-07-21 01:42:18Z tterribe $
********************************************************************/ ********************************************************************/
#if !defined(_arm_armbits_H) #if !defined(_arm_armbits_H)

View file

@ -6,12 +6,12 @@
;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * ;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
;* * ;* *
;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * ;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
;* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * ;* by the Xiph.Org Foundation and contributors *
;* https://www.xiph.org/ *
;* * ;* *
;******************************************************************** ;********************************************************************
; ;
; function: ; function:
; last mod: $Id$
; ;
;******************************************************************** ;********************************************************************

View file

@ -6,14 +6,14 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
CPU capability detection for ARM processors. CPU capability detection for ARM processors.
function: function:
last mod: $Id: cpu.c 17344 2010-07-21 01:42:18Z tterribe $
********************************************************************/ ********************************************************************/
@ -147,7 +147,7 @@ ogg_uint32_t oc_cpu_flags_get(void) {
#else #else
/*The feature registers which can tell us what the processor supports are /*The feature registers which can tell us what the processor supports are
accessible in priveleged modes only, so we can't have a general user-space accessible in privileged modes only, so we can't have a general user-space
detection method like on x86.*/ detection method like on x86.*/
# error "Configured to use ARM asm but no CPU detection method available for " \ # error "Configured to use ARM asm but no CPU detection method available for " \
"your platform. Reconfigure with --disable-asm (or send patches)." "your platform. Reconfigure with --disable-asm (or send patches)."

View file

@ -6,11 +6,11 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: cpu.h 17344 2010-07-21 01:42:18Z tterribe $
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * ;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
;* * ;* *
;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * ;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
;* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * ;* by the Xiph.Org Foundation and contributors *
;* https://www.xiph.org/ *
;* * ;* *
;******************************************************************** ;********************************************************************
; Original implementation: ; Original implementation:
; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd ; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd
; last mod: $Id$
;******************************************************************** ;********************************************************************
AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY

View file

@ -6,12 +6,12 @@
;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * ;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
;* * ;* *
;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * ;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
;* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * ;* by the Xiph.Org Foundation and contributors *
;* https://www.xiph.org/ *
;* * ;* *
;******************************************************************** ;********************************************************************
; Original implementation: ; Original implementation:
; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd ; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd
; last mod: $Id$
;******************************************************************** ;********************************************************************
AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: x86int.h 17344 2010-07-21 01:42:18Z tterribe $
********************************************************************/ ********************************************************************/
#if !defined(_arm_armint_H) #if !defined(_arm_armint_H)

View file

@ -6,12 +6,12 @@
;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * ;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
;* * ;* *
;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * ;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
;* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * ;* by the Xiph.Org Foundation and contributors *
;* https://www.xiph.org/ *
;* * ;* *
;******************************************************************** ;********************************************************************
; Original implementation: ; Original implementation:
; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd ; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd
; last mod: $Id$
;******************************************************************** ;********************************************************************
AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY

View file

@ -6,12 +6,12 @@
;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * ;* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
;* * ;* *
;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * ;* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
;* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * ;* by the Xiph.Org Foundation and contributors *
;* https://www.xiph.org/ *
;* * ;* *
;******************************************************************** ;********************************************************************
; Original implementation: ; Original implementation:
; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd ; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd
; last mod: $Id$
;******************************************************************** ;********************************************************************
; Set the following to 1 if we have EDSP instructions ; Set the following to 1 if we have EDSP instructions

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2010 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: x86state.c 17344 2010-07-21 01:42:18Z tterribe $
********************************************************************/ ********************************************************************/
#include "armint.h" #include "armint.h"

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggTheora SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggTheora SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: packing variable sized words into an octet stream function: packing variable sized words into an octet stream
last mod: $Id$
********************************************************************/ ********************************************************************/
#include <string.h> #include <string.h>

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE OggTheora SOURCE CODE IS (C) COPYRIGHT 1994-2009 * * THE OggTheora SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: packing variable sized words into an octet stream function: packing variable sized words into an octet stream
last mod: $Id: bitwise.c 7675 2004-09-01 00:34:39Z xiphmont $
********************************************************************/ ********************************************************************/
#if !defined(_bitpack_H) #if !defined(_bitpack_H)

View file

@ -89,7 +89,7 @@
#define PACKAGE_URL "" #define PACKAGE_URL ""
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "1.2.0alpha1+git" #define PACKAGE_VERSION "1.2.0"
/* Define to 1 if all of the C90 standard headers exist (not just the ones /* Define to 1 if all of the C90 standard headers exist (not just the ones
required in a freestanding environment). This macro is provided for required in a freestanding environment). This macro is provided for
@ -100,4 +100,4 @@
/* #undef THEORA_DISABLE_ENCODE */ /* #undef THEORA_DISABLE_ENCODE */
/* Version number of package */ /* Version number of package */
#define VERSION "1.2.0alpha1+git" #define VERSION "1.2.0"

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -134,6 +134,7 @@ static int oc_comment_unpack(oc_pack_buf *_opb,th_comment *_tc){
_tc->comments=0; _tc->comments=0;
return TH_EBADHEADER; return TH_EBADHEADER;
} }
if(0<_tc->comments){
_tc->comment_lengths=(int *)_ogg_malloc( _tc->comment_lengths=(int *)_ogg_malloc(
_tc->comments*sizeof(_tc->comment_lengths[0])); _tc->comments*sizeof(_tc->comment_lengths[0]));
_tc->user_comments=(char **)_ogg_malloc( _tc->user_comments=(char **)_ogg_malloc(
@ -157,6 +158,10 @@ static int oc_comment_unpack(oc_pack_buf *_opb,th_comment *_tc){
oc_unpack_octets(_opb,_tc->user_comments[i],len); oc_unpack_octets(_opb,_tc->user_comments[i],len);
_tc->user_comments[i][len]='\0'; _tc->user_comments[i][len]='\0';
} }
} else {
_tc->comment_lengths=NULL;
_tc->user_comments=NULL;
}
return oc_pack_bytes_left(_opb)<0?TH_EBADHEADER:0; return oc_pack_bytes_left(_opb)<0?TH_EBADHEADER:0;
} }
@ -219,7 +224,7 @@ static int oc_dec_headerin(oc_pack_buf *_opb,th_info *_info,
/*Comment header.*/ /*Comment header.*/
case 0x81:{ case 0x81:{
if(_tc==NULL)return TH_EFAULT; if(_tc==NULL)return TH_EFAULT;
/*We shoud have already decoded the info header, and should not yet have /*We should have already decoded the info header, and should not yet have
decoded the comment header.*/ decoded the comment header.*/
if(_info->frame_width==0||_tc->vendor!=NULL)return TH_EBADHEADER; if(_info->frame_width==0||_tc->vendor!=NULL)return TH_EBADHEADER;
ret=oc_comment_unpack(_opb,_tc); ret=oc_comment_unpack(_opb,_tc);

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -86,12 +86,12 @@ struct oc_dec_pipeline_state{
from buffer overflow. from buffer overflow.
We make it fully twice as large so that the second half can serve as the We make it fully twice as large so that the second half can serve as the
reconstruction buffer, which saves passing another parameter to all the reconstruction buffer, which saves passing another parameter to all the
acceleration functios. acceleration functions.
It also solves problems with 16-byte alignment for NEON on ARM. It also solves problems with 16-byte alignment for NEON on ARM.
gcc (as of 4.2.1) only seems to be able to give stack variables 8-byte gcc (as of 4.2.1) only seems to be able to give stack variables 8-byte
alignment, and silently produces incorrect results if you ask for 16. alignment, and silently produces incorrect results if you ask for 16.
Finally, keeping it off the stack means there's less likely to be a data Finally, keeping it off the stack means there's less likely to be a data
hazard beween the NEON co-processor and the regular ARM core, which avoids hazard between the NEON co-processor and the regular ARM core, which avoids
unnecessary stalls.*/ unnecessary stalls.*/
OC_ALIGN16(ogg_int16_t dct_coeffs[128]); OC_ALIGN16(ogg_int16_t dct_coeffs[128]);
OC_ALIGN16(signed char bounding_values[256]); OC_ALIGN16(signed char bounding_values[256]);

View file

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009,2025 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -147,7 +147,7 @@ static const unsigned char OC_INTERNAL_DCT_TOKEN_EXTRA_BITS[15]={
((_eobs)<<OC_DCT_CW_EOB_SHIFT| \ ((_eobs)<<OC_DCT_CW_EOB_SHIFT| \
(_rlen)<<OC_DCT_CW_RLEN_SHIFT| \ (_rlen)<<OC_DCT_CW_RLEN_SHIFT| \
(_flip)<<OC_DCT_CW_FLIP_BIT| \ (_flip)<<OC_DCT_CW_FLIP_BIT| \
(_mag)-(_flip)<<OC_DCT_CW_MAG_SHIFT) ((_mag)-(_flip))*(1<<OC_DCT_CW_MAG_SHIFT))
/*A special code word value that signals the end of the frame (a long EOB run /*A special code word value that signals the end of the frame (a long EOB run
of zero).*/ of zero).*/
@ -1755,13 +1755,13 @@ static void oc_dec_deblock_frag_rows(oc_dec_ctx *_dec,
flimit=(qstep*3)>>2; flimit=(qstep*3)>>2;
oc_filter_hedge(dst+x,dst_ystride,src+x-src_ystride,src_ystride, oc_filter_hedge(dst+x,dst_ystride,src+x-src_ystride,src_ystride,
qstep,flimit,variance,variance+nhfrags); qstep,flimit,variance,variance+nhfrags);
oc_filter_vedge(dst+x-(dst_ystride<<2)-4,dst_ystride, oc_filter_vedge(dst+x-(dst_ystride*4)-4,dst_ystride,
qstep,flimit,variance-1); qstep,flimit,variance-1);
variance++; variance++;
dc_qi++; dc_qi++;
} }
dst+=dst_ystride<<3; dst+=dst_ystride*8;
src+=src_ystride<<3; src+=src_ystride*8;
} }
/*And finally, handle the last row in the frame, if it's in the range.*/ /*And finally, handle the last row in the frame, if it's in the range.*/
if(!notdone){ if(!notdone){
@ -1777,7 +1777,7 @@ static void oc_dec_deblock_frag_rows(oc_dec_ctx *_dec,
for(x=8;x<width;x+=8){ for(x=8;x<width;x+=8){
qstep=_dec->pp_dc_scale[*dc_qi++]; qstep=_dec->pp_dc_scale[*dc_qi++];
flimit=(qstep*3)>>2; flimit=(qstep*3)>>2;
oc_filter_vedge(dst+x-(dst_ystride<<3)-4,dst_ystride, oc_filter_vedge(dst+x-(dst_ystride*8)-4,dst_ystride,
qstep,flimit,variance++); qstep,flimit,variance++);
} }
} }
@ -1952,7 +1952,7 @@ static void oc_dec_dering_frag_rows(oc_dec_ctx *_dec,th_img_plane *_img,
frag++; frag++;
variance++; variance++;
} }
idata+=ystride<<3; idata+=ystride*8;
} }
} }
@ -2101,7 +2101,7 @@ static void oc_render_telemetry(th_dec_ctx *_dec,th_ycbcr_buffer _ycbcr,
hdec=!(_dec->state.info.pixel_fmt&1); hdec=!(_dec->state.info.pixel_fmt&1);
vdec=!(_dec->state.info.pixel_fmt&2); vdec=!(_dec->state.info.pixel_fmt&2);
/*Lazy data buffer init. /*Lazy data buffer init.
We could try to re-use the post-processing buffer, which would save We could try to reuse the post-processing buffer, which would save
memory, but complicate the allocation logic there. memory, but complicate the allocation logic there.
I don't think anyone cares about memory usage when using telemetry; it is I don't think anyone cares about memory usage when using telemetry; it is
not meant for embedded devices.*/ not meant for embedded devices.*/
@ -2674,10 +2674,10 @@ static void oc_render_telemetry(th_dec_ctx *_dec,th_ycbcr_buffer _ycbcr,
u_row[x>>1]=OC_CLAMP255(u); u_row[x>>1]=OC_CLAMP255(u);
v_row[x>>1]=OC_CLAMP255(v); v_row[x>>1]=OC_CLAMP255(v);
} }
y_row+=_ycbcr[0].stride<<1; y_row+=_ycbcr[0].stride*2;
u_row+=_ycbcr[1].stride; u_row+=_ycbcr[1].stride;
v_row+=_ycbcr[2].stride; v_row+=_ycbcr[2].stride;
rgb_row+=cstride<<1; rgb_row+=cstride*2;
} }
}break; }break;
case TH_PF_422:{ case TH_PF_422:{

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
#include <string.h> #include <string.h>

View file

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009,2025 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -225,6 +225,7 @@ int oc_huff_tree_unpack(oc_pack_buf *_opb,unsigned char _tokens[256][2]){
_tokens[ntokens][1]=(unsigned char)(len+neb); _tokens[ntokens][1]=(unsigned char)(len+neb);
ntokens++; ntokens++;
} }
if(len<=0)break;
code_bit=0x80000000U>>len-1; code_bit=0x80000000U>>len-1;
while(len>0&&(code&code_bit)){ while(len>0&&(code&code_bit)){
code^=code_bit; code^=code_bit;
@ -442,13 +443,10 @@ static size_t oc_huff_tree_size(const ogg_int16_t *_tree,int _node){
_src: The array of trees to copy.*/ _src: The array of trees to copy.*/
int oc_huff_trees_copy(ogg_int16_t *_dst[TH_NHUFFMAN_TABLES], int oc_huff_trees_copy(ogg_int16_t *_dst[TH_NHUFFMAN_TABLES],
const ogg_int16_t *const _src[TH_NHUFFMAN_TABLES]){ const ogg_int16_t *const _src[TH_NHUFFMAN_TABLES]){
int total;
int i; int i;
total=0;
for(i=0;i<TH_NHUFFMAN_TABLES;i++){ for(i=0;i<TH_NHUFFMAN_TABLES;i++){
size_t size; size_t size;
size=oc_huff_tree_size(_src[i],0); size=oc_huff_tree_size(_src[i],0);
total+=size;
_dst[i]=(ogg_int16_t *)_ogg_malloc(size*sizeof(*_dst[i])); _dst[i]=(ogg_int16_t *)_ogg_malloc(size*sizeof(*_dst[i]));
if(_dst[i]==NULL){ if(_dst[i]==NULL){
while(i-->0)_ogg_free(_dst[i]); while(i-->0)_ogg_free(_dst[i]);

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
#if !defined(_internal_H) #if !defined(_internal_H)
@ -44,6 +44,10 @@
# if __GNUC_PREREQ(4,2) # if __GNUC_PREREQ(4,2)
# pragma GCC diagnostic ignored "-Wparentheses" # pragma GCC diagnostic ignored "-Wparentheses"
# endif # endif
/*Et tu, clang.*/
# if defined(__clang__)
# pragma clang diagnostic ignored "-Wparentheses"
# endif
/*Some assembly constructs require aligned operands. /*Some assembly constructs require aligned operands.
The following macros are _only_ intended for structure member declarations. The following macros are _only_ intended for structure member declarations.
@ -72,7 +76,7 @@
/*This library's version.*/ /*This library's version.*/
# define OC_VENDOR_STRING "Xiph.Org libtheora 1.2.0alpha 20100924 (Ptalarbvorm)" # define OC_VENDOR_STRING "Xiph.Org libtheora 1.2.0 20250329 (Ptalarbvorm)"
/*Theora bitstream version.*/ /*Theora bitstream version.*/
# define TH_VERSION_MAJOR (3) # define TH_VERSION_MAJOR (3)

View file

@ -67,7 +67,7 @@ int oc_ilog64(ogg_int64_t _v);
* This is the number of bits that would be required to represent _v in two's * This is the number of bits that would be required to represent _v in two's
* complement notation with all of the leading zeros stripped. * complement notation with all of the leading zeros stripped.
*/ */
# define OC_ILOG_32(_v) (OC_ILOGNZ_32(_v)&-!!(_v)) # define OC_ILOG_32(_v) ((_v)?OC_ILOGNZ_32(_v):0)
# else # else
# define OC_ILOGNZ_32(_v) (oc_ilog32(_v)) # define OC_ILOGNZ_32(_v) (oc_ilog32(_v))
# define OC_ILOG_32(_v) (oc_ilog32(_v)) # define OC_ILOG_32(_v) (oc_ilog32(_v))
@ -90,7 +90,7 @@ int oc_ilog64(ogg_int64_t _v);
* This is the number of bits that would be required to represent _v in two's * This is the number of bits that would be required to represent _v in two's
* complement notation with all of the leading zeros stripped. * complement notation with all of the leading zeros stripped.
*/ */
# define OC_ILOG_64(_v) (OC_ILOGNZ_64(_v)&-!!(_v)) # define OC_ILOG_64(_v) ((_v)?OC_ILOGNZ_64(_v):0)
# else # else
# define OC_ILOGNZ_64(_v) (oc_ilog64(_v)) # define OC_ILOGNZ_64(_v) (oc_ilog64(_v))
# define OC_ILOG_64(_v) (oc_ilog64(_v)) # define OC_ILOG_64(_v) (oc_ilog64(_v))
@ -131,7 +131,7 @@ int oc_ilog64(ogg_int64_t _v);
*/ */
# define OC_STATIC_ILOG_64(_v) (OC_STATIC_ILOG6((ogg_int64_t)(_v))) # define OC_STATIC_ILOG_64(_v) (OC_STATIC_ILOG6((ogg_int64_t)(_v)))
#define OC_Q57(_v) ((ogg_int64_t)(_v)<<57) #define OC_Q57(_v) ((_v)*((ogg_int64_t)1<<57))
#define OC_Q10(_v) ((_v)<<10) #define OC_Q10(_v) ((_v)<<10)
ogg_int64_t oc_bexp64(ogg_int64_t _z); ogg_int64_t oc_bexp64(ogg_int64_t _z);

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -34,13 +34,13 @@
speed difference between the two approaches is not measurable). speed difference between the two approaches is not measurable).
Interestingly, the bit-twiddling method was patented in 2000 (US 6,073,150) Interestingly, the bit-twiddling method was patented in 2000 (US 6,073,150)
by Sun Microsystems, despite prior art dating back to at least 1996: by Sun Microsystems, despite prior art dating back to at least 1996:
http://web.archive.org/web/19961201174141/www.x86.org/ftp/articles/pentopt/PENTOPT.TXT https://web.archive.org/web/19961201174141/www.x86.org/ftp/articles/pentopt/PENTOPT.TXT
On gcc 3.x, however, our assumption is not true, as abs() is translated to a On gcc 3.x, however, our assumption is not true, as abs() is translated to a
conditional jump, which is horrible on deeply piplined architectures (e.g., conditional jump, which is horrible on deeply piplined architectures (e.g.,
all consumer architectures for the past decade or more). all consumer architectures for the past decade or more).
Also be warned that -C*abs(x) where C is a constant is mis-optimized as Also be warned that -C*abs(x) where C is a constant is mis-optimized as
abs(C*x) on every gcc release before 4.2.3. abs(C*x) on every gcc release before 4.2.3.
See bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34130 */ See bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34130 */
/*Modern gcc (4.x) can compile the naive versions of min and max with cmov if /*Modern gcc (4.x) can compile the naive versions of min and max with cmov if
given an appropriate architecture, but the branchless bit-twiddling versions given an appropriate architecture, but the branchless bit-twiddling versions

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -66,7 +66,7 @@ void oc_dequant_tables_init(ogg_uint16_t *_dequant[64][3][2],
qi_start=qi; qi_start=qi;
if(qri==_qinfo->qi_ranges[qti][pli].nranges)qi_end=qi+1; if(qri==_qinfo->qi_ranges[qti][pli].nranges)qi_end=qi+1;
else qi_end=qi+_qinfo->qi_ranges[qti][pli].sizes[qri]; else qi_end=qi+_qinfo->qi_ranges[qti][pli].sizes[qri];
/*Iterate over quality indicies in this range.*/ /*Iterate over quality indices in this range.*/
for(;;){ for(;;){
ogg_uint32_t qfac; ogg_uint32_t qfac;
int zzi; int zzi;

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009,2025 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -388,7 +388,7 @@ static void oc_state_border_init(oc_theora_state *_state){
/*Otherwise, check to see if it straddles the border.*/ /*Otherwise, check to see if it straddles the border.*/
else if(x<crop_x0&&crop_x0<x+8||x<crop_xf&&crop_xf<x+8|| else if(x<crop_x0&&crop_x0<x+8||x<crop_xf&&crop_xf<x+8||
y<crop_y0&&crop_y0<y+8||y<crop_yf&&crop_yf<y+8){ y<crop_y0&&crop_y0<y+8||y<crop_yf&&crop_yf<y+8){
ogg_int64_t mask; ogg_uint64_t mask;
int npixels; int npixels;
int i; int i;
mask=npixels=0; mask=npixels=0;
@ -396,7 +396,7 @@ static void oc_state_border_init(oc_theora_state *_state){
int j; int j;
for(j=0;j<8;j++){ for(j=0;j<8;j++){
if(x+j>=crop_x0&&x+j<crop_xf&&y+i>=crop_y0&&y+i<crop_yf){ if(x+j>=crop_x0&&x+j<crop_xf&&y+i>=crop_y0&&y+i<crop_yf){
mask|=(ogg_int64_t)1<<(i<<3|j); mask|=(ogg_uint64_t)1<<(i<<3|j);
npixels++; npixels++;
} }
} }
@ -651,7 +651,7 @@ static int oc_state_ref_bufs_init(oc_theora_state *_state,int _nrefs){
frag_buf_offs[fragi]=hpix-ref_frame_data; frag_buf_offs[fragi]=hpix-ref_frame_data;
hpix+=8; hpix+=8;
} }
vpix+=stride<<3; vpix+=stride*8;
} }
} }
/*Initialize the reference frame pointers and indices.*/ /*Initialize the reference frame pointers and indices.*/
@ -1053,7 +1053,7 @@ void oc_loop_filter_init_c(signed char _bv[256],int _flimit){
_fragy0: The Y coordinate of the first fragment row to filter. _fragy0: The Y coordinate of the first fragment row to filter.
_fragy_end: The Y coordinate of the fragment row to stop filtering at.*/ _fragy_end: The Y coordinate of the fragment row to stop filtering at.*/
void oc_state_loop_filter_frag_rows_c(const oc_theora_state *_state, void oc_state_loop_filter_frag_rows_c(const oc_theora_state *_state,
signed char *_bv,int _refi,int _pli,int _fragy0,int _fragy_end){ signed char _bvarray[256],int _refi,int _pli,int _fragy0,int _fragy_end){
const oc_fragment_plane *fplane; const oc_fragment_plane *fplane;
const oc_fragment *frags; const oc_fragment *frags;
const ptrdiff_t *frag_buf_offs; const ptrdiff_t *frag_buf_offs;
@ -1064,7 +1064,7 @@ void oc_state_loop_filter_frag_rows_c(const oc_theora_state *_state,
ptrdiff_t fragi0_end; ptrdiff_t fragi0_end;
int ystride; int ystride;
int nhfrags; int nhfrags;
_bv+=127; signed char *_bv = &_bvarray[127];
fplane=_state->fplanes+_pli; fplane=_state->fplanes+_pli;
nhfrags=fplane->nhfrags; nhfrags=fplane->nhfrags;
fragi_top=fplane->froffset; fragi_top=fplane->froffset;
@ -1095,7 +1095,7 @@ void oc_state_loop_filter_frag_rows_c(const oc_theora_state *_state,
loop_filter_h(ref+8,ystride,_bv); loop_filter_h(ref+8,ystride,_bv);
} }
if(fragi+nhfrags<fragi_bot&&!frags[fragi+nhfrags].coded){ if(fragi+nhfrags<fragi_bot&&!frags[fragi+nhfrags].coded){
loop_filter_v(ref+(ystride<<3),ystride,_bv); loop_filter_v(ref+(ystride*8),ystride,_bv);
} }
} }
fragi++; fragi++;

View file

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009,2025 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: internal.h 17337 2010-07-19 16:08:54Z tterribe $
********************************************************************/ ********************************************************************/
#if !defined(_state_H) #if !defined(_state_H)
@ -229,7 +229,7 @@ typedef struct oc_theora_state oc_theora_state;
#define OC_MV(_x,_y) ((oc_mv)((_x)&0xFF|(_y)<<8)) #define OC_MV(_x,_y) ((oc_mv)((_x)&0xFF|(_y)*256))
#define OC_MV_X(_mv) ((signed char)(_mv)) #define OC_MV_X(_mv) ((signed char)(_mv))
#define OC_MV_Y(_mv) ((_mv)>>8) #define OC_MV_Y(_mv) ((_mv)>>8)
#define OC_MV_ADD(_mv1,_mv2) \ #define OC_MV_ADD(_mv1,_mv2) \
@ -523,7 +523,7 @@ void oc_idct8x8_c(ogg_int16_t _y[64],ogg_int16_t _x[64],int _last_zzi);
void oc_state_frag_recon_c(const oc_theora_state *_state,ptrdiff_t _fragi, void oc_state_frag_recon_c(const oc_theora_state *_state,ptrdiff_t _fragi,
int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,ogg_uint16_t _dc_quant); int _pli,ogg_int16_t _dct_coeffs[128],int _last_zzi,ogg_uint16_t _dc_quant);
void oc_state_loop_filter_frag_rows_c(const oc_theora_state *_state, void oc_state_loop_filter_frag_rows_c(const oc_theora_state *_state,
signed char _bv[256],int _refi,int _pli,int _fragy0,int _fragy_end); signed char _bvarray[256],int _refi,int _pli,int _fragy0,int _fragy_end);
void oc_restore_fpu_c(void); void oc_restore_fpu_c(void);
/*We need a way to call a few encoder functions without introducing a link-time /*We need a way to call a few encoder functions without introducing a link-time

View file

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009,2025 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -216,7 +216,7 @@ void oc_frag_recon_intra_mmx(unsigned char *_dst,int _ystride,
: :
:[residue]"r"(_residue), :[residue]"r"(_residue),
[dst]"r"(_dst), [dst]"r"(_dst),
[dst4]"r"(_dst+(_ystride<<2)), [dst4]"r"(_dst+(_ystride*4)),
[ystride]"r"((ptrdiff_t)_ystride), [ystride]"r"((ptrdiff_t)_ystride),
[ystride3]"r"((ptrdiff_t)_ystride*3) [ystride3]"r"((ptrdiff_t)_ystride*3)
:"memory" :"memory"

View file

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009,2025 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -312,7 +312,7 @@ static void oc_idct8x8_slow_mmx(ogg_int16_t _y[64],ogg_int16_t _x[64]){
#undef OC_J #undef OC_J
:[y]"=m"OC_ARRAY_OPERAND(ogg_int16_t,_y,64) :[y]"=m"OC_ARRAY_OPERAND(ogg_int16_t,_y,64)
:[x]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,_x,64), :[x]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,_x,64),
[c]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,OC_IDCT_CONSTS,128) [c]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,OC_IDCT_CONSTS,64)
); );
__asm__ __volatile__("pxor %%mm0,%%mm0\n\t"::); __asm__ __volatile__("pxor %%mm0,%%mm0\n\t"::);
for(i=0;i<4;i++){ for(i=0;i<4;i++){
@ -510,7 +510,7 @@ static void oc_idct8x8_10_mmx(ogg_int16_t _y[64],ogg_int16_t _x[64]){
#undef OC_J #undef OC_J
:[y]"=m"OC_ARRAY_OPERAND(ogg_int16_t,_y,64) :[y]"=m"OC_ARRAY_OPERAND(ogg_int16_t,_y,64)
:[x]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,_x,64), :[x]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,_x,64),
[c]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,OC_IDCT_CONSTS,128) [c]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,OC_IDCT_CONSTS,64)
); );
__asm__ __volatile__( __asm__ __volatile__(
"pxor %%mm0,%%mm0\n\t" "pxor %%mm0,%%mm0\n\t"

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -147,7 +147,7 @@ void oc_state_loop_filter_frag_rows_mmx(const oc_theora_state *_state,
OC_LOOP_FILTER_H(OC_LOOP_FILTER8_MMX,ref+8,ystride,ll); OC_LOOP_FILTER_H(OC_LOOP_FILTER8_MMX,ref+8,ystride,ll);
} }
if(fragi+nhfrags<fragi_bot&&!frags[fragi+nhfrags].coded){ if(fragi+nhfrags<fragi_bot&&!frags[fragi+nhfrags].coded){
OC_LOOP_FILTER_V(OC_LOOP_FILTER8_MMX,ref+(ystride<<3),ystride,ll); OC_LOOP_FILTER_V(OC_LOOP_FILTER8_MMX,ref+(ystride*8),ystride,ll);
} }
} }
fragi++; fragi++;
@ -214,7 +214,7 @@ void oc_state_loop_filter_frag_rows_mmxext(const oc_theora_state *_state,
OC_LOOP_FILTER_H(OC_LOOP_FILTER8_MMXEXT,ref+8,ystride,_bv); OC_LOOP_FILTER_H(OC_LOOP_FILTER8_MMXEXT,ref+8,ystride,_bv);
} }
if(fragi+nhfrags<fragi_bot&&!frags[fragi+nhfrags].coded){ if(fragi+nhfrags<fragi_bot&&!frags[fragi+nhfrags].coded){
OC_LOOP_FILTER_V(OC_LOOP_FILTER8_MMXEXT,ref+(ystride<<3),ystride,_bv); OC_LOOP_FILTER_V(OC_LOOP_FILTER8_MMXEXT,ref+(ystride*8),ystride,_bv);
} }
} }
fragi++; fragi++;

View file

@ -5,13 +5,13 @@
* GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE * * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009,2025 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: mmxidct.c 16503 2009-08-22 18:14:02Z giles $
********************************************************************/ ********************************************************************/
@ -229,7 +229,7 @@ static void oc_idct8x8_slow_sse2(ogg_int16_t _y[64],ogg_int16_t _x[64]){
:[buf]"=m"(OC_ARRAY_OPERAND(ogg_int16_t,buf,16)), :[buf]"=m"(OC_ARRAY_OPERAND(ogg_int16_t,buf,16)),
[y]"=m"(OC_ARRAY_OPERAND(ogg_int16_t,_y,64)) [y]"=m"(OC_ARRAY_OPERAND(ogg_int16_t,_y,64))
:[x]"m"(OC_CONST_ARRAY_OPERAND(ogg_int16_t,_x,64)), :[x]"m"(OC_CONST_ARRAY_OPERAND(ogg_int16_t,_x,64)),
[c]"m"(OC_CONST_ARRAY_OPERAND(ogg_int16_t,OC_IDCT_CONSTS,128)) [c]"m"(OC_CONST_ARRAY_OPERAND(ogg_int16_t,OC_IDCT_CONSTS,64))
); );
__asm__ __volatile__("pxor %%xmm0,%%xmm0\n\t"::); __asm__ __volatile__("pxor %%xmm0,%%xmm0\n\t"::);
/*Clear input data for next block (decoder only).*/ /*Clear input data for next block (decoder only).*/
@ -407,7 +407,7 @@ static void oc_idct8x8_10_sse2(ogg_int16_t _y[64],ogg_int16_t _x[64]){
:[buf]"=m"(OC_ARRAY_OPERAND(short,buf,16)), :[buf]"=m"(OC_ARRAY_OPERAND(short,buf,16)),
[y]"=m"(OC_ARRAY_OPERAND(ogg_int16_t,_y,64)) [y]"=m"(OC_ARRAY_OPERAND(ogg_int16_t,_y,64))
:[x]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,_x,64), :[x]"m"OC_CONST_ARRAY_OPERAND(ogg_int16_t,_x,64),
[c]"m"(OC_CONST_ARRAY_OPERAND(ogg_int16_t,OC_IDCT_CONSTS,128)) [c]"m"(OC_CONST_ARRAY_OPERAND(ogg_int16_t,OC_IDCT_CONSTS,64))
); );
/*Clear input data for next block (decoder only).*/ /*Clear input data for next block (decoder only).*/
__asm__ __volatile__( __asm__ __volatile__(

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id: sse2trans.h 15675 2009-02-06 09:43:27Z tterribe $
********************************************************************/ ********************************************************************/

View file

@ -6,7 +6,8 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
@ -14,7 +15,6 @@
Originally written by Rudolf Marek. Originally written by Rudolf Marek.
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,11 +6,11 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -63,7 +63,7 @@
# define OC_MEM_OFFS(_offs,_name) \ # define OC_MEM_OFFS(_offs,_name) \
OC_M2STR(_offs-8+%H[_name]) OC_M2STR(_offs-8+%H[_name])
# endif # endif
/*If your gcc version does't support %H, then you get to suffer the warnings. /*If your gcc version doesn't support %H, then you get to suffer the warnings.
Note that Apple's gas breaks on things like _offs+(%esp): it throws away the Note that Apple's gas breaks on things like _offs+(%esp): it throws away the
whole offset, instead of substituting in 0 for the missing operand to +.*/ whole offset, instead of substituting in 0 for the missing operand to +.*/
# if !defined(OC_MEM_OFFS) # if !defined(OC_MEM_OFFS)

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/
@ -158,7 +158,7 @@ void oc_state_loop_filter_frag_rows_mmx(const oc_theora_state *_state,
OC_LOOP_FILTER_H_MMX(ref+8,ystride,_bv); OC_LOOP_FILTER_H_MMX(ref+8,ystride,_bv);
} }
if(fragi+nhfrags<fragi_bot&&!frags[fragi+nhfrags].coded){ if(fragi+nhfrags<fragi_bot&&!frags[fragi+nhfrags].coded){
OC_LOOP_FILTER_V_MMX(ref+(ystride<<3),ystride,_bv); OC_LOOP_FILTER_V_MMX(ref+(ystride*8),ystride,_bv);
} }
#undef PIX #undef PIX
#undef YSTRIDE3 #undef YSTRIDE3

View file

@ -6,7 +6,8 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
@ -14,7 +15,6 @@
Originally written by Rudolf Marek. Originally written by Rudolf Marek.
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,11 +6,11 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/

View file

@ -6,12 +6,12 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. * * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* * * *
* THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 * * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
* by the Xiph.Org Foundation and contributors http://www.xiph.org/ * * by the Xiph.Org Foundation and contributors *
* https://www.xiph.org/ *
* * * *
******************************************************************** ********************************************************************
function: function:
last mod: $Id$
********************************************************************/ ********************************************************************/