9 years agoAppend $(EXEEXT) to the names of optional programs.
Ralph Giles [Tue, 4 Aug 2009 18:41:20 +0000 (18:41 +0000)]
Append $(EXEEXT) to the names of optional programs.

I don't understand why these are necessary in the first place, but this
at least makes them all consistent. This should fix a build error on

svn path=/branches/theora-thusnelda/; revision=16415

9 years agoClean up after failing to open and read a png file.
Ralph Giles [Tue, 4 Aug 2009 17:03:30 +0000 (17:03 +0000)]
Clean up after failing to open and read a png file.

svn path=/branches/theora-thusnelda/; revision=16414

9 years agoRe-work last change to allow the buffer delay to be set before the 2-pass
Tim Terriberry [Tue, 4 Aug 2009 07:08:07 +0000 (07:08 +0000)]
Re-work last change to allow the buffer delay to be set before the 2-pass
 header is read (like it used to be).

svn path=/branches/theora-thusnelda/; revision=16413

9 years agoActually initialize all the frame totals at the start of pass 2, because we
Tim Terriberry [Tue, 4 Aug 2009 06:54:39 +0000 (06:54 +0000)]
Actually initialize all the frame totals at the start of pass 2, because we
 use it to decide if a new buf_delay can still use the infinite buffer later.

svn path=/branches/theora-thusnelda/; revision=16412

9 years agoActually derefernce the buffer, not the stack.
Tim Terriberry [Tue, 4 Aug 2009 06:48:30 +0000 (06:48 +0000)]
Actually derefernce the buffer, not the stack.

svn path=/branches/theora-thusnelda/; revision=16411

9 years agoAdd encoder controls to change the quality and bitrate targets during the
Tim Terriberry [Tue, 4 Aug 2009 06:23:05 +0000 (06:23 +0000)]
Add encoder controls to change the quality and bitrate targets during the
 middle of an encode.

svn path=/branches/theora-thusnelda/; revision=16410

9 years agoAdd malloc failure checks.
Tim Terriberry [Tue, 4 Aug 2009 06:19:12 +0000 (06:19 +0000)]
Add malloc failure checks.
Note, on platforms that overcommit (including almost every fork-based Unix,
 excluding Solaris), this does not provide any additional safety as the kernel
 could create page table entries and segfault later when it fails to map pages
 to back them, and even platforms that don't overcommit could allocate more
 memory than the machine has physical RAM and cause a DoS via excessive paging.
Nevertheless, on some systems, with proper precautions, these may be useful.
In addition, we now allocate Huffman trees in a single block of RAM, which may
 provide slightly improved cache coherency (the measured benefit, if any, was
 very small).

svn path=/branches/theora-thusnelda/; revision=16409

9 years agoMore token decode optimizations.
Tim Terriberry [Tue, 4 Aug 2009 04:47:16 +0000 (04:47 +0000)]
More token decode optimizations.
Reorder the bits in the code words so that rlen gets the lower 8 bits (and can
 thus be extracted by a movzb).
Change OC_DCT_TOKEN_EB_POS() to use bitops instead of ternary operators, so
 that gcc can't possibly decide to use branches for it.
Reorder the tokens to remove gaps in the table (saving a miniscule amount of
 cache) and so that the OC_DCT_TOKEN_EB_POS returns zero for tokens which
 do not require any extra bits (to make Gumboot happy).
Reduce the size of OC_DCT_TOKEN_MAP by a factor of 8.
On x86-32, this gives an additional 2.5% for low-bitrate HD content and 3.1%
 for high-bitrate HD content.

svn path=/branches/theora-thusnelda/; revision=16408

9 years agoRemove an attempt at in-place replacement of chroma MVs.
Tim Terriberry [Tue, 4 Aug 2009 04:16:45 +0000 (04:16 +0000)]
Remove an attempt at in-place replacement of chroma MVs.
While this works when optimizations are enabled, because the memcpy's get
 translated into assignments, it violates the semantics of memcpy (source and
 destination cannot overlap), and may fail without optimizations.
Sadly, I can't seem to find a replacement for memcpy that gcc treats nearly as
 well, so we'll waste the 8 bytes of stack.

svn path=/branches/theora-thusnelda/; revision=16407

9 years agoFixed Visual C++ compilation error.
Cristian Adam [Mon, 3 Aug 2009 22:22:30 +0000 (22:22 +0000)]
Fixed Visual C++ compilation error.

svn path=/branches/theora-thusnelda/; revision=16406

9 years agopng2theora: Support for 4:4:4 and 4:2:2 chroma subsampling
Gregory Maxwell [Mon, 3 Aug 2009 21:20:47 +0000 (21:20 +0000)]
png2theora: Support for 4:4:4 and 4:2:2 chroma subsampling

svn path=/branches/theora-thusnelda/; revision=16405

9 years agoMake dump_video do a little more input sanity checking to make it more useful for...
Gregory Maxwell [Mon, 3 Aug 2009 19:44:16 +0000 (19:44 +0000)]
Make dump_video do a little more input sanity checking to make it more useful for fuzz testing.

