The new scheme introduced in I68d35a2f did not clamp chroma MVs in the SPLITMV
case, and clamped them incorrectly (to the luma plane bounds) in every other
case.
Because chroma MVs are computed from the luma MVs before clamping occurs, they
could still point outside of the frame buffer and cause crashes.
This clamping happens outside of the MV prediction loop, and so should not
affect bitstream decoding.
Restructure vp8_sixtap_predict functions to eliminate extra 5-line
calculation while doing first-pass only. Also, combline functions
to eliminate usage of intermediate buffer. This gives decoder a 3%
performance gain on my test clips.
Change-Id: I13de49638884d1a57d0855c63aea719316d08c1b
Using uname fails e.g. on a 64-bit machine with a 32-bit toolchain.
The following gcc -dumpmachine strings have been verified:
* 32-bit Linux gives i486-linux-gnu
* 64-bit Linux gives x86_64-linux-gnu
* Mac OS X 10.5 gives i686-apple-darwin9
* MinGW gives mingw32
*darwin8* and *bsd* can safely be assumed to be correct, but *cygwin*
is a guess.
Change-Id: I6bef2ab5e97cbd3410aa66b0c4f84d2231884b05
This patch removes the secondary MV clamping from the MV decoder. This
behavior was consistent with limits placed on non-split MVs by the
reference encoder, but was inconsistent with the MVs generated in the
split case.
The purpose of this secondary clamping was only to prevent crashes on
invalid data. It was not intended to be a behaviour an encoder could or
should rely on. Instead of doing additional clamping in a way that
changes the entropy context, the secondary clamp is removed and the
border handling is made implmentation specific. With respect to the
spec, the border is treated as essentially infinite, limited only by
the clamping performed on the near/nearest reference and the maximum
encodable magnitude of the residual MV.
This does not affect any currently produced streams.
Change-Id: I68d35a2fbb51570d6569eab4ad233961405230a3
This patch adds support for building shared libraries when configured
with the --enable-shared switch.
Building DLLs would require more invasive changes to the sample
utilities than I want to make in this patch, since on Windows you can't
use the address of an imported symbol in a static initializer. The best
way to work around this is proably to build the codec interface mapping
table with an init() function, but dll support is of questionable value
anyway, since most windows users will probably use a media framework
lib like webmdshow, which links this library in staticly.
Change-Id: Iafb48900549b0c6b67f4a05d3b790b2643d026f4
These files can be played back directly in most major open-source media
frameworks without the need for additional patches or parameters.
Change-Id: I59f98c1658298245c688f7d107cf393445e470d5
A large collection of example files may be found at
http://media.xiph.org/video/derf/
This also fixes a bug in ivfenc for uncompressed IVF input, which previously
appeared not to skip past the file header the second time it opened the file.
I don't actually have an IVF file with which to test this fix, however.
Change-Id: Id69a1e11a3fa16c4a4fa8944e880bcea090cd52b
This patch creates some basic infrastructure for doing bitstream-
incompatible changes to the VP8 encoder. The key parts are:
- --enable-experimental configure switch, to enable support for this
incompatible bitstream. This switch is required to be set to enable
any "experiments"
- A list for "experiments" which translate into --enable-<experiment>
options and CONFIG_<experiment> macros.
- The high bit of the "Version" field is used to indicate that the
bitstream was produced by an experimental encoder. The decoder will
fail to decode an experimental bitstream without
--enable-experimental.
- A new "vp8x" encoder interface is created to set the experimental
bit.
- The vp8x encoder interface is made the default for ivfenc in
experimental mode.
Change-Id: Idbdd5eae4cec5becf75bb4770837dcd256b2abef
Tests on x86 showed this function costed 2.7% of total decoding time
because of all the memory reads/writes. After modification, it only
costs about 0.7% of decoding time, which gives a 2% gain.
Change-Id: I5003ee30b6dc6dea0bfa42a6ad7e7c22fcc7b215
The libvpx build system was influenced by the clever design of the
FFmpeg configure script. Say so in the script header, and provide a
little introduction.
Change-Id: I4d134c77f9032d1dde72b852b444e98676b85326
This is to accommodate output packets for both compressed
data and psnr stats. For each frame, there are at least
one packet for compressed data and one for psnr stats. For
a max lag of 25, 64 is large enough to cover all lagged
frames at the end of encoding.
Change-Id: If20787fbc86f96e1aa16a3ccf2adc93e6c1e3d5f
Support --prefix, --libdir as a conventional way of specifying the default
installation directories. libdir is required to be a subdirectory of prefix
at this time.
Change-Id: If45d9e3129efcde83c05b7766accc9017988e715
vpx_codec.mk: Select required sources based on CONFIG_{EN,DE}CODERS.
Relocate _dec_init_ver to vpx_decoder.c to match vpx_encoder.
Change-Id: I6a171bc497499040912b2fb17786fba21a8ebc56
Try to select an optimized target based on the host's uname, as this
is the expected behavior of most configure scripts.
Change-Id: I1408ece70c43487902ea6edc6450d6a55abc424a
The output of simple_decoder, as well as the default format for the
ivf{enc,dec} tools, is I420. The encoder examples are changed to default
to I420 as well. This is desirable because passing the output of
simple_encoder to simple_decoder would otherwise have the chroma planes
flipped, which is unexpected.
Change-Id: I9d4f10ace594a54a7fc4f9a1f9187365c01fd638
This renames the vpx_codec/ directory to vpx/, to allow applications
to more consistently reference these includes with the vpx/ prefix.
This allows the includes to be installed in /usr/local/include/vpx
rather than polluting the system includes directory with an
excessive number of includes.
Change-Id: I7b0652a20543d93f38f421c60b0bbccde4d61b4f
Split the 'make install' target into two: install and dist. dist
retains the old make install behavior of building a "distribution"
release, with source files, build system, etc. install does what
one one expects -- installs into a tree in the filesystem, /usr/local
by default.
Change-Id: I0805681ac10f853ef94cdc3aa70981c6bea81b45