svn path=/branches/theora-thusnelda/; revision=16404

9 years agoMerge changes from theora-gumboot branch through r16361.
Tim Terriberry [Mon, 3 Aug 2009 04:50:27 +0000 (04:50 +0000)]
Merge changes from theora-gumboot branch through r16361.
This also includes some additional clean-ups and minor
The net improvement is 1.2% (for high-resolution, low-bitrate) to 30.5% (for
 insane bitrates) on x86-32, and 3.7% to 33.5% for the same content on x86-64.
Typical content will fall somewhat closer to the former than the latter (e.g.,
 8-10%), but it still represents a significant speed-up.

svn path=/branches/theora-thusnelda/; revision=16403

9 years agoAdd comments elucidating the reason that buffer delay is set after two-pass
Tim Terriberry [Sun, 2 Aug 2009 01:15:32 +0000 (01:15 +0000)]
Add comments elucidating the reason that buffer delay is set after two-pass
 mode is enabled.

svn path=/branches/theora-thusnelda/; revision=16396

9 years agoMove two-pass variable initialization up since it's used in oc_enc_rc_reset()
Tim Terriberry [Sat, 1 Aug 2009 23:48:06 +0000 (23:48 +0000)]
Move two-pass variable initialization up since it's used in oc_enc_rc_reset()

svn path=/branches/theora-thusnelda/; revision=16395

9 years agoMore two-pass fixes and updates.
Tim Terriberry [Sat, 1 Aug 2009 22:23:02 +0000 (22:23 +0000)]
More two-pass fixes and updates.
- Change the precision of some intermediate calculations in
  This gives more accurate coefficients for very large delays and fixes a
   divide by zero error when the cutoff frequency underflowed.
- Continue to update the IIR filters even in pass 2, and use them at the end to
   smooth out allocations in the final frames.
- Also use them to obtain scale estimates when the current frame type does not
   match pass 1's (e.g., because the keyframe interval is smaller in pass 2).
- Go back to using the offset in the scale correction fit, and make the fit
   coefficients long-term moving averages, to get slightly more local behavior.
  This is better at avoiding long-term drift over the course of the file.
- Replace Newton's method with a binary search for the actual allocation
  The former was aborting on the first iteration with large buffer sizes
   because the derivative was too small, which caused fun effects like using up
   all of the bits in the first half of the file and then dropping the rest of
   the frames.
- Also correct some algebra mistakes in the use of the keyframe boost ratio.
  This now behaves like it was originally intended.
- Compute scale estimates using the target quantizer, not the actual quantizer.
  This gives better fits in the second pass, especially when the file starts
   off at qi=63 or qi=0.
- Don't add to the scale correction statistics when no blocks were coded or
   when the frame type does not match pass 1's.
- Always use the exponents from the first pass.
  This turns out to be more reliable than using the proper exponents while the
   scale correction fit is gathering statistics after all.

svn path=/branches/theora-thusnelda/; revision=16389

9 years agoFix the problems with early skip and chroma.
Tim Terriberry [Thu, 30 Jul 2009 12:42:24 +0000 (12:42 +0000)]
Fix the problems with early skip and chroma.
This was a combination of the OC_MODE_RD tables introduced in r16312 being
 constructed with the wrong binning and the comparisons introduced in r16314
 using the wrong scale.
Early skip is now re-enabled for chroma; it still gives a small quality loss,
 but a significant speed-up.

svn path=/branches/theora-thusnelda/; revision=16363

9 years agoMove dequantization back out of the idct.
Tim Terriberry [Wed, 29 Jul 2009 13:44:25 +0000 (13:44 +0000)]
Move dequantization back out of the idct.
This sets up further optimizations, though it does not actually make anything
 faster in and of itself.
Modified version of a patch from Simon Hosie.

svn path=/branches/theora-thusnelda/; revision=16360

9 years agoSome additional comments and minor control-flow restructuring in 2pass_in.
Tim Terriberry [Wed, 29 Jul 2009 03:16:39 +0000 (03:16 +0000)]
Some additional comments and minor control-flow restructuring in 2pass_in.

svn path=/branches/theora-thusnelda/; revision=16358

9 years agoInitialize twopass_force_kf, so we don't accidentally force everything to be
Tim Terriberry [Wed, 29 Jul 2009 03:13:18 +0000 (03:13 +0000)]
Initialize twopass_force_kf, so we don't accidentally force everything to be
 a keyframe when we're not in pass-2 mode.

svn path=/branches/theora-thusnelda/; revision=16357

9 years agoMinor two-pass refinements.
Tim Terriberry [Tue, 28 Jul 2009 02:22:10 +0000 (02:22 +0000)]
Minor two-pass refinements.
Set the default keyframe interval to 256 in two-pass mode (instead of 64).
Pick a buffer fullness target based on the size of the buffer with respect to
 the keyframe interval.
Target the last keyframe in the current buffer interval when using a finite
 buffer (just like 1-pass mode).
Target the next hypothetical forced keyframe past the end of the file (also
 just like 1-pass mode).
Force the offset in the log_scale fits to zero (which is what it should be over
 the duration of the file, and experiments confirm).
Boost quality if the buffer is about to overflow (as otherwise the bits would
 be wasted); this reduces the amount we're undersized when using a finite
Minor control-flow re-organization to eliminate duplicate code and keep
 two-pass specific things out of the top-level.

svn path=/branches/theora-thusnelda/; revision=16346

9 years agoRemove debuggint output accidentall comitted in r16341.
Tim Terriberry [Mon, 27 Jul 2009 04:28:41 +0000 (04:28 +0000)]
Remove debuggint output accidentall comitted in r16341.

svn path=/branches/theora-thusnelda/; revision=16343

9 years agoMore minor two-pass clean-ups.
Tim Terriberry [Mon, 27 Jul 2009 04:23:20 +0000 (04:23 +0000)]
More minor two-pass clean-ups.
Clients no longer have to keep calling TH_ENCCTL_2PASS_IN after each frame if
 they've already submitted all of the pass-1 data.

svn path=/branches/theora-thusnelda/; revision=16342

9 years agoFix two-passes at once mode.
Tim Terriberry [Mon, 27 Jul 2009 04:03:45 +0000 (04:03 +0000)]
Fix two-passes at once mode.
It worked when Monty gave it to me, but I broke it.

svn path=/branches/theora-thusnelda/; revision=16341

9 years agoAdd support for two-pass rate control.
Tim Terriberry [Mon, 27 Jul 2009 03:33:27 +0000 (03:33 +0000)]
Add support for two-pass rate control.
Heavily modified version of a patch from xiphmont, this should support drop
 frames, VFR content, and finite buffer delays properly.

svn path=/branches/theora-thusnelda/; revision=16340

9 years agoRate control enhancements.
Tim Terriberry [Sat, 25 Jul 2009 19:27:31 +0000 (19:27 +0000)]
Rate control enhancements.
Enable hard frame dropping, and replace the exponential moving averages in the
 rate control with a 2nd order Bessel filter.
The Bessel filter is both reactive and critically damped, and provides a much
 smoother quality level, while still maintaining accurate bit usage.
Also adds encoder ctl's to enable or disable frame dropping, overflow/underflow
 accounting, and to set the buffer size.
Modified version of a patch from xiphmont.

svn path=/branches/theora-thusnelda/; revision=16334

9 years agoCredit Rudolf Marek for doing the original theora-exp asm optimizations.
Tim Terriberry [Fri, 24 Jul 2009 10:44:55 +0000 (10:44 +0000)]
Credit Rudolf Marek for doing the original theora-exp asm optimizations.

svn path=/branches/theora-thusnelda/; revision=16333

9 years agoC optimizations for DC prediction.
Tim Terriberry [Fri, 24 Jul 2009 10:24:28 +0000 (10:24 +0000)]
C optimizations for DC prediction.
These are relatively minor on modern platforms (1.6-2.7% in the decoder on
 x86-64, less than 1% on the encoder), but can have a much larger impact on
 older platforms/underpowered CPUs with poor branch prediction.
Modified version of a patch by Simon Hosie.

svn path=/branches/theora-thusnelda/; revision=16332

9 years agoDisable early skip detection for chroma until aforementioned problems can be
Tim Terriberry [Thu, 23 Jul 2009 04:01:29 +0000 (04:01 +0000)]
Disable early skip detection for chroma until aforementioned problems can be
 sorted out.

svn path=/branches/theora-thusnelda/; revision=16324

9 years agoFix a copy-paste error that could lead to encoder memory corruption for 4:2:2
Tim Terriberry [Thu, 23 Jul 2009 01:21:08 +0000 (01:21 +0000)]
Fix a copy-paste error that could lead to encoder memory corruption for 4:2:2

svn path=/branches/theora-thusnelda/; revision=16321

9 years agoUse the accumulator as an extra set A MV predictor.
Tim Terriberry [Wed, 22 Jul 2009 11:37:05 +0000 (11:37 +0000)]
Use the accumulator as an extra set A MV predictor.
This gives us 3 for the top-left MB, enough to take a median.

svn path=/branches/theora-thusnelda/; revision=16318

9 years agoAnother minor cosmetic change to make the AQ icons easier to read in the frame.
Monty [Wed, 22 Jul 2009 06:23:26 +0000 (06:23 +0000)]
Another minor cosmetic change to make the AQ icons easier to read in the frame.

svn path=/branches/theora-thusnelda/; revision=16317

9 years agoMake qi icons (for seeing AQ) easier to read; demote is now red, promote is now green.
Monty [Wed, 22 Jul 2009 06:14:48 +0000 (06:14 +0000)]
Make qi icons (for seeing AQ) easier to read; demote is now red, promote is now green.

svn path=/branches/theora-thusnelda/; revision=16316

9 years agoFix EOF-related boundary issues in decode telemetry for very very low rates.
Monty [Wed, 22 Jul 2009 05:21:02 +0000 (05:21 +0000)]
Fix EOF-related boundary issues in decode telemetry for very very low rates.

svn path=/branches/theora-thusnelda/; revision=16315

9 years agoInitial implementation of adaptive quantization, along with early SKIP and a
Tim Terriberry [Wed, 22 Jul 2009 01:56:26 +0000 (01:56 +0000)]
Initial implementation of adaptive quantization, along with early SKIP and a
 number of other minor bugfixes.

Currently we just choose quantizers based on estimated R-D cost, using the same
 tables currently used for mode decision.
This is mostly beneficial at high rates.
In the future, we are likely to get bigger gains through more psychovisual
 criteria (taking into account that there's more masking in complex textures,
 less in edges next to smooth regions, etc.).
Those things can be incorporated into any generic R-D optimization framework,
 but AQ provides the flexibility to make them work.

Early SKIP detection provides large speed gains (as much as 17% on low bitrate
 clips), and allows us to make better mode decision choices.
It has a negligible effect on luma PSNR, but there's still a non-trivial
 decrease in chroma PSNR.
This may be due to a bug, but the visual impact is small, if any, so it's
 worth keeping enabled for now.

svn path=/branches/theora-thusnelda/; revision=16314

9 years agoAdd example usage code for new telemetry options.
Tim Terriberry [Wed, 22 Jul 2009 00:56:19 +0000 (00:56 +0000)]
Add example usage code for new telemetry options.

svn path=/branches/theora-thusnelda/; revision=16313

9 years agoNew quantization matrices.
Tim Terriberry [Wed, 22 Jul 2009 00:49:52 +0000 (00:49 +0000)]
New quantization matrices.
These are by no means optimal, but they are a solid improvement.
They are just updated versions of the VP3 matrices modified to flatten them at
 low rates, scale DC consistent with AC, and improve the scale spacing.
This is a big win for luma, and reduces a lot of the mosquito noise.
The OC_MODE_RD table suggests these matrices are much worse for chroma, but
 actual testing doesn't show much discernable difference; this may need to be
 revisited in the future, along with the balance between inter/intra quantizers
 and the balance between inter luma/chroma quantizer strength.

svn path=/branches/theora-thusnelda/; revision=16312

9 years agoFix INTER_MV bias broken in r16307.
Tim Terriberry [Wed, 22 Jul 2009 00:36:44 +0000 (00:36 +0000)]
Fix INTER_MV bias broken in r16307.

svn path=/branches/theora-thusnelda/; revision=16311

9 years agoAdd support for non-power-of-2 keyframe intervals to the 1.0 API wrapper.
Tim Terriberry [Wed, 22 Jul 2009 00:34:58 +0000 (00:34 +0000)]
Add support for non-power-of-2 keyframe intervals to the 1.0 API wrapper.

svn path=/branches/theora-thusnelda/; revision=16310

9 years agoUpdate documentation corresponding to r16276.
Tim Terriberry [Wed, 22 Jul 2009 00:33:59 +0000 (00:33 +0000)]
Update documentation corresponding to r16276.

svn path=/branches/theora-thusnelda/; revision=16309

9 years agoList --enable-telemetry in the configure help, not the --disable version.
Ralph Giles [Tue, 21 Jul 2009 20:19:37 +0000 (20:19 +0000)]
List --enable-telemetry in the configure help, not the --disable version.

Configure options should list their forms for selecting something other
than the default, and telemetry is off by default.

svn path=/branches/theora-thusnelda/; revision=16308

9 years agoCorrect an overflow in RD cost match when lambda is near maximum.
Monty [Tue, 21 Jul 2009 11:16:14 +0000 (11:16 +0000)]
Correct an overflow in RD cost match when lambda is near maximum.
Temorary fix as AQ will replace this code.

svn path=/branches/theora-thusnelda/; revision=16307

9 years agoFix a telemetry bug; there are more of them.
Tim Terriberry [Sun, 19 Jul 2009 04:14:16 +0000 (04:14 +0000)]
Fix a telemetry bug; there are more of them.

svn path=/branches/theora-thusnelda/; revision=16305

9 years agoCommit drop-frame support for rate control
Monty [Sat, 18 Jul 2009 20:53:13 +0000 (20:53 +0000)]
Commit drop-frame support for rate control

Adjust MV handling to predict across dropped frames

Correct minor MV bugs that had nearly-negligable bitrate/psnr effects

eliminate accel prediction weighting in MV candidate calc; it
  had only been needed to begin with because GOLD accel was being
  calculated incorrectly

Minor fix in examples; don't explicitly set dependencies
(not setting the lib depndencies means nothing gets rebuilt on lib
changes, bad in static builds)

svn path=/branches/theora-thusnelda/; revision=16304

9 years agoAdd rate check to make sure we don't bust the budget on the next frame.
Tim Terriberry [Sat, 18 Jul 2009 18:36:26 +0000 (18:36 +0000)]
Add rate check to make sure we don't bust the budget on the next frame.

svn path=/branches/theora-thusnelda/; revision=16302

9 years agoFixed compilation error on MSVC compilers.
Cristian Adam [Thu, 16 Jul 2009 21:48:41 +0000 (21:48 +0000)]
Fixed compilation error on MSVC compilers.

svn path=/branches/theora-thusnelda/; revision=16294

9 years agoWrap new telemetry gathering in proper ifdefs
Monty [Thu, 16 Jul 2009 21:25:27 +0000 (21:25 +0000)]
Wrap new telemetry gathering in proper ifdefs

svn path=/branches/theora-thusnelda/; revision=16293

9 years agoAdd debugging telemetry for relative/absolute bit usage by type via
Monty [Thu, 16 Jul 2009 17:46:53 +0000 (17:46 +0000)]
Add debugging telemetry for relative/absolute bit usage by type via

The number passed the the ioctl is a graph scaling parameter; larger
values scale the bars of the absolute graph smaller (ie, use a larger
scale for higher bitrates)

svn path=/branches/theora-thusnelda/; revision=16292

9 years agoAdd debugging telemetry for qi feedback through TH_DECCTL_SET_TELEMETRY_QI
Monty [Wed, 15 Jul 2009 20:18:53 +0000 (20:18 +0000)]
Add debugging telemetry for qi feedback through TH_DECCTL_SET_TELEMETRY_QI

argument is a mask;
0x1 displays the qis in use in the frame at lower right
0x2 displays a --/-/+/++ in each block indicating higher/lower qi than base

svn path=/branches/theora-thusnelda/; revision=16288

9 years agoFix a compile error in r16276.
Tim Terriberry [Tue, 14 Jul 2009 11:59:11 +0000 (11:59 +0000)]
Fix a compile error in r16276.

svn path=/branches/theora-thusnelda/; revision=16277

9 years agoMinor decode fix-ups that have been accumulating (to help Gumboot's education
Tim Terriberry [Tue, 14 Jul 2009 11:43:52 +0000 (11:43 +0000)]
Minor decode fix-ups that have been accumulating (to help Gumboot's education
 in svn).
A couple of nits in the new bitpacker, fix block-level QI decode (by actually
 setting the total number of coded fragments, which it needs), remove a few
 dead assignments, propagate a change from state.c to x86/mmxstate.c that got
 missed, and add a NULL check to th_decode_ycbcr_out() (though anyone not
 checking return codes will probably crash anyway trying to use the _ycbcr
 buffer that doesn't get filled in).

svn path=/branches/theora-thusnelda/; revision=16276

9 years agoRewrite the bit-packing to use a sliding window/cache mechanism and abstract its...
gumboot [Tue, 14 Jul 2009 09:04:32 +0000 (09:04 +0000)]
Rewrite the bit-packing to use a sliding window/cache mechanism and abstract its error checking into separate calls to minimise overheads.

svn path=/branches/theora-thusnelda/; revision=16274

9 years agoFix libraries for dump_video
Gregory Maxwell [Sun, 12 Jul 2009 04:31:02 +0000 (04:31 +0000)]
Fix libraries for dump_video

svn path=/branches/theora-thusnelda/; revision=16263

9 years agoSwitch to theora-exp's dump_video (with the new API), merge changes from the
Tim Terriberry [Sat, 11 Jul 2009 20:21:36 +0000 (20:21 +0000)]
Switch to theora-exp's dump_video (with the new API), merge changes from the
 old dump_video, and add properly tag output with the chroma type.

svn path=/branches/theora-thusnelda/; revision=16261

9 years agoMinor option parsing fix to encoder example-- start and end time
Monty [Thu, 9 Jul 2009 05:40:32 +0000 (05:40 +0000)]
Minor option parsing fix to encoder example-- start and end time
fractional seconds were being miscomputed.

svn path=/branches/theora-thusnelda/; revision=16233

9 years agoCommented on usage of useful local variables.
Cristian Adam [Wed, 8 Jul 2009 20:19:47 +0000 (20:19 +0000)]
Commented on usage of useful local variables.

svn path=/branches/theora-thusnelda/; revision=16231

9 years agoRemoved useless local variable usage.
Cristian Adam [Wed, 8 Jul 2009 18:32:54 +0000 (18:32 +0000)]
Removed useless local variable usage.

svn path=/branches/theora-thusnelda/; revision=16230

9 years agoFixed compilation errors.
Cristian Adam [Wed, 8 Jul 2009 18:25:06 +0000 (18:25 +0000)]
Fixed compilation errors.

svn path=/branches/theora-thusnelda/; revision=16229

9 years agoBetter fix for r16212 (now also correctly handles overflow in the other
Tim Terriberry [Wed, 8 Jul 2009 02:17:57 +0000 (02:17 +0000)]
Better fix for r16212 (now also correctly handles overflow in the other
 direction, which was much more unlikely, but stil possible).

svn path=/branches/theora-thusnelda/; revision=16221

9 years agoMinor MSVC asm updates/cleanups.
Tim Terriberry [Wed, 8 Jul 2009 02:06:38 +0000 (02:06 +0000)]
Minor MSVC asm updates/cleanups.

svn path=/branches/theora-thusnelda/; revision=16220

9 years agoFix a potential overflow in the fDCT.
Tim Terriberry [Tue, 7 Jul 2009 11:55:25 +0000 (11:55 +0000)]
Fix a potential overflow in the fDCT.

svn path=/branches/theora-thusnelda/; revision=16212

9 years agoRemove some indirections in token decode.
Tim Terriberry [Tue, 7 Jul 2009 01:43:19 +0000 (01:43 +0000)]
Remove some indirections in token decode.
Patch by Simon Hosie.
This gives a 2.2% speed-up on x86-32, and a 1.2% speed-up on x86-64.

svn path=/branches/theora-thusnelda/; revision=16211

9 years agoPorted GCC (AT&T) Inline Assembly to Visual C (Intel) Inline Assembly.
Cristian Adam [Mon, 6 Jul 2009 20:36:28 +0000 (20:36 +0000)]
Ported GCC (AT&T) Inline Assembly to Visual C (Intel) Inline Assembly.

svn path=/branches/theora-thusnelda/; revision=16210

9 years agoChange the quantizer->lambda mapping.
Tim Terriberry [Fri, 3 Jul 2009 21:07:46 +0000 (21:07 +0000)]
Change the quantizer->lambda mapping.
The new model was built solely considering AC coefficient statistics, and
 ignores DC, which we do not subject to RDO anyway.
In the default VP3 quantization matrices, DC is scaled at a lesser rate than
 AC, and this was playing a significant role in the mapping, especially at low
 rates, where DC-only blocks are much more common.
The new model is quadratic, like the models derived for most other codecs, and
 unlike the previous model, which used an exponent of 1.5.
It produces much higher lambda values at lower rates, and slightly smaller
 values at higher rates, which extends the bitrate range of the codec on both
 ends for a given set of quantization matrices
This improves rate control behavior, especially on the low end, and seems to
 translate into smoother degredation and less blocking.
Overall, it degrades PSNR by slightly more than 0.01 dB for equivalent rates
 (e.g., not much).
The average PSNR on longer sequences with rate control enabled may degrade
 further, but this is due to abililty to hit much lower rates (and thus stay
 within buffer limits more reliably).

svn path=/branches/theora-thusnelda/; revision=16192

9 years agoDon't loop filter past the end of the luma plane when the last superblock row
Tim Terriberry [Wed, 1 Jul 2009 01:46:16 +0000 (01:46 +0000)]
Don't loop filter past the end of the luma plane when the last superblock row
 is incomplete.

svn path=/branches/theora-thusnelda/; revision=16189

9 years agoSubtract the mean from intra SATD, not inter SATD.
Tim Terriberry [Sun, 28 Jun 2009 15:06:54 +0000 (15:06 +0000)]
Subtract the mean from intra SATD, not inter SATD.

svn path=/branches/theora-thusnelda/; revision=16187

9 years agoRemove the globally optimal (but dog-slow) tokenization code.
Tim Terriberry [Fri, 26 Jun 2009 04:00:07 +0000 (04:00 +0000)]
Remove the globally optimal (but dog-slow) tokenization code.
It was only left in the last commit so that a version of it ended up in the
 repository; it was not intended to ever actually be used.

svn path=/branches/theora-thusnelda/; revision=16186

9 years agoAdd non-greedy versions of the AC tokenizer.
Tim Terriberry [Fri, 26 Jun 2009 02:52:40 +0000 (02:52 +0000)]
Add non-greedy versions of the AC tokenizer.
This includes a globally optimal solution (disabled, because it is very slow),
 and a nearly equivalent, but much faster version.
This performs about 0.1 dB better than the greedy tokenizer at the same rate,
 and is around 5% slower (both this version and the greedy version it replaces
 could be better optimized).

svn path=/branches/theora-thusnelda/; revision=16185

9 years agoFlip the sense of pic_y after we check for validity, not before.
Tim Terriberry [Wed, 17 Jun 2009 05:12:49 +0000 (05:12 +0000)]
Flip the sense of pic_y after we check for validity, not before.
Otherwise we're checking frame_height-pic_y>frame_height, which is never true.

svn path=/branches/theora-thusnelda/; revision=16143

9 years agoRestore OC_COLLECT_METRICS to working order.
Tim Terriberry [Sun, 14 Jun 2009 23:18:42 +0000 (23:18 +0000)]
Restore OC_COLLECT_METRICS to working order.

svn path=/branches/theora-thusnelda/; revision=16140

9 years agoPipeline encode so that MB mode decision, transform, quantization,
Tim Terriberry [Sun, 14 Jun 2009 18:50:22 +0000 (18:50 +0000)]
Pipeline encode so that MB mode decision, transform, quantization,
 tokenization, reconstruction, loop filtering, and boundary extension are all
 performed on a couple super blocks rows before moving on to subsequent rows.
This means we only have to load the frame data into cache once, and gives a
 3.1% speed improvement on x86-32, and a 1% improvement on x86-64 (measured for
 a single 1080p file at a single rate).

svn path=/branches/theora-thusnelda/; revision=16130

9 years agoRemove an obsolete inline assembly file.
Ralph Giles [Sun, 14 Jun 2009 16:55:53 +0000 (16:55 +0000)]
Remove an obsolete inline assembly file.

svn path=/branches/theora-thusnelda/; revision=16127

9 years agoAdd some negative tests for th_decode_init().
Ralph Giles [Sun, 14 Jun 2009 10:09:55 +0000 (10:09 +0000)]
Add some negative tests for th_decode_init().

We can't really noop test the decoder; the only way to generate
a th_setup struct is to hand it headers to parse.

svn path=/branches/theora-thusnelda/; revision=16125

9 years agoGroup the comments noop test with the info struct test.
Ralph Giles [Sun, 14 Jun 2009 10:09:53 +0000 (10:09 +0000)]
Group the comments noop test with the info struct test.

Also print status messages for this test.

svn path=/branches/theora-thusnelda/; revision=16124

9 years agoTest clearing an initialized th_info struct.
Ralph Giles [Sun, 14 Jun 2009 10:09:50 +0000 (10:09 +0000)]
Test clearing an initialized th_info struct.

svn path=/branches/theora-thusnelda/; revision=16123

9 years agoSet a 16x16 frame size before calling th(eora)_encode_init in the noop tests.
Ralph Giles [Sun, 14 Jun 2009 09:49:21 +0000 (09:49 +0000)]
Set a 16x16 frame size before calling th(eora)_encode_init in the noop tests.

Previously, we initialized a theora info structure and initialized an
encoder state from it. This no longer works; the info struct is initialized
to an empty frame, and 0x0 frame sizes aren't allowed by the spec.

There's no way to choose a default size, so the api now requires
setting a width and height explicitly. All other info fields will
be supplied with defaults.

svn path=/branches/theora-thusnelda/; revision=16122

9 years agoUpdate XCode project for recent source file changes.
Ralph Giles [Sun, 14 Jun 2009 08:20:38 +0000 (08:20 +0000)]
Update XCode project for recent source file changes.

Also removes the prebind flags, which throw a warning when linked
against the 10.4 or later SDKs, as we do by default. There are
still some warnings, so there must be an additional setting for
it I didn't find.

Replace an instance of the old USE_ASM cpp define in the Theora target
with the new OC_X86_ASM.

svn path=/branches/theora-thusnelda/; revision=16121

9 years agoUpdate the xmingw32 makefile for recent source changes.
Ralph Giles [Sun, 14 Jun 2009 07:27:38 +0000 (07:27 +0000)]
Update the xmingw32 makefile for recent source changes.

svn path=/branches/theora-thusnelda/; revision=16120

9 years agoUse the new OC_X86_(64_)ASM defines in the scons build.
Ralph Giles [Sun, 14 Jun 2009 07:27:36 +0000 (07:27 +0000)]
Use the new OC_X86_(64_)ASM defines in the scons build.

Previously we defined USE_ASM, but this flag is obsolete.

svn path=/branches/theora-thusnelda/; revision=16119

9 years agoForce library version number in encoder init.
Tim Terriberry [Sun, 14 Jun 2009 06:56:14 +0000 (06:56 +0000)]
Force library version number in encoder init.

svn path=/branches/theora-thusnelda/; revision=16118

9 years agoInclude limits.h internally for INT_MAX.
Ralph Giles [Sun, 14 Jun 2009 06:45:44 +0000 (06:45 +0000)]
Include limits.h internally for INT_MAX.

svn path=/branches/theora-thusnelda/; revision=16117

9 years agoUpdate the scons build for recent source changes.
Ralph Giles [Sun, 14 Jun 2009 06:40:15 +0000 (06:40 +0000)]
Update the scons build for recent source changes.

svn path=/branches/theora-thusnelda/; revision=16116

9 years agoMerge changes between oc_state_frag_recon_mmx() and oc_state_frag_recon_c().
Tim Terriberry [Sun, 14 Jun 2009 06:35:17 +0000 (06:35 +0000)]
Merge changes between oc_state_frag_recon_mmx() and oc_state_frag_recon_c().

svn path=/branches/theora-thusnelda/; revision=16115

9 years agoAdditional source list reordering in the automake build.
Ralph Giles [Sun, 14 Jun 2009 06:16:14 +0000 (06:16 +0000)]
Additional source list reordering in the automake build.

Sorry, forgot to save the final edit.

svn path=/branches/theora-thusnelda/; revision=16114

9 years agoAlphabetise source listings to simplify comparison with other
Ralph Giles [Sun, 14 Jun 2009 06:13:24 +0000 (06:13 +0000)]
Alphabetise source listings to simplify comparison with other
build files.

svn path=/branches/theora-thusnelda/; revision=16113

9 years agoUse a relative patch for internal.h to match other inclusions.
Ralph Giles [Sun, 14 Jun 2009 06:09:43 +0000 (06:09 +0000)]
Use a relative patch for internal.h to match other inclusions.

svn path=/branches/theora-thusnelda/; revision=16112

9 years agoCheck for empty frame sizes.
Tim Terriberry [Sun, 14 Jun 2009 05:57:40 +0000 (05:57 +0000)]
Check for empty frame sizes.

svn path=/branches/theora-thusnelda/; revision=16111

9 years agoUpdate AC_CONFIG_SRCDIR since I moved the file it was referring to.
Tim Terriberry [Sun, 14 Jun 2009 05:44:01 +0000 (05:44 +0000)]
Update AC_CONFIG_SRCDIR since I moved the file it was referring to.

svn path=/branches/theora-thusnelda/; revision=16110

9 years agoAdd post-MC border extension code, but leave it disabled for now, as it
Tim Terriberry [Sat, 13 Jun 2009 21:56:48 +0000 (21:56 +0000)]
Add post-MC border extension code, but leave it disabled for now, as it
 performs worse than the pre-MC LFE we're already doing.
Also properly compute distortion in border blocks for skip decisions.

svn path=/branches/theora-thusnelda/; revision=16109

9 years agoForgot to remove this now-extraneous file.
Tim Terriberry [Sat, 13 Jun 2009 21:52:43 +0000 (21:52 +0000)]
Forgot to remove this now-extraneous file.

svn path=/branches/theora-thusnelda/; revision=16108

9 years agoDon't flip crop offset when writing the info header.
Tim Terriberry [Sat, 13 Jun 2009 19:01:48 +0000 (19:01 +0000)]
Don't flip crop offset when writing the info header.
It was already flipped in oc_state_init().

svn path=/branches/theora-thusnelda/; revision=16106

9 years agoFix non-zero Y offsets on x86-64.
Tim Terriberry [Sat, 13 Jun 2009 17:38:38 +0000 (17:38 +0000)]
Fix non-zero Y offsets on x86-64.

svn path=/branches/theora-thusnelda/; revision=16104

9 years agoDon't pass a NULL vendor string.
Tim Terriberry [Sat, 13 Jun 2009 16:14:50 +0000 (16:14 +0000)]
Don't pass a NULL vendor string.

svn path=/branches/theora-thusnelda/; revision=16103

9 years agoMajor encoder refactoring.
Tim Terriberry [Sat, 13 Jun 2009 16:04:06 +0000 (16:04 +0000)]
Major encoder refactoring.
This eliminates the remaining duplicate code between encoder and decoder, as
 well as rewriting the entire tokenization engine, and completes support for
 4:2:2 and 4:4:4 pixel formats.
Although no major new functionality has been introduced for 4:2:0, results will
 not be bit-exact identical to the previous encoder since a) several
 tokenization and motion estimation bugs were fixed and b) tokens are now split
 by color planes, in anticipation of future cache locality improvements.

As a side effect, this makes the decoder about 2.4% faster and the encoder more
 than 13% faster (measured on a single clip at a single rate, x86-32 only).

svn path=/branches/theora-thusnelda/; revision=16102

9 years agoFix a memory corruption error.
Ralph Giles [Wed, 10 Jun 2009 18:50:57 +0000 (18:50 +0000)]
Fix a memory corruption error.

In r15977 the ref_frame_data member of oc_theora_state was changed from
a single data buffer to an array of three such buffers, but the code
which cleared the reference frame when an inter frame was received
without a previous intra frame, as from a damaged stream, was not updated,
resulting in the memset overwriting other parts of the state structures
and subsequent memory, generally resulting in a segfault.

Instead, clear the first such buffer. Patch from Timothy Terriberry.

svn path=/branches/theora-thusnelda/; revision=16099

9 years agoBump versioning after the 1.1alpha2 release.
Ralph Giles [Wed, 27 May 2009 03:38:14 +0000 (03:38 +0000)]
Bump versioning after the 1.1alpha2 release.

svn path=/branches/theora-thusnelda/; revision=16046

9 years agoDon't apply R-D optimization to the first two AC coefficients of INTRA blocks,
Tim Terriberry [Wed, 27 May 2009 02:05:43 +0000 (02:05 +0000)]
Don't apply R-D optimization to the first two AC coefficients of INTRA blocks,
 as it introduces large amounts of blocking artifacts.
Also bump up the keyframe bit ratio.

svn path=/branches/theora-thusnelda/; revision=16044

9 years agoBump version number in the README.
Ralph Giles [Wed, 27 May 2009 01:18:06 +0000 (01:18 +0000)]
Bump version number in the README.

Also fix a typo and add a blurb about thusnelda.

svn path=/branches/theora-thusnelda/; revision=16043

9 years agoUpdate XCode project file for source changes since the alpha 1 release.
Ralph Giles [Wed, 27 May 2009 01:17:14 +0000 (01:17 +0000)]
Update XCode project file for source changes since the alpha 1 release.

This compiles the libraries, but I haven't verified the build is
otherwise functional.

svn path=/branches/theora-thusnelda/; revision=16042

9 years agoAdd the Mach symbol export files to the source list to they're included
Ralph Giles [Tue, 26 May 2009 23:03:33 +0000 (23:03 +0000)]
Add the Mach symbol export files to the source list to they're included
in the distribution.

svn path=/branches/theora-thusnelda/; revision=16039