aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2017-03-20 08:53:10 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2017-03-20 09:23:00 +0000
commitabe37391e71bf078c4c860ae58f132c727a8faa5 (patch)
tree8f32de0c183aed9fc36ec5c3a19fdff78a3a377d
parentf42344f9442e40532dbd9aff24834f731464766d (diff)
downloadaports-abe37391e71bf078c4c860ae58f132c727a8faa5.tar.bz2
aports-abe37391e71bf078c4c860ae58f132c727a8faa5.tar.xz
main/libvpx: remove unused patch
-rw-r--r--main/libvpx/git100617.patch27956
1 files changed, 0 insertions, 27956 deletions
diff --git a/main/libvpx/git100617.patch b/main/libvpx/git100617.patch
deleted file mode 100644
index 3c5eece135..0000000000
--- a/main/libvpx/git100617.patch
+++ /dev/null
@@ -1,27956 +0,0 @@
-diff --git a/AUTHORS b/AUTHORS
-index 9686ac1..4ab6881 100644
---- a/AUTHORS
-+++ b/AUTHORS
-@@ -2,3 +2,6 @@
- # Name or Organization <email address>
-
- Google Inc.
-+The Mozilla Foundation
-+Timothy B. Terriberry <tterriberry@mozilla.com>
-+The Xiph.Org Foundation
-diff --git a/LICENSE b/LICENSE
-index 6b0e867..7a6f995 100644
---- a/LICENSE
-+++ b/LICENSE
-@@ -1,22 +1,20 @@
--Copyright (c) 2010, Google, Inc.
--
--All rights reserved.
-+Copyright (c) 2010, Google Inc. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions
--are met:
-+modification, are permitted provided that the following conditions are
-+met:
-
--- Redistributions of source code must retain the above copyright
-- notice, this list of conditions and the following disclaimer.
-+ * Redistributions of source code must retain the above copyright
-+ notice, this list of conditions and the following disclaimer.
-
--- Redistributions in binary form must reproduce the above
-- copyright notice, this list of conditions and the following
-- disclaimer in the documentation and/or other materials provided
-- with the distribution.
-+ * Redistributions in binary form must reproduce the above copyright
-+ notice, this list of conditions and the following disclaimer in
-+ the documentation and/or other materials provided with the
-+ distribution.
-
--- Neither the name of Google nor the names of its contributors may
-- be used to endorse or promote products derived from this software
-- without specific prior written permission.
-+ * Neither the name of Google nor the names of its contributors may
-+ be used to endorse or promote products derived from this software
-+ without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-@@ -30,19 +28,3 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
--Subject to the terms and conditions of the above License, Google
--hereby grants to You a perpetual, worldwide, non-exclusive,
--no-charge, royalty-free, irrevocable (except as stated in this
--section) patent license to make, have made, use, offer to sell, sell,
--import, and otherwise transfer this implementation of VP8, where such
--license applies only to those patent claims, both currently owned by
--Google and acquired in the future, licensable by Google that are
--necessarily infringed by this implementation of VP8. If You or your
--agent or exclusive licensee institute or order or agree to the
--institution of patent litigation against any entity (including a
--cross-claim or counterclaim in a lawsuit) alleging that this
--implementation of VP8 or any code incorporated within this
--implementation of VP8 constitutes direct or contributory patent
--infringement, or inducement of patent infringement, then any rights
--granted to You under this License for this implementation of VP8
--shall terminate as of the date such litigation is filed.
-diff --git a/PATENTS b/PATENTS
-new file mode 100644
-index 0000000..4414d83
---- /dev/null
-+++ b/PATENTS
-@@ -0,0 +1,22 @@
-+Additional IP Rights Grant (Patents)
-+
-+"This implementation" means the copyrightable works distributed by
-+Google as part of the WebM Project.
-+
-+Google hereby grants to you a perpetual, worldwide, non-exclusive,
-+no-charge, royalty-free, irrevocable (except as stated in this section)
-+patent license to make, have made, use, offer to sell, sell, import,
-+transfer, and otherwise run, modify and propagate the contents of this
-+implementation of VP8, where such license applies only to those patent
-+claims, both currently owned by Google and acquired in the future,
-+licensable by Google that are necessarily infringed by this
-+implementation of VP8. This grant does not include claims that would be
-+infringed only as a consequence of further modification of this
-+implementation. If you or your agent or exclusive licensee institute or
-+order or agree to the institution of patent litigation against any
-+entity (including a cross-claim or counterclaim in a lawsuit) alleging
-+that this implementation of VP8 or any code incorporated within this
-+implementation of VP8 constitutes direct or contributory patent
-+infringement, or inducement of patent infringement, then any patent
-+rights granted to you under this License for this implementation of VP8
-+shall terminate as of the date such litigation is filed.
-diff --git a/args.c b/args.c
-index f2ad697..5fd0466 100644
---- a/args.c
-+++ b/args.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/args.h b/args.h
-index c063f53..f1ec6c0 100644
---- a/args.h
-+++ b/args.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/build/.gitattributes b/build/.gitattributes
-new file mode 100644
-index 0000000..03db79b
---- /dev/null
-+++ b/build/.gitattributes
-@@ -0,0 +1,2 @@
-+*-vs8/*.rules -crlf
-+*-msvs/*.rules -crlf
-diff --git a/build/arm-wince-vs8/.gitattributes b/build/arm-wince-vs8/.gitattributes
-deleted file mode 100644
-index be1eeb9..0000000
---- a/build/arm-wince-vs8/.gitattributes
-+++ /dev/null
-@@ -1 +0,0 @@
--*.rules -crlf
-diff --git a/build/arm-wince-vs8/obj_int_extract.bat b/build/arm-wince-vs8/obj_int_extract.bat
-index e58bdd6..3069160 100644
---- a/build/arm-wince-vs8/obj_int_extract.bat
-+++ b/build/arm-wince-vs8/obj_int_extract.bat
-@@ -1,12 +1,13 @@
- @echo off
- REM Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- REM
--REM Use of this source code is governed by a BSD-style license and patent
--REM grant that can be found in the LICENSE file in the root of the source
--REM tree. All contributing project authors may be found in the AUTHORS
--REM file in the root of the source tree.
-+REM Use of this source code is governed by a BSD-style license
-+REM that can be found in the LICENSE file in the root of the source
-+REM tree. An additional intellectual property rights grant can be found
-+REM in the file PATENTS. All contributing project authors may
-+REM be found in the AUTHORS file in the root of the source tree.
- echo on
-
-
--cl /I ".\\" /I "..\vp6_decoder_sdk" /I "..\vp6_decoder_sdk\vpx_ports" /D "NDEBUG" /D "_WIN32_WCE=0x420" /D "UNDER_CE" /D "WIN32_PLATFORM_PSPC" /D "WINCE" /D "_LIB" /D "ARM" /D "_ARM_" /D "_UNICODE" /D "UNICODE" /D "HAVE_CONFIG_H" /FD /EHsc /MT /GS- /fp:fast /GR- /Fo"Pocket_PC_2003__ARMV4_\%1/" /Fd"Pocket_PC_2003__ARMV4_\%1/vc80.pdb" /W3 /nologo /c /TC ..\vp6_decoder_sdk\vp6_decoder\algo\common\arm\dec_asm_offsets_arm.c
-+cl /I ".\\" /I "..\vp6_decoder_sdk" /I "..\vp6_decoder_sdk\vpx_ports" /D "NDEBUG" /D "_WIN32_WCE=0x420" /D "UNDER_CE" /D "WIN32_PLATFORM_PSPC" /D "WINCE" /D "_LIB" /D "ARM" /D "_ARM_" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MT /GS- /fp:fast /GR- /Fo"Pocket_PC_2003__ARMV4_\%1/" /Fd"Pocket_PC_2003__ARMV4_\%1/vc80.pdb" /W3 /nologo /c /TC ..\vp6_decoder_sdk\vp6_decoder\algo\common\arm\dec_asm_offsets_arm.c
- obj_int_extract.exe rvds "Pocket_PC_2003__ARMV4_\%1/dec_asm_offsets_arm.obj"
-diff --git a/build/make/Makefile b/build/make/Makefile
-index 412629e..4f7df43 100755
---- a/build/make/Makefile
-+++ b/build/make/Makefile
-@@ -1,10 +1,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
--##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+##
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-@@ -18,6 +19,7 @@ ifeq ($(target),)
- done
- all: .DEFAULT
- clean:: .DEFAULT
-+install:: .DEFAULT
-
-
- # Note: md5sum is not installed on OS X, but openssl is. Openssl may not be
-@@ -29,7 +31,7 @@ md5sum := $(firstword $(wildcard \
- md5sum := $(if $(filter %openssl,$(md5sum)),$(md5sum) dgst -md5,$(md5sum))
-
- TGT_CC:=$(word 3, $(subst -, ,$(TOOLCHAIN)))
--install:
-+dist:
- @for t in $(ALL_TARGETS); do \
- $(MAKE) --no-print-directory target=$$t $(MAKECMDGOALS) || exit $$?;\
- done
-@@ -37,7 +39,7 @@ install:
- @if [ -d "$(DIST_DIR)/src" ]; then \
- mkdir -p "$(DIST_DIR)/build"; \
- cd "$(DIST_DIR)/build"; \
-- if [ $(TGT_CC) = "rvct" ] ; then \
-+ if [ "$(TGT_CC)" = "rvct" ] ; then \
- echo "../src/configure --target=$(TOOLCHAIN) --libc=$(ALT_LIBC)"; \
- ../src/configure --target=$(TOOLCHAIN) --libc=$(ALT_LIBC); \
- else \
-@@ -94,10 +96,10 @@ clean::
- rm -f $(OBJS-yes) $(OBJS-yes:.o=.d) $(OBJS-yes:.asm.s.o=.asm.s)
- rm -f $(CLEAN-OBJS)
-
-+.PHONY: dist
-+dist:
- .PHONY: install
--install:
--.PHONY: install-helper
--install-helper:
-+install::
-
- $(BUILD_PFX)%.c.d: %.c
- $(if $(quiet),@echo " [DEP] $@")
-@@ -218,6 +220,20 @@ $(1):
- $(qexec)$$(AR) $$(ARFLAGS) $$@ $$?
- endef
-
-+define so_template
-+# Not using a pattern rule here because we don't want to generate empty
-+# archives when they are listed as a dependency in files not responsible
-+# for creating them.
-+#
-+# This needs further abstraction for dealing with non-GNU linkers.
-+$(1):
-+ $(if $(quiet),@echo " [LD] $$@")
-+ $(qexec)$$(LD) -shared $$(LDFLAGS) \
-+ -Wl,--no-undefined -Wl,-soname,$$(SONAME) \
-+ -Wl,--version-script,$$(SO_VERSION_SCRIPT) -o $$@ \
-+ $$(filter %.o,$$?) $$(extralibs)
-+endef
-+
- define lipo_lib_template
- $(1): $(addsuffix /$(1),$(FAT_ARCHS))
- $(if $(quiet),@echo " [LIPO] $$@")
-@@ -254,6 +270,9 @@ DOCS=$(call cond_enabled,CONFIG_INSTALL_DOCS,DOCS)
- @touch $@
-
- INSTALL-DOCS=$(call cond_enabled,CONFIG_INSTALL_DOCS,INSTALL-DOCS)
-+ifeq ($(MAKECMDGOALS),dist)
-+INSTALL-DOCS+=$(call cond_enabled,CONFIG_INSTALL_DOCS,DIST-DOCS)
-+endif
- .install-docs: .docs $(addprefix $(DIST_DIR)/,$(INSTALL-DOCS))
- @touch $@
-
-@@ -265,6 +284,9 @@ BINS=$(call enabled,BINS)
- @touch $@
-
- INSTALL-BINS=$(call cond_enabled,CONFIG_INSTALL_BINS,INSTALL-BINS)
-+ifeq ($(MAKECMDGOALS),dist)
-+INSTALL-BINS+=$(call cond_enabled,CONFIG_INSTALL_BINS,DIST-BINS)
-+endif
- .install-bins: .bins $(addprefix $(DIST_DIR)/,$(INSTALL-BINS))
- @touch $@
-
-@@ -275,8 +297,12 @@ LIBS=$(call enabled,LIBS)
- .libs: $(LIBS)
- @touch $@
- $(foreach lib,$(filter %_g.a,$(LIBS)),$(eval $(call archive_template,$(lib))))
-+$(foreach lib,$(filter %so.$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH),$(LIBS)),$(eval $(call so_template,$(lib))))
-
- INSTALL-LIBS=$(call cond_enabled,CONFIG_INSTALL_LIBS,INSTALL-LIBS)
-+ifeq ($(MAKECMDGOALS),dist)
-+INSTALL-LIBS+=$(call cond_enabled,CONFIG_INSTALL_LIBS,DIST-LIBS)
-+endif
- .install-libs: .libs $(addprefix $(DIST_DIR)/,$(INSTALL-LIBS))
- @touch $@
-
-@@ -289,6 +315,9 @@ PROJECTS=$(call enabled,PROJECTS)
- @touch $@
-
- INSTALL-PROJECTS=$(call cond_enabled,CONFIG_INSTALL_PROJECTS,INSTALL-PROJECTS)
-+ifeq ($(MAKECMDGOALS),dist)
-+INSTALL-PROJECTS+=$(call cond_enabled,CONFIG_INSTALL_PROJECTS,DIST-PROJECTS)
-+endif
- .install-projects: .projects $(addprefix $(DIST_DIR)/,$(INSTALL-PROJECTS))
- @touch $@
-
-@@ -296,26 +325,29 @@ clean::
- rm -f .projects .install-projects $(PROJECTS)
- endif
-
--# If there are any source files to be installed, then include the build
-+# If there are any source files to be distributed, then include the build
- # system too.
--ifneq ($(call enabled,INSTALL-SRCS),)
-- INSTALL-SRCS-yes += configure
-- INSTALL-SRCS-yes += build/make/configure.sh
-- INSTALL-SRCS-yes += build/make/gen_asm_deps.sh
-- INSTALL-SRCS-yes += build/make/Makefile
-- INSTALL-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_def.sh
-- INSTALL-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_proj.sh
-- INSTALL-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_sln.sh
-- INSTALL-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh
-+ifneq ($(call enabled,DIST-SRCS),)
-+ DIST-SRCS-yes += configure
-+ DIST-SRCS-yes += build/make/configure.sh
-+ DIST-SRCS-yes += build/make/gen_asm_deps.sh
-+ DIST-SRCS-yes += build/make/Makefile
-+ DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_def.sh
-+ DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_proj.sh
-+ DIST-SRCS-$(CONFIG_MSVS) += build/make/gen_msvs_sln.sh
-+ DIST-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh
- #
- # This isn't really ARCH_ARM dependent, it's dependant on whether we're
- # using assembly code or not (CONFIG_OPTIMIZATIONS maybe). Just use
- # this for now.
-- INSTALL-SRCS-$(ARCH_ARM) += build/make/obj_int_extract.c
-- INSTALL-SRCS-$(ARCH_ARM) += build/make/ads2gas.pl
-- INSTALL-SRCS-yes += $(target:-$(TOOLCHAIN)=).mk
-+ DIST-SRCS-$(ARCH_ARM) += build/make/obj_int_extract.c
-+ DIST-SRCS-$(ARCH_ARM) += build/make/ads2gas.pl
-+ DIST-SRCS-yes += $(target:-$(TOOLCHAIN)=).mk
- endif
- INSTALL-SRCS := $(call cond_enabled,CONFIG_INSTALL_SRCS,INSTALL-SRCS)
-+ifeq ($(MAKECMDGOALS),dist)
-+INSTALL-SRCS += $(call cond_enabled,CONFIG_INSTALL_SRCS,DIST-SRCS)
-+endif
- .install-srcs: $(addprefix $(DIST_DIR)/src/,$(INSTALL-SRCS))
- @touch $@
-
-@@ -329,7 +361,8 @@ endif
- BUILD_TARGETS += .docs .libs .bins
- INSTALL_TARGETS += .install-docs .install-srcs .install-libs .install-bins
- all-$(target): $(BUILD_TARGETS)
--install: $(INSTALL_TARGETS)
-+install:: $(INSTALL_TARGETS)
-+dist: $(INSTALL_TARGETS)
-
- #
- # Development helper targets
-diff --git a/build/make/ads2gas.pl b/build/make/ads2gas.pl
-index 6fcba84..bd5e772 100755
---- a/build/make/ads2gas.pl
-+++ b/build/make/ads2gas.pl
-@@ -1,11 +1,12 @@
- #!/usr/bin/perl
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
--##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+##
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/build/make/ads2gas_apple.pl b/build/make/ads2gas_apple.pl
-index 569c3e7..7a32445 100755
---- a/build/make/ads2gas_apple.pl
-+++ b/build/make/ads2gas_apple.pl
-@@ -1,11 +1,12 @@
- #!/usr/bin/env perl
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
--##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+##
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/build/make/armlink_adapter.sh b/build/make/armlink_adapter.sh
-index dcaa82c..25fb627 100755
---- a/build/make/armlink_adapter.sh
-+++ b/build/make/armlink_adapter.sh
-@@ -2,10 +2,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/build/make/configure.sh b/build/make/configure.sh
-index ed3a34f..05e550f 100755
---- a/build/make/configure.sh
-+++ b/build/make/configure.sh
-@@ -1,13 +1,13 @@
- #!/bin/bash
- ##
--## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+## configure.sh
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## This script is sourced by the main configure script and contains
-+## utility functions and other common bits that aren't strictly libvpx
-+## related.
-+##
-+## This build system is based in part on the FFmpeg configure script.
- ##
--
-
-
- #
-@@ -120,8 +120,8 @@ EOF
-
- show_targets() {
- while [ -n "$*" ]; do
-- if [ "${1%%-*}" == "${2%%-*}" ]; then
-- if [ "${2%%-*}" == "${3%%-*}" ]; then
-+ if [ "${1%%-*}" = "${2%%-*}" ]; then
-+ if [ "${2%%-*}" = "${3%%-*}" ]; then
- printf " %-24s %-24s %-24s\n" "$1" "$2" "$3"
- shift; shift; shift
- else
-@@ -348,7 +348,6 @@ true
- }
-
- write_common_target_config_mk() {
-- [ -n "$2" ] && local have_config_h="-DHAVE_CONFIG_H=\"${2##*/}\""
- local CC=${CC}
- enabled ccache && CC="ccache ${CC}"
-
-@@ -367,7 +366,7 @@ AS=${AS}
- STRIP=${STRIP}
- NM=${NM}
-
--CFLAGS = ${CFLAGS} ${have_config_h}
-+CFLAGS = ${CFLAGS}
- ARFLAGS = -rus\$(if \$(quiet),c,v)
- LDFLAGS = ${LDFLAGS}
- ASFLAGS = ${ASFLAGS}
-@@ -443,7 +442,13 @@ process_common_cmdline() {
- disable builtin_libc
- alt_libc="${optval}"
- ;;
-- --libc)
-+ --prefix=*)
-+ prefix="${optval}"
-+ ;;
-+ --libdir=*)
-+ libdir="${optval}"
-+ ;;
-+ --libc|--prefix|--libdir)
- die "Option ${opt} requires argument"
- ;;
- --help|-h) show_help
-@@ -464,6 +469,18 @@ process_cmdline() {
- done
- }
-
-+
-+post_process_common_cmdline() {
-+ prefix="${prefix:-/usr/local}"
-+ prefix="${prefix%/}"
-+ libdir="${libdir:-${prefix}/lib}"
-+ libdir="${libdir%/}"
-+ if [ "${libdir#${prefix}}" = "${libdir}" ]; then
-+ die "Libdir ${libdir} must be a subdirectory of ${prefix}"
-+ fi
-+}
-+
-+
- post_process_cmdline() {
- true;
- }
-@@ -479,6 +496,42 @@ setup_gnu_toolchain() {
- }
-
- process_common_toolchain() {
-+ if [ -z "$toolchain" ]; then
-+ gcctarget="$(gcc -dumpmachine 2> /dev/null)"
-+
-+ # detect tgt_isa
-+ case "$gcctarget" in
-+ *x86_64*|*amd64*)
-+ tgt_isa=x86_64
-+ ;;
-+ *i[3456]86*)
-+ tgt_isa=x86
-+ ;;
-+ esac
-+
-+ # detect tgt_os
-+ case "$gcctarget" in
-+ *darwin8*)
-+ tgt_isa=universal
-+ tgt_os=darwin8
-+ ;;
-+ *darwin9*)
-+ tgt_isa=universal
-+ tgt_os=darwin9
-+ ;;
-+ *mingw32*|*cygwin*)
-+ tgt_os=win32
-+ ;;
-+ *linux*|*bsd*)
-+ tgt_os=linux
-+ ;;
-+ esac
-+
-+ if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
-+ toolchain=${tgt_isa}-${tgt_os}-gcc
-+ fi
-+ fi
-+
- toolchain=${toolchain:-generic-gnu}
-
- is_in ${toolchain} ${all_platforms} || enabled force_toolchain \
-@@ -781,6 +834,7 @@ process_common_toolchain() {
- ;;
- universal*|*-gcc|generic-gnu)
- link_with_cc=gcc
-+ enable gcc
- setup_gnu_toolchain
- ;;
- esac
-@@ -844,8 +898,8 @@ process_toolchain() {
- }
-
- print_config_mk() {
-- prefix=$1
-- makefile=$2
-+ local prefix=$1
-+ local makefile=$2
- shift 2
- for cfg; do
- upname="`toupper $cfg`"
-@@ -856,8 +910,8 @@ print_config_mk() {
- }
-
- print_config_h() {
-- prefix=$1
-- header=$2
-+ local prefix=$1
-+ local header=$2
- shift 2
- for cfg; do
- upname="`toupper $cfg`"
-@@ -888,6 +942,7 @@ process() {
- else
- echo "# ${self} $@" > ${logfile}
- fi
-+ post_process_common_cmdline
- post_process_cmdline
- process_toolchain
- process_detect
-diff --git a/build/make/gen_asm_deps.sh b/build/make/gen_asm_deps.sh
-index c1118e1..2c972e5 100755
---- a/build/make/gen_asm_deps.sh
-+++ b/build/make/gen_asm_deps.sh
-@@ -2,10 +2,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/build/make/gen_msvs_def.sh b/build/make/gen_msvs_def.sh
-index 68b2406..b5c54fd 100755
---- a/build/make/gen_msvs_def.sh
-+++ b/build/make/gen_msvs_def.sh
-@@ -2,10 +2,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/build/make/gen_msvs_proj.sh b/build/make/gen_msvs_proj.sh
-index eb482a4..d94ae4d 100755
---- a/build/make/gen_msvs_proj.sh
-+++ b/build/make/gen_msvs_proj.sh
-@@ -2,15 +2,17 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
- self=$0
- self_basename=${self##*/}
-+self_dirname=$(dirname "$0")
- EOL=$'\n'
-
- show_help() {
-@@ -291,8 +293,8 @@ case "$target" in
- x86*)
- platforms[0]="Win32"
- # these are only used by vs7
-- asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} \$(InputPath)"
-- asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} \$(InputPath)"
-+ asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} &quot;\$(InputPath)&quot;"
-+ asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} &quot;\$(InputPath)&quot;"
- ;;
- arm*|iwmmx*)
- case "${name}" in
-@@ -342,19 +344,19 @@ generate_vcproj() {
-
- open_tag ToolFiles
- case "$target" in
-- x86*) $uses_asm && tag DefaultToolFile FileName="yasm.rules"
-+ x86*) $uses_asm && tag ToolFile RelativePath="$self_dirname/../x86-msvs/yasm.rules"
- ;;
- arm*|iwmmx*)
- if [ "$name" == "vpx_decoder" ];then
- case "$target" in
- armv5*)
-- tag DefaultToolFile FileName="armasmv5.rules"
-+ tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmv5.rules"
- ;;
- armv6*)
-- tag DefaultToolFile FileName="armasmv6.rules"
-+ tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmv6.rules"
- ;;
- iwmmxt*)
-- tag DefaultToolFile FileName="armasmxscale.rules"
-+ tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmxscale.rules"
- ;;
- esac
- fi
-@@ -385,7 +387,7 @@ generate_vcproj() {
- ExecutionBucket="7" \
- Optimization="0" \
- AdditionalIncludeDirectories="$incs" \
-- PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;HAVE_CONFIG_H" \
-+ PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
- MinimalRebuild="true" \
- RuntimeLibrary="1" \
- BufferSecurityCheck="false" \
-@@ -404,7 +406,7 @@ generate_vcproj() {
- ExecutionBucket="7" \
- Optimization="0" \
- AdditionalIncludeDirectories="$incs" \
-- PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;HAVE_CONFIG_H" \
-+ PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
- MinimalRebuild="true" \
- RuntimeLibrary="1" \
- BufferSecurityCheck="false" \
-@@ -544,7 +546,7 @@ generate_vcproj() {
- Optimization="2" \
- FavorSizeOrSpeed="1" \
- AdditionalIncludeDirectories="$incs" \
-- PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;HAVE_CONFIG_H" \
-+ PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
- RuntimeLibrary="0" \
- BufferSecurityCheck="false" \
- UsePrecompiledHeader="0" \
-@@ -563,7 +565,7 @@ generate_vcproj() {
- Optimization="2" \
- FavorSizeOrSpeed="1" \
- AdditionalIncludeDirectories="$incs" \
-- PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;HAVE_CONFIG_H" \
-+ PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
- RuntimeLibrary="0" \
- BufferSecurityCheck="false" \
- UsePrecompiledHeader="0" \
-diff --git a/build/make/gen_msvs_sln.sh b/build/make/gen_msvs_sln.sh
-index b670ec5..ef425f5 100755
---- a/build/make/gen_msvs_sln.sh
-+++ b/build/make/gen_msvs_sln.sh
-@@ -2,10 +2,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/build/make/obj_int_extract.c b/build/make/obj_int_extract.c
-index cef14e7..0f64e89 100644
---- a/build/make/obj_int_extract.c
-+++ b/build/make/obj_int_extract.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -16,7 +17,7 @@
- #if defined(_MSC_VER)
- #include <io.h>
- #include <share.h>
--#include "vpx_ports/vpx_integer.h"
-+#include "vpx/vpx_integer.h"
- #else
- #include <stdint.h>
- #include <unistd.h>
-diff --git a/build/make/version.sh b/build/make/version.sh
-index 2bda701..81682d6 100755
---- a/build/make/version.sh
-+++ b/build/make/version.sh
-@@ -2,10 +2,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/build/x86-msvs/yasm.rules b/build/x86-msvs/yasm.rules
-new file mode 100644
-index 0000000..ee1fefb
---- /dev/null
-+++ b/build/x86-msvs/yasm.rules
-@@ -0,0 +1,115 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<VisualStudioToolFile
-+ Name="Yasm"
-+ Version="8.00"
-+ >
-+ <Rules>
-+ <CustomBuildRule
-+ Name="YASM"
-+ DisplayName="Yasm Assembler"
-+ CommandLine="yasm -Xvc -f $(PlatformName) [AllOptions] [AdditionalOptions] [Inputs]"
-+ Outputs="[$ObjectFileName]"
-+ FileExtensions="*.asm"
-+ ExecutionDescription="Assembling $(InputFileName)"
-+ ShowOnlyRuleProperties="false"
-+ >
-+ <Properties>
-+ <StringProperty
-+ Name="Defines"
-+ DisplayName="Definitions"
-+ Category="Pre-Defined Symbols"
-+ Description="Specify pre-defined symbols (&apos;symbol&apos; or &apos;symbol = value&apos;) "
-+ Switch="-D [value]"
-+ Delimited="true"
-+ Inheritable="true"
-+ />
-+ <StringProperty
-+ Name="IncludePaths"
-+ DisplayName="Include Paths"
-+ Category="Configuration"
-+ Description="Set the paths for any additional include files"
-+ Switch="-I [value]"
-+ Delimited="true"
-+ Inheritable="true"
-+ />
-+ <StringProperty
-+ Name="UnDefines"
-+ DisplayName="Remove Definitions"
-+ Category="Pre-Defined Symbols"
-+ Description="Remove pre-defined symbols "
-+ Switch="-U [value]"
-+ Delimited="true"
-+ Inheritable="true"
-+ />
-+ <StringProperty
-+ Name="ObjectFileName"
-+ DisplayName="Object File Name"
-+ Category="Output"
-+ Description="Select the output file name"
-+ Switch="-o [value]"
-+ DefaultValue="$(IntDir)\$(InputName).obj"
-+ />
-+ <StringProperty
-+ Name="ListFileName"
-+ DisplayName="List File Name"
-+ Category="Output"
-+ Description="Select an output listing by setting its file name"
-+ Switch="-l [value]"
-+ />
-+ <StringProperty
-+ Name="PreIncludeFile"
-+ DisplayName="Pre Include File"
-+ Category="Configuration"
-+ Description="Select a pre-included file by setting its name"
-+ Switch="-P [value]"
-+ />
-+ <BooleanProperty
-+ Name="Debug"
-+ DisplayName="Debug Information"
-+ Category="Output"
-+ Description="Generate debugging information"
-+ Switch="-g cv8"
-+ />
-+ <EnumProperty
-+ Name="PreProc"
-+ DisplayName="Pre-Processor"
-+ Category="Configuration"
-+ Description="Select the pre-processor (&apos;nasm&apos; or &apos;raw&apos;)"
-+ >
-+ <Values>
-+ <EnumValue
-+ Value="0"
-+ Switch="-rnasm"
-+ DisplayName="Nasm "
-+ />
-+ <EnumValue
-+ Value="1"
-+ Switch="-rraw"
-+ DisplayName="Raw"
-+ />
-+ </Values>
-+ </EnumProperty>
-+ <EnumProperty
-+ Name="Parser"
-+ DisplayName="Parser"
-+ Category="Configuration"
-+ Description="Select the parser for Intel (&apos;nasm&apos;) or AT&amp;T ( &apos;gas&apos;) syntax"
-+ >
-+ <Values>
-+ <EnumValue
-+ Value="0"
-+ Switch="-pnasm"
-+ DisplayName="Nasm"
-+ />
-+ <EnumValue
-+ Value="1"
-+ Switch="-pgas"
-+ DisplayName="Gas"
-+ />
-+ </Values>
-+ </EnumProperty>
-+ </Properties>
-+ </CustomBuildRule>
-+ </Rules>
-+</VisualStudioToolFile>
-+
-diff --git a/configure b/configure
-index 3083343..9a3269a 100755
---- a/configure
-+++ b/configure
-@@ -1,13 +1,16 @@
- #!/bin/bash
- ##
--## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+## configure
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## This script is the front-end to the build system. It provides a similar
-+## interface to standard configure scripts with some extra bits for dealing
-+## with toolchains that differ from the standard POSIX interface and
-+## for extracting subsets of the source tree. In theory, reusable parts
-+## of this script were intended to live in build/make/configure.sh,
-+## but in practice, the line is pretty blurry.
-+##
-+## This build system is based in part on the FFmpeg configure script.
- ##
--
-
- #source_path="`dirname \"$0\"`"
- source_path=${0%/*}
-@@ -24,18 +27,17 @@ Advanced options:
- supported by hardware [auto]
- ${toggle_codec_srcs} in/exclude codec library source code
- ${toggle_debug_libs} in/exclude debug version of libraries
-- ${toggle_eval_limit} enable limited evaluation build
- ${toggle_md5} support for output of checksum data
- ${toggle_static_msvcrt} use static MSVCRT (VS builds only)
- ${toggle_vp8} VP8 codec support
- ${toggle_psnr} output of PSNR data, if supported (encoders)
- ${toggle_mem_tracker} track memory usage
-- ${toggle_eval_limit} decoder limitted to 500 frames
- ${toggle_postproc} postprocessing
- ${toggle_multithread} multithreaded encoding and decoding.
- ${toggle_spatial_resampling} spatial sampling (scaling) support
- ${toggle_realtime_only} enable this option while building for real-time encoding
- ${toggle_runtime_cpu_detect} runtime cpu detection
-+ ${toggle_shared} shared library support
-
- Codecs:
- Codecs can be selectively enabled or disabled individually, or by family:
-@@ -135,11 +137,12 @@ if [ ${doxy_major:-0} -ge 1 ]; then
- [ $doxy_minor -eq 5 ] && [ $doxy_patch -ge 3 ] && enable doxygen
- fi
-
--# install everything, by default
-+# install everything except the sources, by default. sources will have
-+# to be enabled when doing dist builds, since that's no longer a common
-+# case.
- enabled doxygen && php -v >/dev/null 2>&1 && enable install_docs
- enable install_bins
- enable install_libs
--enable install_srcs
-
- enable optimizations
- enable fast_unaligned #allow unaligned accesses, if supported by hw
-@@ -157,8 +160,8 @@ if ! enabled alt_tree_layout; then
- [ -d ${source_path}/vp8 ] && CODECS="${CODECS} vp8_encoder vp8_decoder"
- else
- # customer environment
--[ -f ${source_path}/../include/vp8cx.h ] && CODECS="${CODECS} vp8_encoder"
--[ -f ${source_path}/../include/vp8dx.h ] && CODECS="${CODECS} vp8_decoder"
-+[ -f ${source_path}/../include/vpx/vp8cx.h ] && CODECS="${CODECS} vp8_encoder"
-+[ -f ${source_path}/../include/vpx/vp8dx.h ] && CODECS="${CODECS} vp8_decoder"
-
- [ -f ${source_path}/../lib/*/*mt.lib ] && soft_enable static_msvcrt
- fi
-@@ -225,7 +228,6 @@ CONFIG_LIST="
- dequant_tokens
- dc_recon
- new_tokens
-- eval_limit
- runtime_cpu_detect
- postproc
- postproc_generic
-@@ -238,6 +240,7 @@ CONFIG_LIST="
- static_msvcrt
- spatial_resampling
- realtime_only
-+ shared
- "
- CMDLINE_SELECT="
- extra_warnings
-@@ -265,7 +268,6 @@ CMDLINE_SELECT="
- dequant_tokens
- dc_recon
- new_tokens
-- eval_limit
- postproc
- postproc_generic
- multithread
-@@ -276,6 +278,7 @@ CMDLINE_SELECT="
- mem_tracker
- spatial_resampling
- realtime_only
-+ shared
- "
-
- process_cmdline() {
-@@ -354,7 +357,6 @@ process_targets() {
- enabled codec_srcs && DIST_DIR="${DIST_DIR}-src"
- ! enabled postproc && DIST_DIR="${DIST_DIR}-nopost"
- ! enabled multithread && DIST_DIR="${DIST_DIR}-nomt"
-- enabled eval_limit && DIST_DIR="${DIST_DIR}-eval"
- ! enabled install_docs && DIST_DIR="${DIST_DIR}-nodocs"
- DIST_DIR="${DIST_DIR}-${tgt_isa}-${tgt_os}"
- case "${tgt_os}" in
-@@ -365,8 +367,26 @@ process_targets() {
- if [ -f "${source_path}/build/make/version.sh" ]; then
- local ver=`"$source_path/build/make/version.sh" --bare $source_path`
- DIST_DIR="${DIST_DIR}-${ver}"
-+ ver=${ver%%-*}
-+ VERSION_PATCH=${ver##*.}
-+ ver=${ver%.*}
-+ VERSION_MINOR=${ver##*.}
-+ ver=${ver#v}
-+ VERSION_MAJOR=${ver%.*}
- fi
-- enabled child || echo "DIST_DIR?=${DIST_DIR}" >> config.mk
-+ enabled child || cat <<EOF >> config.mk
-+ifeq (\$(MAKECMDGOALS),dist)
-+DIST_DIR?=${DIST_DIR}
-+else
-+DIST_DIR?=\$(DESTDIR)${prefix}
-+endif
-+LIBSUBDIR=${libdir##${prefix}/}
-+
-+VERSION_MAJOR=${VERSION_MAJOR}
-+VERSION_MINOR=${VERSION_MINOR}
-+VERSION_PATCH=${VERSION_PATCH}
-+
-+EOF
- enabled child || echo "CONFIGURE_ARGS?=${CONFIGURE_ARGS}" >> config.mk
-
- #
-@@ -385,6 +405,12 @@ process_targets() {
- }
-
- process_detect() {
-+ if enabled shared; then
-+ # Can only build shared libs on a subset of platforms. Doing this check
-+ # here rather than at option parse time because the target auto-detect
-+ # magic happens after the command line has been parsed.
-+ enabled linux || die "--enable-shared only supported on ELF for now"
-+ fi
- if [ -z "$CC" ]; then
- echo "Bypassing toolchain for environment detection."
- enable external_build
-@@ -419,7 +445,7 @@ EOF
- check_header pthread.h
- check_header sys/mman.h
-
-- check_header vpx_ports/vpx_integer.h -I${source_path} && enable vpx_ports
-+ check_header vpx/vpx_integer.h -I${source_path} && enable vpx_ports
- }
-
- process_toolchain() {
-diff --git a/docs.mk b/docs.mk
-index 3e7b5cd..f60a482 100644
---- a/docs.mk
-+++ b/docs.mk
-@@ -1,10 +1,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-@@ -47,8 +48,8 @@ docs/html/index.html: doxyfile $(CODEC_DOX) $(TXT_DOX)
- @doxygen $<
- DOCS-yes += docs/html/index.html
-
--INSTALL-DOCS-yes = $(wildcard docs/html/*)
--INSTALL-DOCS-$(CONFIG_CODEC_SRCS) += $(addprefix src/,$(CODEC_DOX))
--INSTALL-DOCS-$(CONFIG_CODEC_SRCS) += src/libs.doxy_template
--INSTALL-DOCS-yes += CHANGELOG
--INSTALL-DOCS-yes += README
-+DIST-DOCS-yes = $(wildcard docs/html/*)
-+DIST-DOCS-$(CONFIG_CODEC_SRCS) += $(addprefix src/,$(CODEC_DOX))
-+DIST-DOCS-$(CONFIG_CODEC_SRCS) += src/libs.doxy_template
-+DIST-DOCS-yes += CHANGELOG
-+DIST-DOCS-yes += README
-diff --git a/example_xma.c b/example_xma.c
-index cc4e591..e5eca7a 100644
---- a/example_xma.c
-+++ b/example_xma.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -15,10 +16,10 @@
- #include <string.h>
- #define VPX_CODEC_DISABLE_COMPAT 1
- #include "vpx_config.h"
--#include "vpx_decoder.h"
--#include "vpx_integer.h"
-+#include "vpx/vpx_decoder.h"
-+#include "vpx/vpx_integer.h"
- #if CONFIG_VP8_DECODER
--#include "vp8dx.h"
-+#include "vpx/vp8dx.h"
- #endif
-
- static char *exec_name;
-diff --git a/examples.mk b/examples.mk
-index 036a423..bca0d9c 100644
---- a/examples.mk
-+++ b/examples.mk
-@@ -1,10 +1,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-@@ -14,18 +15,21 @@
- UTILS-$(CONFIG_DECODERS) += ivfdec.c
- ivfdec.SRCS += md5_utils.c md5_utils.h
- ivfdec.SRCS += vpx_ports/vpx_timer.h
--ivfdec.SRCS += vpx_ports/vpx_integer.h
-+ivfdec.SRCS += vpx/vpx_integer.h
- ivfdec.SRCS += args.c args.h vpx_ports/config.h
- ivfdec.GUID = BA5FE66F-38DD-E034-F542-B1578C5FB950
- ivfdec.DESCRIPTION = Full featured decoder
- UTILS-$(CONFIG_ENCODERS) += ivfenc.c
--ivfenc.SRCS += args.c args.h vpx_ports/config.h
--ivfenc.SRCS += vpx_ports/mem_ops.h vpx_ports/mem_ops_aligned.h
-+ivfenc.SRCS += args.c args.h y4minput.c y4minput.h
-+ivfenc.SRCS += vpx_ports/config.h vpx_ports/mem_ops.h
-+ivfenc.SRCS += vpx_ports/mem_ops_aligned.h
- ivfenc.GUID = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
- ivfenc.DESCRIPTION = Full featured encoder
--UTILS-$(CONFIG_DECODERS) += example_xma.c
--example_xma.GUID = A955FC4A-73F1-44F7-135E-30D84D32F022
--example_xma.DESCRIPTION = External Memory Allocation mode usage
-+
-+# XMA example disabled for now, not used in VP8
-+#UTILS-$(CONFIG_DECODERS) += example_xma.c
-+#example_xma.GUID = A955FC4A-73F1-44F7-135E-30D84D32F022
-+#example_xma.DESCRIPTION = External Memory Allocation mode usage
-
- GEN_EXAMPLES-$(CONFIG_DECODERS) += simple_decoder.c
- simple_decoder.GUID = D3BBF1E9-2427-450D-BBFF-B2843C1D44CC
-@@ -84,8 +88,6 @@ ifeq ($(HAVE_ALT_TREE_LAYOUT),yes)
- INC_PATH := $(SRC_PATH_BARE)/../include
- else
- LIB_PATH-yes += $(if $(BUILD_PFX),$(BUILD_PFX),.)
-- INC_PATH-yes += $(SRC_PATH_BARE)/vpx_codec
-- INC_PATH-yes += $(SRC_PATH_BARE)/vpx_ports
- INC_PATH-$(CONFIG_VP8_DECODER) += $(SRC_PATH_BARE)/vp8
- INC_PATH-$(CONFIG_VP8_ENCODER) += $(SRC_PATH_BARE)/vp8
- LIB_PATH := $(call enabled,LIB_PATH)
-@@ -99,6 +101,7 @@ LDFLAGS += $(addprefix -L,$(LIB_PATH))
- UTILS = $(call enabled,UTILS)
- GEN_EXAMPLES = $(call enabled,GEN_EXAMPLES)
- ALL_EXAMPLES = $(UTILS) $(GEN_EXAMPLES)
-+UTIL_SRCS = $(foreach ex,$(UTILS),$($(ex:.c=).SRCS))
- ALL_SRCS = $(foreach ex,$(ALL_EXAMPLES),$($(ex:.c=).SRCS))
- CODEC_EXTRA_LIBS=$(sort $(call enabled,CODEC_EXTRA_LIBS))
-
-@@ -120,8 +123,10 @@ $(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_OBJS,BUILD_OBJS):=yes)
- # Create build/install dependencies for all examples. The common case
- # is handled here. The MSVS case is handled below.
- NOT_MSVS = $(if $(CONFIG_MSVS),,yes)
--INSTALL-BINS-$(NOT_MSVS) += $(addprefix bin/,$(ALL_EXAMPLES:.c=))
--INSTALL-SRCS-yes += $(ALL_SRCS)
-+DIST-BINS-$(NOT_MSVS) += $(addprefix bin/,$(ALL_EXAMPLES:.c=))
-+INSTALL-BINS-$(NOT_MSVS) += $(addprefix bin/,$(UTILS:.c=))
-+DIST-SRCS-yes += $(ALL_SRCS)
-+INSTALL-SRCS-yes += $(UTIL_SRCS)
- OBJS-$(NOT_MSVS) += $(if $(BUILD_OBJS),$(call objs,$(ALL_SRCS)))
- BINS-$(NOT_MSVS) += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=))
-
-diff --git a/examples/decode_to_md5.txt b/examples/decode_to_md5.txt
-index 0599b13..b3dd568 100644
---- a/examples/decode_to_md5.txt
-+++ b/examples/decode_to_md5.txt
-@@ -26,21 +26,21 @@ is processed, then U, then V. It is important to honor the image's `stride`
- values.
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PROCESS_DX
- unsigned char md5_sum[16];
--md5_ctx_t md5;
-+MD5Context md5;
- int i;
-
--md5_init(&md5);
-+MD5Init(&md5);
-
- for(plane=0; plane < 3; plane++) {
- unsigned char *buf =img->planes[plane];
-
- for(y=0; y<img->d_h >> (plane?1:0); y++) {
-- md5_update(&md5, buf, img->d_w >> (plane?1:0));
-+ MD5Update(&md5, buf, img->d_w >> (plane?1:0));
- buf += img->stride[plane];
- }
- }
-
--md5_finalize(&md5, md5_sum);
-+MD5Final(md5_sum, &md5);
- for(i=0; i<16; i++)
- fprintf(outfile, "%02x",md5_sum[i]);
- fprintf(outfile, " img-%dx%d-%04d.i420\n", img->d_w, img->d_h,
-diff --git a/examples/decoder_tmpl.c b/examples/decoder_tmpl.c
-index deea449..826ad20 100644
---- a/examples/decoder_tmpl.c
-+++ b/examples/decoder_tmpl.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -16,11 +17,9 @@
- #include <stdarg.h>
- #include <string.h>
- #define VPX_CODEC_DISABLE_COMPAT 1
--#include "vpx_decoder.h"
--#if CONFIG_VP8_DECODER && !defined(interface)
--#include "vp8dx.h"
-+#include "vpx/vpx_decoder.h"
-+#include "vpx/vp8dx.h"
- #define interface (&vpx_codec_vp8_dx_algo)
--#endif
- @EXTRA_INCLUDES
-
-
-diff --git a/examples/decoder_tmpl.txt b/examples/decoder_tmpl.txt
-index 3287d50..6da38c2 100644
---- a/examples/decoder_tmpl.txt
-+++ b/examples/decoder_tmpl.txt
-@@ -1,7 +1,7 @@
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES
- #define VPX_CODEC_DISABLE_COMPAT 1
--#include "vpx_decoder.h"
--#include "vp8dx.h"
-+#include "vpx/vpx_decoder.h"
-+#include "vpx/vp8dx.h"
- #define interface (&vpx_codec_vp8_dx_algo)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES
-
-diff --git a/examples/encoder_tmpl.c b/examples/encoder_tmpl.c
-index 2df893a..9e262e9 100644
---- a/examples/encoder_tmpl.c
-+++ b/examples/encoder_tmpl.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -16,12 +17,10 @@
- #include <stdarg.h>
- #include <string.h>
- #define VPX_CODEC_DISABLE_COMPAT 1
--#include "vpx_encoder.h"
--#if CONFIG_VP8_ENCODER && !defined(interface)
--#include "vp8cx.h"
-+#include "vpx/vpx_encoder.h"
-+#include "vpx/vp8cx.h"
- #define interface (&vpx_codec_vp8_cx_algo)
- #define fourcc 0x30385056
--#endif
- @EXTRA_INCLUDES
-
- #define IVF_FILE_HDR_SZ (32)
-@@ -129,7 +128,7 @@ int main(int argc, char **argv) {
- height = strtol(argv[2], NULL, 0);
- if(width < 16 || width%2 || height <16 || height%2)
- die("Invalid resolution: %ldx%ld", width, height);
-- if(!vpx_img_alloc(&raw, IMG_FMT_YV12, width, height, 1))
-+ if(!vpx_img_alloc(&raw, VPX_IMG_FMT_I420, width, height, 1))
- die("Faile to allocate image", width, height);
- if(!(outfile = fopen(argv[4], "wb")))
- die("Failed to open %s for writing", argv[4]);
-diff --git a/examples/encoder_tmpl.txt b/examples/encoder_tmpl.txt
-index db1ea77..87055ca 100644
---- a/examples/encoder_tmpl.txt
-+++ b/examples/encoder_tmpl.txt
-@@ -1,7 +1,7 @@
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES
- #define VPX_CODEC_DISABLE_COMPAT 1
--#include "vpx_encoder.h"
--#include "vp8cx.h"
-+#include "vpx/vpx_encoder.h"
-+#include "vpx/vp8cx.h"
- #define interface (&vpx_codec_vp8_cx_algo)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES
-
-diff --git a/examples/gen_example_code.sh b/examples/gen_example_code.sh
-index f2e45c5..dc7ad72 100755
---- a/examples/gen_example_code.sh
-+++ b/examples/gen_example_code.sh
-@@ -2,10 +2,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/examples/gen_example_doxy.php b/examples/gen_example_doxy.php
-index 08beade..ba2617f 100755
---- a/examples/gen_example_doxy.php
-+++ b/examples/gen_example_doxy.php
-@@ -2,10 +2,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/examples/gen_example_text.sh b/examples/gen_example_text.sh
-index 0e1f796..fcc73d8 100755
---- a/examples/gen_example_text.sh
-+++ b/examples/gen_example_text.sh
-@@ -2,10 +2,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/examples/includes/PHP-Markdown-Extra-1.2.3/markdown.php.orig b/examples/includes/PHP-Markdown-Extra-1.2.3/markdown.php.orig
-deleted file mode 100644
-index b0ed7c9..0000000
---- a/examples/includes/PHP-Markdown-Extra-1.2.3/markdown.php.orig
-+++ /dev/null
-@@ -1,2909 +0,0 @@
--<?php
--#
--# Markdown Extra - A text-to-HTML conversion tool for web writers
--#
--# PHP Markdown & Extra
--# Copyright (c) 2004-2008 Michel Fortin
--# <http://www.michelf.com/projects/php-markdown/>
--#
--# Original Markdown
--# Copyright (c) 2004-2006 John Gruber
--# <http://daringfireball.net/projects/markdown/>
--#
--
--
--define( 'MARKDOWN_VERSION', "1.0.1m" ); # Sat 21 Jun 2008
--define( 'MARKDOWNEXTRA_VERSION', "1.2.3" ); # Wed 31 Dec 2008
--
--
--#
--# Global default settings:
--#
--
--# Change to ">" for HTML output
--@define( 'MARKDOWN_EMPTY_ELEMENT_SUFFIX', " />");
--
--# Define the width of a tab for code blocks.
--@define( 'MARKDOWN_TAB_WIDTH', 4 );
--
--# Optional title attribute for footnote links and backlinks.
--@define( 'MARKDOWN_FN_LINK_TITLE', "" );
--@define( 'MARKDOWN_FN_BACKLINK_TITLE', "" );
--
--# Optional class attribute for footnote links and backlinks.
--@define( 'MARKDOWN_FN_LINK_CLASS', "" );
--@define( 'MARKDOWN_FN_BACKLINK_CLASS', "" );
--
--
--#
--# WordPress settings:
--#
--
--# Change to false to remove Markdown from posts and/or comments.
--@define( 'MARKDOWN_WP_POSTS', true );
--@define( 'MARKDOWN_WP_COMMENTS', true );
--
--
--
--### Standard Function Interface ###
--
--@define( 'MARKDOWN_PARSER_CLASS', 'MarkdownExtra_Parser' );
--
--function Markdown($text) {
--#
--# Initialize the parser and return the result of its transform method.
--#
-- # Setup static parser variable.
-- static $parser;
-- if (!isset($parser)) {
-- $parser_class = MARKDOWN_PARSER_CLASS;
-- $parser = new $parser_class;
-- }
--
-- # Transform text using parser.
-- return $parser->transform($text);
--}
--
--
--### WordPress Plugin Interface ###
--
--/*
--Plugin Name: Markdown Extra
--Plugin URI: http://www.michelf.com/projects/php-markdown/
--Description: <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://www.michelf.com/projects/php-markdown/">More...</a>
--Version: 1.2.2
--Author: Michel Fortin
--Author URI: http://www.michelf.com/
--*/
--
--if (isset($wp_version)) {
-- # More details about how it works here:
-- # <http://www.michelf.com/weblog/2005/wordpress-text-flow-vs-markdown/>
--
-- # Post content and excerpts
-- # - Remove WordPress paragraph generator.
-- # - Run Markdown on excerpt, then remove all tags.
-- # - Add paragraph tag around the excerpt, but remove it for the excerpt rss.
-- if (MARKDOWN_WP_POSTS) {
-- remove_filter('the_content', 'wpautop');
-- remove_filter('the_content_rss', 'wpautop');
-- remove_filter('the_excerpt', 'wpautop');
-- add_filter('the_content', 'mdwp_MarkdownPost', 6);
-- add_filter('the_content_rss', 'mdwp_MarkdownPost', 6);
-- add_filter('get_the_excerpt', 'mdwp_MarkdownPost', 6);
-- add_filter('get_the_excerpt', 'trim', 7);
-- add_filter('the_excerpt', 'mdwp_add_p');
-- add_filter('the_excerpt_rss', 'mdwp_strip_p');
--
-- remove_filter('content_save_pre', 'balanceTags', 50);
-- remove_filter('excerpt_save_pre', 'balanceTags', 50);
-- add_filter('the_content', 'balanceTags', 50);
-- add_filter('get_the_excerpt', 'balanceTags', 9);
-- }
--
-- # Add a footnote id prefix to posts when inside a loop.
-- function mdwp_MarkdownPost($text) {
-- static $parser;
-- if (!$parser) {
-- $parser_class = MARKDOWN_PARSER_CLASS;
-- $parser = new $parser_class;
-- }
-- if (is_single() || is_page() || is_feed()) {
-- $parser->fn_id_prefix = "";
-- } else {
-- $parser->fn_id_prefix = get_the_ID() . ".";
-- }
-- return $parser->transform($text);
-- }
--
-- # Comments
-- # - Remove WordPress paragraph generator.
-- # - Remove WordPress auto-link generator.
-- # - Scramble important tags before passing them to the kses filter.
-- # - Run Markdown on excerpt then remove paragraph tags.
-- if (MARKDOWN_WP_COMMENTS) {
-- remove_filter('comment_text', 'wpautop', 30);
-- remove_filter('comment_text', 'make_clickable');
-- add_filter('pre_comment_content', 'Markdown', 6);
-- add_filter('pre_comment_content', 'mdwp_hide_tags', 8);
-- add_filter('pre_comment_content', 'mdwp_show_tags', 12);
-- add_filter('get_comment_text', 'Markdown', 6);
-- add_filter('get_comment_excerpt', 'Markdown', 6);
-- add_filter('get_comment_excerpt', 'mdwp_strip_p', 7);
--
-- global $mdwp_hidden_tags, $mdwp_placeholders;
-- $mdwp_hidden_tags = explode(' ',
-- '<p> </p> <pre> </pre> <ol> </ol> <ul> </ul> <li> </li>');
-- $mdwp_placeholders = explode(' ', str_rot13(
-- 'pEj07ZbbBZ U1kqgh4w4p pre2zmeN6K QTi31t9pre ol0MP1jzJR '.
-- 'ML5IjmbRol ulANi1NsGY J7zRLJqPul liA8ctl16T K9nhooUHli'));
-- }
--
-- function mdwp_add_p($text) {
-- if (!preg_match('{^$|^<(p|ul|ol|dl|pre|blockquote)>}i', $text)) {
-- $text = '<p>'.$text.'</p>';
-- $text = preg_replace('{\n{2,}}', "</p>\n\n<p>", $text);
-- }
-- return $text;
-- }
--
-- function mdwp_strip_p($t) { return preg_replace('{</?p>}i', '', $t); }
--
-- function mdwp_hide_tags($text) {
-- global $mdwp_hidden_tags, $mdwp_placeholders;
-- return str_replace($mdwp_hidden_tags, $mdwp_placeholders, $text);
-- }
-- function mdwp_show_tags($text) {
-- global $mdwp_hidden_tags, $mdwp_placeholders;
-- return str_replace($mdwp_placeholders, $mdwp_hidden_tags, $text);
-- }
--}
--
--
--### bBlog Plugin Info ###
--
--function identify_modifier_markdown() {
-- return array(
-- 'name' => 'markdown',
-- 'type' => 'modifier',
-- 'nicename' => 'PHP Markdown Extra',
-- 'description' => 'A text-to-HTML conversion tool for web writers',
-- 'authors' => 'Michel Fortin and John Gruber',
-- 'licence' => 'GPL',
-- 'version' => MARKDOWNEXTRA_VERSION,
-- 'help' => '<a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://www.michelf.com/projects/php-markdown/">More...</a>',
-- );
--}
--
--
--### Smarty Modifier Interface ###
--
--function smarty_modifier_markdown($text) {
-- return Markdown($text);
--}
--
--
--### Textile Compatibility Mode ###
--
--# Rename this file to "classTextile.php" and it can replace Textile everywhere.
--
--if (strcasecmp(substr(__FILE__, -16), "classTextile.php") == 0) {
-- # Try to include PHP SmartyPants. Should be in the same directory.
-- @include_once 'smartypants.php';
-- # Fake Textile class. It calls Markdown instead.
-- class Textile {
-- function TextileThis($text, $lite='', $encode='') {
-- if ($lite == '' && $encode == '') $text = Markdown($text);
-- if (function_exists('SmartyPants')) $text = SmartyPants($text);
-- return $text;
-- }
-- # Fake restricted version: restrictions are not supported for now.
-- function TextileRestricted($text, $lite='', $noimage='') {
-- return $this->TextileThis($text, $lite);
-- }
-- # Workaround to ensure compatibility with TextPattern 4.0.3.
-- function blockLite($text) { return $text; }
-- }
--}
--
--
--
--#
--# Markdown Parser Class
--#
--
--class Markdown_Parser {
--
-- # Regex to match balanced [brackets].
-- # Needed to insert a maximum bracked depth while converting to PHP.
-- var $nested_brackets_depth = 6;
-- var $nested_brackets_re;
--
-- var $nested_url_parenthesis_depth = 4;
-- var $nested_url_parenthesis_re;
--
-- # Table of hash values for escaped characters:
-- var $escape_chars = '\`*_{}[]()>#+-.!';
-- var $escape_chars_re;
--
-- # Change to ">" for HTML output.
-- var $empty_element_suffix = MARKDOWN_EMPTY_ELEMENT_SUFFIX;
-- var $tab_width = MARKDOWN_TAB_WIDTH;
--
-- # Change to `true` to disallow markup or entities.
-- var $no_markup = false;
-- var $no_entities = true;
--
-- # Predefined urls and titles for reference links and images.
-- var $predef_urls = array();
-- var $predef_titles = array();
--
--
-- function Markdown_Parser() {
-- #
-- # Constructor function. Initialize appropriate member variables.
-- #
-- $this->_initDetab();
-- $this->prepareItalicsAndBold();
--
-- $this->nested_brackets_re =
-- str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth).
-- str_repeat('\])*', $this->nested_brackets_depth);
--
-- $this->nested_url_parenthesis_re =
-- str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth).
-- str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth);
--
-- $this->escape_chars_re = '['.preg_quote($this->escape_chars).']';
--
-- # Sort document, block, and span gamut in ascendent priority order.
-- asort($this->document_gamut);
-- asort($this->block_gamut);
-- asort($this->span_gamut);
-- }
--
--
-- # Internal hashes used during transformation.
-- var $urls = array();
-- var $titles = array();
-- var $html_hashes = array();
--
-- # Status flag to avoid invalid nesting.
-- var $in_anchor = false;
--
--
-- function setup() {
-- #
-- # Called before the transformation process starts to setup parser
-- # states.
-- #
-- # Clear global hashes.
-- $this->urls = $this->predef_urls;
-- $this->titles = $this->predef_titles;
-- $this->html_hashes = array();
--
-- $in_anchor = false;
-- }
--
-- function teardown() {
-- #
-- # Called after the transformation process to clear any variable
-- # which may be taking up memory unnecessarly.
-- #
-- $this->urls = array();
-- $this->titles = array();
-- $this->html_hashes = array();
-- }
--
--
-- function transform($text) {
-- #
-- # Main function. Performs some preprocessing on the input text
-- # and pass it through the document gamut.
-- #
-- $this->setup();
--
-- # Remove UTF-8 BOM and marker character in input, if present.
-- $text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text);
--
-- # Standardize line endings:
-- # DOS to Unix and Mac to Unix
-- $text = preg_replace('{\r\n?}', "\n", $text);
--
-- # Make sure $text ends with a couple of newlines:
-- $text .= "\n\n";
--
-- # Convert all tabs to spaces.
-- $text = $this->detab($text);
--
-- # Turn block-level HTML blocks into hash entries
-- $text = $this->hashHTMLBlocks($text);
--
-- # Strip any lines consisting only of spaces and tabs.
-- # This makes subsequent regexen easier to write, because we can
-- # match consecutive blank lines with /\n+/ instead of something
-- # contorted like /[ ]*\n+/ .
-- $text = preg_replace('/^[ ]+$/m', '', $text);
--
-- # Run document gamut methods.
-- foreach ($this->document_gamut as $method => $priority) {
-- $text = $this->$method($text);
-- }
--
-- $this->teardown();
--
-- return $text . "\n";
-- }
--
-- var $document_gamut = array(
-- # Strip link definitions, store in hashes.
-- "stripLinkDefinitions" => 20,
--
-- "runBasicBlockGamut" => 30,
-- );
--
--
-- function stripLinkDefinitions($text) {
-- #
-- # Strips link definitions from text, stores the URLs and titles in
-- # hash references.
-- #
-- $less_than_tab = $this->tab_width - 1;
--
-- # Link defs are in the form: ^[id]: url "optional title"
-- $text = preg_replace_callback('{
-- ^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?: # id = $1
-- [ ]*
-- \n? # maybe *one* newline
-- [ ]*
-- <?(\S+?)>? # url = $2
-- [ ]*
-- \n? # maybe one newline
-- [ ]*
-- (?:
-- (?<=\s) # lookbehind for whitespace
-- ["(]
-- (.*?) # title = $3
-- [")]
-- [ ]*
-- )? # title is optional
-- (?:\n+|\Z)
-- }xm',
-- array(&$this, '_stripLinkDefinitions_callback'),
-- $text);
-- return $text;
-- }
-- function _stripLinkDefinitions_callback($matches) {
-- $link_id = strtolower($matches[1]);
-- $this->urls[$link_id] = $matches[2];
-- $this->titles[$link_id] =& $matches[3];
-- return ''; # String that will replace the block
-- }
--
--
-- function hashHTMLBlocks($text) {
-- if ($this->no_markup) return $text;
--
-- $less_than_tab = $this->tab_width - 1;
--
-- # Hashify HTML blocks:
-- # We only want to do this for block-level HTML tags, such as headers,
-- # lists, and tables. That's because we still want to wrap <p>s around
-- # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
-- # phrase emphasis, and spans. The list of tags we're looking for is
-- # hard-coded:
-- #
-- # * List "a" is made of tags which can be both inline or block-level.
-- # These will be treated block-level when the start tag is alone on
-- # its line, otherwise they're not matched here and will be taken as
-- # inline later.
-- # * List "b" is made of tags which are always block-level;
-- #
-- $block_tags_a_re = 'ins|del';
-- $block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'.
-- 'script|noscript|form|fieldset|iframe|math';
--
-- # Regular expression for the content of a block tag.
-- $nested_tags_level = 4;
-- $attr = '
-- (?> # optional tag attributes
-- \s # starts with whitespace
-- (?>
-- [^>"/]+ # text outside quotes
-- |
-- /+(?!>) # slash not followed by ">"
-- |
-- "[^"]*" # text inside double quotes (tolerate ">")
-- |
-- \'[^\']*\' # text inside single quotes (tolerate ">")
-- )*
-- )?
-- ';
-- $content =
-- str_repeat('
-- (?>
-- [^<]+ # content without tag
-- |
-- <\2 # nested opening tag
-- '.$attr.' # attributes
-- (?>
-- />
-- |
-- >', $nested_tags_level). # end of opening tag
-- '.*?'. # last level nested tag content
-- str_repeat('
-- </\2\s*> # closing nested tag
-- )
-- |
-- <(?!/\2\s*> # other tags with a different name
-- )
-- )*',
-- $nested_tags_level);
-- $content2 = str_replace('\2', '\3', $content);
--
-- # First, look for nested blocks, e.g.:
-- # <div>
-- # <div>
-- # tags for inner block must be indented.
-- # </div>
-- # </div>
-- #
-- # The outermost tags must start at the left margin for this to match, and
-- # the inner nested divs must be indented.
-- # We need to do this before the next, more liberal match, because the next
-- # match will start at the first `<div>` and stop at the first `</div>`.
-- $text = preg_replace_callback('{(?>
-- (?>
-- (?<=\n\n) # Starting after a blank line
-- | # or
-- \A\n? # the beginning of the doc
-- )
-- ( # save in $1
--
-- # Match from `\n<tag>` to `</tag>\n`, handling nested tags
-- # in between.
--
-- [ ]{0,'.$less_than_tab.'}
-- <('.$block_tags_b_re.')# start tag = $2
-- '.$attr.'> # attributes followed by > and \n
-- '.$content.' # content, support nesting
-- </\2> # the matching end tag
-- [ ]* # trailing spaces/tabs
-- (?=\n+|\Z) # followed by a newline or end of document
--
-- | # Special version for tags of group a.
--
-- [ ]{0,'.$less_than_tab.'}
-- <('.$block_tags_a_re.')# start tag = $3
-- '.$attr.'>[ ]*\n # attributes followed by >
-- '.$content2.' # content, support nesting
-- </\3> # the matching end tag
-- [ ]* # trailing spaces/tabs
-- (?=\n+|\Z) # followed by a newline or end of document
--
-- | # Special case just for <hr />. It was easier to make a special
-- # case than to make the other regex more complicated.
--
-- [ ]{0,'.$less_than_tab.'}
-- <(hr) # start tag = $2
-- '.$attr.' # attributes
-- /?> # the matching end tag
-- [ ]*
-- (?=\n{2,}|\Z) # followed by a blank line or end of document
--
-- | # Special case for standalone HTML comments:
--
-- [ ]{0,'.$less_than_tab.'}
-- (?s:
-- <!-- .*? -->
-- )
-- [ ]*
-- (?=\n{2,}|\Z) # followed by a blank line or end of document
--
-- | # PHP and ASP-style processor instructions (<? and <%)
--
-- [ ]{0,'.$less_than_tab.'}
-- (?s:
-- <([?%]) # $2
-- .*?
-- \2>
-- )
-- [ ]*
-- (?=\n{2,}|\Z) # followed by a blank line or end of document
--
-- )
-- )}Sxmi',
-- array(&$this, '_hashHTMLBlocks_callback'),
-- $text);
--
-- return $text;
-- }
-- function _hashHTMLBlocks_callback($matches) {
-- $text = $matches[1];
-- $key = $this->hashBlock($text);
-- return "\n\n$key\n\n";
-- }
--
--
-- function hashPart($text, $boundary = 'X') {
-- #
-- # Called whenever a tag must be hashed when a function insert an atomic
-- # element in the text stream. Passing $text to through this function gives
-- # a unique text-token which will be reverted back when calling unhash.
-- #
-- # The $boundary argument specify what character should be used to surround
-- # the token. By convension, "B" is used for block elements that needs not
-- # to be wrapped into paragraph tags at the end, ":" is used for elements
-- # that are word separators and "X" is used in the general case.
-- #
-- # Swap back any tag hash found in $text so we do not have to `unhash`
-- # multiple times at the end.
-- $text = $this->unhash($text);
--
-- # Then hash the block.
-- static $i = 0;
-- $key = "$boundary\x1A" . ++$i . $boundary;
-- $this->html_hashes[$key] = $text;
-- return $key; # String that will replace the tag.
-- }
--
--
-- function hashBlock($text) {
-- #
-- # Shortcut function for hashPart with block-level boundaries.
-- #
-- return $this->hashPart($text, 'B');
-- }
--
--
-- var $block_gamut = array(
-- #
-- # These are all the transformations that form block-level
-- # tags like paragraphs, headers, and list items.
-- #
-- "doHeaders" => 10,
-- "doHorizontalRules" => 20,
--
-- "doLists" => 40,
-- "doCodeBlocks" => 50,
-- "doBlockQuotes" => 60,
-- );
--
-- function runBlockGamut($text) {
-- #
-- # Run block gamut tranformations.
-- #
-- # We need to escape raw HTML in Markdown source before doing anything
-- # else. This need to be done for each block, and not only at the
-- # begining in the Markdown function since hashed blocks can be part of
-- # list items and could have been indented. Indented blocks would have
-- # been seen as a code block in a previous pass of hashHTMLBlocks.
-- $text = $this->hashHTMLBlocks($text);
--
-- return $this->runBasicBlockGamut($text);
-- }
--
-- function runBasicBlockGamut($text) {
-- #
-- # Run block gamut tranformations, without hashing HTML blocks. This is
-- # useful when HTML blocks are known to be already hashed, like in the first
-- # whole-document pass.
-- #
-- foreach ($this->block_gamut as $method => $priority) {
-- $text = $this->$method($text);
-- }
--
-- # Finally form paragraph and restore hashed blocks.
-- $text = $this->formParagraphs($text);
--
-- return $text;
-- }
--
--
-- function doHorizontalRules($text) {
-- # Do Horizontal Rules:
-- return preg_replace(
-- '{
-- ^[ ]{0,3} # Leading space
-- ([-*_]) # $1: First marker
-- (?> # Repeated marker group
-- [ ]{0,2} # Zero, one, or two spaces.
-- \1 # Marker character
-- ){2,} # Group repeated at least twice
-- [ ]* # Tailing spaces
-- $ # End of line.
-- }mx',
-- "\n".$this->hashBlock("<hr$this->empty_element_suffix")."\n",
-- $text);
-- }
--
--
-- var $span_gamut = array(
-- #
-- # These are all the transformations that occur *within* block-level
-- # tags like paragraphs, headers, and list items.
-- #
-- # Process character escapes, code spans, and inline HTML
-- # in one shot.
-- "parseSpan" => -30,
--
-- # Process anchor and image tags. Images must come first,
-- # because ![foo][f] looks like an anchor.
-- "doImages" => 10,
-- "doAnchors" => 20,
--
-- # Make links out of things like `<http://example.com/>`
-- # Must come after doAnchors, because you can use < and >
-- # delimiters in inline links like [this](<url>).
-- "doAutoLinks" => 30,
-- "encodeAmpsAndAngles" => 40,
--
-- "doItalicsAndBold" => 50,
-- "doHardBreaks" => 60,
-- );
--
-- function runSpanGamut($text) {
-- #
-- # Run span gamut tranformations.
-- #
-- foreach ($this->span_gamut as $method => $priority) {
-- $text = $this->$method($text);
-- }
--
-- return $text;
-- }
--
--
-- function doHardBreaks($text) {
-- # Do hard breaks:
-- return preg_replace_callback('/ {2,}\n/',
-- array(&$this, '_doHardBreaks_callback'), $text);
-- }
-- function _doHardBreaks_callback($matches) {
-- return $this->hashPart("<br$this->empty_element_suffix\n");
-- }
--
--
-- function doAnchors($text) {
-- #
-- # Turn Markdown link shortcuts into XHTML <a> tags.
-- #
-- if ($this->in_anchor) return $text;
-- $this->in_anchor = true;
--
-- #
-- # First, handle reference-style links: [link text] [id]
-- #
-- $text = preg_replace_callback('{
-- ( # wrap whole match in $1
-- \[
-- ('.$this->nested_brackets_re.') # link text = $2
-- \]
--
-- [ ]? # one optional space
-- (?:\n[ ]*)? # one optional newline followed by spaces
--
-- \[
-- (.*?) # id = $3
-- \]
-- )
-- }xs',
-- array(&$this, '_doAnchors_reference_callback'), $text);
--
-- #
-- # Next, inline-style links: [link text](url "optional title")
-- #
-- $text = preg_replace_callback('{
-- ( # wrap whole match in $1
-- \[
-- ('.$this->nested_brackets_re.') # link text = $2
-- \]
-- \( # literal paren
-- [ ]*
-- (?:
-- <(\S*)> # href = $3
-- |
-- ('.$this->nested_url_parenthesis_re.') # href = $4
-- )
-- [ ]*
-- ( # $5
-- ([\'"]) # quote char = $6
-- (.*?) # Title = $7
-- \6 # matching quote
-- [ ]* # ignore any spaces/tabs between closing quote and )
-- )? # title is optional
-- \)
-- )
-- }xs',
-- array(&$this, '_DoAnchors_inline_callback'), $text);
--
-- #
-- # Last, handle reference-style shortcuts: [link text]
-- # These must come last in case you've also got [link test][1]
-- # or [link test](/foo)
-- #
--// $text = preg_replace_callback('{
--// ( # wrap whole match in $1
--// \[
--// ([^\[\]]+) # link text = $2; can\'t contain [ or ]
--// \]
--// )
--// }xs',
--// array(&$this, '_doAnchors_reference_callback'), $text);
--
-- $this->in_anchor = false;
-- return $text;
-- }
-- function _doAnchors_reference_callback($matches) {
-- $whole_match = $matches[1];
-- $link_text = $matches[2];
-- $link_id =& $matches[3];
--
-- if ($link_id == "") {
-- # for shortcut links like [this][] or [this].
-- $link_id = $link_text;
-- }
--
-- # lower-case and turn embedded newlines into spaces
-- $link_id = strtolower($link_id);
-- $link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
--
-- if (isset($this->urls[$link_id])) {
-- $url = $this->urls[$link_id];
-- $url = $this->encodeAttribute($url);
--
-- $result = "<a href=\"$url\"";
-- if ( isset( $this->titles[$link_id] ) ) {
-- $title = $this->titles[$link_id];
-- $title = $this->encodeAttribute($title);
-- $result .= " title=\"$title\"";
-- }
--
-- $link_text = $this->runSpanGamut($link_text);
-- $result .= ">$link_text</a>";
-- $result = $this->hashPart($result);
-- }
-- else {
-- $result = $whole_match;
-- }
-- return $result;
-- }
-- function _doAnchors_inline_callback($matches) {
-- $whole_match = $matches[1];
-- $link_text = $this->runSpanGamut($matches[2]);
-- $url = $matches[3] == '' ? $matches[4] : $matches[3];
-- $title =& $matches[7];
--
-- $url = $this->encodeAttribute($url);
--
-- $result = "<a href=\"$url\"";
-- if (isset($title)) {
-- $title = $this->encodeAttribute($title);
-- $result .= " title=\"$title\"";
-- }
--
-- $link_text = $this->runSpanGamut($link_text);
-- $result .= ">$link_text</a>";
--
-- return $this->hashPart($result);
-- }
--
--
-- function doImages($text) {
-- #
-- # Turn Markdown image shortcuts into <img> tags.
-- #
-- #
-- # First, handle reference-style labeled images: ![alt text][id]
-- #
-- $text = preg_replace_callback('{
-- ( # wrap whole match in $1
-- !\[
-- ('.$this->nested_brackets_re.') # alt text = $2
-- \]
--
-- [ ]? # one optional space
-- (?:\n[ ]*)? # one optional newline followed by spaces
--
-- \[
-- (.*?) # id = $3
-- \]
--
-- )
-- }xs',
-- array(&$this, '_doImages_reference_callback'), $text);
--
-- #
-- # Next, handle inline images: ![alt text](url "optional title")
-- # Don't forget: encode * and _
-- #
-- $text = preg_replace_callback('{
-- ( # wrap whole match in $1
-- !\[
-- ('.$this->nested_brackets_re.') # alt text = $2
-- \]
-- \s? # One optional whitespace character
-- \( # literal paren
-- [ ]*
-- (?:
-- <(\S*)> # src url = $3
-- |
-- ('.$this->nested_url_parenthesis_re.') # src url = $4
-- )
-- [ ]*
-- ( # $5
-- ([\'"]) # quote char = $6
-- (.*?) # title = $7
-- \6 # matching quote
-- [ ]*
-- )? # title is optional
-- \)
-- )
-- }xs',
-- array(&$this, '_doImages_inline_callback'), $text);
--
-- return $text;
-- }
-- function _doImages_reference_callback($matches) {
-- $whole_match = $matches[1];
-- $alt_text = $matches[2];
-- $link_id = strtolower($matches[3]);
--
-- if ($link_id == "") {
-- $link_id = strtolower($alt_text); # for shortcut links like ![this][].
-- }
--
-- $alt_text = $this->encodeAttribute($alt_text);
-- if (isset($this->urls[$link_id])) {
-- $url = $this->encodeAttribute($this->urls[$link_id]);
-- $result = "<img src=\"$url\" alt=\"$alt_text\"";
-- if (isset($this->titles[$link_id])) {
-- $title = $this->titles[$link_id];
-- $title = $this->encodeAttribute($title);
-- $result .= " title=\"$title\"";
-- }
-- $result .= $this->empty_element_suffix;
-- $result = $this->hashPart($result);
-- }
-- else {
-- # If there's no such link ID, leave intact:
-- $result = $whole_match;
-- }
--
-- return $result;
-- }
-- function _doImages_inline_callback($matches) {
-- $whole_match = $matches[1];
-- $alt_text = $matches[2];
-- $url = $matches[3] == '' ? $matches[4] : $matches[3];
-- $title =& $matches[7];
--
-- $alt_text = $this->encodeAttribute($alt_text);
-- $url = $this->encodeAttribute($url);
-- $result = "<img src=\"$url\" alt=\"$alt_text\"";
-- if (isset($title)) {
-- $title = $this->encodeAttribute($title);
-- $result .= " title=\"$title\""; # $title already quoted
-- }
-- $result .= $this->empty_element_suffix;
--
-- return $this->hashPart($result);
-- }
--
--
-- function doHeaders($text) {
-- # Setext-style headers:
-- # Header 1
-- # ========
-- #
-- # Header 2
-- # --------
-- #
-- $text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx',
-- array(&$this, '_doHeaders_callback_setext'), $text);
--
-- # atx-style headers:
-- # # Header 1
-- # ## Header 2
-- # ## Header 2 with closing hashes ##
-- # ...
-- # ###### Header 6
-- #
-- $text = preg_replace_callback('{
-- ^(\#{1,6}) # $1 = string of #\'s
-- [ ]*
-- (.+?) # $2 = Header text
-- [ ]*
-- \#* # optional closing #\'s (not counted)
-- \n+
-- }xm',
-- array(&$this, '_doHeaders_callback_atx'), $text);
--
-- return $text;
-- }
-- function _doHeaders_callback_setext($matches) {
-- # Terrible hack to check we haven't found an empty list item.
-- if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
-- return $matches[0];
--
-- $level = $matches[2]{0} == '=' ? 1 : 2;
-- $block = "<h$level>".$this->runSpanGamut($matches[1])."</h$level>";
-- return "\n" . $this->hashBlock($block) . "\n\n";
-- }
-- function _doHeaders_callback_atx($matches) {
-- $level = strlen($matches[1]);
-- $block = "<h$level>".$this->runSpanGamut($matches[2])."</h$level>";
-- return "\n" . $this->hashBlock($block) . "\n\n";
-- }
--
--
-- function doLists($text) {
-- #
-- # Form HTML ordered (numbered) and unordered (bulleted) lists.
-- #
-- $less_than_tab = $this->tab_width - 1;
--
-- # Re-usable patterns to match list item bullets and number markers:
-- $marker_ul_re = '[*+-]';
-- $marker_ol_re = '\d+[.]';
-- $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
--
-- $markers_relist = array($marker_ul_re, $marker_ol_re);
--
-- foreach ($markers_relist as $marker_re) {
-- # Re-usable pattern to match any entirel ul or ol list:
-- $whole_list_re = '
-- ( # $1 = whole list
-- ( # $2
-- [ ]{0,'.$less_than_tab.'}
-- ('.$marker_re.') # $3 = first list item marker
-- [ ]+
-- )
-- (?s:.+?)
-- ( # $4
-- \z
-- |
-- \n{2,}
-- (?=\S)
-- (?! # Negative lookahead for another list item marker
-- [ ]*
-- '.$marker_re.'[ ]+
-- )
-- )
-- )
-- '; // mx
--
-- # We use a different prefix before nested lists than top-level lists.
-- # See extended comment in _ProcessListItems().
--
-- if ($this->list_level) {
-- $text = preg_replace_callback('{
-- ^
-- '.$whole_list_re.'
-- }mx',
-- array(&$this, '_doLists_callback'), $text);
-- }
-- else {
-- $text = preg_replace_callback('{
-- (?:(?<=\n)\n|\A\n?) # Must eat the newline
-- '.$whole_list_re.'
-- }mx',
-- array(&$this, '_doLists_callback'), $text);
-- }
-- }
--
-- return $text;
-- }
-- function _doLists_callback($matches) {
-- # Re-usable patterns to match list item bullets and number markers:
-- $marker_ul_re = '[*+-]';
-- $marker_ol_re = '\d+[.]';
-- $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
--
-- $list = $matches[1];
-- $list_type = preg_match("/$marker_ul_re/", $matches[3]) ? "ul" : "ol";
--
-- $marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
--
-- $list .= "\n";
-- $result = $this->processListItems($list, $marker_any_re);
--
-- $result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
-- return "\n". $result ."\n\n";
-- }
--
-- var $list_level = 0;
--
-- function processListItems($list_str, $marker_any_re) {
-- #
-- # Process the contents of a single ordered or unordered list, splitting it
-- # into individual list items.
-- #
-- # The $this->list_level global keeps track of when we're inside a list.
-- # Each time we enter a list, we increment it; when we leave a list,
-- # we decrement. If it's zero, we're not in a list anymore.
-- #
-- # We do this because when we're not inside a list, we want to treat
-- # something like this:
-- #
-- # I recommend upgrading to version
-- # 8. Oops, now this line is treated
-- # as a sub-list.
-- #
-- # As a single paragraph, despite the fact that the second line starts
-- # with a digit-period-space sequence.
-- #
-- # Whereas when we're inside a list (or sub-list), that line will be
-- # treated as the start of a sub-list. What a kludge, huh? This is
-- # an aspect of Markdown's syntax that's hard to parse perfectly
-- # without resorting to mind-reading. Perhaps the solution is to
-- # change the syntax rules such that sub-lists must start with a
-- # starting cardinal number; e.g. "1." or "a.".
--
-- $this->list_level++;
--
-- # trim trailing blank lines:
-- $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
--
-- $list_str = preg_replace_callback('{
-- (\n)? # leading line = $1
-- (^[ ]*) # leading whitespace = $2
-- ('.$marker_any_re.' # list marker and space = $3
-- (?:[ ]+|(?=\n)) # space only required if item is not empty
-- )
-- ((?s:.*?)) # list item text = $4
-- (?:(\n+(?=\n))|\n) # tailing blank line = $5
-- (?= \n* (\z | \2 ('.$marker_any_re.') (?:[ ]+|(?=\n))))
-- }xm',
-- array(&$this, '_processListItems_callback'), $list_str);
--
-- $this->list_level--;
-- return $list_str;
-- }
-- function _processListItems_callback($matches) {
-- $item = $matches[4];
-- $leading_line =& $matches[1];
-- $leading_space =& $matches[2];
-- $marker_space = $matches[3];
-- $tailing_blank_line =& $matches[5];
--
-- if ($leading_line || $tailing_blank_line ||
-- preg_match('/\n{2,}/', $item))
-- {
-- # Replace marker with the appropriate whitespace indentation
-- $item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
-- $item = $this->runBlockGamut($this->outdent($item)."\n");
-- }
-- else {
-- # Recursion for sub-lists:
-- $item = $this->doLists($this->outdent($item));
-- $item = preg_replace('/\n+$/', '', $item);
-- $item = $this->runSpanGamut($item);
-- }
--
-- return "<li>" . $item . "</li>\n";
-- }
--
--
-- function doCodeBlocks($text) {
-- #
-- # Process Markdown `<pre><code>` blocks.
-- #
-- $text = preg_replace_callback('{
-- (?:\n\n|\A\n?)
-- ( # $1 = the code block -- one or more lines, starting with a space/tab
-- (?>
-- [ ]{'.$this->tab_width.'} # Lines must start with a tab or a tab-width of spaces
-- .*\n+
-- )+
-- )
-- ((?=^[ ]{0,'.$this->tab_width.'}\S)|\Z) # Lookahead for non-space at line-start, or end of doc
-- }xm',
-- array(&$this, '_doCodeBlocks_callback'), $text);
--
-- return $text;
-- }
-- function _doCodeBlocks_callback($matches) {
-- $codeblock = $matches[1];
--
-- $codeblock = $this->outdent($codeblock);
-- $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
--
-- # trim leading newlines and trailing newlines
-- $codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
--
-- $codeblock = "<pre><code>$codeblock\n</code></pre>";
-- return "\n\n".$this->hashBlock($codeblock)."\n\n";
-- }
--
--
-- function makeCodeSpan($code) {
-- #
-- # Create a code span markup for $code. Called from handleSpanToken.
-- #
-- $code = htmlspecialchars(trim($code), ENT_NOQUOTES);
-- return $this->hashPart("<code>$code</code>");
-- }
--
--
-- var $em_relist = array(
-- '' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S)(?![.,:;]\s)',
-- '*' => '(?<=\S)(?<!\*)\*(?!\*)',
-- '_' => '(?<=\S)(?<!_)_(?!_)',
-- );
-- var $strong_relist = array(
-- '' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S)(?![.,:;]\s)',
-- '**' => '(?<=\S)(?<!\*)\*\*(?!\*)',
-- '__' => '(?<=\S)(?<!_)__(?!_)',
-- );
-- var $em_strong_relist = array(
-- '' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S)(?![.,:;]\s)',
-- '***' => '(?<=\S)(?<!\*)\*\*\*(?!\*)',
-- '___' => '(?<=\S)(?<!_)___(?!_)',
-- );
-- var $em_strong_prepared_relist;
--
-- function prepareItalicsAndBold() {
-- #
-- # Prepare regular expressions for seraching emphasis tokens in any
-- # context.
-- #
-- foreach ($this->em_relist as $em => $em_re) {
-- foreach ($this->strong_relist as $strong => $strong_re) {
-- # Construct list of allowed token expressions.
-- $token_relist = array();
-- if (isset($this->em_strong_relist["$em$strong"])) {
-- $token_relist[] = $this->em_strong_relist["$em$strong"];
-- }
-- $token_relist[] = $em_re;
-- $token_relist[] = $strong_re;
--
-- # Construct master expression from list.
-- $token_re = '{('. implode('|', $token_relist) .')}';
-- $this->em_strong_prepared_relist["$em$strong"] = $token_re;
-- }
-- }
-- }
--
-- function doItalicsAndBold($text) {
-- $token_stack = array('');
-- $text_stack = array('');
-- $em = '';
-- $strong = '';
-- $tree_char_em = false;
--
-- while (1) {
-- #
-- # Get prepared regular expression for seraching emphasis tokens
-- # in current context.
-- #
-- $token_re = $this->em_strong_prepared_relist["$em$strong"];
--
-- #
-- # Each loop iteration seach for the next emphasis token.
-- # Each token is then passed to handleSpanToken.
-- #
-- $parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
-- $text_stack[0] .= $parts[0];
-- $token =& $parts[1];
-- $text =& $parts[2];
--
-- if (empty($token)) {
-- # Reached end of text span: empty stack without emitting.
-- # any more emphasis.
-- while ($token_stack[0]) {
-- $text_stack[1] .= array_shift($token_stack);
-- $text_stack[0] .= array_shift($text_stack);
-- }
-- break;
-- }
--
-- $token_len = strlen($token);
-- if ($tree_char_em) {
-- # Reached closing marker while inside a three-char emphasis.
-- if ($token_len == 3) {
-- # Three-char closing marker, close em and strong.
-- array_shift($token_stack);
-- $span = array_shift($text_stack);
-- $span = $this->runSpanGamut($span);
-- $span = "<strong><em>$span</em></strong>";
-- $text_stack[0] .= $this->hashPart($span);
-- $em = '';
-- $strong = '';
-- } else {
-- # Other closing marker: close one em or strong and
-- # change current token state to match the other
-- $token_stack[0] = str_repeat($token{0}, 3-$token_len);
-- $tag = $token_len == 2 ? "strong" : "em";
-- $span = $text_stack[0];
-- $span = $this->runSpanGamut($span);
-- $span = "<$tag>$span</$tag>";
-- $text_stack[0] = $this->hashPart($span);
-- $$tag = ''; # $$tag stands for $em or $strong
-- }
-- $tree_char_em = false;
-- } else if ($token_len == 3) {
-- if ($em) {
-- # Reached closing marker for both em and strong.
-- # Closing strong marker:
-- for ($i = 0; $i < 2; ++$i) {
-- $shifted_token = array_shift($token_stack);
-- $tag = strlen($shifted_token) == 2 ? "strong" : "em";
-- $span = array_shift($text_stack);
-- $span = $this->runSpanGamut($span);
-- $span = "<$tag>$span</$tag>";
-- $text_stack[0] .= $this->hashPart($span);
-- $$tag = ''; # $$tag stands for $em or $strong
-- }
-- } else {
-- # Reached opening three-char emphasis marker. Push on token
-- # stack; will be handled by the special condition above.
-- $em = $token{0};
-- $strong = "$em$em";
-- array_unshift($token_stack, $token);
-- array_unshift($text_stack, '');
-- $tree_char_em = true;
-- }
-- } else if ($token_len == 2) {
-- if ($strong) {
-- # Unwind any dangling emphasis marker:
-- if (strlen($token_stack[0]) == 1) {
-- $text_stack[1] .= array_shift($token_stack);
-- $text_stack[0] .= array_shift($text_stack);
-- }
-- # Closing strong marker:
-- array_shift($token_stack);
-- $span = array_shift($text_stack);
-- $span = $this->runSpanGamut($span);
-- $span = "<strong>$span</strong>";
-- $text_stack[0] .= $this->hashPart($span);
-- $strong = '';
-- } else {
-- array_unshift($token_stack, $token);
-- array_unshift($text_stack, '');
-- $strong = $token;
-- }
-- } else {
-- # Here $token_len == 1
-- if ($em) {
-- if (strlen($token_stack[0]) == 1) {
-- # Closing emphasis marker:
-- array_shift($token_stack);
-- $span = array_shift($text_stack);
-- $span = $this->runSpanGamut($span);
-- $span = "<em>$span</em>";
-- $text_stack[0] .= $this->hashPart($span);
-- $em = '';
-- } else {
-- $text_stack[0] .= $token;
-- }
-- } else {
-- array_unshift($token_stack, $token);
-- array_unshift($text_stack, '');
-- $em = $token;
-- }
-- }
-- }
-- return $text_stack[0];
-- }
--
--
-- function doBlockQuotes($text) {
-- $text = preg_replace_callback('/
-- ( # Wrap whole match in $1
-- (?>
-- ^[ ]*>[ ]? # ">" at the start of a line
-- .+\n # rest of the first line
-- (.+\n)* # subsequent consecutive lines
-- \n* # blanks
-- )+
-- )
-- /xm',
-- array(&$this, '_doBlockQuotes_callback'), $text);
--
-- return $text;
-- }
-- function _doBlockQuotes_callback($matches) {
-- $bq = $matches[1];
-- # trim one level of quoting - trim whitespace-only lines
-- $bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
-- $bq = $this->runBlockGamut($bq); # recurse
--
-- $bq = preg_replace('/^/m', " ", $bq);
-- # These leading spaces cause problem with <pre> content,
-- # so we need to fix that:
-- $bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx',
-- array(&$this, '_DoBlockQuotes_callback2'), $bq);
--
-- return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
-- }
-- function _doBlockQuotes_callback2($matches) {
-- $pre = $matches[1];
-- $pre = preg_replace('/^ /m', '', $pre);
-- return $pre;
-- }
--
--
-- function formParagraphs($text) {
-- #
-- # Params:
-- # $text - string to process with html <p> tags
-- #
-- # Strip leading and trailing lines:
-- $text = preg_replace('/\A\n+|\n+\z/', '', $text);
--
-- $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
--
-- #
-- # Wrap <p> tags and unhashify HTML blocks
-- #
-- foreach ($grafs as $key => $value) {
-- if (!preg_match('/^B\x1A[0-9]+B$/', $value)) {
-- # Is a paragraph.
-- $value = $this->runSpanGamut($value);
-- $value = preg_replace('/^([ ]*)/', "<p>", $value);
-- $value .= "</p>";
-- $grafs[$key] = $this->unhash($value);
-- }
-- else {
-- # Is a block.
-- # Modify elements of @grafs in-place...
-- $graf = $value;
-- $block = $this->html_hashes[$graf];
-- $graf = $block;
--// if (preg_match('{
--// \A
--// ( # $1 = <div> tag
--// <div \s+
--// [^>]*
--// \b
--// markdown\s*=\s* ([\'"]) # $2 = attr quote char
--// 1
--// \2
--// [^>]*
--// >
--// )
--// ( # $3 = contents
--// .*
--// )
--// (</div>) # $4 = closing tag
--// \z
--// }xs', $block, $matches))
--// {
--// list(, $div_open, , $div_content, $div_close) = $matches;
--//
--// # We can't call Markdown(), because that resets the hash;
--// # that initialization code should be pulled into its own sub, though.
--// $div_content = $this->hashHTMLBlocks($div_content);
--//
--// # Run document gamut methods on the content.
--// foreach ($this->document_gamut as $method => $priority) {
--// $div_content = $this->$method($div_content);
--// }
--//
--// $div_open = preg_replace(
--// '{\smarkdown\s*=\s*([\'"]).+?\1}', '', $div_open);
--//
--// $graf = $div_open . "\n" . $div_content . "\n" . $div_close;
--// }
-- $grafs[$key] = $graf;
-- }
-- }
--
-- return implode("\n\n", $grafs);
-- }
--
--
-- function encodeAttribute($text) {
-- #
-- # Encode text for a double-quoted HTML attribute. This function
-- # is *not* suitable for attributes enclosed in single quotes.
-- #
-- $text = $this->encodeAmpsAndAngles($text);
-- $text = str_replace('"', '&quot;', $text);
-- return $text;
-- }
--
--
-- function encodeAmpsAndAngles($text) {
-- #
-- # Smart processing for ampersands and angle brackets that need to
-- # be encoded. Valid character entities are left alone unless the
-- # no-entities mode is set.
-- #
-- if ($this->no_entities) {
-- $text = str_replace('&', '&amp;', $text);
-- } else {
-- # Ampersand-encoding based entirely on Nat Irons's Amputator
-- # MT plugin: <http://bumppo.net/projects/amputator/>
-- $text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/',
-- '&amp;', $text);;
-- }
-- # Encode remaining <'s
-- $text = str_replace('<', '&lt;', $text);
--
-- return $text;
-- }
--
--
-- function doAutoLinks($text) {
-- $text = preg_replace_callback('{<((https?|ftp|dict):[^\'">\s]+)>}i',
-- array(&$this, '_doAutoLinks_url_callback'), $text);
--
-- # Email addresses: <address@domain.foo>
-- $text = preg_replace_callback('{
-- <
-- (?:mailto:)?
-- (
-- [-.\w\x80-\xFF]+
-- \@
-- [-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+
-- )
-- >
-- }xi',
-- array(&$this, '_doAutoLinks_email_callback'), $text);
--
-- return $text;
-- }
-- function _doAutoLinks_url_callback($matches) {
-- $url = $this->encodeAttribute($matches[1]);
-- $link = "<a href=\"$url\">$url</a>";
-- return $this->hashPart($link);
-- }
-- function _doAutoLinks_email_callback($matches) {
-- $address = $matches[1];
-- $link = $this->encodeEmailAddress($address);
-- return $this->hashPart($link);
-- }
--
--
-- function encodeEmailAddress($addr) {
-- #
-- # Input: an email address, e.g. "foo@example.com"
-- #
-- # Output: the email address as a mailto link, with each character
-- # of the address encoded as either a decimal or hex entity, in
-- # the hopes of foiling most address harvesting spam bots. E.g.:
-- #
-- # <p><a href="&#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x66;o&#111;
-- # &#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;&#101;&#46;&#x63;&#111;
-- # &#x6d;">&#x66;o&#111;&#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;
-- # &#101;&#46;&#x63;&#111;&#x6d;</a></p>
-- #
-- # Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
-- # With some optimizations by Milian Wolff.
-- #
-- $addr = "mailto:" . $addr;
-- $chars = preg_split('/(?<!^)(?!$)/', $addr);
-- $seed = (int)abs(crc32($addr) / strlen($addr)); # Deterministic seed.
--
-- foreach ($chars as $key => $char) {
-- $ord = ord($char);
-- # Ignore non-ascii chars.
-- if ($ord < 128) {
-- $r = ($seed * (1 + $key)) % 100; # Pseudo-random function.
-- # roughly 10% raw, 45% hex, 45% dec
-- # '@' *must* be encoded. I insist.
-- if ($r > 90 && $char != '@') /* do nothing */;
-- else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';';
-- else $chars[$key] = '&#'.$ord.';';
-- }
-- }
--
-- $addr = implode('', $chars);
-- $text = implode('', array_slice($chars, 7)); # text without `mailto:`
-- $addr = "<a href=\"$addr\">$text</a>";
--
-- return $addr;
-- }
--
--
-- function parseSpan($str) {
-- #
-- # Take the string $str and parse it into tokens, hashing embeded HTML,
-- # escaped characters and handling code spans.
-- #
-- $output = '';
--
-- $span_re = '{
-- (
-- \\\\'.$this->escape_chars_re.'
-- |
-- (?<![`\\\\])
-- `+ # code span marker
-- '.( $this->no_markup ? '' : '
-- |
-- <!-- .*? --> # comment
-- |
-- <\?.*?\?> | <%.*?%> # processing instruction
-- |
-- <[/!$]?[-a-zA-Z0-9:]+ # regular tags
-- (?>
-- \s
-- (?>[^"\'>]+|"[^"]*"|\'[^\']*\')*
-- )?
-- >
-- ').'
-- )
-- }xs';
--
-- while (1) {
-- #
-- # Each loop iteration seach for either the next tag, the next
-- # openning code span marker, or the next escaped character.
-- # Each token is then passed to handleSpanToken.
-- #
-- $parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE);
--
-- # Create token from text preceding tag.
-- if ($parts[0] != "") {
-- $output .= $parts[0];
-- }
--
-- # Check if we reach the end.
-- if (isset($parts[1])) {
-- $output .= $this->handleSpanToken($parts[1], $parts[2]);
-- $str = $parts[2];
-- }
-- else {
-- break;
-- }
-- }
--
-- return $output;
-- }
--
--
-- function handleSpanToken($token, &$str) {
-- #
-- # Handle $token provided by parseSpan by determining its nature and
-- # returning the corresponding value that should replace it.
-- #
-- switch ($token{0}) {
-- case "\\":
-- return $this->hashPart("&#". ord($token{1}). ";");
-- case "`":
-- # Search for end marker in remaining text.
-- if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm',
-- $str, $matches))
-- {
-- $str = $matches[2];
-- $codespan = $this->makeCodeSpan($matches[1]);
-- return $this->hashPart($codespan);
-- }
-- return $token; // return as text since no ending marker found.
-- default:
-- return $this->hashPart($token);
-- }
-- }
--
--
-- function outdent($text) {
-- #
-- # Remove one level of line-leading tabs or spaces
-- #
-- return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text);
-- }
--
--
-- # String length function for detab. `_initDetab` will create a function to
-- # hanlde UTF-8 if the default function does not exist.
-- var $utf8_strlen = 'mb_strlen';
--
-- function detab($text) {
-- #
-- # Replace tabs with the appropriate amount of space.
-- #
-- # For each line we separate the line in blocks delemited by
-- # tab characters. Then we reconstruct every line by adding the
-- # appropriate number of space between each blocks.
--
-- $text = preg_replace_callback('/^.*\t.*$/m',
-- array(&$this, '_detab_callback'), $text);
--
-- return $text;
-- }
-- function _detab_callback($matches) {
-- $line = $matches[0];
-- $strlen = $this->utf8_strlen; # strlen function for UTF-8.
--
-- # Split in blocks.
-- $blocks = explode("\t", $line);
-- # Add each blocks to the line.
-- $line = $blocks[0];
-- unset($blocks[0]); # Do not add first block twice.
-- foreach ($blocks as $block) {
-- # Calculate amount of space, insert spaces, insert block.
-- $amount = $this->tab_width -
-- $strlen($line, 'UTF-8') % $this->tab_width;
-- $line .= str_repeat(" ", $amount) . $block;
-- }
-- return $line;
-- }
-- function _initDetab() {
-- #
-- # Check for the availability of the function in the `utf8_strlen` property
-- # (initially `mb_strlen`). If the function is not available, create a
-- # function that will loosely count the number of UTF-8 characters with a
-- # regular expression.
-- #
-- if (function_exists($this->utf8_strlen)) return;
-- $this->utf8_strlen = create_function('$text', 'return preg_match_all(
-- "/[\\\\x00-\\\\xBF]|[\\\\xC0-\\\\xFF][\\\\x80-\\\\xBF]*/",
-- $text, $m);');
-- }
--
--
-- function unhash($text) {
-- #
-- # Swap back in all the tags hashed by _HashHTMLBlocks.
-- #
-- return preg_replace_callback('/(.)\x1A[0-9]+\1/',
-- array(&$this, '_unhash_callback'), $text);
-- }
-- function _unhash_callback($matches) {
-- return $this->html_hashes[$matches[0]];
-- }
--
--}
--
--
--#
--# Markdown Extra Parser Class
--#
--
--class MarkdownExtra_Parser extends Markdown_Parser {
--
-- # Prefix for footnote ids.
-- var $fn_id_prefix = "";
--
-- # Optional title attribute for footnote links and backlinks.
-- var $fn_link_title = MARKDOWN_FN_LINK_TITLE;
-- var $fn_backlink_title = MARKDOWN_FN_BACKLINK_TITLE;
--
-- # Optional class attribute for footnote links and backlinks.
-- var $fn_link_class = MARKDOWN_FN_LINK_CLASS;
-- var $fn_backlink_class = MARKDOWN_FN_BACKLINK_CLASS;
--
-- # Predefined abbreviations.
-- var $predef_abbr = array();
--
--
-- function MarkdownExtra_Parser() {
-- #
-- # Constructor function. Initialize the parser object.
-- #
-- # Add extra escapable characters before parent constructor
-- # initialize the table.
-- $this->escape_chars .= ':|';
--
-- # Insert extra document, block, and span transformations.
-- # Parent constructor will do the sorting.
-- $this->document_gamut += array(
-- "doFencedCodeBlocks" => 5,
-- "stripFootnotes" => 15,
-- "stripAbbreviations" => 25,
-- "appendFootnotes" => 50,
-- );
-- $this->block_gamut += array(
-- "doFencedCodeBlocks" => 5,
-- "doTables" => 15,
-- "doDefLists" => 45,
-- );
-- $this->span_gamut += array(
-- "doFootnotes" => 5,
-- "doAbbreviations" => 70,
-- );
--
-- parent::Markdown_Parser();
-- }
--
--
-- # Extra variables used during extra transformations.
-- var $footnotes = array();
-- var $footnotes_ordered = array();
-- var $abbr_desciptions = array();
-- var $abbr_word_re = '';
--
-- # Give the current footnote number.
-- var $footnote_counter = 1;
--
--
-- function setup() {
-- #
-- # Setting up Extra-specific variables.
-- #
-- parent::setup();
--
-- $this->footnotes = array();
-- $this->footnotes_ordered = array();
-- $this->abbr_desciptions = array();
-- $this->abbr_word_re = '';
-- $this->footnote_counter = 1;
--
-- foreach ($this->predef_abbr as $abbr_word => $abbr_desc) {
-- if ($this->abbr_word_re)
-- $this->abbr_word_re .= '|';
-- $this->abbr_word_re .= preg_quote($abbr_word);
-- $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
-- }
-- }
--
-- function teardown() {
-- #
-- # Clearing Extra-specific variables.
-- #
-- $this->footnotes = array();
-- $this->footnotes_ordered = array();
-- $this->abbr_desciptions = array();
-- $this->abbr_word_re = '';
--
-- parent::teardown();
-- }
--
--
-- ### HTML Block Parser ###
--
-- # Tags that are always treated as block tags:
-- var $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend';
--
-- # Tags treated as block tags only if the opening tag is alone on it's line:
-- var $context_block_tags_re = 'script|noscript|math|ins|del';
--
-- # Tags where markdown="1" default to span mode:
-- var $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
--
-- # Tags which must not have their contents modified, no matter where
-- # they appear:
-- var $clean_tags_re = 'script|math';
--
-- # Tags that do not need to be closed.
-- var $auto_close_tags_re = 'hr|img';
--
--
-- function hashHTMLBlocks($text) {
-- #
-- # Hashify HTML Blocks and "clean tags".
-- #
-- # We only want to do this for block-level HTML tags, such as headers,
-- # lists, and tables. That's because we still want to wrap <p>s around
-- # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
-- # phrase emphasis, and spans. The list of tags we're looking for is
-- # hard-coded.
-- #
-- # This works by calling _HashHTMLBlocks_InMarkdown, which then calls
-- # _HashHTMLBlocks_InHTML when it encounter block tags. When the markdown="1"
-- # attribute is found whitin a tag, _HashHTMLBlocks_InHTML calls back
-- # _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag.
-- # These two functions are calling each other. It's recursive!
-- #
-- #
-- # Call the HTML-in-Markdown hasher.
-- #
-- list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text);
--
-- return $text;
-- }
-- function _hashHTMLBlocks_inMarkdown($text, $indent = 0,
-- $enclosing_tag_re = '', $span = false)
-- {
-- #
-- # Parse markdown text, calling _HashHTMLBlocks_InHTML for block tags.
-- #
-- # * $indent is the number of space to be ignored when checking for code
-- # blocks. This is important because if we don't take the indent into
-- # account, something like this (which looks right) won't work as expected:
-- #
-- # <div>
-- # <div markdown="1">
-- # Hello World. <-- Is this a Markdown code block or text?
-- # </div> <-- Is this a Markdown code block or a real tag?
-- # <div>
-- #
-- # If you don't like this, just don't indent the tag on which
-- # you apply the markdown="1" attribute.
-- #
-- # * If $enclosing_tag_re is not empty, stops at the first unmatched closing
-- # tag with that name. Nested tags supported.
-- #
-- # * If $span is true, text inside must treated as span. So any double
-- # newline will be replaced by a single newline so that it does not create
-- # paragraphs.
-- #
-- # Returns an array of that form: ( processed text , remaining text )
-- #
-- if ($text === '') return array('', '');
--
-- # Regex to check for the presense of newlines around a block tag.
-- $newline_before_re = '/(?:^\n?|\n\n)*$/';
-- $newline_after_re =
-- '{
-- ^ # Start of text following the tag.
-- (?>[ ]*<!--.*?-->)? # Optional comment.
-- [ ]*\n # Must be followed by newline.
-- }xs';
--
-- # Regex to match any tag.
-- $block_tag_re =
-- '{
-- ( # $2: Capture hole tag.
-- </? # Any opening or closing tag.
-- (?> # Tag name.
-- '.$this->block_tags_re.' |
-- '.$this->context_block_tags_re.' |
-- '.$this->clean_tags_re.' |
-- (?!\s)'.$enclosing_tag_re.'
-- )
-- (?:
-- (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name.
-- (?>
-- ".*?" | # Double quotes (can contain `>`)
-- \'.*?\' | # Single quotes (can contain `>`)
-- .+? # Anything but quotes and `>`.
-- )*?
-- )?
-- > # End of tag.
-- |
-- <!-- .*? --> # HTML Comment
-- |
-- <\?.*?\?> | <%.*?%> # Processing instruction
-- |
-- <!\[CDATA\[.*?\]\]> # CData Block
-- |
-- # Code span marker
-- `+
-- '. ( !$span ? ' # If not in span.
-- |
-- # Indented code block
-- (?> ^[ ]*\n? | \n[ ]*\n )
-- [ ]{'.($indent+4).'}[^\n]* \n
-- (?>
-- (?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n
-- )*
-- |
-- # Fenced code block marker
-- (?> ^ | \n )
-- [ ]{'.($indent).'}~~~+[ ]*\n
-- ' : '' ). ' # End (if not is span).
-- )
-- }xs';
--
--
-- $depth = 0; # Current depth inside the tag tree.
-- $parsed = ""; # Parsed text that will be returned.
--
-- #
-- # Loop through every tag until we find the closing tag of the parent
-- # or loop until reaching the end of text if no parent tag specified.
-- #
-- do {
-- #
-- # Split the text using the first $tag_match pattern found.
-- # Text before pattern will be first in the array, text after
-- # pattern will be at the end, and between will be any catches made
-- # by the pattern.
-- #
-- $parts = preg_split($block_tag_re, $text, 2,
-- PREG_SPLIT_DELIM_CAPTURE);
--
-- # If in Markdown span mode, add a empty-string span-level hash
-- # after each newline to prevent triggering any block element.
-- if ($span) {
-- $void = $this->hashPart("", ':');
-- $newline = "$void\n";
-- $parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void;
-- }
--
-- $parsed .= $parts[0]; # Text before current tag.
--
-- # If end of $text has been reached. Stop loop.
-- if (count($parts) < 3) {
-- $text = "";
-- break;
-- }
--
-- $tag = $parts[1]; # Tag to handle.
-- $text = $parts[2]; # Remaining text after current tag.
-- $tag_re = preg_quote($tag); # For use in a regular expression.
--
-- #
-- # Check for: Code span marker
-- #
-- if ($tag{0} == "`") {
-- # Find corresponding end marker.
-- $tag_re = preg_quote($tag);
-- if (preg_match('{^(?>.+?|\n(?!\n))*?(?<!`)'.$tag_re.'(?!`)}',
-- $text, $matches))
-- {
-- # End marker found: pass text unchanged until marker.
-- $parsed .= $tag . $matches[0];
-- $text = substr($text, strlen($matches[0]));
-- }
-- else {
-- # Unmatched marker: just skip it.
-- $parsed .= $tag;
-- }
-- }
-- #
-- # Check for: Indented code block or fenced code block marker.
-- #
-- else if ($tag{0} == "\n" || $tag{0} == "~") {
-- if ($tag{1} == "\n" || $tag{1} == " ") {
-- # Indented code block: pass it unchanged, will be handled
-- # later.
-- $parsed .= $tag;
-- }
-- else {
-- # Fenced code block marker: find matching end marker.
-- $tag_re = preg_quote(trim($tag));
-- if (preg_match('{^(?>.*\n)+?'.$tag_re.' *\n}', $text,
-- $matches))
-- {
-- # End marker found: pass text unchanged until marker.
-- $parsed .= $tag . $matches[0];
-- $text = substr($text, strlen($matches[0]));
-- }
-- else {
-- # No end marker: just skip it.
-- $parsed .= $tag;
-- }
-- }
-- }
-- #
-- # Check for: Opening Block level tag or
-- # Opening Context Block tag (like ins and del)
-- # used as a block tag (tag is alone on it's line).
-- #
-- else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) ||
-- ( preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
-- preg_match($newline_before_re, $parsed) &&
-- preg_match($newline_after_re, $text) )
-- )
-- {
-- # Need to parse tag and following text using the HTML parser.
-- list($block_text, $text) =
-- $this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true);
--
-- # Make sure it stays outside of any paragraph by adding newlines.
-- $parsed .= "\n\n$block_text\n\n";
-- }
-- #
-- # Check for: Clean tag (like script, math)
-- # HTML Comments, processing instructions.
-- #
-- else if (preg_match('{^<(?:'.$this->clean_tags_re.')\b}', $tag) ||
-- $tag{1} == '!' || $tag{1} == '?')
-- {
-- # Need to parse tag and following text using the HTML parser.
-- # (don't check for markdown attribute)
-- list($block_text, $text) =
-- $this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false);
--
-- $parsed .= $block_text;
-- }
-- #
-- # Check for: Tag with same name as enclosing tag.
-- #
-- else if ($enclosing_tag_re !== '' &&
-- # Same name as enclosing tag.
-- preg_match('{^</?(?:'.$enclosing_tag_re.')\b}', $tag))
-- {
-- #
-- # Increase/decrease nested tag count.
-- #
-- if ($tag{1} == '/') $depth--;
-- else if ($tag{strlen($tag)-2} != '/') $depth++;
--
-- if ($depth < 0) {
-- #
-- # Going out of parent element. Clean up and break so we
-- # return to the calling function.
-- #
-- $text = $tag . $text;
-- break;
-- }
--
-- $parsed .= $tag;
-- }
-- else {
-- $parsed .= $tag;
-- }
-- } while ($depth >= 0);
--
-- return array($parsed, $text);
-- }
-- function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) {
-- #
-- # Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags.
-- #
-- # * Calls $hash_method to convert any blocks.
-- # * Stops when the first opening tag closes.
-- # * $md_attr indicate if the use of the `markdown="1"` attribute is allowed.
-- # (it is not inside clean tags)
-- #
-- # Returns an array of that form: ( processed text , remaining text )
-- #
-- if ($text === '') return array('', '');
--
-- # Regex to match `markdown` attribute inside of a tag.
-- $markdown_attr_re = '
-- {
-- \s* # Eat whitespace before the `markdown` attribute
-- markdown
-- \s*=\s*
-- (?>
-- (["\']) # $1: quote delimiter
-- (.*?) # $2: attribute value
-- \1 # matching delimiter
-- |
-- ([^\s>]*) # $3: unquoted attribute value
-- )
-- () # $4: make $3 always defined (avoid warnings)
-- }xs';
--
-- # Regex to match any tag.
-- $tag_re = '{
-- ( # $2: Capture hole tag.
-- </? # Any opening or closing tag.
-- [\w:$]+ # Tag name.
-- (?:
-- (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name.
-- (?>
-- ".*?" | # Double quotes (can contain `>`)
-- \'.*?\' | # Single quotes (can contain `>`)
-- .+? # Anything but quotes and `>`.
-- )*?
-- )?
-- > # End of tag.
-- |
-- <!-- .*? --> # HTML Comment
-- |
-- <\?.*?\?> | <%.*?%> # Processing instruction
-- |
-- <!\[CDATA\[.*?\]\]> # CData Block
-- )
-- }xs';
--
-- $original_text = $text; # Save original text in case of faliure.
--
-- $depth = 0; # Current depth inside the tag tree.
-- $block_text = ""; # Temporary text holder for current text.
-- $parsed = ""; # Parsed text that will be returned.
--
-- #
-- # Get the name of the starting tag.
-- # (This pattern makes $base_tag_name_re safe without quoting.)
-- #
-- if (preg_match('/^<([\w:$]*)\b/', $text, $matches))
-- $base_tag_name_re = $matches[1];
--
-- #
-- # Loop through every tag until we find the corresponding closing tag.
-- #
-- do {
-- #
-- # Split the text using the first $tag_match pattern found.
-- # Text before pattern will be first in the array, text after
-- # pattern will be at the end, and between will be any catches made
-- # by the pattern.
-- #
-- $parts = preg_split($tag_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
--
-- if (count($parts) < 3) {
-- #
-- # End of $text reached with unbalenced tag(s).
-- # In that case, we return original text unchanged and pass the
-- # first character as filtered to prevent an infinite loop in the
-- # parent function.
-- #
-- return array($original_text{0}, substr($original_text, 1));
-- }
--
-- $block_text .= $parts[0]; # Text before current tag.
-- $tag = $parts[1]; # Tag to handle.
-- $text = $parts[2]; # Remaining text after current tag.
--
-- #
-- # Check for: Auto-close tag (like <hr/>)
-- # Comments and Processing Instructions.
-- #
-- if (preg_match('{^</?(?:'.$this->auto_close_tags_re.')\b}', $tag) ||
-- $tag{1} == '!' || $tag{1} == '?')
-- {
-- # Just add the tag to the block as if it was text.
-- $block_text .= $tag;
-- }
-- else {
-- #
-- # Increase/decrease nested tag count. Only do so if
-- # the tag's name match base tag's.
-- #
-- if (preg_match('{^</?'.$base_tag_name_re.'\b}', $tag)) {
-- if ($tag{1} == '/') $depth--;
-- else if ($tag{strlen($tag)-2} != '/') $depth++;
-- }
--
-- #
-- # Check for `markdown="1"` attribute and handle it.
-- #
-- if ($md_attr &&
-- preg_match($markdown_attr_re, $tag, $attr_m) &&
-- preg_match('/^1|block|span$/', $attr_m[2] . $attr_m[3]))
-- {
-- # Remove `markdown` attribute from opening tag.
-- $tag = preg_replace($markdown_attr_re, '', $tag);
--
-- # Check if text inside this tag must be parsed in span mode.
-- $this->mode = $attr_m[2] . $attr_m[3];
-- $span_mode = $this->mode == 'span' || $this->mode != 'block' &&
-- preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag);
--
-- # Calculate indent before tag.
-- if (preg_match('/(?:^|\n)( *?)(?! ).*?$/', $block_text, $matches)) {
-- $strlen = $this->utf8_strlen;
-- $indent = $strlen($matches[1], 'UTF-8');
-- } else {
-- $indent = 0;
-- }
--
-- # End preceding block with this tag.
-- $block_text .= $tag;
-- $parsed .= $this->$hash_method($block_text);
--
-- # Get enclosing tag name for the ParseMarkdown function.
-- # (This pattern makes $tag_name_re safe without quoting.)
-- preg_match('/^<([\w:$]*)\b/', $tag, $matches);
-- $tag_name_re = $matches[1];
--
-- # Parse the content using the HTML-in-Markdown parser.
-- list ($block_text, $text)
-- = $this->_hashHTMLBlocks_inMarkdown($text, $indent,
-- $tag_name_re, $span_mode);
--
-- # Outdent markdown text.
-- if ($indent > 0) {
-- $block_text = preg_replace("/^[ ]{1,$indent}/m", "",
-- $block_text);
-- }
--
-- # Append tag content to parsed text.
-- if (!$span_mode) $parsed .= "\n\n$block_text\n\n";
-- else $parsed .= "$block_text";
--
-- # Start over a new block.
-- $block_text = "";
-- }
-- else $block_text .= $tag;
-- }
--
-- } while ($depth > 0);
--
-- #
-- # Hash last block text that wasn't processed inside the loop.
-- #
-- $parsed .= $this->$hash_method($block_text);
--
-- return array($parsed, $text);
-- }
--
--
-- function hashClean($text) {
-- #
-- # Called whenever a tag must be hashed when a function insert a "clean" tag
-- # in $text, it pass through this function and is automaticaly escaped,
-- # blocking invalid nested overlap.
-- #
-- return $this->hashPart($text, 'C');
-- }
--
--
-- function doHeaders($text) {
-- #
-- # Redefined to add id attribute support.
-- #
-- # Setext-style headers:
-- # Header 1 {#header1}
-- # ========
-- #
-- # Header 2 {#header2}
-- # --------
-- #
-- $text = preg_replace_callback(
-- '{
-- (^.+?) # $1: Header text
-- (?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})? # $2: Id attribute
-- [ ]*\n(=+|-+)[ ]*\n+ # $3: Header footer
-- }mx',
-- array(&$this, '_doHeaders_callback_setext'), $text);
--
-- # atx-style headers:
-- # # Header 1 {#header1}
-- # ## Header 2 {#header2}
-- # ## Header 2 with closing hashes ## {#header3}
-- # ...
-- # ###### Header 6 {#header2}
-- #
-- $text = preg_replace_callback('{
-- ^(\#{1,6}) # $1 = string of #\'s
-- [ ]*
-- (.+?) # $2 = Header text
-- [ ]*
-- \#* # optional closing #\'s (not counted)
-- (?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})? # id attribute
-- [ ]*
-- \n+
-- }xm',
-- array(&$this, '_doHeaders_callback_atx'), $text);
--
-- return $text;
-- }
-- function _doHeaders_attr($attr) {
-- if (empty($attr)) return "";
-- return " id=\"$attr\"";
-- }
-- function _doHeaders_callback_setext($matches) {
-- if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
-- return $matches[0];
-- $level = $matches[3]{0} == '=' ? 1 : 2;
-- $attr = $this->_doHeaders_attr($id =& $matches[2]);
-- $block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
-- return "\n" . $this->hashBlock($block) . "\n\n";
-- }
-- function _doHeaders_callback_atx($matches) {
-- $level = strlen($matches[1]);
-- $attr = $this->_doHeaders_attr($id =& $matches[3]);
-- $block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
-- return "\n" . $this->hashBlock($block) . "\n\n";
-- }
--
--
-- function doTables($text) {
-- #
-- # Form HTML tables.
-- #
-- $less_than_tab = $this->tab_width - 1;
-- #
-- # Find tables with leading pipe.
-- #
-- # | Header 1 | Header 2
-- # | -------- | --------
-- # | Cell 1 | Cell 2
-- # | Cell 3 | Cell 4
-- #
-- $text = preg_replace_callback('
-- {
-- ^ # Start of a line
-- [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
-- [|] # Optional leading pipe (present)
-- (.+) \n # $1: Header row (at least one pipe)
--
-- [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
-- [|] ([ ]*[-:]+[-| :]*) \n # $2: Header underline
--
-- ( # $3: Cells
-- (?>
-- [ ]* # Allowed whitespace.
-- [|] .* \n # Row content.
-- )*
-- )
-- (?=\n|\Z) # Stop at final double newline.
-- }xm',
-- array(&$this, '_doTable_leadingPipe_callback'), $text);
--
-- #
-- # Find tables without leading pipe.
-- #
-- # Header 1 | Header 2
-- # -------- | --------
-- # Cell 1 | Cell 2
-- # Cell 3 | Cell 4
-- #
-- $text = preg_replace_callback('
-- {
-- ^ # Start of a line
-- [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
-- (\S.*[|].*) \n # $1: Header row (at least one pipe)
--
-- [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
-- ([-:]+[ ]*[|][-| :]*) \n # $2: Header underline
--
-- ( # $3: Cells
-- (?>
-- .* [|] .* \n # Row content
-- )*
-- )
-- (?=\n|\Z) # Stop at final double newline.
-- }xm',
-- array(&$this, '_DoTable_callback'), $text);
--
-- return $text;
-- }
-- function _doTable_leadingPipe_callback($matches) {
-- $head = $matches[1];
-- $underline = $matches[2];
-- $content = $matches[3];
--
-- # Remove leading pipe for each row.
-- $content = preg_replace('/^ *[|]/m', '', $content);
--
-- return $this->_doTable_callback(array($matches[0], $head, $underline, $content));
-- }
-- function _doTable_callback($matches) {
-- $head = $matches[1];
-- $underline = $matches[2];
-- $content = $matches[3];
--
-- # Remove any tailing pipes for each line.
-- $head = preg_replace('/[|] *$/m', '', $head);
-- $underline = preg_replace('/[|] *$/m', '', $underline);
-- $content = preg_replace('/[|] *$/m', '', $content);
--
-- # Reading alignement from header underline.
-- $separators = preg_split('/ *[|] */', $underline);
-- foreach ($separators as $n => $s) {
-- if (preg_match('/^ *-+: *$/', $s)) $attr[$n] = ' align="right"';
-- else if (preg_match('/^ *:-+: *$/', $s))$attr[$n] = ' align="center"';
-- else if (preg_match('/^ *:-+ *$/', $s)) $attr[$n] = ' align="left"';
-- else $attr[$n] = '';
-- }
--
-- # Parsing span elements, including code spans, character escapes,
-- # and inline HTML tags, so that pipes inside those gets ignored.
-- $head = $this->parseSpan($head);
-- $headers = preg_split('/ *[|] */', $head);
-- $col_count = count($headers);
--
-- # Write column headers.
-- $text = "<table>\n";
-- $text .= "<thead>\n";
-- $text .= "<tr>\n";
-- foreach ($headers as $n => $header)
-- $text .= " <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
-- $text .= "</tr>\n";
-- $text .= "</thead>\n";
--
-- # Split content by row.
-- $rows = explode("\n", trim($content, "\n"));
--
-- $text .= "<tbody>\n";
-- foreach ($rows as $row) {
-- # Parsing span elements, including code spans, character escapes,
-- # and inline HTML tags, so that pipes inside those gets ignored.
-- $row = $this->parseSpan($row);
--
-- # Split row by cell.
-- $row_cells = preg_split('/ *[|] */', $row, $col_count);
-- $row_cells = array_pad($row_cells, $col_count, '');
--
-- $text .= "<tr>\n";
-- foreach ($row_cells as $n => $cell)
-- $text .= " <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
-- $text .= "</tr>\n";
-- }
-- $text .= "</tbody>\n";
-- $text .= "</table>";
--
-- return $this->hashBlock($text) . "\n";
-- }
--
--
-- function doDefLists($text) {
-- #
-- # Form HTML definition lists.
-- #
-- $less_than_tab = $this->tab_width - 1;
--
-- # Re-usable pattern to match any entire dl list:
-- $whole_list_re = '(?>
-- ( # $1 = whole list
-- ( # $2
-- [ ]{0,'.$less_than_tab.'}
-- ((?>.*\S.*\n)+) # $3 = defined term
-- \n?
-- [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
-- )
-- (?s:.+?)
-- ( # $4
-- \z
-- |
-- \n{2,}
-- (?=\S)
-- (?! # Negative lookahead for another term
-- [ ]{0,'.$less_than_tab.'}
-- (?: \S.*\n )+? # defined term
-- \n?
-- [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
-- )
-- (?! # Negative lookahead for another definition
-- [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
-- )
-- )
-- )
-- )'; // mx
--
-- $text = preg_replace_callback('{
-- (?>\A\n?|(?<=\n\n))
-- '.$whole_list_re.'
-- }mx',
-- array(&$this, '_doDefLists_callback'), $text);
--
-- return $text;
-- }
-- function _doDefLists_callback($matches) {
-- # Re-usable patterns to match list item bullets and number markers:
-- $list = $matches[1];
--
-- # Turn double returns into triple returns, so that we can make a
-- # paragraph for the last item in a list, if necessary:
-- $result = trim($this->processDefListItems($list));
-- $result = "<dl>\n" . $result . "\n</dl>";
-- return $this->hashBlock($result) . "\n\n";
-- }
--
--
-- function processDefListItems($list_str) {
-- #
-- # Process the contents of a single definition list, splitting it
-- # into individual term and definition list items.
-- #
-- $less_than_tab = $this->tab_width - 1;
--
-- # trim trailing blank lines:
-- $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
--
-- # Process definition terms.
-- $list_str = preg_replace_callback('{
-- (?>\A\n?|\n\n+) # leading line
-- ( # definition terms = $1
-- [ ]{0,'.$less_than_tab.'} # leading whitespace
-- (?![:][ ]|[ ]) # negative lookahead for a definition
-- # mark (colon) or more whitespace.
-- (?> \S.* \n)+? # actual term (not whitespace).
-- )
-- (?=\n?[ ]{0,3}:[ ]) # lookahead for following line feed
-- # with a definition mark.
-- }xm',
-- array(&$this, '_processDefListItems_callback_dt'), $list_str);
--
-- # Process actual definitions.
-- $list_str = preg_replace_callback('{
-- \n(\n+)? # leading line = $1
-- ( # marker space = $2
-- [ ]{0,'.$less_than_tab.'} # whitespace before colon
-- [:][ ]+ # definition mark (colon)
-- )
-- ((?s:.+?)) # definition text = $3
-- (?= \n+ # stop at next definition mark,
-- (?: # next term or end of text
-- [ ]{0,'.$less_than_tab.'} [:][ ] |
-- <dt> | \z
-- )
-- )
-- }xm',
-- array(&$this, '_processDefListItems_callback_dd'), $list_str);
--
-- return $list_str;
-- }
-- function _processDefListItems_callback_dt($matches) {
-- $terms = explode("\n", trim($matches[1]));
-- $text = '';
-- foreach ($terms as $term) {
-- $term = $this->runSpanGamut(trim($term));
-- $text .= "\n<dt>" . $term . "</dt>";
-- }
-- return $text . "\n";
-- }
-- function _processDefListItems_callback_dd($matches) {
-- $leading_line = $matches[1];
-- $marker_space = $matches[2];
-- $def = $matches[3];
--
-- if ($leading_line || preg_match('/\n{2,}/', $def)) {
-- # Replace marker with the appropriate whitespace indentation
-- $def = str_repeat(' ', strlen($marker_space)) . $def;
-- $def = $this->runBlockGamut($this->outdent($def . "\n\n"));
-- $def = "\n". $def ."\n";
-- }
-- else {
-- $def = rtrim($def);
-- $def = $this->runSpanGamut($this->outdent($def));
-- }
--
-- return "\n<dd>" . $def . "</dd>\n";
-- }
--
--
-- function doFencedCodeBlocks($text) {
-- #
-- # Adding the fenced code block syntax to regular Markdown:
-- #
-- # ~~~
-- # Code block
-- # ~~~
-- #
-- $less_than_tab = $this->tab_width;
--
-- $text = preg_replace_callback('{
-- (?:\n|\A)
-- # 1: Opening marker
-- (
-- ~{3,} # Marker: three tilde or more.
-- )
-- [ ]* \n # Whitespace and newline following marker.
--
-- # 2: Content
-- (
-- (?>
-- (?!\1 [ ]* \n) # Not a closing marker.
-- .*\n+
-- )+
-- )
--
-- # Closing marker.
-- \1 [ ]* \n
-- }xm',
-- array(&$this, '_doFencedCodeBlocks_callback'), $text);
--
-- return $text;
-- }
-- function _doFencedCodeBlocks_callback($matches) {
-- $codeblock = $matches[2];
-- $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
-- $codeblock = preg_replace_callback('/^\n+/',
-- array(&$this, '_doFencedCodeBlocks_newlines'), $codeblock);
-- $codeblock = "<pre><code>$codeblock</code></pre>";
-- return "\n\n".$this->hashBlock($codeblock)."\n\n";
-- }
-- function _doFencedCodeBlocks_newlines($matches) {
-- return str_repeat("<br$this->empty_element_suffix",
-- strlen($matches[0]));
-- }
--
--
-- #
-- # Redefining emphasis markers so that emphasis by underscore does not
-- # work in the middle of a word.
-- #
-- var $em_relist = array(
-- '' => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S)(?![.,:;]\s)',
-- '*' => '(?<=\S)(?<!\*)\*(?!\*)',
-- '_' => '(?<=\S)(?<!_)_(?![a-zA-Z0-9_])',
-- );
-- var $strong_relist = array(
-- '' => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S)(?![.,:;]\s)',
-- '**' => '(?<=\S)(?<!\*)\*\*(?!\*)',
-- '__' => '(?<=\S)(?<!_)__(?![a-zA-Z0-9_])',
-- );
-- var $em_strong_relist = array(
-- '' => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S)(?![.,:;]\s)',
-- '***' => '(?<=\S)(?<!\*)\*\*\*(?!\*)',
-- '___' => '(?<=\S)(?<!_)___(?![a-zA-Z0-9_])',
-- );
--
--
-- function formParagraphs($text) {
-- #
-- # Params:
-- # $text - string to process with html <p> tags
-- #
-- # Strip leading and trailing lines:
-- $text = preg_replace('/\A\n+|\n+\z/', '', $text);
--
-- $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
--
-- #
-- # Wrap <p> tags and unhashify HTML blocks
-- #
-- foreach ($grafs as $key => $value) {
-- $value = trim($this->runSpanGamut($value));
--
-- # Check if this should be enclosed in a paragraph.
-- # Clean tag hashes & block tag hashes are left alone.
-- $is_p = !preg_match('/^B\x1A[0-9]+B|^C\x1A[0-9]+C$/', $value);
--
-- if ($is_p) {
-- $value = "<p>$value</p>";
-- }
-- $grafs[$key] = $value;
-- }
--
-- # Join grafs in one text, then unhash HTML tags.
-- $text = implode("\n\n", $grafs);
--
-- # Finish by removing any tag hashes still present in $text.
-- $text = $this->unhash($text);
--
-- return $text;
-- }
--
--
-- ### Footnotes
--
-- function stripFootnotes($text) {
-- #
-- # Strips link definitions from text, stores the URLs and titles in
-- # hash references.
-- #
-- $less_than_tab = $this->tab_width - 1;
--
-- # Link defs are in the form: [^id]: url "optional title"
-- $text = preg_replace_callback('{
-- ^[ ]{0,'.$less_than_tab.'}\[\^(.+?)\][ ]?: # note_id = $1
-- [ ]*
-- \n? # maybe *one* newline
-- ( # text = $2 (no blank lines allowed)
-- (?:
-- .+ # actual text
-- |
-- \n # newlines but
-- (?!\[\^.+?\]:\s)# negative lookahead for footnote marker.
-- (?!\n+[ ]{0,3}\S)# ensure line is not blank and followed
-- # by non-indented content
-- )*
-- )
-- }xm',
-- array(&$this, '_stripFootnotes_callback'),
-- $text);
-- return $text;
-- }
-- function _stripFootnotes_callback($matches) {
-- $note_id = $this->fn_id_prefix . $matches[1];
-- $this->footnotes[$note_id] = $this->outdent($matches[2]);
-- return ''; # String that will replace the block
-- }
--
--
-- function doFootnotes($text) {
-- #
-- # Replace footnote references in $text [^id] with a special text-token
-- # which will be replaced by the actual footnote marker in appendFootnotes.
-- #
-- if (!$this->in_anchor) {
-- $text = preg_replace('{\[\^(.+?)\]}', "F\x1Afn:\\1\x1A:", $text);
-- }
-- return $text;
-- }
--
--
-- function appendFootnotes($text) {
-- #
-- # Append footnote list to text.
-- #
-- $text = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}',
-- array(&$this, '_appendFootnotes_callback'), $text);
--
-- if (!empty($this->footnotes_ordered)) {
-- $text .= "\n\n";
-- $text .= "<div class=\"footnotes\">\n";
-- $text .= "<hr". MARKDOWN_EMPTY_ELEMENT_SUFFIX ."\n";
-- $text .= "<ol>\n\n";
--
-- $attr = " rev=\"footnote\"";
-- if ($this->fn_backlink_class != "") {
-- $class = $this->fn_backlink_class;
-- $class = $this->encodeAttribute($class);
-- $attr .= " class=\"$class\"";
-- }
-- if ($this->fn_backlink_title != "") {
-- $title = $this->fn_backlink_title;
-- $title = $this->encodeAttribute($title);
-- $attr .= " title=\"$title\"";
-- }
-- $num = 0;
--
-- while (!empty($this->footnotes_ordered)) {
-- $footnote = reset($this->footnotes_ordered);
-- $note_id = key($this->footnotes_ordered);
-- unset($this->footnotes_ordered[$note_id]);
--
-- $footnote .= "\n"; # Need to append newline before parsing.
-- $footnote = $this->runBlockGamut("$footnote\n");
-- $footnote = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}',
-- array(&$this, '_appendFootnotes_callback'), $footnote);
--
-- $attr = str_replace("%%", ++$num, $attr);
-- $note_id = $this->encodeAttribute($note_id);
--
-- # Add backlink to last paragraph; create new paragraph if needed.
-- $backlink = "<a href=\"#fnref:$note_id\"$attr>&#8617;</a>";
-- if (preg_match('{</p>$}', $footnote)) {
-- $footnote = substr($footnote, 0, -4) . "&#160;$backlink</p>";
-- } else {
-- $footnote .= "\n\n<p>$backlink</p>";
-- }
--
-- $text .= "<li id=\"fn:$note_id\">\n";
-- $text .= $footnote . "\n";
-- $text .= "</li>\n\n";
-- }
--
-- $text .= "</ol>\n";
-- $text .= "</div>";
-- }
-- return $text;
-- }
-- function _appendFootnotes_callback($matches) {
-- $node_id = $this->fn_id_prefix . $matches[1];
--
-- # Create footnote marker only if it has a corresponding footnote *and*
-- # the footnote hasn't been used by another marker.
-- if (isset($this->footnotes[$node_id])) {
-- # Transfert footnote content to the ordered list.
-- $this->footnotes_ordered[$node_id] = $this->footnotes[$node_id];
-- unset($this->footnotes[$node_id]);
--
-- $num = $this->footnote_counter++;
-- $attr = " rel=\"footnote\"";
-- if ($this->fn_link_class != "") {
-- $class = $this->fn_link_class;
-- $class = $this->encodeAttribute($class);
-- $attr .= " class=\"$class\"";
-- }
-- if ($this->fn_link_title != "") {
-- $title = $this->fn_link_title;
-- $title = $this->encodeAttribute($title);
-- $attr .= " title=\"$title\"";
-- }
--
-- $attr = str_replace("%%", $num, $attr);
-- $node_id = $this->encodeAttribute($node_id);
--
-- return
-- "<sup id=\"fnref:$node_id\">".
-- "<a href=\"#fn:$node_id\"$attr>$num</a>".
-- "</sup>";
-- }
--
-- return "[^".$matches[1]."]";
-- }
--
--
-- ### Abbreviations ###
--
-- function stripAbbreviations($text) {
-- #
-- # Strips abbreviations from text, stores titles in hash references.
-- #
-- $less_than_tab = $this->tab_width - 1;
--
-- # Link defs are in the form: [id]*: url "optional title"
-- $text = preg_replace_callback('{
-- ^[ ]{0,'.$less_than_tab.'}\*\[(.+?)\][ ]?: # abbr_id = $1
-- (.*) # text = $2 (no blank lines allowed)
-- }xm',
-- array(&$this, '_stripAbbreviations_callback'),
-- $text);
-- return $text;
-- }
-- function _stripAbbreviations_callback($matches) {
-- $abbr_word = $matches[1];
-- $abbr_desc = $matches[2];
-- if ($this->abbr_word_re)
-- $this->abbr_word_re .= '|';
-- $this->abbr_word_re .= preg_quote($abbr_word);
-- $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
-- return ''; # String that will replace the block
-- }
--
--
-- function doAbbreviations($text) {
-- #
-- # Find defined abbreviations in text and wrap them in <abbr> elements.
-- #
-- if ($this->abbr_word_re) {
-- // cannot use the /x modifier because abbr_word_re may
-- // contain significant spaces:
-- $text = preg_replace_callback('{'.
-- '(?<![\w\x1A])'.
-- '(?:'.$this->abbr_word_re.')'.
-- '(?![\w\x1A])'.
-- '}',
-- array(&$this, '_doAbbreviations_callback'), $text);
-- }
-- return $text;
-- }
-- function _doAbbreviations_callback($matches) {
-- $abbr = $matches[0];
-- if (isset($this->abbr_desciptions[$abbr])) {
-- $desc = $this->abbr_desciptions[$abbr];
-- if (empty($desc)) {
-- return $this->hashPart("<abbr>$abbr</abbr>");
-- } else {
-- $desc = $this->encodeAttribute($desc);
-- return $this->hashPart("<abbr title=\"$desc\">$abbr</abbr>");
-- }
-- } else {
-- return $matches[0];
-- }
-- }
--
--}
--
--
--/*
--
--PHP Markdown Extra
--==================
--
--Description
-------------
--
--This is a PHP port of the original Markdown formatter written in Perl
--by John Gruber. This special "Extra" version of PHP Markdown features
--further enhancements to the syntax for making additional constructs
--such as tables and definition list.
--
--Markdown is a text-to-HTML filter; it translates an easy-to-read /
--easy-to-write structured text format into HTML. Markdown's text format
--is most similar to that of plain text email, and supports features such
--as headers, *emphasis*, code blocks, blockquotes, and links.
--
--Markdown's syntax is designed not as a generic markup language, but
--specifically to serve as a front-end to (X)HTML. You can use span-level
--HTML tags anywhere in a Markdown document, and you can use block level
--HTML tags (like <div> and <table> as well).
--
--For more information about Markdown's syntax, see:
--
--<http://daringfireball.net/projects/markdown/>
--
--
--Bugs
------
--
--To file bug reports please send email to:
--
--<michel.fortin@michelf.com>
--
--Please include with your report: (1) the example input; (2) the output you
--expected; (3) the output Markdown actually produced.
--
--
--Version History
-----------------
--
--See the readme file for detailed release notes for this version.
--
--
--Copyright and License
-----------------------
--
--PHP Markdown & Extra
--Copyright (c) 2004-2008 Michel Fortin
--<http://www.michelf.com/>
--All rights reserved.
--
--Based on Markdown
--Copyright (c) 2003-2006 John Gruber
--<http://daringfireball.net/>
--All rights reserved.
--
--Redistribution and use in source and binary forms, with or without
--modification, are permitted provided that the following conditions are
--met:
--
--* Redistributions of source code must retain the above copyright notice,
-- this list of conditions and the following disclaimer.
--
--* Redistributions in binary form must reproduce the above copyright
-- notice, this list of conditions and the following disclaimer in the
-- documentation and/or other materials provided with the distribution.
--
--* Neither the name "Markdown" nor the names of its contributors may
-- be used to endorse or promote products derived from this software
-- without specific prior written permission.
--
--This software is provided by the copyright holders and contributors "as
--is" and any express or implied warranties, including, but not limited
--to, the implied warranties of merchantability and fitness for a
--particular purpose are disclaimed. In no event shall the copyright owner
--or contributors be liable for any direct, indirect, incidental, special,
--exemplary, or consequential damages (including, but not limited to,
--procurement of substitute goods or services; loss of use, data, or
--profits; or business interruption) however caused and on any theory of
--liability, whether in contract, strict liability, or tort (including
--negligence or otherwise) arising in any way out of the use of this
--software, even if advised of the possibility of such damage.
--
--*/
--?>
-\ No newline at end of file
-diff --git a/ivfdec.c b/ivfdec.c
-index e4c9981..2b26d55 100644
---- a/ivfdec.c
-+++ b/ivfdec.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -17,10 +18,10 @@
- #include <string.h>
- #define VPX_CODEC_DISABLE_COMPAT 1
- #include "vpx_config.h"
--#include "vpx_decoder.h"
-+#include "vpx/vpx_decoder.h"
- #include "vpx_ports/vpx_timer.h"
- #if CONFIG_VP8_DECODER
--#include "vp8dx.h"
-+#include "vpx/vp8dx.h"
- #endif
- #if CONFIG_MD5
- #include "md5_utils.h"
-@@ -62,8 +63,10 @@ static const arg_def_t postprocarg = ARG_DEF(NULL, "postproc", 0,
- "Postprocess decoded frames");
- static const arg_def_t summaryarg = ARG_DEF(NULL, "summary", 0,
- "Show timing summary");
--static const arg_def_t outputfile = ARG_DEF("o", "output-raw-file", 1,
-+static const arg_def_t outputfile = ARG_DEF("o", "output", 1,
- "Output raw yv12 file instead of images");
-+static const arg_def_t usey4marg = ARG_DEF("y", "y4m", 0,
-+ "Output file is YUV4MPEG2");
- static const arg_def_t threadsarg = ARG_DEF("t", "threads", 1,
- "Max threads to use");
- static const arg_def_t quietarg = ARG_DEF("q", "quiet", 0,
-@@ -77,7 +80,7 @@ static const arg_def_t *all_args[] =
- {
- &codecarg, &prefixarg, &use_yv12, &use_i420, &flipuvarg, &noblitarg,
- &progressarg, &limitarg, &postprocarg, &summaryarg, &outputfile,
-- &threadsarg, &quietarg,
-+ &usey4marg, &threadsarg, &quietarg,
- #if CONFIG_MD5
- &md5arg,
- #endif
-@@ -232,9 +235,9 @@ void *out_open(const char *out_fn, int do_md5)
- if (do_md5)
- {
- #if CONFIG_MD5
-- md5_ctx_t *md5_ctx = out = malloc(sizeof(md5_ctx_t));
-+ MD5Context *md5_ctx = out = malloc(sizeof(MD5Context));
- (void)out_fn;
-- md5_init(md5_ctx);
-+ MD5Init(md5_ctx);
- #endif
- }
- else
-@@ -256,7 +259,7 @@ void out_put(void *out, const uint8_t *buf, unsigned int len, int do_md5)
- if (do_md5)
- {
- #if CONFIG_MD5
-- md5_update(out, buf, len);
-+ MD5Update(out, buf, len);
- #endif
- }
- else
-@@ -273,7 +276,7 @@ void out_close(void *out, const char *out_fn, int do_md5)
- uint8_t md5[16];
- int i;
-
-- md5_finalize(out, md5);
-+ MD5Final(md5, out);
- free(out);
-
- for (i = 0; i < 16; i++)
-@@ -288,7 +291,12 @@ void out_close(void *out, const char *out_fn, int do_md5)
- }
- }
-
--unsigned int file_is_ivf(FILE *infile, unsigned int *fourcc)
-+unsigned int file_is_ivf(FILE *infile,
-+ unsigned int *fourcc,
-+ unsigned int *width,
-+ unsigned int *height,
-+ unsigned int *timebase_num,
-+ unsigned int *timebase_den)
- {
- char raw_hdr[32];
- int is_ivf = 0;
-@@ -305,6 +313,10 @@ unsigned int file_is_ivf(FILE *infile, unsigned int *fourcc)
- " decode properly.");
-
- *fourcc = mem_get_le32(raw_hdr + 8);
-+ *width = mem_get_le16(raw_hdr + 12);
-+ *height = mem_get_le16(raw_hdr + 14);
-+ *timebase_den = mem_get_le32(raw_hdr + 16);
-+ *timebase_num = mem_get_le32(raw_hdr + 20);
- }
- }
-
-@@ -330,6 +342,11 @@ int main(int argc, const char **argv_)
- struct arg arg;
- char **argv, **argi, **argj;
- const char *fn2 = 0;
-+ int use_y4m = 0;
-+ unsigned int width;
-+ unsigned int height;
-+ unsigned int timebase_num;
-+ unsigned int timebase_den;
- void *out = NULL;
- vpx_codec_dec_cfg_t cfg = {0};
- #if CONFIG_VP8_DECODER
-@@ -361,6 +378,8 @@ int main(int argc, const char **argv_)
- }
- else if (arg_match(&arg, &outputfile, argi))
- fn2 = arg.val;
-+ else if (arg_match(&arg, &usey4marg, argi))
-+ use_y4m = 1;
- else if (arg_match(&arg, &prefixarg, argi))
- prefix = strdup(arg.val);
- else if (arg_match(&arg, &use_yv12, argi))
-@@ -446,10 +465,31 @@ int main(int argc, const char **argv_)
- if (fn2)
- out = out_open(fn2, do_md5);
-
-- is_ivf = file_is_ivf(infile, &fourcc);
-+ is_ivf = file_is_ivf(infile, &fourcc, &width, &height,
-+ &timebase_num, &timebase_den);
-
- if (is_ivf)
- {
-+ if (use_y4m)
-+ {
-+ char buffer[128];
-+ if (!fn2)
-+ {
-+ fprintf(stderr, "YUV4MPEG2 output only supported with -o.\n");
-+ return EXIT_FAILURE;
-+ }
-+ /*Correct for the factor of 2 applied to the timebase in the
-+ encoder.*/
-+ if(timebase_den&1)timebase_num<<=1;
-+ else timebase_den>>=1;
-+ /*Note: We can't output an aspect ratio here because IVF doesn't
-+ store one, and neither does VP8.
-+ That will have to wait until these tools support WebM natively.*/
-+ sprintf(buffer, "YUV4MPEG2 C%s W%u H%u F%u:%u I%c\n",
-+ "420jpeg", width, height, timebase_den, timebase_num, 'p');
-+ out_put(out, (unsigned char *)buffer, strlen(buffer), do_md5);
-+ }
-+
- /* Try to determine the codec from the fourcc. */
- for (i = 0; i < sizeof(ifaces) / sizeof(ifaces[0]); i++)
- if ((fourcc & ifaces[i].fourcc_mask) == ifaces[i].fourcc)
-@@ -465,6 +505,11 @@ int main(int argc, const char **argv_)
- break;
- }
- }
-+ else if(use_y4m)
-+ {
-+ fprintf(stderr, "YUV4MPEG2 output only supported from IVF input.\n");
-+ return EXIT_FAILURE;
-+ }
-
- if (vpx_codec_dec_init(&decoder, iface ? iface : ifaces[0].iface, &cfg,
- postproc ? VPX_CODEC_USE_POSTPROC : 0))
-@@ -533,29 +578,31 @@ int main(int argc, const char **argv_)
- prefix, img->d_w, img->d_h, frame_in, sfx);
- out = out_open(out_fn, do_md5);
- }
-+ else if(use_y4m)
-+ out_put(out, (unsigned char *)"FRAME\n", 6, do_md5);
-
-- buf = img->planes[PLANE_Y];
-+ buf = img->planes[VPX_PLANE_Y];
-
- for (y = 0; y < img->d_h; y++)
- {
- out_put(out, buf, img->d_w, do_md5);
-- buf += img->stride[PLANE_Y];
-+ buf += img->stride[VPX_PLANE_Y];
- }
-
-- buf = img->planes[flipuv?PLANE_V:PLANE_U];
-+ buf = img->planes[flipuv?VPX_PLANE_V:VPX_PLANE_U];
-
- for (y = 0; y < (1 + img->d_h) / 2; y++)
- {
- out_put(out, buf, (1 + img->d_w) / 2, do_md5);
-- buf += img->stride[PLANE_U];
-+ buf += img->stride[VPX_PLANE_U];
- }
-
-- buf = img->planes[flipuv?PLANE_U:PLANE_V];
-+ buf = img->planes[flipuv?VPX_PLANE_U:VPX_PLANE_V];
-
- for (y = 0; y < (1 + img->d_h) / 2; y++)
- {
- out_put(out, buf, (1 + img->d_w) / 2, do_md5);
-- buf += img->stride[PLANE_V];
-+ buf += img->stride[VPX_PLANE_V];
- }
-
- if (!fn2)
-diff --git a/ivfenc.c b/ivfenc.c
-index bef3d58..11f2a8f 100644
---- a/ivfenc.c
-+++ b/ivfenc.c
-@@ -1,23 +1,28 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
- /* This is a simple program that encodes YV12 files and generates ivf
- * files using the new interface.
- */
--#define USE_POSIX_MMAP HAVE_SYS_MMAN_H
-+#if defined(_WIN32)
-+#define USE_POSIX_MMAP 0
-+#else
-+#define USE_POSIX_MMAP 1
-+#endif
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdarg.h>
- #include <string.h>
--#include "vpx_encoder.h"
-+#include "vpx/vpx_encoder.h"
- #if USE_POSIX_MMAP
- #include <sys/types.h>
- #include <sys/stat.h>
-@@ -25,11 +30,10 @@
- #include <fcntl.h>
- #include <unistd.h>
- #endif
--#if CONFIG_VP8_ENCODER
--#include "vp8cx.h"
--#endif
-+#include "vpx/vp8cx.h"
- #include "vpx_ports/mem_ops.h"
- #include "vpx_ports/vpx_timer.h"
-+#include "y4minput.h"
-
- static const char *exec_name;
-
-@@ -51,8 +55,8 @@ void die(const char *fmt, ...)
- {
- va_list ap;
- va_start(ap, fmt);
-- vprintf(fmt, ap);
-- printf("\n");
-+ vfprintf(stderr, fmt, ap);
-+ fprintf(stderr, "\n");
- usage_exit();
- }
-
-@@ -62,10 +66,10 @@ static void ctx_exit_on_error(vpx_codec_ctx_t *ctx, const char *s)
- {
- const char *detail = vpx_codec_error_detail(ctx);
-
-- printf("%s: %s\n", s, vpx_codec_error(ctx));
-+ fprintf(stderr, "%s: %s\n", s, vpx_codec_error(ctx));
-
- if (detail)
-- printf(" %s\n", detail);
-+ fprintf(stderr, " %s\n", detail);
-
- exit(EXIT_FAILURE);
- }
-@@ -215,49 +219,79 @@ vpx_fixed_buf_t stats_get(stats_io_t *stats)
- return stats->buf;
- }
-
-+enum video_file_type
-+{
-+ FILE_TYPE_RAW,
-+ FILE_TYPE_IVF,
-+ FILE_TYPE_Y4M
-+};
-+
-+struct detect_buffer {
-+ char buf[4];
-+ int valid;
-+};
-+
-+
- #define IVF_FRAME_HDR_SZ (4+8) /* 4 byte size + 8 byte timestamp */
--static int read_frame(FILE *f, vpx_image_t *img, unsigned int is_ivf)
-+static int read_frame(FILE *f, vpx_image_t *img, unsigned int file_type,
-+ y4m_input *y4m, struct detect_buffer *detect)
- {
- int plane = 0;
-
-- if (is_ivf)
-+ if (file_type == FILE_TYPE_Y4M)
- {
-- char junk[IVF_FRAME_HDR_SZ];
--
-- /* Skip the frame header. We know how big the frame should be. See
-- * write_ivf_frame_header() for documentation on the frame header
-- * layout.
-- */
-- fread(junk, 1, IVF_FRAME_HDR_SZ, f);
-+ if (y4m_input_fetch_frame(y4m, f, img) < 0)
-+ return 0;
- }
--
-- for (plane = 0; plane < 3; plane++)
-+ else
- {
-- unsigned char *ptr;
-- int w = (plane ? (1 + img->d_w) / 2 : img->d_w);
-- int h = (plane ? (1 + img->d_h) / 2 : img->d_h);
-- int r;
--
-- /* Determine the correct plane based on the image format. The for-loop
-- * always counts in Y,U,V order, but this may not match the order of
-- * the data on disk.
-- */
-- switch (plane)
-+ if (file_type == FILE_TYPE_IVF)
- {
-- case 1:
-- ptr = img->planes[img->fmt==IMG_FMT_YV12? PLANE_V : PLANE_U];
-- break;
-- case 2:
-- ptr = img->planes[img->fmt==IMG_FMT_YV12?PLANE_U : PLANE_V];
-- break;
-- default:
-- ptr = img->planes[plane];
-+ char junk[IVF_FRAME_HDR_SZ];
-+
-+ /* Skip the frame header. We know how big the frame should be. See
-+ * write_ivf_frame_header() for documentation on the frame header
-+ * layout.
-+ */
-+ fread(junk, 1, IVF_FRAME_HDR_SZ, f);
- }
-
-- for (r = 0; r < h; r++)
-+ for (plane = 0; plane < 3; plane++)
- {
-- fread(ptr, 1, w, f);
-- ptr += img->stride[plane];
-+ unsigned char *ptr;
-+ int w = (plane ? (1 + img->d_w) / 2 : img->d_w);
-+ int h = (plane ? (1 + img->d_h) / 2 : img->d_h);
-+ int r;
-+
-+ /* Determine the correct plane based on the image format. The for-loop
-+ * always counts in Y,U,V order, but this may not match the order of
-+ * the data on disk.
-+ */
-+ switch (plane)
-+ {
-+ case 1:
-+ ptr = img->planes[img->fmt==VPX_IMG_FMT_YV12? VPX_PLANE_V : VPX_PLANE_U];
-+ break;
-+ case 2:
-+ ptr = img->planes[img->fmt==VPX_IMG_FMT_YV12?VPX_PLANE_U : VPX_PLANE_V];
-+ break;
-+ default:
-+ ptr = img->planes[plane];
-+ }
-+
-+ for (r = 0; r < h; r++)
-+ {
-+ if (detect->valid)
-+ {
-+ memcpy(ptr, detect->buf, 4);
-+ fread(ptr+4, 1, w-4, f);
-+ detect->valid = 0;
-+ }
-+ else
-+ fread(ptr, 1, w, f);
-+
-+ ptr += img->stride[plane];
-+ }
- }
- }
-
-@@ -265,22 +299,36 @@ static int read_frame(FILE *f, vpx_image_t *img, unsigned int is_ivf)
- }
-
-
-+unsigned int file_is_y4m(FILE *infile,
-+ y4m_input *y4m,
-+ char detect[4])
-+{
-+ if(memcmp(detect, "YUV4", 4) == 0)
-+ {
-+ return 1;
-+ }
-+ return 0;
-+}
-+
- #define IVF_FILE_HDR_SZ (32)
- unsigned int file_is_ivf(FILE *infile,
- unsigned int *fourcc,
- unsigned int *width,
-- unsigned int *height)
-+ unsigned int *height,
-+ char detect[4])
- {
- char raw_hdr[IVF_FILE_HDR_SZ];
- int is_ivf = 0;
-
-+ if(memcmp(detect, "DKIF", 4) != 0)
-+ return 0;
-+
- /* See write_ivf_file_header() for more documentation on the file header
- * layout.
- */
-- if (fread(raw_hdr, 1, IVF_FILE_HDR_SZ, infile) == IVF_FILE_HDR_SZ)
-+ if (fread(raw_hdr + 4, 1, IVF_FILE_HDR_SZ - 4, infile)
-+ == IVF_FILE_HDR_SZ - 4)
- {
-- if (raw_hdr[0] == 'D' && raw_hdr[1] == 'K'
-- && raw_hdr[2] == 'I' && raw_hdr[3] == 'F')
- {
- is_ivf = 1;
-
-@@ -297,8 +345,6 @@ unsigned int file_is_ivf(FILE *infile,
- *width = mem_get_le16(raw_hdr + 12);
- *height = mem_get_le16(raw_hdr + 14);
- }
-- else
-- rewind(infile);
-
- return is_ivf;
- }
-@@ -512,28 +558,28 @@ static void usage_exit()
- {
- int i;
-
-- printf("Usage: %s <options> src_filename dst_filename\n", exec_name);
-+ fprintf(stderr, "Usage: %s <options> src_filename dst_filename\n", exec_name);
-
-- printf("\n_options:\n");
-+ fprintf(stderr, "\n_options:\n");
- arg_show_usage(stdout, main_args);
-- printf("\n_encoder Global Options:\n");
-+ fprintf(stderr, "\n_encoder Global Options:\n");
- arg_show_usage(stdout, global_args);
-- printf("\n_rate Control Options:\n");
-+ fprintf(stderr, "\n_rate Control Options:\n");
- arg_show_usage(stdout, rc_args);
-- printf("\n_twopass Rate Control Options:\n");
-+ fprintf(stderr, "\n_twopass Rate Control Options:\n");
- arg_show_usage(stdout, rc_twopass_args);
-- printf("\n_keyframe Placement Options:\n");
-+ fprintf(stderr, "\n_keyframe Placement Options:\n");
- arg_show_usage(stdout, kf_args);
- #if CONFIG_VP8_ENCODER
-- printf("\n_vp8 Specific Options:\n");
-+ fprintf(stderr, "\n_vp8 Specific Options:\n");
- arg_show_usage(stdout, vp8_args);
- #endif
-- printf("\n"
-+ fprintf(stderr, "\n"
- "Included encoders:\n"
- "\n");
-
- for (i = 0; i < sizeof(codecs) / sizeof(codecs[0]); i++)
-- printf(" %-6s - %s\n",
-+ fprintf(stderr, " %-6s - %s\n",
- codecs[i].name,
- vpx_codec_iface_name(codecs[i].iface));
-
-@@ -566,8 +612,10 @@ int main(int argc, const char **argv_)
- static const int *ctrl_args_map = NULL;
- int verbose = 0, show_psnr = 0;
- int arg_use_i420 = 1;
-+ int arg_have_timebase = 0;
- unsigned long cx_time = 0;
-- unsigned int is_ivf, fourcc;
-+ unsigned int file_type, fourcc;
-+ y4m_input y4m;
-
- exec_name = argv_[0];
-
-@@ -651,7 +699,7 @@ int main(int argc, const char **argv_)
- /* DWIM: Assume the user meant passes=2 if pass=2 is specified */
- if (one_pass_only > arg_passes)
- {
-- printf("Warning: Assuming --pass=%d implies --passes=%d\n",
-+ fprintf(stderr, "Warning: Assuming --pass=%d implies --passes=%d\n",
- one_pass_only, one_pass_only);
- arg_passes = one_pass_only;
- }
-@@ -665,7 +713,8 @@ int main(int argc, const char **argv_)
-
- if (res)
- {
-- printf("Failed to get config: %s\n", vpx_codec_err_to_string(res));
-+ fprintf(stderr, "Failed to get config: %s\n",
-+ vpx_codec_err_to_string(res));
- return EXIT_FAILURE;
- }
-
-@@ -684,7 +733,10 @@ int main(int argc, const char **argv_)
- else if (arg_match(&arg, &height, argi))
- cfg.g_h = arg_parse_uint(&arg);
- else if (arg_match(&arg, &timebase, argi))
-+ {
- cfg.g_timebase = arg_parse_rational(&arg);
-+ arg_have_timebase = 1;
-+ }
- else if (arg_match(&arg, &error_resilient, argi))
- cfg.g_error_resilient = arg_parse_uint(&arg);
- else if (arg_match(&arg, &lag_in_frames, argi))
-@@ -722,24 +774,27 @@ int main(int argc, const char **argv_)
- cfg.rc_2pass_vbr_bias_pct = arg_parse_uint(&arg);
-
- if (arg_passes < 2)
-- printf("Warning: option %s ignored in one-pass mode.\n",
-- arg.name);
-+ fprintf(stderr,
-+ "Warning: option %s ignored in one-pass mode.\n",
-+ arg.name);
- }
- else if (arg_match(&arg, &minsection_pct, argi))
- {
- cfg.rc_2pass_vbr_minsection_pct = arg_parse_uint(&arg);
-
- if (arg_passes < 2)
-- printf("Warning: option %s ignored in one-pass mode.\n",
-- arg.name);
-+ fprintf(stderr,
-+ "Warning: option %s ignored in one-pass mode.\n",
-+ arg.name);
- }
- else if (arg_match(&arg, &maxsection_pct, argi))
- {
- cfg.rc_2pass_vbr_maxsection_pct = arg_parse_uint(&arg);
-
- if (arg_passes < 2)
-- printf("Warning: option %s ignored in one-pass mode.\n",
-- arg.name);
-+ fprintf(stderr,
-+ "Warning: option %s ignored in one-pass mode.\n",
-+ arg.name);
- }
- else if (arg_match(&arg, &kf_min_dist, argi))
- cfg.kf_min_dist = arg_parse_uint(&arg);
-@@ -787,7 +842,7 @@ int main(int argc, const char **argv_)
-
- /* Check for unrecognized options */
- for (argi = argv; *argi; argi++)
-- if (argi[0][0] == '-')
-+ if (argi[0][0] == '-' && argi[0][1])
- die("Error: Unrecognized option %s\n", *argi);
-
- /* Handle non-option arguments */
-@@ -797,106 +852,134 @@ int main(int argc, const char **argv_)
- if (!in_fn || !out_fn)
- usage_exit();
-
-- /* Parse certain options from the input file, if possible */
-- infile = fopen(in_fn, "rb");
--
-- if (!infile)
-- {
-- printf("Failed to open input file");
-- return EXIT_FAILURE;
-- }
--
-- is_ivf = file_is_ivf(infile, &fourcc, &cfg.g_w, &cfg.g_h);
--
-- if (is_ivf)
-- {
-- switch (fourcc)
-- {
-- case 0x32315659:
-- arg_use_i420 = 0;
-- break;
-- case 0x30323449:
-- arg_use_i420 = 1;
-- break;
-- default:
-- printf("Unsupported fourcc (%08x) in IVF\n", fourcc);
-- return EXIT_FAILURE;
-- }
-- }
--
-- fclose(infile);
--
--
--#define SHOW(field) printf(" %-28s = %d\n", #field, cfg.field)
--
-- if (verbose)
-- {
-- printf("Codec: %s\n", vpx_codec_iface_name(codec->iface));
-- printf("Source file: %s Format: %s\n", in_fn, arg_use_i420 ? "I420" : "YV12");
-- printf("Destination file: %s\n", out_fn);
-- printf("Encoder parameters:\n");
--
-- SHOW(g_usage);
-- SHOW(g_threads);
-- SHOW(g_profile);
-- SHOW(g_w);
-- SHOW(g_h);
-- SHOW(g_timebase.num);
-- SHOW(g_timebase.den);
-- SHOW(g_error_resilient);
-- SHOW(g_pass);
-- SHOW(g_lag_in_frames);
-- SHOW(rc_dropframe_thresh);
-- SHOW(rc_resize_allowed);
-- SHOW(rc_resize_up_thresh);
-- SHOW(rc_resize_down_thresh);
-- SHOW(rc_end_usage);
-- SHOW(rc_target_bitrate);
-- SHOW(rc_min_quantizer);
-- SHOW(rc_max_quantizer);
-- SHOW(rc_undershoot_pct);
-- SHOW(rc_overshoot_pct);
-- SHOW(rc_buf_sz);
-- SHOW(rc_buf_initial_sz);
-- SHOW(rc_buf_optimal_sz);
-- SHOW(rc_2pass_vbr_bias_pct);
-- SHOW(rc_2pass_vbr_minsection_pct);
-- SHOW(rc_2pass_vbr_maxsection_pct);
-- SHOW(kf_mode);
-- SHOW(kf_min_dist);
-- SHOW(kf_max_dist);
-- }
--
-- vpx_img_alloc(&raw, arg_use_i420 ? IMG_FMT_I420 : IMG_FMT_YV12,
-- cfg.g_w, cfg.g_h, 1);
--
-- // This was added so that ivfenc will create monotically increasing
-- // timestamps. Since we create new timestamps for alt-reference frames
-- // we need to make room in the series of timestamps. Since there can
-- // only be 1 alt-ref frame ( current bitstream) multiplying by 2
-- // gives us enough room.
-- cfg.g_timebase.den *= 2;
--
- memset(&stats, 0, sizeof(stats));
-
- for (pass = one_pass_only ? one_pass_only - 1 : 0; pass < arg_passes; pass++)
- {
- int frames_in = 0, frames_out = 0;
- unsigned long nbytes = 0;
-+ struct detect_buffer detect;
-
-- infile = fopen(in_fn, "rb");
-+ /* Parse certain options from the input file, if possible */
-+ infile = strcmp(in_fn, "-") ? fopen(in_fn, "rb") : stdin;
-
- if (!infile)
- {
-- printf("Failed to open input file");
-+ fprintf(stderr, "Failed to open input file\n");
- return EXIT_FAILURE;
- }
-
-- outfile = fopen(out_fn, "wb");
-+ fread(detect.buf, 1, 4, infile);
-+ detect.valid = 0;
-+
-+ if (file_is_y4m(infile, &y4m, detect.buf))
-+ {
-+ if (y4m_input_open(&y4m, infile, detect.buf, 4) >= 0)
-+ {
-+ file_type = FILE_TYPE_Y4M;
-+ cfg.g_w = y4m.pic_w;
-+ cfg.g_h = y4m.pic_h;
-+ /* Use the frame rate from the file only if none was specified
-+ * on the command-line.
-+ */
-+ if (!arg_have_timebase)
-+ {
-+ cfg.g_timebase.num = y4m.fps_d;
-+ cfg.g_timebase.den = y4m.fps_n;
-+ }
-+ arg_use_i420 = 0;
-+ }
-+ else
-+ {
-+ fprintf(stderr, "Unsupported Y4M stream.\n");
-+ return EXIT_FAILURE;
-+ }
-+ }
-+ else if (file_is_ivf(infile, &fourcc, &cfg.g_w, &cfg.g_h, detect.buf))
-+ {
-+ file_type = FILE_TYPE_IVF;
-+ switch (fourcc)
-+ {
-+ case 0x32315659:
-+ arg_use_i420 = 0;
-+ break;
-+ case 0x30323449:
-+ arg_use_i420 = 1;
-+ break;
-+ default:
-+ fprintf(stderr, "Unsupported fourcc (%08x) in IVF\n", fourcc);
-+ return EXIT_FAILURE;
-+ }
-+ }
-+ else
-+ {
-+ file_type = FILE_TYPE_RAW;
-+ detect.valid = 1;
-+ }
-+#define SHOW(field) fprintf(stderr, " %-28s = %d\n", #field, cfg.field)
-+
-+ if (verbose && pass == 0)
-+ {
-+ fprintf(stderr, "Codec: %s\n", vpx_codec_iface_name(codec->iface));
-+ fprintf(stderr, "Source file: %s Format: %s\n", in_fn,
-+ arg_use_i420 ? "I420" : "YV12");
-+ fprintf(stderr, "Destination file: %s\n", out_fn);
-+ fprintf(stderr, "Encoder parameters:\n");
-+
-+ SHOW(g_usage);
-+ SHOW(g_threads);
-+ SHOW(g_profile);
-+ SHOW(g_w);
-+ SHOW(g_h);
-+ SHOW(g_timebase.num);
-+ SHOW(g_timebase.den);
-+ SHOW(g_error_resilient);
-+ SHOW(g_pass);
-+ SHOW(g_lag_in_frames);
-+ SHOW(rc_dropframe_thresh);
-+ SHOW(rc_resize_allowed);
-+ SHOW(rc_resize_up_thresh);
-+ SHOW(rc_resize_down_thresh);
-+ SHOW(rc_end_usage);
-+ SHOW(rc_target_bitrate);
-+ SHOW(rc_min_quantizer);
-+ SHOW(rc_max_quantizer);
-+ SHOW(rc_undershoot_pct);
-+ SHOW(rc_overshoot_pct);
-+ SHOW(rc_buf_sz);
-+ SHOW(rc_buf_initial_sz);
-+ SHOW(rc_buf_optimal_sz);
-+ SHOW(rc_2pass_vbr_bias_pct);
-+ SHOW(rc_2pass_vbr_minsection_pct);
-+ SHOW(rc_2pass_vbr_maxsection_pct);
-+ SHOW(kf_mode);
-+ SHOW(kf_min_dist);
-+ SHOW(kf_max_dist);
-+ }
-+
-+ if(pass == (one_pass_only ? one_pass_only - 1 : 0)) {
-+ if (file_type == FILE_TYPE_Y4M)
-+ /*The Y4M reader does its own allocation.
-+ Just initialize this here to avoid problems if we never read any
-+ frames.*/
-+ memset(&raw, 0, sizeof(raw));
-+ else
-+ vpx_img_alloc(&raw, arg_use_i420 ? VPX_IMG_FMT_I420 : VPX_IMG_FMT_YV12,
-+ cfg.g_w, cfg.g_h, 1);
-+
-+ // This was added so that ivfenc will create monotically increasing
-+ // timestamps. Since we create new timestamps for alt-reference frames
-+ // we need to make room in the series of timestamps. Since there can
-+ // only be 1 alt-ref frame ( current bitstream) multiplying by 2
-+ // gives us enough room.
-+ cfg.g_timebase.den *= 2;
-+ }
-+
-+ outfile = strcmp(out_fn, "-") ? fopen(out_fn, "wb") : stdout;
-
- if (!outfile)
- {
-- printf("Failed to open output file");
-+ fprintf(stderr, "Failed to open output file\n");
- return EXIT_FAILURE;
- }
-
-@@ -904,7 +987,7 @@ int main(int argc, const char **argv_)
- {
- if (!stats_open_file(&stats, stats_fn, pass))
- {
-- printf("Failed to open statistics store\n");
-+ fprintf(stderr, "Failed to open statistics store\n");
- return EXIT_FAILURE;
- }
- }
-@@ -912,7 +995,7 @@ int main(int argc, const char **argv_)
- {
- if (!stats_open_mem(&stats, pass))
- {
-- printf("Failed to open statistics store\n");
-+ fprintf(stderr, "Failed to open statistics store\n");
- return EXIT_FAILURE;
- }
- }
-@@ -947,8 +1030,8 @@ int main(int argc, const char **argv_)
- for (i = 0; i < arg_ctrl_cnt; i++)
- {
- if (vpx_codec_control_(&encoder, arg_ctrls[i][0], arg_ctrls[i][1]))
-- printf("Error: Tried to set control %d = %d\n",
-- arg_ctrls[i][0], arg_ctrls[i][1]);
-+ fprintf(stderr, "Error: Tried to set control %d = %d\n",
-+ arg_ctrls[i][0], arg_ctrls[i][1]);
-
- ctx_exit_on_error(&encoder, "Failed to control codec");
- }
-@@ -964,13 +1047,15 @@ int main(int argc, const char **argv_)
-
- if (!arg_limit || frames_in < arg_limit)
- {
-- frame_avail = read_frame(infile, &raw, is_ivf);
-+ frame_avail = read_frame(infile, &raw, file_type, &y4m,
-+ &detect);
-
- if (frame_avail)
- frames_in++;
-
-- printf("\rPass %d/%d frame %4d/%-4d %7ldB \033[K", pass + 1,
-- arg_passes, frames_in, frames_out, nbytes);
-+ fprintf(stderr,
-+ "\rPass %d/%d frame %4d/%-4d %7ldB \033[K", pass + 1,
-+ arg_passes, frames_in, frames_out, nbytes);
- }
- else
- frame_avail = 0;
-@@ -989,24 +1074,25 @@ int main(int argc, const char **argv_)
- while ((pkt = vpx_codec_get_cx_data(&encoder, &iter)))
- {
- got_data = 1;
-- nbytes += pkt->data.raw.sz;
-
- switch (pkt->kind)
- {
- case VPX_CODEC_CX_FRAME_PKT:
- frames_out++;
-- printf(" %6luF",
-- (unsigned long)pkt->data.frame.sz);
-+ fprintf(stderr, " %6luF",
-+ (unsigned long)pkt->data.frame.sz);
- write_ivf_frame_header(outfile, pkt);
- fwrite(pkt->data.frame.buf, 1, pkt->data.frame.sz, outfile);
-+ nbytes += pkt->data.raw.sz;
- break;
- case VPX_CODEC_STATS_PKT:
- frames_out++;
-- printf(" %6luS",
-+ fprintf(stderr, " %6luS",
- (unsigned long)pkt->data.twopass_stats.sz);
- stats_write(&stats,
- pkt->data.twopass_stats.buf,
- pkt->data.twopass_stats.sz);
-+ nbytes += pkt->data.raw.sz;
- break;
- case VPX_CODEC_PSNR_PKT:
-
-@@ -1015,7 +1101,7 @@ int main(int argc, const char **argv_)
- int i;
-
- for (i = 0; i < 4; i++)
-- printf("%.3lf ", pkt->data.psnr.psnr[i]);
-+ fprintf(stderr, "%.3lf ", pkt->data.psnr.psnr[i]);
- }
-
- break;
-@@ -1030,10 +1116,11 @@ int main(int argc, const char **argv_)
- /* this bitrate calc is simplified and relies on the fact that this
- * application uses 1/timebase for framerate.
- */
-- printf("\rPass %d/%d frame %4d/%-4d %7ldB %7ldb/f %7"PRId64"b/s"
-+ fprintf(stderr,
-+ "\rPass %d/%d frame %4d/%-4d %7ldB %7ldb/f %7"PRId64"b/s"
- " %7lu %s (%.2f fps)\033[K", pass + 1,
- arg_passes, frames_in, frames_out, nbytes, nbytes * 8 / frames_in,
-- nbytes * 8 *(int64_t)cfg.g_timebase.den / cfg.g_timebase.num / frames_in,
-+ nbytes * 8 *(int64_t)cfg.g_timebase.den/2/ cfg.g_timebase.num / frames_in,
- cx_time > 9999999 ? cx_time / 1000 : cx_time,
- cx_time > 9999999 ? "ms" : "us",
- (float)frames_in * 1000000.0 / (float)cx_time);
-@@ -1047,7 +1134,7 @@ int main(int argc, const char **argv_)
-
- fclose(outfile);
- stats_close(&stats);
-- printf("\n");
-+ fprintf(stderr, "\n");
-
- if (one_pass_only)
- break;
-diff --git a/libs.doxy_template b/libs.doxy_template
-index eb37dfc..ce8fde6 100644
---- a/libs.doxy_template
-+++ b/libs.doxy_template
-@@ -1,10 +1,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
--##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+##
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/libs.mk b/libs.mk
-index f741dba..115ceb5 100644
---- a/libs.mk
-+++ b/libs.mk
-@@ -1,17 +1,18 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
- ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm)
-
--include $(SRC_PATH_BARE)/vpx_codec/vpx_codec.mk
--CODEC_SRCS-yes += $(addprefix vpx_codec/,$(call enabled,API_SRCS))
-+include $(SRC_PATH_BARE)/vpx/vpx_codec.mk
-+CODEC_SRCS-yes += $(addprefix vpx/,$(call enabled,API_SRCS))
-
- include $(SRC_PATH_BARE)/vpx_mem/vpx_mem.mk
- CODEC_SRCS-yes += $(addprefix vpx_mem/,$(call enabled,MEM_SRCS))
-@@ -19,18 +20,16 @@ CODEC_SRCS-yes += $(addprefix vpx_mem/,$(call enabled,MEM_SRCS))
- include $(SRC_PATH_BARE)/vpx_scale/vpx_scale.mk
- CODEC_SRCS-yes += $(addprefix vpx_scale/,$(call enabled,SCALE_SRCS))
-
--# Add vpx_codec/ to the include path to allow vp_n[cd]x.h to reference
--# vpx_codec_impl_*.h without extra ifdeffery
--CFLAGS += -I$(SRC_PATH_BARE)/vpx_codec
-
- ifeq ($(CONFIG_VP8_ENCODER),yes)
- VP8_PREFIX=vp8/
- include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8cx.mk
- CODEC_SRCS-yes += $(addprefix $(VP8_PREFIX),$(call enabled,VP8_CX_SRCS))
- CODEC_EXPORTS-yes += $(addprefix $(VP8_PREFIX),$(VP8_CX_EXPORTS))
-- CODEC_SRCS-yes += $(VP8_PREFIX)vp8cx.mk
-- INSTALL_MAPS += include/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
-- CODEC_DOC_SRCS += vp8/vp8.h vp8/vp8cx.h
-+ CODEC_SRCS-yes += $(VP8_PREFIX)vp8cx.mk vpx/vp8.h vpx/vp8cx.h vpx/vp8e.h
-+ INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8e.h include/vpx/vp8cx.h
-+ INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
-+ CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8cx.h
- CODEC_DOC_SECTIONS += vp8 vp8_encoder
- endif
-
-@@ -39,9 +38,10 @@ ifeq ($(CONFIG_VP8_DECODER),yes)
- include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8dx.mk
- CODEC_SRCS-yes += $(addprefix $(VP8_PREFIX),$(call enabled,VP8_DX_SRCS))
- CODEC_EXPORTS-yes += $(addprefix $(VP8_PREFIX),$(VP8_DX_EXPORTS))
-- CODEC_SRCS-yes += $(VP8_PREFIX)vp8dx.mk
-- INSTALL_MAPS += include/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
-- CODEC_DOC_SRCS += vp8/vp8.h vp8/vp8dx.h
-+ CODEC_SRCS-yes += $(VP8_PREFIX)vp8dx.mk vpx/vp8.h vpx/vp8dx.h
-+ INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8dx.h
-+ INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
-+ CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8dx.h
- CODEC_DOC_SECTIONS += vp8 vp8_decoder
- endif
-
-@@ -64,13 +64,13 @@ endif
-
- # The following pairs define a mapping of locations in the distribution
- # tree to locations in the source/build trees.
--INSTALL_MAPS += include/% $(SRC_PATH_BARE)/vpx_codec/%
--INSTALL_MAPS += include/% $(SRC_PATH_BARE)/vpx_ports/%
--INSTALL_MAPS += lib/% %
-+INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/vpx/%
-+INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/vpx_ports/%
-+INSTALL_MAPS += $(LIBSUBDIR)/% %
- INSTALL_MAPS += src/% $(SRC_PATH_BARE)/%
- ifeq ($(CONFIG_MSVS),yes)
--INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),lib/$(p)/% $(p)/Release/%)
--INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),lib/$(p)/% $(p)/Debug/%)
-+INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/% $(p)/Release/%)
-+INSTALL_MAPS += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/% $(p)/Debug/%)
- endif
-
- # If this is a universal (fat) binary, then all the subarchitectures have
-@@ -81,7 +81,7 @@ endif
- $(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_LIBVPX,BUILD_LIBVPX):=yes)
-
- CODEC_SRCS-$(BUILD_LIBVPX) += build/make/version.sh
--CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/vpx_integer.h
-+CODEC_SRCS-$(BUILD_LIBVPX) += vpx/vpx_integer.h
- CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/vpx_timer.h
- CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/mem.h
- CODEC_SRCS-$(BUILD_LIBVPX) += $(BUILD_PFX)vpx_config.c
-@@ -92,26 +92,28 @@ CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86.h
- CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_abi_support.asm
- endif
- CODEC_SRCS-$(ARCH_ARM) += $(BUILD_PFX)vpx_config.asm
--CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx_codec/exports
--
--INSTALL-LIBS-yes += include/vpx_codec.h
--INSTALL-LIBS-yes += include/vpx_image.h
--INSTALL-LIBS-yes += include/vpx_integer.h
--INSTALL-LIBS-yes += include/vpx_codec_impl_top.h
--INSTALL-LIBS-yes += include/vpx_codec_impl_bottom.h
--INSTALL-LIBS-$(CONFIG_DECODERS) += include/vpx_decoder.h
--INSTALL-LIBS-$(CONFIG_DECODERS) += include/vpx_decoder_compat.h
--INSTALL-LIBS-$(CONFIG_ENCODERS) += include/vpx_encoder.h
-+CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
-+CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
-+CODEC_EXPORTS-$(CONFIG_DECODERS) += vpx/exports_dec
-+
-+INSTALL-LIBS-yes += include/vpx/vpx_codec.h
-+INSTALL-LIBS-yes += include/vpx/vpx_image.h
-+INSTALL-LIBS-yes += include/vpx/vpx_integer.h
-+INSTALL-LIBS-yes += include/vpx/vpx_codec_impl_top.h
-+INSTALL-LIBS-yes += include/vpx/vpx_codec_impl_bottom.h
-+INSTALL-LIBS-$(CONFIG_DECODERS) += include/vpx/vpx_decoder.h
-+INSTALL-LIBS-$(CONFIG_DECODERS) += include/vpx/vpx_decoder_compat.h
-+INSTALL-LIBS-$(CONFIG_ENCODERS) += include/vpx/vpx_encoder.h
- ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
- ifeq ($(CONFIG_MSVS),yes)
--INSTALL-LIBS-yes += $(foreach p,$(VS_PLATFORMS),lib/$(p)/$(CODEC_LIB).lib)
--INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(foreach p,$(VS_PLATFORMS),lib/$(p)/$(CODEC_LIB)d.lib)
--INSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),lib/$(p)/vpx.dll)
--INSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),lib/$(p)/vpx.exp)
-+INSTALL-LIBS-yes += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/$(CODEC_LIB).lib)
-+INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/$(CODEC_LIB)d.lib)
-+INSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/vpx.dll)
-+INSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/vpx.exp)
- endif
- else
--INSTALL-LIBS-yes += lib/libvpx.a
--INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += lib/libvpx_g.a
-+INSTALL-LIBS-yes += $(LIBSUBDIR)/libvpx.a
-+INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(LIBSUBDIR)/libvpx_g.a
- endif
-
- CODEC_SRCS=$(call enabled,CODEC_SRCS)
-@@ -130,7 +132,6 @@ ARM_ARCH=v6
- endif
- obj_int_extract.vcproj: $(SRC_PATH_BARE)/build/make/obj_int_extract.c
- @cp $(SRC_PATH_BARE)/build/arm-wince-vs8/obj_int_extract.bat .
-- @cp $(SRC_PATH_BARE)/build/arm-wince-vs8/armasm$(ARM_ARCH).rules .
- @echo " [CREATE] $@"
- $(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh\
- --exe\
-@@ -175,6 +176,31 @@ LIBVPX_OBJS=$(call objs,$(CODEC_SRCS))
- OBJS-$(BUILD_LIBVPX) += $(LIBVPX_OBJS)
- LIBS-$(BUILD_LIBVPX) += $(BUILD_PFX)libvpx.a $(BUILD_PFX)libvpx_g.a
- $(BUILD_PFX)libvpx_g.a: $(LIBVPX_OBJS)
-+
-+BUILD_LIBVPX_SO := $(if $(BUILD_LIBVPX),$(CONFIG_SHARED))
-+LIBVPX_SO := libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)
-+LIBS-$(BUILD_LIBVPX_SO) += $(BUILD_PFX)$(LIBVPX_SO)
-+$(BUILD_PFX)$(LIBVPX_SO): $(LIBVPX_OBJS) libvpx.ver
-+$(BUILD_PFX)$(LIBVPX_SO): extralibs += -lm -pthread
-+$(BUILD_PFX)$(LIBVPX_SO): SONAME = libvpx.so.$(VERSION_MAJOR)
-+$(BUILD_PFX)$(LIBVPX_SO): SO_VERSION_SCRIPT = libvpx.ver
-+LIBVPX_SO_SYMLINKS := $(addprefix $(LIBSUBDIR)/, \
-+ libvpx.so libvpx.so.$(VERSION_MAJOR) \
-+ libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR))
-+
-+libvpx.ver: $(call enabled,CODEC_EXPORTS)
-+ @echo " [CREATE] $@"
-+ $(qexec)echo "{ global:" > $@
-+ $(qexec)for f in $?; do awk '{print $$2";"}' < $$f >>$@; done
-+ $(qexec)echo "local: *; };" >> $@
-+CLEAN-OBJS += libvpx.ver
-+
-+$(addprefix $(DIST_DIR)/,$(LIBVPX_SO_SYMLINKS)):
-+ @echo " [LN] $@"
-+ $(qexec)ln -sf $(LIBVPX_SO) $@
-+
-+INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBVPX_SO_SYMLINKS)
-+INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBSUBDIR)/$(LIBVPX_SO)
- endif
-
- LIBS-$(LIPO_LIBVPX) += libvpx.a
-@@ -209,10 +235,10 @@ $(filter %.asm.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
- $(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
- CLEAN-OBJS += $(BUILD_PFX)vpx_version.h
-
--CODEC_DOC_SRCS += vpx_codec/vpx_codec.h \
-- vpx_codec/vpx_decoder.h \
-- vpx_codec/vpx_encoder.h \
-- vpx_codec/vpx_image.h
-+CODEC_DOC_SRCS += vpx/vpx_codec.h \
-+ vpx/vpx_decoder.h \
-+ vpx/vpx_encoder.h \
-+ vpx/vpx_image.h
-
- CLEAN-OBJS += libs.doxy
- DOCS-yes += libs.doxy
-diff --git a/md5_utils.c b/md5_utils.c
-index 16c6f7e..455d9cd 100644
---- a/md5_utils.c
-+++ b/md5_utils.c
-@@ -1,298 +1,253 @@
- /*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ * This code implements the MD5 message-digest algorithm.
-+ * The algorithm is due to Ron Rivest. This code was
-+ * written by Colin Plumb in 1993, no copyright is claimed.
-+ * This code is in the public domain; do with it what you wish.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Equivalent code is available from RSA Data Security, Inc.
-+ * This code has been tested against that, and is equivalent,
-+ * except that you don't need to include two pages of legalese
-+ * with every copy.
-+ *
-+ * To compute the message digest of a chunk of bytes, declare an
-+ * MD5Context structure, pass it to MD5Init, call MD5Update as
-+ * needed on buffers full of bytes, and then call MD5Final, which
-+ * will fill a supplied 16-byte array with the digest.
-+ *
-+ * Changed so as no longer to depend on Colin Plumb's `usual.h' header
-+ * definitions
-+ * - Ian Jackson <ian@chiark.greenend.org.uk>.
-+ * Still in the public domain.
- */
-
-+#include <sys/types.h> /* for stupid systems */
-
--/*
--Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
--rights reserved.
--
--License to copy and use this software is granted provided that it
--is identified as the "RSA Data Security, Inc. MD5 Message-Digest
--Algorithm" in all material mentioning or referencing this software
--or this function.
--
--License is also granted to make and use derivative works provided
--that such works are identified as "derived from the RSA Data
--Security, Inc. MD5 Message-Digest Algorithm" in all material
--mentioning or referencing the derived work.
--
--RSA Data Security, Inc. makes no representations concerning either
--the merchantability of this software or the suitability of this
--software for any particular purpose. It is provided "as is"
--without express or implied warranty of any kind.
--
--These notices must be retained in any copies of any part of this
--documentation and/or software.
--*/
-+#include <string.h> /* for memcpy() */
-
- #include "md5_utils.h"
--#include <string.h>
-
--/* Constants for md5_transform routine.
-- */
--#define S11 7
--#define S12 12
--#define S13 17
--#define S14 22
--#define S21 5
--#define S22 9
--#define S23 14
--#define S24 20
--#define S31 4
--#define S32 11
--#define S33 16
--#define S34 23
--#define S41 6
--#define S42 10
--#define S43 15
--#define S44 21
--
--static void md5_transform(uint32_t state[4], const uint8_t block[64]);
--static void Encode(uint8_t *output, const uint32_t *input, unsigned int len);
--static void Decode(uint32_t *output, const uint8_t *input, unsigned int len);
--#define md5_memset memset
--#define md5_memcpy memcpy
--
--static unsigned char PADDING[64] =
-+void
-+byteSwap(UWORD32 *buf, unsigned words)
- {
-- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
--};
-+ md5byte *p;
-
--/* F, G, H and I are basic MD5 functions.
-- */
--#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
--#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
--#define H(x, y, z) ((x) ^ (y) ^ (z))
--#define I(x, y, z) ((y) ^ ((x) | (~z)))
-+ /* Only swap bytes for big endian machines */
-+ int i = 1;
-
--/* ROTATE_LEFT rotates x left n bits.
-- */
--#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-+ if (*(char *)&i == 1)
-+ return;
-
--/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
--Rotation is separate from addition to prevent recomputation.
-- */
--#define FF(a, b, c, d, x, s, ac) { \
-- (a) += F ((b), (c), (d)) + (x) + (uint32_t)(ac); \
-- (a) = ROTATE_LEFT ((a), (s)); \
-- (a) += (b); \
-- }
--#define GG(a, b, c, d, x, s, ac) { \
-- (a) += G ((b), (c), (d)) + (x) + (uint32_t)(ac); \
-- (a) = ROTATE_LEFT ((a), (s)); \
-- (a) += (b); \
-- }
--#define HH(a, b, c, d, x, s, ac) { \
-- (a) += H ((b), (c), (d)) + (x) + (uint32_t)(ac); \
-- (a) = ROTATE_LEFT ((a), (s)); \
-- (a) += (b); \
-- }
--#define II(a, b, c, d, x, s, ac) { \
-- (a) += I ((b), (c), (d)) + (x) + (uint32_t)(ac); \
-- (a) = ROTATE_LEFT ((a), (s)); \
-- (a) += (b); \
-+ p = (md5byte *)buf;
-+
-+ do
-+ {
-+ *buf++ = (UWORD32)((unsigned)p[3] << 8 | p[2]) << 16 |
-+ ((unsigned)p[1] << 8 | p[0]);
-+ p += 4;
- }
-+ while (--words);
-+}
-
--/* MD5 initialization. Begins an MD5 operation, writing a new context.
-+/*
-+ * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
-+ * initialization constants.
- */
--void md5_init(md5_ctx_t *context)
-+void
-+MD5Init(struct MD5Context *ctx)
- {
-- context->count[0] = context->count[1] = 0;
-- /* Load magic initialization constants.
-- */
-- context->state[0] = 0x67452301;
-- context->state[1] = 0xefcdab89;
-- context->state[2] = 0x98badcfe;
-- context->state[3] = 0x10325476;
-+ ctx->buf[0] = 0x67452301;
-+ ctx->buf[1] = 0xefcdab89;
-+ ctx->buf[2] = 0x98badcfe;
-+ ctx->buf[3] = 0x10325476;
-+
-+ ctx->bytes[0] = 0;
-+ ctx->bytes[1] = 0;
- }
-
--/* MD5 block update operation. Continues an MD5 message-digest
-- operation, processing another message block, and updating the
-- context.
-+/*
-+ * Update context to reflect the concatenation of another buffer full
-+ * of bytes.
- */
--void md5_update(md5_ctx_t *context, const uint8_t *input, unsigned int input_len)
-+void
-+MD5Update(struct MD5Context *ctx, md5byte const *buf, unsigned len)
- {
-- unsigned int i, index, part_len;
-+ UWORD32 t;
-
-- /* Compute number of bytes mod 64 */
-- index = (unsigned int)((context->count[0] >> 3) & 0x3F);
-+ /* Update byte count */
-
-- /* Update number of bits */
-- if ((context->count[0] += ((uint32_t)input_len << 3))
-- < ((uint32_t)input_len << 3))
-- context->count[1]++;
-+ t = ctx->bytes[0];
-
-- context->count[1] += ((uint32_t)input_len >> 29);
-+ if ((ctx->bytes[0] = t + len) < t)
-+ ctx->bytes[1]++; /* Carry from low to high */
-
-- part_len = 64 - index;
-+ t = 64 - (t & 0x3f); /* Space available in ctx->in (at least 1) */
-
-- /* Transform as many times as possible. */
-- if (input_len >= part_len)
-+ if (t > len)
- {
-- memcpy(&context->buffer[index], input, part_len);
-- md5_transform(context->state, context->buffer);
-+ memcpy((md5byte *)ctx->in + 64 - t, buf, len);
-+ return;
-+ }
-
-- for (i = part_len; i + 63 < input_len; i += 64)
-- md5_transform(context->state, &input[i]);
-+ /* First chunk is an odd size */
-+ memcpy((md5byte *)ctx->in + 64 - t, buf, t);
-+ byteSwap(ctx->in, 16);
-+ MD5Transform(ctx->buf, ctx->in);
-+ buf += t;
-+ len -= t;
-
-- index = 0;
-+ /* Process data in 64-byte chunks */
-+ while (len >= 64)
-+ {
-+ memcpy(ctx->in, buf, 64);
-+ byteSwap(ctx->in, 16);
-+ MD5Transform(ctx->buf, ctx->in);
-+ buf += 64;
-+ len -= 64;
- }
-- else
-- i = 0;
-
-- /* Buffer remaining input */
-- memcpy(&context->buffer[index], &input[i], input_len - i);
-+ /* Handle any remaining bytes of data. */
-+ memcpy(ctx->in, buf, len);
- }
-
--/* MD5 finalization. Ends an MD5 message-digest operation, writing the
-- the message digest and zeroizing the context.
-+/*
-+ * Final wrapup - pad to 64-byte boundary with the bit pattern
-+ * 1 0* (64-bit count of bits processed, MSB-first)
- */
--void md5_finalize(md5_ctx_t *context, uint8_t digest[16])
-+void
-+MD5Final(md5byte digest[16], struct MD5Context *ctx)
- {
-- unsigned char bits[8];
-- unsigned int index, pad_len;
--
-- /* Save number of bits */
-- Encode(bits, context->count, 8);
--
-- /* Pad out to 56 mod 64.
-- */
-- index = (unsigned int)((context->count[0] >> 3) & 0x3f);
-- pad_len = (index < 56) ? (56 - index) : (120 - index);
-- md5_update(context, PADDING, pad_len);
--
-- /* Append length (before padding) */
-- md5_update(context, bits, 8);
-- /* Store state in digest */
-- Encode(digest, context->state, 16);
--
-- /* Zeroize sensitive information.
-- */
-- memset(context, 0, sizeof(*context));
--}
-+ int count = ctx->bytes[0] & 0x3f; /* Number of bytes in ctx->in */
-+ md5byte *p = (md5byte *)ctx->in + count;
-
--/* MD5 basic transformation. Transforms state based on block.
-- */
--static void md5_transform(uint32_t state[4], const uint8_t block[64])
--{
-- uint32_t a = state[0], b = state[1], c = state[2], d = state[3], x[16];
--
-- Decode(x, block, 64);
--
-- /* Round 1 */
-- FF(a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
-- FF(d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
-- FF(c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
-- FF(b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
-- FF(a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
-- FF(d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
-- FF(c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
-- FF(b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
-- FF(a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
-- FF(d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
-- FF(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
-- FF(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
-- FF(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
-- FF(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
-- FF(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
-- FF(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
--
-- /* Round 2 */
-- GG(a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
-- GG(d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
-- GG(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
-- GG(b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
-- GG(a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
-- GG(d, a, b, c, x[10], S22, 0x2441453); /* 22 */
-- GG(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
-- GG(b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
-- GG(a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
-- GG(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
-- GG(c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
-- GG(b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
-- GG(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
-- GG(d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
-- GG(c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
-- GG(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
--
-- /* Round 3 */
-- HH(a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
-- HH(d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
-- HH(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
-- HH(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
-- HH(a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
-- HH(d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
-- HH(c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
-- HH(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
-- HH(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
-- HH(d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
-- HH(c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
-- HH(b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
-- HH(a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
-- HH(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
-- HH(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
-- HH(b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
--
-- /* Round 4 */
-- II(a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
-- II(d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
-- II(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
-- II(b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
-- II(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
-- II(d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
-- II(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
-- II(b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
-- II(a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
-- II(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
-- II(c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
-- II(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
-- II(a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
-- II(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
-- II(c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
-- II(b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
--
-- state[0] += a;
-- state[1] += b;
-- state[2] += c;
-- state[3] += d;
--
-- /* Zeroize sensitive information.
-- */
-- memset(x, 0, sizeof(x));
--}
-+ /* Set the first char of padding to 0x80. There is always room. */
-+ *p++ = 0x80;
-
--/* Encodes input (uint32_t) into output (unsigned char). Assumes len is
-- a multiple of 4.
-- */
--static void Encode(uint8_t *output, const uint32_t *input, unsigned int len)
--{
-- unsigned int i, j;
-+ /* Bytes of padding needed to make 56 bytes (-8..55) */
-+ count = 56 - 1 - count;
-
-- for (i = 0, j = 0; j < len; i++, j += 4)
-+ if (count < 0) /* Padding forces an extra block */
- {
-- output[j] = (unsigned char)(input[i] & 0xff);
-- output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
-- output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
-- output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
-+ memset(p, 0, count + 8);
-+ byteSwap(ctx->in, 16);
-+ MD5Transform(ctx->buf, ctx->in);
-+ p = (md5byte *)ctx->in;
-+ count = 56;
- }
-+
-+ memset(p, 0, count);
-+ byteSwap(ctx->in, 14);
-+
-+ /* Append length in bits and transform */
-+ ctx->in[14] = ctx->bytes[0] << 3;
-+ ctx->in[15] = ctx->bytes[1] << 3 | ctx->bytes[0] >> 29;
-+ MD5Transform(ctx->buf, ctx->in);
-+
-+ byteSwap(ctx->buf, 4);
-+ memcpy(digest, ctx->buf, 16);
-+ memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
- }
-
--/* Decodes input (unsigned char) into output (uint32_t). Assumes len is
-- a multiple of 4.
-+#ifndef ASM_MD5
-+
-+/* The four core functions - F1 is optimized somewhat */
-+
-+/* #define F1(x, y, z) (x & y | ~x & z) */
-+#define F1(x, y, z) (z ^ (x & (y ^ z)))
-+#define F2(x, y, z) F1(z, x, y)
-+#define F3(x, y, z) (x ^ y ^ z)
-+#define F4(x, y, z) (y ^ (x | ~z))
-+
-+/* This is the central step in the MD5 algorithm. */
-+#define MD5STEP(f,w,x,y,z,in,s) \
-+ (w += f(x,y,z) + in, w = (w<<s | w>>(32-s)) + x)
-+
-+/*
-+ * The core of the MD5 algorithm, this alters an existing MD5 hash to
-+ * reflect the addition of 16 longwords of new data. MD5Update blocks
-+ * the data and converts bytes into longwords for this routine.
- */
--static void Decode(uint32_t *output, const uint8_t *input, unsigned int len)
-+void
-+MD5Transform(UWORD32 buf[4], UWORD32 const in[16])
- {
-- unsigned int i, j;
--
-- for (i = 0, j = 0; j < len; i++, j += 4)
-- output[i] = ((uint32_t)input[j]) | (((uint32_t)input[j+1]) << 8) |
-- (((uint32_t)input[j+2]) << 16) | (((uint32_t)input[j+3]) << 24);
-+ register UWORD32 a, b, c, d;
-+
-+ a = buf[0];
-+ b = buf[1];
-+ c = buf[2];
-+ d = buf[3];
-+
-+ MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
-+ MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
-+ MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
-+ MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
-+ MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
-+ MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
-+ MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
-+ MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
-+ MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
-+ MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
-+ MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
-+ MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
-+ MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
-+ MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
-+ MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
-+ MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-+
-+ MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
-+ MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
-+ MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
-+ MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
-+ MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
-+ MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
-+ MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
-+ MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
-+ MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
-+ MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
-+ MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
-+ MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
-+ MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
-+ MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
-+ MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
-+ MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-+
-+ MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
-+ MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
-+ MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
-+ MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
-+ MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
-+ MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
-+ MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
-+ MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
-+ MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
-+ MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
-+ MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
-+ MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
-+ MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
-+ MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
-+ MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
-+ MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-+
-+ MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
-+ MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
-+ MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
-+ MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
-+ MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
-+ MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
-+ MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
-+ MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
-+ MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
-+ MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
-+ MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
-+ MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
-+ MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
-+ MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
-+ MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
-+ MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-+
-+ buf[0] += a;
-+ buf[1] += b;
-+ buf[2] += c;
-+ buf[3] += d;
- }
-+
-+#endif
-diff --git a/md5_utils.h b/md5_utils.h
-index 8dda8d1..5ca1b5f 100644
---- a/md5_utils.h
-+++ b/md5_utils.h
-@@ -1,51 +1,42 @@
- /*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ * This is the header file for the MD5 message-digest algorithm.
-+ * The algorithm is due to Ron Rivest. This code was
-+ * written by Colin Plumb in 1993, no copyright is claimed.
-+ * This code is in the public domain; do with it what you wish.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Equivalent code is available from RSA Data Security, Inc.
-+ * This code has been tested against that, and is equivalent,
-+ * except that you don't need to include two pages of legalese
-+ * with every copy.
-+ *
-+ * To compute the message digest of a chunk of bytes, declare an
-+ * MD5Context structure, pass it to MD5Init, call MD5Update as
-+ * needed on buffers full of bytes, and then call MD5Final, which
-+ * will fill a supplied 16-byte array with the digest.
-+ *
-+ * Changed so as no longer to depend on Colin Plumb's `usual.h'
-+ * header definitions
-+ * - Ian Jackson <ian@chiark.greenend.org.uk>.
-+ * Still in the public domain.
- */
-
--/*
--Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
--rights reserved.
--
--License to copy and use this software is granted provided that it
--is identified as the "RSA Data Security, Inc. MD5 Message-Digest
--Algorithm" in all material mentioning or referencing this software
--or this function.
-+#ifndef MD5_H
-+#define MD5_H
-
--License is also granted to make and use derivative works provided
--that such works are identified as "derived from the RSA Data
--Security, Inc. MD5 Message-Digest Algorithm" in all material
--mentioning or referencing the derived work.
-+#define md5byte unsigned char
-+#define UWORD32 unsigned int
-
--RSA Data Security, Inc. makes no representations concerning either
--the merchantability of this software or the suitability of this
--software for any particular purpose. It is provided "as is"
--without express or implied warranty of any kind.
--
--These notices must be retained in any copies of any part of this
--documentation and/or software.
--*/
--#ifndef HAVE_VPX_PORTS
--#define HAVE_VPX_PORTS 0
--#endif
--#if HAVE_VPX_PORTS
--#include "vpx_ports/vpx_integer.h"
--#else
--#include "vpx_integer.h"
--#endif
--
--/* MD5 context. */
--typedef struct
-+typedef struct MD5Context MD5Context;
-+struct MD5Context
- {
-- uint32_t state[4]; /* state (ABCD) */
-- uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */
-- uint8_t buffer[64]; /* input buffer */
--} md5_ctx_t;
-+ UWORD32 buf[4];
-+ UWORD32 bytes[2];
-+ UWORD32 in[16];
-+};
-+
-+void MD5Init(struct MD5Context *context);
-+void MD5Update(struct MD5Context *context, md5byte const *buf, unsigned len);
-+void MD5Final(unsigned char digest[16], struct MD5Context *context);
-+void MD5Transform(UWORD32 buf[4], UWORD32 const in[16]);
-
--void md5_init(md5_ctx_t *ctx);
--void md5_update(md5_ctx_t *ctx, const uint8_t *buf, unsigned int len);
--void md5_finalize(md5_ctx_t *ctx, uint8_t md5[16]);
-+#endif /* !MD5_H */
-diff --git a/release.sh b/release.sh
-index 3b77dad..880ad0f 100755
---- a/release.sh
-+++ b/release.sh
-@@ -1,11 +1,12 @@
--#!/bin/bash
-+#!/bin/sh
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-@@ -20,7 +21,7 @@ for opt; do
- esac
- done
-
--TAB=$'\t'
-+TAB="$(printf '\t')"
- cat > release.mk << EOF
- %\$(BUILD_SFX).tar.bz2: %/.done
- ${TAB}@echo "\$(subst .tar.bz2,,\$@): tarball"
-@@ -185,7 +186,7 @@ for cfg in $CONFIGS; do
- esac
- opts="$opts --enable-postproc"
-
-- [ "x${clean}" == "xyes" ] \
-+ [ "x${clean}" = "xyes" ] \
- && rm -rf ${full_cfg}${BUILD_SFX}${TAR_SFX} \
- && rm -rf logs/${full_cfg}${BUILD_SFX}.log.bz2
-
-diff --git a/solution.mk b/solution.mk
-index 783c6f8..21bf065 100644
---- a/solution.mk
-+++ b/solution.mk
-@@ -1,10 +1,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/tools/gen_authors.sh b/tools/gen_authors.sh
-new file mode 100755
-index 0000000..e1246f0
---- /dev/null
-+++ b/tools/gen_authors.sh
-@@ -0,0 +1,13 @@
-+#!/bin/bash
-+
-+# Add organization names manually.
-+
-+cat <<EOF
-+# This file is automatically generated from the git commit history
-+# by tools/gen_authors.sh.
-+
-+$(git log --pretty=format:"%aN <%aE>" | sort | uniq)
-+Google Inc.
-+The Mozilla Foundation
-+The Xiph.Org Foundation
-+EOF
-diff --git a/vp8/common/alloccommon.c b/vp8/common/alloccommon.c
-index ac110f7..9f6397e 100644
---- a/vp8/common/alloccommon.c
-+++ b/vp8/common/alloccommon.c
-@@ -1,13 +1,15 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-+#include "vpx_ports/config.h"
- #include "blockd.h"
- #include "vpx_mem/vpx_mem.h"
- #include "onyxc_int.h"
-@@ -16,9 +18,6 @@
- #include "systemdependent.h"
- #include "vpxerrors.h"
-
--#ifdef HAVE_CONFIG_H
--#include "vpx_config.h"
--#endif
-
- extern void vp8_init_scan_order_mask();
-
-diff --git a/vp8/common/alloccommon.h b/vp8/common/alloccommon.h
-index 73c7383..b877412 100644
---- a/vp8/common/alloccommon.h
-+++ b/vp8/common/alloccommon.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/armv6/bilinearfilter_v6.asm b/vp8/common/arm/armv6/bilinearfilter_v6.asm
-index 4428cf8..ac0d333 100644
---- a/vp8/common/arm/armv6/bilinearfilter_v6.asm
-+++ b/vp8/common/arm/armv6/bilinearfilter_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/copymem16x16_v6.asm b/vp8/common/arm/armv6/copymem16x16_v6.asm
-index 00e9739..344c453 100644
---- a/vp8/common/arm/armv6/copymem16x16_v6.asm
-+++ b/vp8/common/arm/armv6/copymem16x16_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/copymem8x4_v6.asm b/vp8/common/arm/armv6/copymem8x4_v6.asm
-index 94473ca..3556b3a 100644
---- a/vp8/common/arm/armv6/copymem8x4_v6.asm
-+++ b/vp8/common/arm/armv6/copymem8x4_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/copymem8x8_v6.asm b/vp8/common/arm/armv6/copymem8x8_v6.asm
-index 7cfa533..1da0ff5 100644
---- a/vp8/common/arm/armv6/copymem8x8_v6.asm
-+++ b/vp8/common/arm/armv6/copymem8x8_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/filter_v6.asm b/vp8/common/arm/armv6/filter_v6.asm
-index a7863fc..cdc74ba 100644
---- a/vp8/common/arm/armv6/filter_v6.asm
-+++ b/vp8/common/arm/armv6/filter_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/idct_v6.asm b/vp8/common/arm/armv6/idct_v6.asm
-index 25c5165..9e932fa 100644
---- a/vp8/common/arm/armv6/idct_v6.asm
-+++ b/vp8/common/arm/armv6/idct_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/iwalsh_v6.asm b/vp8/common/arm/armv6/iwalsh_v6.asm
-index 8747568..4606783 100644
---- a/vp8/common/arm/armv6/iwalsh_v6.asm
-+++ b/vp8/common/arm/armv6/iwalsh_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
- EXPORT |vp8_short_inv_walsh4x4_armv6|
-diff --git a/vp8/common/arm/armv6/loopfilter_v6.asm b/vp8/common/arm/armv6/loopfilter_v6.asm
-index c2b02dc..eeeacd3 100644
---- a/vp8/common/arm/armv6/loopfilter_v6.asm
-+++ b/vp8/common/arm/armv6/loopfilter_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/recon_v6.asm b/vp8/common/arm/armv6/recon_v6.asm
-index 085ff80..6f3ccbe 100644
---- a/vp8/common/arm/armv6/recon_v6.asm
-+++ b/vp8/common/arm/armv6/recon_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/simpleloopfilter_v6.asm b/vp8/common/arm/armv6/simpleloopfilter_v6.asm
-index 15c6c7d..b820ced 100644
---- a/vp8/common/arm/armv6/simpleloopfilter_v6.asm
-+++ b/vp8/common/arm/armv6/simpleloopfilter_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/armv6/sixtappredict8x4_v6.asm b/vp8/common/arm/armv6/sixtappredict8x4_v6.asm
-index 551d863..6415463 100644
---- a/vp8/common/arm/armv6/sixtappredict8x4_v6.asm
-+++ b/vp8/common/arm/armv6/sixtappredict8x4_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/bilinearfilter_arm.c b/vp8/common/arm/bilinearfilter_arm.c
-index bf972a3..b93539c 100644
---- a/vp8/common/arm/bilinearfilter_arm.c
-+++ b/vp8/common/arm/bilinearfilter_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/filter_arm.c b/vp8/common/arm/filter_arm.c
-index 2a4640c..233be24 100644
---- a/vp8/common/arm/filter_arm.c
-+++ b/vp8/common/arm/filter_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/idct_arm.h b/vp8/common/arm/idct_arm.h
-index f9ed21e..cfd9d76 100644
---- a/vp8/common/arm/idct_arm.h
-+++ b/vp8/common/arm/idct_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/loopfilter_arm.c b/vp8/common/arm/loopfilter_arm.c
-index fa7c626..d98c908 100644
---- a/vp8/common/arm/loopfilter_arm.c
-+++ b/vp8/common/arm/loopfilter_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/loopfilter_arm.h b/vp8/common/arm/loopfilter_arm.h
-index 4bb4945..b59e2b5 100644
---- a/vp8/common/arm/loopfilter_arm.h
-+++ b/vp8/common/arm/loopfilter_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/neon/bilinearpredict16x16_neon.asm b/vp8/common/arm/neon/bilinearpredict16x16_neon.asm
-index a2fea2b..076a3d3 100644
---- a/vp8/common/arm/neon/bilinearpredict16x16_neon.asm
-+++ b/vp8/common/arm/neon/bilinearpredict16x16_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/bilinearpredict4x4_neon.asm b/vp8/common/arm/neon/bilinearpredict4x4_neon.asm
-index 74d2db5..f199ba3 100644
---- a/vp8/common/arm/neon/bilinearpredict4x4_neon.asm
-+++ b/vp8/common/arm/neon/bilinearpredict4x4_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/bilinearpredict8x4_neon.asm b/vp8/common/arm/neon/bilinearpredict8x4_neon.asm
-index 46ebb0e..9a3a039 100644
---- a/vp8/common/arm/neon/bilinearpredict8x4_neon.asm
-+++ b/vp8/common/arm/neon/bilinearpredict8x4_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/bilinearpredict8x8_neon.asm b/vp8/common/arm/neon/bilinearpredict8x8_neon.asm
-index 80728d4..10a6366 100644
---- a/vp8/common/arm/neon/bilinearpredict8x8_neon.asm
-+++ b/vp8/common/arm/neon/bilinearpredict8x8_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/buildintrapredictorsmby_neon.asm b/vp8/common/arm/neon/buildintrapredictorsmby_neon.asm
-index f42ac63..7cd9d75 100644
---- a/vp8/common/arm/neon/buildintrapredictorsmby_neon.asm
-+++ b/vp8/common/arm/neon/buildintrapredictorsmby_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/copymem16x16_neon.asm b/vp8/common/arm/neon/copymem16x16_neon.asm
-index 89d5e10..b25bfdc 100644
---- a/vp8/common/arm/neon/copymem16x16_neon.asm
-+++ b/vp8/common/arm/neon/copymem16x16_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/copymem8x4_neon.asm b/vp8/common/arm/neon/copymem8x4_neon.asm
-index 302f734..0c62ee2 100644
---- a/vp8/common/arm/neon/copymem8x4_neon.asm
-+++ b/vp8/common/arm/neon/copymem8x4_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/copymem8x8_neon.asm b/vp8/common/arm/neon/copymem8x8_neon.asm
-index 50d39ef..84e0afd 100644
---- a/vp8/common/arm/neon/copymem8x8_neon.asm
-+++ b/vp8/common/arm/neon/copymem8x8_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/iwalsh_neon.asm b/vp8/common/arm/neon/iwalsh_neon.asm
-index 4fc744c..b8199ce 100644
---- a/vp8/common/arm/neon/iwalsh_neon.asm
-+++ b/vp8/common/arm/neon/iwalsh_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
- EXPORT |vp8_short_inv_walsh4x4_neon|
- EXPORT |vp8_short_inv_walsh4x4_1_neon|
-diff --git a/vp8/common/arm/neon/loopfilterhorizontaledge_uv_neon.asm b/vp8/common/arm/neon/loopfilterhorizontaledge_uv_neon.asm
-index e3e8e8a..5d25e3d 100644
---- a/vp8/common/arm/neon/loopfilterhorizontaledge_uv_neon.asm
-+++ b/vp8/common/arm/neon/loopfilterhorizontaledge_uv_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/loopfilterhorizontaledge_y_neon.asm b/vp8/common/arm/neon/loopfilterhorizontaledge_y_neon.asm
-index f11055d..ebe52fc 100644
---- a/vp8/common/arm/neon/loopfilterhorizontaledge_y_neon.asm
-+++ b/vp8/common/arm/neon/loopfilterhorizontaledge_y_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/loopfiltersimplehorizontaledge_neon.asm b/vp8/common/arm/neon/loopfiltersimplehorizontaledge_neon.asm
-index 6d74fab..dbbdd74 100644
---- a/vp8/common/arm/neon/loopfiltersimplehorizontaledge_neon.asm
-+++ b/vp8/common/arm/neon/loopfiltersimplehorizontaledge_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/loopfiltersimpleverticaledge_neon.asm b/vp8/common/arm/neon/loopfiltersimpleverticaledge_neon.asm
-index 2bb6222..480e318 100644
---- a/vp8/common/arm/neon/loopfiltersimpleverticaledge_neon.asm
-+++ b/vp8/common/arm/neon/loopfiltersimpleverticaledge_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/loopfilterverticaledge_uv_neon.asm b/vp8/common/arm/neon/loopfilterverticaledge_uv_neon.asm
-index d79cc68..a402282 100644
---- a/vp8/common/arm/neon/loopfilterverticaledge_uv_neon.asm
-+++ b/vp8/common/arm/neon/loopfilterverticaledge_uv_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/loopfilterverticaledge_y_neon.asm b/vp8/common/arm/neon/loopfilterverticaledge_y_neon.asm
-index 3a230a9..18eba9f 100644
---- a/vp8/common/arm/neon/loopfilterverticaledge_y_neon.asm
-+++ b/vp8/common/arm/neon/loopfilterverticaledge_y_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/mbloopfilterhorizontaledge_uv_neon.asm b/vp8/common/arm/neon/mbloopfilterhorizontaledge_uv_neon.asm
-index 86eddaa..21b85da 100644
---- a/vp8/common/arm/neon/mbloopfilterhorizontaledge_uv_neon.asm
-+++ b/vp8/common/arm/neon/mbloopfilterhorizontaledge_uv_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/mbloopfilterhorizontaledge_y_neon.asm b/vp8/common/arm/neon/mbloopfilterhorizontaledge_y_neon.asm
-index 2ab0fc2..64d98c6 100644
---- a/vp8/common/arm/neon/mbloopfilterhorizontaledge_y_neon.asm
-+++ b/vp8/common/arm/neon/mbloopfilterhorizontaledge_y_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm b/vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm
-index ad5afba..0e72e80 100644
---- a/vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm
-+++ b/vp8/common/arm/neon/mbloopfilterverticaledge_uv_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm b/vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm
-index 60e5175..91396a1 100644
---- a/vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm
-+++ b/vp8/common/arm/neon/mbloopfilterverticaledge_y_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/recon16x16mb_neon.asm b/vp8/common/arm/neon/recon16x16mb_neon.asm
-index b9ba1cb..7c06c03 100644
---- a/vp8/common/arm/neon/recon16x16mb_neon.asm
-+++ b/vp8/common/arm/neon/recon16x16mb_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/recon2b_neon.asm b/vp8/common/arm/neon/recon2b_neon.asm
-index 25aaf8c..3d87e2d 100644
---- a/vp8/common/arm/neon/recon2b_neon.asm
-+++ b/vp8/common/arm/neon/recon2b_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/recon4b_neon.asm b/vp8/common/arm/neon/recon4b_neon.asm
-index a4f5b80..63cd987 100644
---- a/vp8/common/arm/neon/recon4b_neon.asm
-+++ b/vp8/common/arm/neon/recon4b_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/reconb_neon.asm b/vp8/common/arm/neon/reconb_neon.asm
-index 16d85a0..0ecdc14 100644
---- a/vp8/common/arm/neon/reconb_neon.asm
-+++ b/vp8/common/arm/neon/reconb_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/save_neon_reg.asm b/vp8/common/arm/neon/save_neon_reg.asm
-index 4873e44..f5db2a8 100644
---- a/vp8/common/arm/neon/save_neon_reg.asm
-+++ b/vp8/common/arm/neon/save_neon_reg.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/shortidct4x4llm_1_neon.asm b/vp8/common/arm/neon/shortidct4x4llm_1_neon.asm
-index 7d06ff9..24e5fed 100644
---- a/vp8/common/arm/neon/shortidct4x4llm_1_neon.asm
-+++ b/vp8/common/arm/neon/shortidct4x4llm_1_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/shortidct4x4llm_neon.asm b/vp8/common/arm/neon/shortidct4x4llm_neon.asm
-index ffecfbf..c566c67 100644
---- a/vp8/common/arm/neon/shortidct4x4llm_neon.asm
-+++ b/vp8/common/arm/neon/shortidct4x4llm_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/sixtappredict16x16_neon.asm b/vp8/common/arm/neon/sixtappredict16x16_neon.asm
-index 9f5f0d2..6f3716d 100644
---- a/vp8/common/arm/neon/sixtappredict16x16_neon.asm
-+++ b/vp8/common/arm/neon/sixtappredict16x16_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/sixtappredict4x4_neon.asm b/vp8/common/arm/neon/sixtappredict4x4_neon.asm
-index c23a9db..6fe9ead 100644
---- a/vp8/common/arm/neon/sixtappredict4x4_neon.asm
-+++ b/vp8/common/arm/neon/sixtappredict4x4_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/sixtappredict8x4_neon.asm b/vp8/common/arm/neon/sixtappredict8x4_neon.asm
-index 18e19f9..a6ff4f7 100644
---- a/vp8/common/arm/neon/sixtappredict8x4_neon.asm
-+++ b/vp8/common/arm/neon/sixtappredict8x4_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/neon/sixtappredict8x8_neon.asm b/vp8/common/arm/neon/sixtappredict8x8_neon.asm
-index d27485e..bb35ae4 100644
---- a/vp8/common/arm/neon/sixtappredict8x8_neon.asm
-+++ b/vp8/common/arm/neon/sixtappredict8x8_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/arm/recon_arm.c b/vp8/common/arm/recon_arm.c
-index 130059e..2cc9ee7 100644
---- a/vp8/common/arm/recon_arm.c
-+++ b/vp8/common/arm/recon_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/recon_arm.h b/vp8/common/arm/recon_arm.h
-index fd9f85e..392297b 100644
---- a/vp8/common/arm/recon_arm.h
-+++ b/vp8/common/arm/recon_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/reconintra4x4_arm.c b/vp8/common/arm/reconintra4x4_arm.c
-index 334d352..65fb1f0 100644
---- a/vp8/common/arm/reconintra4x4_arm.c
-+++ b/vp8/common/arm/reconintra4x4_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/reconintra_arm.c b/vp8/common/arm/reconintra_arm.c
-index d7ee1dd..29f4a2c 100644
---- a/vp8/common/arm/reconintra_arm.c
-+++ b/vp8/common/arm/reconintra_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/subpixel_arm.h b/vp8/common/arm/subpixel_arm.h
-index 56aec55..0eb2c58 100644
---- a/vp8/common/arm/subpixel_arm.h
-+++ b/vp8/common/arm/subpixel_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/systemdependent.c b/vp8/common/arm/systemdependent.c
-index ecc6929..27d3dee 100644
---- a/vp8/common/arm/systemdependent.c
-+++ b/vp8/common/arm/systemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/arm/vpx_asm_offsets.c b/vp8/common/arm/vpx_asm_offsets.c
-index 68634bf..ff4d752 100644
---- a/vp8/common/arm/vpx_asm_offsets.c
-+++ b/vp8/common/arm/vpx_asm_offsets.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/bigend.h b/vp8/common/bigend.h
-index 6a91ba1..cd6b988 100644
---- a/vp8/common/bigend.h
-+++ b/vp8/common/bigend.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/blockd.c b/vp8/common/blockd.c
-index 53f5e72..e0ed561 100644
---- a/vp8/common/blockd.c
-+++ b/vp8/common/blockd.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/blockd.h b/vp8/common/blockd.h
-index 84ed53a..2b25f62 100644
---- a/vp8/common/blockd.h
-+++ b/vp8/common/blockd.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -173,9 +174,8 @@ typedef struct
- int dc_diff;
- unsigned char segment_id; // Which set of segmentation parameters should be used for this MB
- int force_no_skip;
--
-+ int need_to_clamp_mvs;
- B_MODE_INFO partition_bmi[16];
--
- } MB_MODE_INFO;
-
-
-diff --git a/vp8/common/boolcoder.h b/vp8/common/boolcoder.h
-index 0659d48..66f67c2 100644
---- a/vp8/common/boolcoder.h
-+++ b/vp8/common/boolcoder.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/codec_common_interface.h b/vp8/common/codec_common_interface.h
-index 7881b0a..d836564 100644
---- a/vp8/common/codec_common_interface.h
-+++ b/vp8/common/codec_common_interface.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
- #ifndef CODEC_COMMON_INTERFACE_H
-diff --git a/vp8/common/coefupdateprobs.h b/vp8/common/coefupdateprobs.h
-index 99affd6..6131d12 100644
---- a/vp8/common/coefupdateprobs.h
-+++ b/vp8/common/coefupdateprobs.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/common.h b/vp8/common/common.h
-index 29f6d37..bfa8a9c 100644
---- a/vp8/common/common.h
-+++ b/vp8/common/common.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/common_types.h b/vp8/common/common_types.h
-index deb5ed8..a307ed6 100644
---- a/vp8/common/common_types.h
-+++ b/vp8/common/common_types.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/context.c b/vp8/common/context.c
-index 17ee8c3..f0cb838 100644
---- a/vp8/common/context.c
-+++ b/vp8/common/context.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/debugmodes.c b/vp8/common/debugmodes.c
-index e2d2d2c..e669814 100644
---- a/vp8/common/debugmodes.c
-+++ b/vp8/common/debugmodes.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/defaultcoefcounts.h b/vp8/common/defaultcoefcounts.h
-index ccdf326..f9247d2 100644
---- a/vp8/common/defaultcoefcounts.h
-+++ b/vp8/common/defaultcoefcounts.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/dma_desc.h b/vp8/common/dma_desc.h
-index 5e6fa0c..765405d 100644
---- a/vp8/common/dma_desc.h
-+++ b/vp8/common/dma_desc.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/duck_io.h b/vp8/common/duck_io.h
-index f63a5cd..02f6895 100644
---- a/vp8/common/duck_io.h
-+++ b/vp8/common/duck_io.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/entropy.c b/vp8/common/entropy.c
-index e524c2a..8d01bf8 100644
---- a/vp8/common/entropy.c
-+++ b/vp8/common/entropy.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/entropy.h b/vp8/common/entropy.h
-index 1415832..29be82c 100644
---- a/vp8/common/entropy.h
-+++ b/vp8/common/entropy.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/entropymode.c b/vp8/common/entropymode.c
-index 7dc1acd..72cbd64 100644
---- a/vp8/common/entropymode.c
-+++ b/vp8/common/entropymode.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/entropymode.h b/vp8/common/entropymode.h
-index ff630a4..bd44b83 100644
---- a/vp8/common/entropymode.h
-+++ b/vp8/common/entropymode.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/entropymv.c b/vp8/common/entropymv.c
-index 2b00c17..176fecd 100644
---- a/vp8/common/entropymv.c
-+++ b/vp8/common/entropymv.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/entropymv.h b/vp8/common/entropymv.h
-index d940c59..395984c 100644
---- a/vp8/common/entropymv.h
-+++ b/vp8/common/entropymv.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/extend.c b/vp8/common/extend.c
-index 7407952..43d7aed 100644
---- a/vp8/common/extend.c
-+++ b/vp8/common/extend.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/extend.h b/vp8/common/extend.h
-index 6809ae7..bb8a016 100644
---- a/vp8/common/extend.h
-+++ b/vp8/common/extend.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/filter_c.c b/vp8/common/filter_c.c
-index 38991cb..f24f8a2 100644
---- a/vp8/common/filter_c.c
-+++ b/vp8/common/filter_c.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/findnearmv.c b/vp8/common/findnearmv.c
-index fcb1f20..550681e 100644
---- a/vp8/common/findnearmv.c
-+++ b/vp8/common/findnearmv.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/findnearmv.h b/vp8/common/findnearmv.h
-index 2c02033..3e0718a 100644
---- a/vp8/common/findnearmv.h
-+++ b/vp8/common/findnearmv.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/fourcc.hpp b/vp8/common/fourcc.hpp
-index 5f1faed..9823b56 100644
---- a/vp8/common/fourcc.hpp
-+++ b/vp8/common/fourcc.hpp
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/g_common.h b/vp8/common/g_common.h
-index e68c53e..3f43401 100644
---- a/vp8/common/g_common.h
-+++ b/vp8/common/g_common.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/generic/systemdependent.c b/vp8/common/generic/systemdependent.c
-index 0011ae0..6e64885 100644
---- a/vp8/common/generic/systemdependent.c
-+++ b/vp8/common/generic/systemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/header.h b/vp8/common/header.h
-index 8b2b009..b8b9059 100644
---- a/vp8/common/header.h
-+++ b/vp8/common/header.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/idct.h b/vp8/common/idct.h
-index 47b5f05..2185bd3 100644
---- a/vp8/common/idct.h
-+++ b/vp8/common/idct.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/idctllm.c b/vp8/common/idctllm.c
-index 57cf858..4261d24 100644
---- a/vp8/common/idctllm.c
-+++ b/vp8/common/idctllm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/invtrans.c b/vp8/common/invtrans.c
-index 1ff596e..00502c6 100644
---- a/vp8/common/invtrans.c
-+++ b/vp8/common/invtrans.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/invtrans.h b/vp8/common/invtrans.h
-index 93a40f9..be30ca0 100644
---- a/vp8/common/invtrans.h
-+++ b/vp8/common/invtrans.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/littlend.h b/vp8/common/littlend.h
-index 08c525c..0961163 100644
---- a/vp8/common/littlend.h
-+++ b/vp8/common/littlend.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/loopfilter.c b/vp8/common/loopfilter.c
-index 79e6177..4937195 100644
---- a/vp8/common/loopfilter.c
-+++ b/vp8/common/loopfilter.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/loopfilter.h b/vp8/common/loopfilter.h
-index c6ce508..a9a976e 100644
---- a/vp8/common/loopfilter.h
-+++ b/vp8/common/loopfilter.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/loopfilter_filters.c b/vp8/common/loopfilter_filters.c
-index 7d16e48..eaf7327 100644
---- a/vp8/common/loopfilter_filters.c
-+++ b/vp8/common/loopfilter_filters.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/mac_specs.h b/vp8/common/mac_specs.h
-index 97bffc7..a12b8d5 100644
---- a/vp8/common/mac_specs.h
-+++ b/vp8/common/mac_specs.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/mbpitch.c b/vp8/common/mbpitch.c
-index a7e0ce9..b183b8e 100644
---- a/vp8/common/mbpitch.c
-+++ b/vp8/common/mbpitch.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/modecont.c b/vp8/common/modecont.c
-index 9301a25..c008eef 100644
---- a/vp8/common/modecont.c
-+++ b/vp8/common/modecont.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/modecont.h b/vp8/common/modecont.h
-index 0c57651..4b79722 100644
---- a/vp8/common/modecont.h
-+++ b/vp8/common/modecont.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/modecontext.c b/vp8/common/modecontext.c
-index ceee74c..a4b2f76 100644
---- a/vp8/common/modecontext.c
-+++ b/vp8/common/modecontext.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/mv.h b/vp8/common/mv.h
-index 3d84181..c3db5f0 100644
---- a/vp8/common/mv.h
-+++ b/vp8/common/mv.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/onyx.h b/vp8/common/onyx.h
-index b66c400..3ed6f2d 100644
---- a/vp8/common/onyx.h
-+++ b/vp8/common/onyx.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -16,7 +17,7 @@ extern "C"
- {
- #endif
-
--#include "vpx_codec/internal/vpx_codec_internal.h"
-+#include "vpx/internal/vpx_codec_internal.h"
- #include "vpx_scale/yv12config.h"
- #include "type_aliases.h"
- #include "ppflags.h"
-diff --git a/vp8/common/onyxc_int.h b/vp8/common/onyxc_int.h
-index a40ffb9..d1cb766 100644
---- a/vp8/common/onyxc_int.h
-+++ b/vp8/common/onyxc_int.h
-@@ -1,18 +1,19 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
- #ifndef __INC_VP8C_INT_H
- #define __INC_VP8C_INT_H
-
--#include "vpx_ports/config.h"
--#include "vpx_codec/internal/vpx_codec_internal.h"
-+#include "vpx_config.h"
-+#include "vpx/internal/vpx_codec_internal.h"
- #include "loopfilter.h"
- #include "entropymv.h"
- #include "entropy.h"
-diff --git a/vp8/common/onyxd.h b/vp8/common/onyxd.h
-index 644c0ec..ea04c14 100644
---- a/vp8/common/onyxd.h
-+++ b/vp8/common/onyxd.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/partialgfupdate.h b/vp8/common/partialgfupdate.h
-index 32a55ee..355aa79 100644
---- a/vp8/common/partialgfupdate.h
-+++ b/vp8/common/partialgfupdate.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/postproc.c b/vp8/common/postproc.c
-index f019925..1f36d4e 100644
---- a/vp8/common/postproc.c
-+++ b/vp8/common/postproc.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -274,7 +275,7 @@ static void vp8_deblock_and_de_macro_block(YV12_BUFFER_CONFIG *source,
-
- }
-
--extern void vp8_deblock(YV12_BUFFER_CONFIG *source,
-+void vp8_deblock(YV12_BUFFER_CONFIG *source,
- YV12_BUFFER_CONFIG *post,
- int q,
- int low_var_thresh,
-diff --git a/vp8/common/postproc.h b/vp8/common/postproc.h
-index c45fe92..e148f2a 100644
---- a/vp8/common/postproc.h
-+++ b/vp8/common/postproc.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -87,4 +88,11 @@ void vp8_de_noise(YV12_BUFFER_CONFIG *source,
- int low_var_thresh,
- int flag,
- vp8_postproc_rtcd_vtable_t *rtcd);
-+
-+void vp8_deblock(YV12_BUFFER_CONFIG *source,
-+ YV12_BUFFER_CONFIG *post,
-+ int q,
-+ int low_var_thresh,
-+ int flag,
-+ vp8_postproc_rtcd_vtable_t *rtcd);
- #endif
-diff --git a/vp8/common/ppc/copy_altivec.asm b/vp8/common/ppc/copy_altivec.asm
-index e87eb21..5ca2d17 100644
---- a/vp8/common/ppc/copy_altivec.asm
-+++ b/vp8/common/ppc/copy_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/ppc/filter_altivec.asm b/vp8/common/ppc/filter_altivec.asm
-index 2a35507..1a7ebf7 100644
---- a/vp8/common/ppc/filter_altivec.asm
-+++ b/vp8/common/ppc/filter_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/ppc/filter_bilinear_altivec.asm b/vp8/common/ppc/filter_bilinear_altivec.asm
-index 27e02a8..73e758e 100644
---- a/vp8/common/ppc/filter_bilinear_altivec.asm
-+++ b/vp8/common/ppc/filter_bilinear_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/ppc/idctllm_altivec.asm b/vp8/common/ppc/idctllm_altivec.asm
-index e88af8d..9ebe6af 100644
---- a/vp8/common/ppc/idctllm_altivec.asm
-+++ b/vp8/common/ppc/idctllm_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/ppc/loopfilter_altivec.c b/vp8/common/ppc/loopfilter_altivec.c
-index 586eed4..8bf5e57 100644
---- a/vp8/common/ppc/loopfilter_altivec.c
-+++ b/vp8/common/ppc/loopfilter_altivec.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/ppc/loopfilter_filters_altivec.asm b/vp8/common/ppc/loopfilter_filters_altivec.asm
-index 78a5cf9..26c51a6 100644
---- a/vp8/common/ppc/loopfilter_filters_altivec.asm
-+++ b/vp8/common/ppc/loopfilter_filters_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/ppc/platform_altivec.asm b/vp8/common/ppc/platform_altivec.asm
-index 227ef2a..23680c9 100644
---- a/vp8/common/ppc/platform_altivec.asm
-+++ b/vp8/common/ppc/platform_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/ppc/recon_altivec.asm b/vp8/common/ppc/recon_altivec.asm
-index f478b95..212664d 100644
---- a/vp8/common/ppc/recon_altivec.asm
-+++ b/vp8/common/ppc/recon_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/ppc/systemdependent.c b/vp8/common/ppc/systemdependent.c
-index 2847310..4ccf690 100644
---- a/vp8/common/ppc/systemdependent.c
-+++ b/vp8/common/ppc/systemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/ppflags.h b/vp8/common/ppflags.h
-index c663976..57aeb1d 100644
---- a/vp8/common/ppflags.h
-+++ b/vp8/common/ppflags.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/pragmas.h b/vp8/common/pragmas.h
-index 25a4b77..523c8b7 100644
---- a/vp8/common/pragmas.h
-+++ b/vp8/common/pragmas.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/predictdc.c b/vp8/common/predictdc.c
-index df4c96e..18d7da8 100644
---- a/vp8/common/predictdc.c
-+++ b/vp8/common/predictdc.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/predictdc.h b/vp8/common/predictdc.h
-index b8871e4..69036ee 100644
---- a/vp8/common/predictdc.h
-+++ b/vp8/common/predictdc.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/preproc.h b/vp8/common/preproc.h
-index 00ec9a8..a02745c 100644
---- a/vp8/common/preproc.h
-+++ b/vp8/common/preproc.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/preprocif.h b/vp8/common/preprocif.h
-index 986c45b..f700f76 100644
---- a/vp8/common/preprocif.h
-+++ b/vp8/common/preprocif.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/proposed.h b/vp8/common/proposed.h
-index 1171ede..65b7834 100644
---- a/vp8/common/proposed.h
-+++ b/vp8/common/proposed.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/quant_common.c b/vp8/common/quant_common.c
-index 09fe31f..6fd3bc0 100644
---- a/vp8/common/quant_common.c
-+++ b/vp8/common/quant_common.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/quant_common.h b/vp8/common/quant_common.h
-index 0c92ce8..49d11bc 100644
---- a/vp8/common/quant_common.h
-+++ b/vp8/common/quant_common.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/recon.c b/vp8/common/recon.c
-index d1268ea..b09ef37 100644
---- a/vp8/common/recon.c
-+++ b/vp8/common/recon.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/recon.h b/vp8/common/recon.h
-index f65a90f..607895c 100644
---- a/vp8/common/recon.h
-+++ b/vp8/common/recon.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/reconinter.c b/vp8/common/reconinter.c
-index c48886d..91ec76b 100644
---- a/vp8/common/reconinter.c
-+++ b/vp8/common/reconinter.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/reconinter.h b/vp8/common/reconinter.h
-index b2d1ae9..9df4806 100644
---- a/vp8/common/reconinter.h
-+++ b/vp8/common/reconinter.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/reconintra.c b/vp8/common/reconintra.c
-index e33bce3..23d87ee 100644
---- a/vp8/common/reconintra.c
-+++ b/vp8/common/reconintra.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/reconintra.h b/vp8/common/reconintra.h
-index d63aa15..b7c4d1d 100644
---- a/vp8/common/reconintra.h
-+++ b/vp8/common/reconintra.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/reconintra4x4.c b/vp8/common/reconintra4x4.c
-index d92d5c9..3b22423 100644
---- a/vp8/common/reconintra4x4.c
-+++ b/vp8/common/reconintra4x4.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/reconintra4x4.h b/vp8/common/reconintra4x4.h
-index 788c8c4..881d091 100644
---- a/vp8/common/reconintra4x4.h
-+++ b/vp8/common/reconintra4x4.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/segmentation_common.c b/vp8/common/segmentation_common.c
-index 72b8c87..2568c7c 100644
---- a/vp8/common/segmentation_common.c
-+++ b/vp8/common/segmentation_common.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/segmentation_common.h b/vp8/common/segmentation_common.h
-index bb93533..7b36b49 100644
---- a/vp8/common/segmentation_common.h
-+++ b/vp8/common/segmentation_common.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/setupintrarecon.c b/vp8/common/setupintrarecon.c
-index dcaafe6..e796d42 100644
---- a/vp8/common/setupintrarecon.c
-+++ b/vp8/common/setupintrarecon.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -16,21 +17,15 @@ void vp8_setup_intra_recon(YV12_BUFFER_CONFIG *ybf)
- int i;
-
- // set up frame new frame for intra coded blocks
-- vpx_memset(ybf->y_buffer - 1 - 2 * ybf->y_stride, 127, ybf->y_width + 5);
- vpx_memset(ybf->y_buffer - 1 - ybf->y_stride, 127, ybf->y_width + 5);
--
- for (i = 0; i < ybf->y_height; i++)
- ybf->y_buffer[ybf->y_stride *i - 1] = (unsigned char) 129;
-
-- vpx_memset(ybf->u_buffer - 1 - 2 * ybf->uv_stride, 127, ybf->uv_width + 5);
- vpx_memset(ybf->u_buffer - 1 - ybf->uv_stride, 127, ybf->uv_width + 5);
--
- for (i = 0; i < ybf->uv_height; i++)
- ybf->u_buffer[ybf->uv_stride *i - 1] = (unsigned char) 129;
-
-- vpx_memset(ybf->v_buffer - 1 - 2 * ybf->uv_stride, 127, ybf->uv_width + 5);
- vpx_memset(ybf->v_buffer - 1 - ybf->uv_stride, 127, ybf->uv_width + 5);
--
- for (i = 0; i < ybf->uv_height; i++)
- ybf->v_buffer[ybf->uv_stride *i - 1] = (unsigned char) 129;
-
-diff --git a/vp8/common/setupintrarecon.h b/vp8/common/setupintrarecon.h
-index 6ec79b2..ea4e342 100644
---- a/vp8/common/setupintrarecon.h
-+++ b/vp8/common/setupintrarecon.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/subpixel.h b/vp8/common/subpixel.h
-index fbd5f4d..446697c 100644
---- a/vp8/common/subpixel.h
-+++ b/vp8/common/subpixel.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/swapyv12buffer.c b/vp8/common/swapyv12buffer.c
-index afe6a88..5bdf431 100644
---- a/vp8/common/swapyv12buffer.c
-+++ b/vp8/common/swapyv12buffer.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/swapyv12buffer.h b/vp8/common/swapyv12buffer.h
-index caf9499..f2c3b74 100644
---- a/vp8/common/swapyv12buffer.h
-+++ b/vp8/common/swapyv12buffer.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/systemdependent.h b/vp8/common/systemdependent.h
-index 1829b64..56218e6 100644
---- a/vp8/common/systemdependent.h
-+++ b/vp8/common/systemdependent.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/textblit.c b/vp8/common/textblit.c
-index a45937b..5d117f1 100644
---- a/vp8/common/textblit.c
-+++ b/vp8/common/textblit.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/threading.h b/vp8/common/threading.h
-index a02cb24..7c94645 100644
---- a/vp8/common/threading.h
-+++ b/vp8/common/threading.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/treecoder.c b/vp8/common/treecoder.c
-index 4ad018d..0ccd64d 100644
---- a/vp8/common/treecoder.c
-+++ b/vp8/common/treecoder.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/treecoder.h b/vp8/common/treecoder.h
-index 0356d2b..908dbcb 100644
---- a/vp8/common/treecoder.h
-+++ b/vp8/common/treecoder.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/type_aliases.h b/vp8/common/type_aliases.h
-index addd264..a0d8717 100644
---- a/vp8/common/type_aliases.h
-+++ b/vp8/common/type_aliases.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/vfwsetting.hpp b/vp8/common/vfwsetting.hpp
-index e352e7a..c01a0dd 100644
---- a/vp8/common/vfwsetting.hpp
-+++ b/vp8/common/vfwsetting.hpp
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/vpx_ref_build_prefix.h b/vp8/common/vpx_ref_build_prefix.h
-index 40608c6..cded66c 100644
---- a/vp8/common/vpx_ref_build_prefix.h
-+++ b/vp8/common/vpx_ref_build_prefix.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/vpxblit.h b/vp8/common/vpxblit.h
-index d03e0bd..2c7f673 100644
---- a/vp8/common/vpxblit.h
-+++ b/vp8/common/vpxblit.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/vpxblit_c64.h b/vp8/common/vpxblit_c64.h
-index a8e28f5..7659b5c 100644
---- a/vp8/common/vpxblit_c64.h
-+++ b/vp8/common/vpxblit_c64.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/vpxerrors.h b/vp8/common/vpxerrors.h
-index e4c9f3e..f0ec707 100644
---- a/vp8/common/vpxerrors.h
-+++ b/vp8/common/vpxerrors.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/boolcoder.cxx b/vp8/common/x86/boolcoder.cxx
-index 06faca6..cd9c495 100644
---- a/vp8/common/x86/boolcoder.cxx
-+++ b/vp8/common/x86/boolcoder.cxx
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/idct_x86.h b/vp8/common/x86/idct_x86.h
-index 5dfb212..1f2cb63 100644
---- a/vp8/common/x86/idct_x86.h
-+++ b/vp8/common/x86/idct_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/idctllm_mmx.asm b/vp8/common/x86/idctllm_mmx.asm
-index 2751c69..5ec01e9 100644
---- a/vp8/common/x86/idctllm_mmx.asm
-+++ b/vp8/common/x86/idctllm_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/x86/iwalsh_mmx.asm b/vp8/common/x86/iwalsh_mmx.asm
-index 562e590..6cb8979 100644
---- a/vp8/common/x86/iwalsh_mmx.asm
-+++ b/vp8/common/x86/iwalsh_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/x86/iwalsh_sse2.asm b/vp8/common/x86/iwalsh_sse2.asm
-index 96943df..bb0d1d7 100644
---- a/vp8/common/x86/iwalsh_sse2.asm
-+++ b/vp8/common/x86/iwalsh_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-@@ -16,6 +17,7 @@ sym(vp8_short_inv_walsh4x4_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 2
-+ SAVE_XMM
- push rsi
- push rdi
- ; end prolog
-@@ -100,6 +102,7 @@ sym(vp8_short_inv_walsh4x4_sse2):
- ; begin epilog
- pop rdi
- pop rsi
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-diff --git a/vp8/common/x86/loopfilter_mmx.asm b/vp8/common/x86/loopfilter_mmx.asm
-index 6e4d2b6..6e6efab 100644
---- a/vp8/common/x86/loopfilter_mmx.asm
-+++ b/vp8/common/x86/loopfilter_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/x86/loopfilter_sse2.asm b/vp8/common/x86/loopfilter_sse2.asm
-index 5275dfa..d160dd6 100644
---- a/vp8/common/x86/loopfilter_sse2.asm
-+++ b/vp8/common/x86/loopfilter_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-@@ -25,6 +26,7 @@ sym(vp8_loop_filter_horizontal_edge_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -211,6 +213,7 @@ sym(vp8_loop_filter_horizontal_edge_sse2):
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -230,6 +233,7 @@ sym(vp8_loop_filter_vertical_edge_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -651,6 +655,7 @@ sym(vp8_loop_filter_vertical_edge_sse2):
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -670,6 +675,7 @@ sym(vp8_mbloop_filter_horizontal_edge_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -1001,6 +1007,7 @@ sym(vp8_mbloop_filter_horizontal_edge_sse2):
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -1020,6 +1027,7 @@ sym(vp8_mbloop_filter_vertical_edge_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -1563,6 +1571,7 @@ sym(vp8_mbloop_filter_vertical_edge_sse2):
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -1582,6 +1591,7 @@ sym(vp8_loop_filter_simple_horizontal_edge_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -1678,6 +1688,7 @@ sym(vp8_loop_filter_simple_horizontal_edge_sse2):
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -1697,6 +1708,7 @@ sym(vp8_loop_filter_simple_vertical_edge_sse2):
- push rbp ; save old base pointer value.
- mov rbp, rsp ; set new base pointer value.
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx ; save callee-saved reg
- push rsi
- push rdi
-@@ -1941,6 +1953,7 @@ sym(vp8_loop_filter_simple_vertical_edge_sse2):
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-diff --git a/vp8/common/x86/loopfilter_x86.c b/vp8/common/x86/loopfilter_x86.c
-index 143ee74..f5af7cf 100644
---- a/vp8/common/x86/loopfilter_x86.c
-+++ b/vp8/common/x86/loopfilter_x86.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/loopfilter_x86.h b/vp8/common/x86/loopfilter_x86.h
-index c87f38a..503bf5b 100644
---- a/vp8/common/x86/loopfilter_x86.h
-+++ b/vp8/common/x86/loopfilter_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/postproc_mmx.asm b/vp8/common/x86/postproc_mmx.asm
-index 721c8d6..0707651 100644
---- a/vp8/common/x86/postproc_mmx.asm
-+++ b/vp8/common/x86/postproc_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/x86/postproc_mmx.c b/vp8/common/x86/postproc_mmx.c
-index 095797b..f3b2923 100644
---- a/vp8/common/x86/postproc_mmx.c
-+++ b/vp8/common/x86/postproc_mmx.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/postproc_sse2.asm b/vp8/common/x86/postproc_sse2.asm
-index bfa36fa..9e56429 100644
---- a/vp8/common/x86/postproc_sse2.asm
-+++ b/vp8/common/x86/postproc_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-@@ -25,6 +26,7 @@ sym(vp8_post_proc_down_and_across_xmm):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 7
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -239,6 +241,7 @@ acrossnextcol:
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -253,6 +256,7 @@ sym(vp8_mbpost_proc_down_xmm):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 5
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -438,6 +442,7 @@ loop_row:
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -451,6 +456,7 @@ sym(vp8_mbpost_proc_across_ip_xmm):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 5
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -611,6 +617,7 @@ nextcol4:
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-diff --git a/vp8/common/x86/postproc_x86.h b/vp8/common/x86/postproc_x86.h
-index 49a1907..f939427 100644
---- a/vp8/common/x86/postproc_x86.h
-+++ b/vp8/common/x86/postproc_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/recon_mmx.asm b/vp8/common/x86/recon_mmx.asm
-index ba60c5d..95c308d 100644
---- a/vp8/common/x86/recon_mmx.asm
-+++ b/vp8/common/x86/recon_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/x86/recon_sse2.asm b/vp8/common/x86/recon_sse2.asm
-index f2685a7..cfdbfad 100644
---- a/vp8/common/x86/recon_sse2.asm
-+++ b/vp8/common/x86/recon_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-@@ -66,6 +67,7 @@ sym(vp8_recon4b_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 4
-+ SAVE_XMM
- push rsi
- push rdi
- ; end prolog
-@@ -118,6 +120,7 @@ sym(vp8_recon4b_sse2):
- ; begin epilog
- pop rdi
- pop rsi
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-diff --git a/vp8/common/x86/recon_x86.h b/vp8/common/x86/recon_x86.h
-index c469778..fcd429c 100644
---- a/vp8/common/x86/recon_x86.h
-+++ b/vp8/common/x86/recon_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/subpixel_mmx.asm b/vp8/common/x86/subpixel_mmx.asm
-index c502118..b3e4ad5 100644
---- a/vp8/common/x86/subpixel_mmx.asm
-+++ b/vp8/common/x86/subpixel_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/common/x86/subpixel_sse2.asm b/vp8/common/x86/subpixel_sse2.asm
-index dee04f2..ee383ad 100644
---- a/vp8/common/x86/subpixel_sse2.asm
-+++ b/vp8/common/x86/subpixel_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-@@ -36,6 +37,7 @@ sym(vp8_filter_block1d8_h6_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 7
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -128,6 +130,7 @@ filter_block1d8_h6_rowloop:
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -154,6 +157,7 @@ sym(vp8_filter_block1d16_h6_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 7
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -303,6 +307,7 @@ filter_block1d16_h6_sse2_rowloop:
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -328,6 +333,7 @@ sym(vp8_filter_block1d8_v6_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 8
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -396,221 +402,553 @@ vp8_filter_block1d8_v6_sse2_loop:
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-
-
--;void vp8_unpack_block1d16_h6_sse2
-+;void vp8_filter_block1d16_v6_sse2
-+;(
-+; unsigned short *src_ptr,
-+; unsigned char *output_ptr,
-+; int dst_ptich,
-+; unsigned int pixels_per_line,
-+; unsigned int pixel_step,
-+; unsigned int output_height,
-+; unsigned int output_width,
-+; const short *vp8_filter
-+;)
-+;/************************************************************************************
-+; Notes: filter_block1d16_v6 applies a 6 tap filter vertically to the input pixels. The
-+; input pixel array has output_height rows.
-+;*************************************************************************************/
-+global sym(vp8_filter_block1d16_v6_sse2)
-+sym(vp8_filter_block1d16_v6_sse2):
-+ push rbp
-+ mov rbp, rsp
-+ SHADOW_ARGS_TO_STACK 8
-+ SAVE_XMM
-+ GET_GOT rbx
-+ push rsi
-+ push rdi
-+ ; end prolog
-+
-+ mov rax, arg(7) ;vp8_filter
-+ movsxd rdx, dword ptr arg(3) ;pixels_per_line
-+
-+ mov rdi, arg(1) ;output_ptr
-+ mov rsi, arg(0) ;src_ptr
-+
-+ sub rsi, rdx
-+ sub rsi, rdx
-+
-+ movsxd rcx, DWORD PTR arg(5) ;[output_height]
-+%if ABI_IS_32BIT=0
-+ movsxd r8, dword ptr arg(2) ; dst_ptich
-+%endif
-+
-+vp8_filter_block1d16_v6_sse2_loop:
-+; The order for adding 6-tap is 2 5 3 1 4 6. Read in data in that order.
-+ movdqa xmm1, XMMWORD PTR [rsi + rdx] ; line 2
-+ movdqa xmm2, XMMWORD PTR [rsi + rdx + 16]
-+ pmullw xmm1, [rax + 16]
-+ pmullw xmm2, [rax + 16]
-+
-+ movdqa xmm3, XMMWORD PTR [rsi + rdx * 4] ; line 5
-+ movdqa xmm4, XMMWORD PTR [rsi + rdx * 4 + 16]
-+ pmullw xmm3, [rax + 64]
-+ pmullw xmm4, [rax + 64]
-+
-+ movdqa xmm5, XMMWORD PTR [rsi + rdx * 2] ; line 3
-+ movdqa xmm6, XMMWORD PTR [rsi + rdx * 2 + 16]
-+ pmullw xmm5, [rax + 32]
-+ pmullw xmm6, [rax + 32]
-+
-+ movdqa xmm7, XMMWORD PTR [rsi] ; line 1
-+ movdqa xmm0, XMMWORD PTR [rsi + 16]
-+ pmullw xmm7, [rax]
-+ pmullw xmm0, [rax]
-+
-+ paddsw xmm1, xmm3
-+ paddsw xmm2, xmm4
-+ paddsw xmm1, xmm5
-+ paddsw xmm2, xmm6
-+ paddsw xmm1, xmm7
-+ paddsw xmm2, xmm0
-+
-+ add rsi, rdx
-+
-+ movdqa xmm3, XMMWORD PTR [rsi + rdx * 2] ; line 4
-+ movdqa xmm4, XMMWORD PTR [rsi + rdx * 2 + 16]
-+ pmullw xmm3, [rax + 48]
-+ pmullw xmm4, [rax + 48]
-+
-+ movdqa xmm5, XMMWORD PTR [rsi + rdx * 4] ; line 6
-+ movdqa xmm6, XMMWORD PTR [rsi + rdx * 4 + 16]
-+ pmullw xmm5, [rax + 80]
-+ pmullw xmm6, [rax + 80]
-+
-+ movdqa xmm7, XMMWORD PTR [rd GLOBAL]
-+ pxor xmm0, xmm0 ; clear xmm0
-+
-+ paddsw xmm1, xmm3
-+ paddsw xmm2, xmm4
-+ paddsw xmm1, xmm5
-+ paddsw xmm2, xmm6
-+
-+ paddsw xmm1, xmm7
-+ paddsw xmm2, xmm7
-+
-+ psraw xmm1, 7
-+ psraw xmm2, 7
-+
-+ packuswb xmm1, xmm2 ; pack and saturate
-+ movdqa XMMWORD PTR [rdi], xmm1 ; store the results in the destination
-+%if ABI_IS_32BIT
-+ add rdi, DWORD PTR arg(2) ;[dst_ptich]
-+%else
-+ add rdi, r8
-+%endif
-+ dec rcx ; decrement count
-+ jnz vp8_filter_block1d16_v6_sse2_loop ; next row
-+
-+ ; begin epilog
-+ pop rdi
-+ pop rsi
-+ RESTORE_GOT
-+ RESTORE_XMM
-+ UNSHADOW_ARGS
-+ pop rbp
-+ ret
-+
-+
-+;void vp8_filter_block1d8_h6_only_sse2
- ;(
- ; unsigned char *src_ptr,
--; unsigned short *output_ptr,
- ; unsigned int src_pixels_per_line,
-+; unsigned char *output_ptr,
-+; int dst_ptich,
- ; unsigned int output_height,
--; unsigned int output_width
-+; const short *vp8_filter
- ;)
--global sym(vp8_unpack_block1d16_h6_sse2)
--sym(vp8_unpack_block1d16_h6_sse2):
-+; First-pass filter only when yoffset==0
-+global sym(vp8_filter_block1d8_h6_only_sse2)
-+sym(vp8_filter_block1d8_h6_only_sse2):
- push rbp
- mov rbp, rsp
-- SHADOW_ARGS_TO_STACK 5
-+ SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
- ; end prolog
-
-+ mov rdx, arg(5) ;vp8_filter
- mov rsi, arg(0) ;src_ptr
-- mov rdi, arg(1) ;output_ptr
-
-- movsxd rcx, dword ptr arg(3) ;output_height
-- movsxd rax, dword ptr arg(2) ;src_pixels_per_line ; Pitch for Source
-+ mov rdi, arg(2) ;output_ptr
-
-- pxor xmm0, xmm0 ; clear xmm0 for unpack
-+ movsxd rcx, dword ptr arg(4) ;output_height
-+ movsxd rax, dword ptr arg(1) ;src_pixels_per_line ; Pitch for Source
- %if ABI_IS_32BIT=0
-- movsxd r8, dword ptr arg(4) ;output_width ; Pitch for Source
-+ movsxd r8, dword ptr arg(3) ;dst_ptich
- %endif
-+ pxor xmm0, xmm0 ; clear xmm0 for unpack
-
--unpack_block1d16_h6_sse2_rowloop:
-- movq xmm1, MMWORD PTR [rsi] ; 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00 -1 -2
-- movq xmm3, MMWORD PTR [rsi+8] ; make copy of xmm1
-+filter_block1d8_h6_only_rowloop:
-+ movq xmm3, MMWORD PTR [rsi - 2]
-+ movq xmm1, MMWORD PTR [rsi + 6]
-+
-+ prefetcht2 [rsi+rax-2]
-+
-+ pslldq xmm1, 8
-+ por xmm1, xmm3
-+
-+ movdqa xmm4, xmm1
-+ movdqa xmm5, xmm1
-+
-+ movdqa xmm6, xmm1
-+ movdqa xmm7, xmm1
-
- punpcklbw xmm3, xmm0 ; xx05 xx04 xx03 xx02 xx01 xx01 xx-1 xx-2
-- punpcklbw xmm1, xmm0
-+ psrldq xmm4, 1 ; xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00 -1
-+
-+ pmullw xmm3, XMMWORD PTR [rdx] ; x[-2] * H[-2]; Tap 1
-+ punpcklbw xmm4, xmm0 ; xx06 xx05 xx04 xx03 xx02 xx01 xx00 xx-1
-+
-+ psrldq xmm5, 2 ; xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00
-+ pmullw xmm4, XMMWORD PTR [rdx+16] ; x[-1] * H[-1]; Tap 2
-+
-+
-+ punpcklbw xmm5, xmm0 ; xx07 xx06 xx05 xx04 xx03 xx02 xx01 xx00
-+ psrldq xmm6, 3 ; xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01
-+
-+ pmullw xmm5, [rdx+32] ; x[ 0] * H[ 0]; Tap 3
-+
-+ punpcklbw xmm6, xmm0 ; xx08 xx07 xx06 xx05 xx04 xx03 xx02 xx01
-+ psrldq xmm7, 4 ; xx xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02
-+
-+ pmullw xmm6, [rdx+48] ; x[ 1] * h[ 1] ; Tap 4
-+
-+ punpcklbw xmm7, xmm0 ; xx09 xx08 xx07 xx06 xx05 xx04 xx03 xx02
-+ psrldq xmm1, 5 ; xx xx xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03
-+
-+
-+ pmullw xmm7, [rdx+64] ; x[ 2] * h[ 2] ; Tap 5
-+
-+ punpcklbw xmm1, xmm0 ; xx0a xx09 xx08 xx07 xx06 xx05 xx04 xx03
-+ pmullw xmm1, [rdx+80] ; x[ 3] * h[ 3] ; Tap 6
-
-- movdqa XMMWORD Ptr [rdi], xmm1
-- movdqa XMMWORD Ptr [rdi + 16], xmm3
-
-+ paddsw xmm4, xmm7
-+ paddsw xmm4, xmm5
-+
-+ paddsw xmm4, xmm3
-+ paddsw xmm4, xmm6
-+
-+ paddsw xmm4, xmm1
-+ paddsw xmm4, [rd GLOBAL]
-+
-+ psraw xmm4, 7
-+
-+ packuswb xmm4, xmm0
-+
-+ movq QWORD PTR [rdi], xmm4 ; store the results in the destination
- lea rsi, [rsi + rax]
-+
- %if ABI_IS_32BIT
-- add rdi, DWORD Ptr arg(4) ;[output_width]
-+ add rdi, DWORD Ptr arg(3) ;dst_ptich
- %else
- add rdi, r8
- %endif
- dec rcx
-- jnz unpack_block1d16_h6_sse2_rowloop ; next row
-+
-+ jnz filter_block1d8_h6_only_rowloop ; next row
-
- ; begin epilog
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-
-
--;void vp8_unpack_block1d8_h6_sse2
-+;void vp8_filter_block1d16_h6_only_sse2
- ;(
- ; unsigned char *src_ptr,
--; unsigned short *output_ptr,
- ; unsigned int src_pixels_per_line,
-+; unsigned char *output_ptr,
-+; int dst_ptich,
- ; unsigned int output_height,
--; unsigned int output_width
-+; const short *vp8_filter
- ;)
--global sym(vp8_unpack_block1d8_h6_sse2)
--sym(vp8_unpack_block1d8_h6_sse2):
-+; First-pass filter only when yoffset==0
-+global sym(vp8_filter_block1d16_h6_only_sse2)
-+sym(vp8_filter_block1d16_h6_only_sse2):
- push rbp
- mov rbp, rsp
-- SHADOW_ARGS_TO_STACK 5
-+ SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
- ; end prolog
-
-+ mov rdx, arg(5) ;vp8_filter
- mov rsi, arg(0) ;src_ptr
-- mov rdi, arg(1) ;output_ptr
-
-- movsxd rcx, dword ptr arg(3) ;output_height
-- movsxd rax, dword ptr arg(2) ;src_pixels_per_line ; Pitch for Source
-+ mov rdi, arg(2) ;output_ptr
-
-- pxor xmm0, xmm0 ; clear xmm0 for unpack
-+ movsxd rcx, dword ptr arg(4) ;output_height
-+ movsxd rax, dword ptr arg(1) ;src_pixels_per_line ; Pitch for Source
- %if ABI_IS_32BIT=0
-- movsxd r8, dword ptr arg(4) ;output_width ; Pitch for Source
-+ movsxd r8, dword ptr arg(3) ;dst_ptich
- %endif
-
--unpack_block1d8_h6_sse2_rowloop:
-- movq xmm1, MMWORD PTR [rsi] ; 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00 -1 -2
-- lea rsi, [rsi + rax]
-+ pxor xmm0, xmm0 ; clear xmm0 for unpack
-
-- punpcklbw xmm1, xmm0
-- movdqa XMMWORD Ptr [rdi], xmm1
-+filter_block1d16_h6_only_sse2_rowloop:
-+ movq xmm3, MMWORD PTR [rsi - 2]
-+ movq xmm1, MMWORD PTR [rsi + 6]
-+
-+ movq xmm2, MMWORD PTR [rsi +14]
-+ pslldq xmm2, 8
-+
-+ por xmm2, xmm1
-+ prefetcht2 [rsi+rax-2]
-+
-+ pslldq xmm1, 8
-+ por xmm1, xmm3
-
-+ movdqa xmm4, xmm1
-+ movdqa xmm5, xmm1
-+
-+ movdqa xmm6, xmm1
-+ movdqa xmm7, xmm1
-+
-+ punpcklbw xmm3, xmm0 ; xx05 xx04 xx03 xx02 xx01 xx01 xx-1 xx-2
-+ psrldq xmm4, 1 ; xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00 -1
-+
-+ pmullw xmm3, XMMWORD PTR [rdx] ; x[-2] * H[-2]; Tap 1
-+ punpcklbw xmm4, xmm0 ; xx06 xx05 xx04 xx03 xx02 xx01 xx00 xx-1
-+
-+ psrldq xmm5, 2 ; xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00
-+ pmullw xmm4, XMMWORD PTR [rdx+16] ; x[-1] * H[-1]; Tap 2
-+
-+ punpcklbw xmm5, xmm0 ; xx07 xx06 xx05 xx04 xx03 xx02 xx01 xx00
-+ psrldq xmm6, 3 ; xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01
-+
-+ pmullw xmm5, [rdx+32] ; x[ 0] * H[ 0]; Tap 3
-+
-+ punpcklbw xmm6, xmm0 ; xx08 xx07 xx06 xx05 xx04 xx03 xx02 xx01
-+ psrldq xmm7, 4 ; xx xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02
-+
-+ pmullw xmm6, [rdx+48] ; x[ 1] * h[ 1] ; Tap 4
-+
-+ punpcklbw xmm7, xmm0 ; xx09 xx08 xx07 xx06 xx05 xx04 xx03 xx02
-+ psrldq xmm1, 5 ; xx xx xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03
-+
-+ pmullw xmm7, [rdx+64] ; x[ 2] * h[ 2] ; Tap 5
-+
-+ punpcklbw xmm1, xmm0 ; xx0a xx09 xx08 xx07 xx06 xx05 xx04 xx03
-+ pmullw xmm1, [rdx+80] ; x[ 3] * h[ 3] ; Tap 6
-+
-+ paddsw xmm4, xmm7
-+ paddsw xmm4, xmm5
-+
-+ paddsw xmm4, xmm3
-+ paddsw xmm4, xmm6
-+
-+ paddsw xmm4, xmm1
-+ paddsw xmm4, [rd GLOBAL]
-+
-+ psraw xmm4, 7
-+
-+ packuswb xmm4, xmm0 ; lower 8 bytes
-+
-+ movq QWORD Ptr [rdi], xmm4 ; store the results in the destination
-+
-+ movdqa xmm3, xmm2
-+ movdqa xmm4, xmm2
-+
-+ movdqa xmm5, xmm2
-+ movdqa xmm6, xmm2
-+
-+ movdqa xmm7, xmm2
-+
-+ punpcklbw xmm3, xmm0 ; xx05 xx04 xx03 xx02 xx01 xx01 xx-1 xx-2
-+ psrldq xmm4, 1 ; xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00 -1
-+
-+ pmullw xmm3, XMMWORD PTR [rdx] ; x[-2] * H[-2]; Tap 1
-+ punpcklbw xmm4, xmm0 ; xx06 xx05 xx04 xx03 xx02 xx01 xx00 xx-1
-+
-+ psrldq xmm5, 2 ; xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00
-+ pmullw xmm4, XMMWORD PTR [rdx+16] ; x[-1] * H[-1]; Tap 2
-+
-+ punpcklbw xmm5, xmm0 ; xx07 xx06 xx05 xx04 xx03 xx02 xx01 xx00
-+ psrldq xmm6, 3 ; xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01
-+
-+ pmullw xmm5, [rdx+32] ; x[ 0] * H[ 0]; Tap 3
-+
-+ punpcklbw xmm6, xmm0 ; xx08 xx07 xx06 xx05 xx04 xx03 xx02 xx01
-+ psrldq xmm7, 4 ; xx xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03 02
-+
-+ pmullw xmm6, [rdx+48] ; x[ 1] * h[ 1] ; Tap 4
-+
-+ punpcklbw xmm7, xmm0 ; xx09 xx08 xx07 xx06 xx05 xx04 xx03 xx02
-+ psrldq xmm2, 5 ; xx xx xx xx xx 0d 0c 0b 0a 09 08 07 06 05 04 03
-+
-+ pmullw xmm7, [rdx+64] ; x[ 2] * h[ 2] ; Tap 5
-+
-+ punpcklbw xmm2, xmm0 ; xx0a xx09 xx08 xx07 xx06 xx05 xx04 xx03
-+ pmullw xmm2, [rdx+80] ; x[ 3] * h[ 3] ; Tap 6
-+
-+ paddsw xmm4, xmm7
-+ paddsw xmm4, xmm5
-+
-+ paddsw xmm4, xmm3
-+ paddsw xmm4, xmm6
-+
-+ paddsw xmm4, xmm2
-+ paddsw xmm4, [rd GLOBAL]
-+
-+ psraw xmm4, 7
-+
-+ packuswb xmm4, xmm0 ; higher 8 bytes
-+
-+ movq QWORD Ptr [rdi+8], xmm4 ; store the results in the destination
-+
-+ lea rsi, [rsi + rax]
- %if ABI_IS_32BIT
-- add rdi, DWORD Ptr arg(4) ;[output_width]
-+ add rdi, DWORD Ptr arg(3) ;dst_ptich
- %else
- add rdi, r8
- %endif
-+
- dec rcx
-- jnz unpack_block1d8_h6_sse2_rowloop ; next row
-+ jnz filter_block1d16_h6_only_sse2_rowloop ; next row
-
- ; begin epilog
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-
-
--;void vp8_pack_block1d8_v6_sse2
-+;void vp8_filter_block1d8_v6_only_sse2
- ;(
--; short *src_ptr,
-+; unsigned char *src_ptr,
-+; unsigned int src_pixels_per_line,
- ; unsigned char *output_ptr,
- ; int dst_ptich,
--; unsigned int pixels_per_line,
- ; unsigned int output_height,
--; unsigned int output_width
-+; const short *vp8_filter
- ;)
--global sym(vp8_pack_block1d8_v6_sse2)
--sym(vp8_pack_block1d8_v6_sse2):
-+; Second-pass filter only when xoffset==0
-+global sym(vp8_filter_block1d8_v6_only_sse2)
-+sym(vp8_filter_block1d8_v6_only_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
- ; end prolog
-
-- movsxd rdx, dword ptr arg(3) ;pixels_per_line
-- mov rdi, arg(1) ;output_ptr
--
- mov rsi, arg(0) ;src_ptr
-- movsxd rcx, DWORD PTR arg(4) ;[output_height]
-+ mov rdi, arg(2) ;output_ptr
-+
-+ movsxd rcx, dword ptr arg(4) ;output_height
-+ movsxd rdx, dword ptr arg(1) ;src_pixels_per_line
-+
-+ mov rax, arg(5) ;vp8_filter
-+
-+ pxor xmm0, xmm0 ; clear xmm0
-+
-+ movdqa xmm7, XMMWORD PTR [rd GLOBAL]
- %if ABI_IS_32BIT=0
-- movsxd r8, dword ptr arg(5) ;output_width ; Pitch for Source
-+ movsxd r8, dword ptr arg(3) ; dst_ptich
- %endif
-
--pack_block1d8_v6_sse2_loop:
-- movdqa xmm0, XMMWORD PTR [rsi]
-- packuswb xmm0, xmm0
-+vp8_filter_block1d8_v6_only_sse2_loop:
-+ movq xmm1, MMWORD PTR [rsi]
-+ movq xmm2, MMWORD PTR [rsi + rdx]
-+ movq xmm3, MMWORD PTR [rsi + rdx * 2]
-+ movq xmm5, MMWORD PTR [rsi + rdx * 4]
-+ add rsi, rdx
-+ movq xmm4, MMWORD PTR [rsi + rdx * 2]
-+ movq xmm6, MMWORD PTR [rsi + rdx * 4]
-+
-+ punpcklbw xmm1, xmm0
-+ pmullw xmm1, [rax]
-+
-+ punpcklbw xmm2, xmm0
-+ pmullw xmm2, [rax + 16]
-+
-+ punpcklbw xmm3, xmm0
-+ pmullw xmm3, [rax + 32]
-+
-+ punpcklbw xmm5, xmm0
-+ pmullw xmm5, [rax + 64]
-+
-+ punpcklbw xmm4, xmm0
-+ pmullw xmm4, [rax + 48]
-+
-+ punpcklbw xmm6, xmm0
-+ pmullw xmm6, [rax + 80]
-+
-+ paddsw xmm2, xmm5
-+ paddsw xmm2, xmm3
-+
-+ paddsw xmm2, xmm1
-+ paddsw xmm2, xmm4
-+
-+ paddsw xmm2, xmm6
-+ paddsw xmm2, xmm7
-
-- movq QWORD PTR [rdi], xmm0 ; store the results in the destination
-- lea rsi, [rsi+rdx]
-+ psraw xmm2, 7
-+ packuswb xmm2, xmm0 ; pack and saturate
-
-+ movq QWORD PTR [rdi], xmm2 ; store the results in the destination
- %if ABI_IS_32BIT
-- add rdi, DWORD Ptr arg(5) ;[output_width]
-+ add rdi, DWORD PTR arg(3) ;[dst_ptich]
- %else
- add rdi, r8
- %endif
- dec rcx ; decrement count
-- jnz pack_block1d8_v6_sse2_loop ; next row
-+ jnz vp8_filter_block1d8_v6_only_sse2_loop ; next row
-
- ; begin epilog
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-
-
--;void vp8_pack_block1d16_v6_sse2
-+;void vp8_unpack_block1d16_h6_sse2
- ;(
--; short *src_ptr,
--; unsigned char *output_ptr,
--; int dst_ptich,
--; unsigned int pixels_per_line,
--; unsigned int output_height,
--; unsigned int output_width
-+; unsigned char *src_ptr,
-+; unsigned short *output_ptr,
-+; unsigned int src_pixels_per_line,
-+; unsigned int output_height,
-+; unsigned int output_width
- ;)
--global sym(vp8_pack_block1d16_v6_sse2)
--sym(vp8_pack_block1d16_v6_sse2):
-+global sym(vp8_unpack_block1d16_h6_sse2)
-+sym(vp8_unpack_block1d16_h6_sse2):
- push rbp
- mov rbp, rsp
-- SHADOW_ARGS_TO_STACK 6
-+ SHADOW_ARGS_TO_STACK 5
-+ ;SAVE_XMM ;xmm6, xmm7 are not used here.
- GET_GOT rbx
- push rsi
- push rdi
- ; end prolog
-
-- movsxd rdx, dword ptr arg(3) ;pixels_per_line
-+ mov rsi, arg(0) ;src_ptr
- mov rdi, arg(1) ;output_ptr
-
-- mov rsi, arg(0) ;src_ptr
-- movsxd rcx, DWORD PTR arg(4) ;[output_height]
-+ movsxd rcx, dword ptr arg(3) ;output_height
-+ movsxd rax, dword ptr arg(2) ;src_pixels_per_line ; Pitch for Source
-+
-+ pxor xmm0, xmm0 ; clear xmm0 for unpack
- %if ABI_IS_32BIT=0
-- movsxd r8, dword ptr arg(2) ;dst_pitch
-+ movsxd r8, dword ptr arg(4) ;output_width ; Pitch for Source
- %endif
-
--pack_block1d16_v6_sse2_loop:
-- movdqa xmm0, XMMWORD PTR [rsi]
-- movdqa xmm1, XMMWORD PTR [rsi+16]
-+unpack_block1d16_h6_sse2_rowloop:
-+ movq xmm1, MMWORD PTR [rsi] ; 0d 0c 0b 0a 09 08 07 06 05 04 03 02 01 00 -1 -2
-+ movq xmm3, MMWORD PTR [rsi+8] ; make copy of xmm1
-+
-+ punpcklbw xmm3, xmm0 ; xx05 xx04 xx03 xx02 xx01 xx01 xx-1 xx-2
-+ punpcklbw xmm1, xmm0
-
-- packuswb xmm0, xmm1
-- movdqa XMMWORD PTR [rdi], xmm0 ; store the results in the destination
-+ movdqa XMMWORD Ptr [rdi], xmm1
-+ movdqa XMMWORD Ptr [rdi + 16], xmm3
-
-- add rsi, rdx
-+ lea rsi, [rsi + rax]
- %if ABI_IS_32BIT
-- add rdi, DWORD Ptr arg(2) ;dst_pitch
-+ add rdi, DWORD Ptr arg(4) ;[output_width]
- %else
- add rdi, r8
- %endif
-- dec rcx ; decrement count
-- jnz pack_block1d16_v6_sse2_loop ; next row
-+ dec rcx
-+ jnz unpack_block1d16_h6_sse2_rowloop ; next row
-
- ; begin epilog
- pop rdi
- pop rsi
- RESTORE_GOT
-+ ;RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -631,6 +969,7 @@ sym(vp8_bilinear_predict16x16_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -878,6 +1217,7 @@ done:
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-@@ -898,6 +1238,7 @@ sym(vp8_bilinear_predict8x8_sse2):
- push rbp
- mov rbp, rsp
- SHADOW_ARGS_TO_STACK 6
-+ SAVE_XMM
- GET_GOT rbx
- push rsi
- push rdi
-@@ -1021,6 +1362,7 @@ next_row8x8:
- pop rdi
- pop rsi
- RESTORE_GOT
-+ RESTORE_XMM
- UNSHADOW_ARGS
- pop rbp
- ret
-diff --git a/vp8/common/x86/subpixel_x86.h b/vp8/common/x86/subpixel_x86.h
-index efa7b2e..bd6859c 100644
---- a/vp8/common/x86/subpixel_x86.h
-+++ b/vp8/common/x86/subpixel_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/common/x86/vp8_asm_stubs.c b/vp8/common/x86/vp8_asm_stubs.c
-index 68454f7..163ec5b 100644
---- a/vp8/common/x86/vp8_asm_stubs.c
-+++ b/vp8/common/x86/vp8_asm_stubs.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -67,6 +68,17 @@ extern void vp8_filter_block1d8_v6_sse2
- unsigned int output_width,
- const short *vp8_filter
- );
-+extern void vp8_filter_block1d16_v6_sse2
-+(
-+ unsigned short *src_ptr,
-+ unsigned char *output_ptr,
-+ int dst_ptich,
-+ unsigned int pixels_per_line,
-+ unsigned int pixel_step,
-+ unsigned int output_height,
-+ unsigned int output_width,
-+ const short *vp8_filter
-+);
- extern void vp8_unpack_block1d16_h6_sse2
- (
- unsigned char *src_ptr,
-@@ -75,31 +87,32 @@ extern void vp8_unpack_block1d16_h6_sse2
- unsigned int output_height,
- unsigned int output_width
- );
--extern void vp8_unpack_block1d8_h6_sse2
-+extern void vp8_filter_block1d8_h6_only_sse2
- (
- unsigned char *src_ptr,
-- unsigned short *output_ptr,
- unsigned int src_pixels_per_line,
-+ unsigned char *output_ptr,
-+ int dst_ptich,
- unsigned int output_height,
-- unsigned int output_width
-+ const short *vp8_filter
- );
--extern void vp8_pack_block1d8_v6_sse2
-+extern void vp8_filter_block1d16_h6_only_sse2
- (
-- unsigned short *src_ptr,
-- unsigned char *output_ptr,
-+ unsigned char *src_ptr,
-+ unsigned int src_pixels_per_line,
-+ unsigned char *output_ptr,
- int dst_ptich,
-- unsigned int pixels_per_line,
-- unsigned int output_height,
-- unsigned int output_width
-+ unsigned int output_height,
-+ const short *vp8_filter
- );
--extern void vp8_pack_block1d16_v6_sse2
-+extern void vp8_filter_block1d8_v6_only_sse2
- (
-- unsigned short *src_ptr,
-+ unsigned char *src_ptr,
-+ unsigned int src_pixels_per_line,
- unsigned char *output_ptr,
- int dst_ptich,
-- unsigned int pixels_per_line,
-- unsigned int output_height,
-- unsigned int output_width
-+ unsigned int output_height,
-+ const short *vp8_filter
- );
- extern prototype_subpixel_predict(vp8_bilinear_predict8x8_mmx);
-
-@@ -246,23 +259,26 @@ void vp8_sixtap_predict16x16_sse2
-
- if (xoffset)
- {
-- HFilter = vp8_six_tap_mmx[xoffset];
-- vp8_filter_block1d16_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 1, 21, 32, HFilter);
-+ if (yoffset)
-+ {
-+ HFilter = vp8_six_tap_mmx[xoffset];
-+ vp8_filter_block1d16_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 1, 21, 32, HFilter);
-+ VFilter = vp8_six_tap_mmx[yoffset];
-+ vp8_filter_block1d16_v6_sse2(FData2 + 32, dst_ptr, dst_pitch, 32, 16 , 16, dst_pitch, VFilter);
-+ }
-+ else
-+ {
-+ // First-pass only
-+ HFilter = vp8_six_tap_mmx[xoffset];
-+ vp8_filter_block1d16_h6_only_sse2(src_ptr, src_pixels_per_line, dst_ptr, dst_pitch, 16, HFilter);
-+ }
- }
- else
- {
-- vp8_unpack_block1d16_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 21, 32);
-- }
--
-- if (yoffset)
-- {
-+ // Second-pass only
- VFilter = vp8_six_tap_mmx[yoffset];
-- vp8_filter_block1d8_v6_sse2(FData2 + 32, dst_ptr, dst_pitch, 32, 16 , 16, 16, VFilter);
-- vp8_filter_block1d8_v6_sse2(FData2 + 40, dst_ptr + 8, dst_pitch, 32, 16 , 16, 16, VFilter);
-- }
-- else
-- {
-- vp8_pack_block1d16_v6_sse2(FData2 + 32, dst_ptr, dst_pitch, 32, 16, 16);
-+ vp8_unpack_block1d16_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 21, 32);
-+ vp8_filter_block1d16_v6_sse2(FData2 + 32, dst_ptr, dst_pitch, 32, 16 , 16, dst_pitch, VFilter);
- }
- }
-
-@@ -282,25 +298,26 @@ void vp8_sixtap_predict8x8_sse2
-
- if (xoffset)
- {
-- HFilter = vp8_six_tap_mmx[xoffset];
-- vp8_filter_block1d8_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 1, 13, 16, HFilter);
-+ if (yoffset)
-+ {
-+ HFilter = vp8_six_tap_mmx[xoffset];
-+ vp8_filter_block1d8_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 1, 13, 16, HFilter);
-+ VFilter = vp8_six_tap_mmx[yoffset];
-+ vp8_filter_block1d8_v6_sse2(FData2 + 16, dst_ptr, dst_pitch, 16, 8 , 8, dst_pitch, VFilter);
-+ }
-+ else
-+ {
-+ // First-pass only
-+ HFilter = vp8_six_tap_mmx[xoffset];
-+ vp8_filter_block1d8_h6_only_sse2(src_ptr, src_pixels_per_line, dst_ptr, dst_pitch, 8, HFilter);
-+ }
- }
- else
- {
-- vp8_unpack_block1d8_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 13, 16);
-- }
--
-- if (yoffset)
-- {
-+ // Second-pass only
- VFilter = vp8_six_tap_mmx[yoffset];
-- vp8_filter_block1d8_v6_sse2(FData2 + 16, dst_ptr, dst_pitch, 16, 8 , 8, dst_pitch, VFilter);
-- }
-- else
-- {
-- vp8_pack_block1d8_v6_sse2(FData2 + 16, dst_ptr, dst_pitch, 16, 8, dst_pitch);
-+ vp8_filter_block1d8_v6_only_sse2(src_ptr - (2 * src_pixels_per_line), src_pixels_per_line, dst_ptr, dst_pitch, 8, VFilter);
- }
--
--
- }
-
-
-@@ -319,24 +336,26 @@ void vp8_sixtap_predict8x4_sse2
-
- if (xoffset)
- {
-- HFilter = vp8_six_tap_mmx[xoffset];
-- vp8_filter_block1d8_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 1, 9, 16, HFilter);
-+ if (yoffset)
-+ {
-+ HFilter = vp8_six_tap_mmx[xoffset];
-+ vp8_filter_block1d8_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 1, 9, 16, HFilter);
-+ VFilter = vp8_six_tap_mmx[yoffset];
-+ vp8_filter_block1d8_v6_sse2(FData2 + 16, dst_ptr, dst_pitch, 16, 8 , 4, dst_pitch, VFilter);
-+ }
-+ else
-+ {
-+ // First-pass only
-+ HFilter = vp8_six_tap_mmx[xoffset];
-+ vp8_filter_block1d8_h6_only_sse2(src_ptr, src_pixels_per_line, dst_ptr, dst_pitch, 4, HFilter);
-+ }
- }
- else
- {
-- vp8_unpack_block1d8_h6_sse2(src_ptr - (2 * src_pixels_per_line), FData2, src_pixels_per_line, 9, 16);
-- }
--
-- if (yoffset)
-- {
-+ // Second-pass only
- VFilter = vp8_six_tap_mmx[yoffset];
-- vp8_filter_block1d8_v6_sse2(FData2 + 16, dst_ptr, dst_pitch, 16, 8 , 4, dst_pitch, VFilter);
-+ vp8_filter_block1d8_v6_only_sse2(src_ptr - (2 * src_pixels_per_line), src_pixels_per_line, dst_ptr, dst_pitch, 4, VFilter);
- }
-- else
-- {
-- vp8_pack_block1d8_v6_sse2(FData2 + 16, dst_ptr, dst_pitch, 16, 4, dst_pitch);
-- }
--
--
- }
-+
- #endif
-diff --git a/vp8/common/x86/x86_systemdependent.c b/vp8/common/x86/x86_systemdependent.c
-index 5312e06..09ff3c5 100644
---- a/vp8/common/x86/x86_systemdependent.c
-+++ b/vp8/common/x86/x86_systemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/arm/armv5/dequantize_v5.asm b/vp8/decoder/arm/armv5/dequantize_v5.asm
-index eb3f030..80b2e0c 100644
---- a/vp8/decoder/arm/armv5/dequantize_v5.asm
-+++ b/vp8/decoder/arm/armv5/dequantize_v5.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/armv6/dboolhuff_v6.asm b/vp8/decoder/arm/armv6/dboolhuff_v6.asm
-index 143e33e..eca8eeb 100644
---- a/vp8/decoder/arm/armv6/dboolhuff_v6.asm
-+++ b/vp8/decoder/arm/armv6/dboolhuff_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/armv6/dequantdcidct_v6.asm b/vp8/decoder/arm/armv6/dequantdcidct_v6.asm
-index 3daa9b3..c5b0b7b 100644
---- a/vp8/decoder/arm/armv6/dequantdcidct_v6.asm
-+++ b/vp8/decoder/arm/armv6/dequantdcidct_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/armv6/dequantidct_v6.asm b/vp8/decoder/arm/armv6/dequantidct_v6.asm
-index 61bb48d..0d1c6b4 100644
---- a/vp8/decoder/arm/armv6/dequantidct_v6.asm
-+++ b/vp8/decoder/arm/armv6/dequantidct_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/armv6/dequantize_v6.asm b/vp8/decoder/arm/armv6/dequantize_v6.asm
-index 95e3859..c35e7c6 100644
---- a/vp8/decoder/arm/armv6/dequantize_v6.asm
-+++ b/vp8/decoder/arm/armv6/dequantize_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/dequantize_arm.c b/vp8/decoder/arm/dequantize_arm.c
-index 54006a9..913267d 100644
---- a/vp8/decoder/arm/dequantize_arm.c
-+++ b/vp8/decoder/arm/dequantize_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/arm/dequantize_arm.h b/vp8/decoder/arm/dequantize_arm.h
-index c8a61a4..ae7cf8e 100644
---- a/vp8/decoder/arm/dequantize_arm.h
-+++ b/vp8/decoder/arm/dequantize_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/arm/detokenizearm_sjl.c b/vp8/decoder/arm/detokenizearm_sjl.c
-index c714452..a126a05 100644
---- a/vp8/decoder/arm/detokenizearm_sjl.c
-+++ b/vp8/decoder/arm/detokenizearm_sjl.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/arm/detokenizearm_v6.asm b/vp8/decoder/arm/detokenizearm_v6.asm
-index 4d87ee5..439c9ab 100644
---- a/vp8/decoder/arm/detokenizearm_v6.asm
-+++ b/vp8/decoder/arm/detokenizearm_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/dsystemdependent.c b/vp8/decoder/arm/dsystemdependent.c
-index 455c83a..f146d60 100644
---- a/vp8/decoder/arm/dsystemdependent.c
-+++ b/vp8/decoder/arm/dsystemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/arm/neon/dboolhuff_neon.asm b/vp8/decoder/arm/neon/dboolhuff_neon.asm
-index 7ec62a3..01315a4 100644
---- a/vp8/decoder/arm/neon/dboolhuff_neon.asm
-+++ b/vp8/decoder/arm/neon/dboolhuff_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/neon/dequantdcidct_neon.asm b/vp8/decoder/arm/neon/dequantdcidct_neon.asm
-index 3392f2c..482f02d 100644
---- a/vp8/decoder/arm/neon/dequantdcidct_neon.asm
-+++ b/vp8/decoder/arm/neon/dequantdcidct_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/neon/dequantidct_neon.asm b/vp8/decoder/arm/neon/dequantidct_neon.asm
-index bba4d5d..3d00dbf 100644
---- a/vp8/decoder/arm/neon/dequantidct_neon.asm
-+++ b/vp8/decoder/arm/neon/dequantidct_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/arm/neon/dequantizeb_neon.asm b/vp8/decoder/arm/neon/dequantizeb_neon.asm
-index 1bde946..14698f8 100644
---- a/vp8/decoder/arm/neon/dequantizeb_neon.asm
-+++ b/vp8/decoder/arm/neon/dequantizeb_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/dboolhuff.c b/vp8/decoder/dboolhuff.c
-index 442054e..7027c0f 100644
---- a/vp8/decoder/dboolhuff.c
-+++ b/vp8/decoder/dboolhuff.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/dboolhuff.h b/vp8/decoder/dboolhuff.h
-index f5c9822..c6d69e7 100644
---- a/vp8/decoder/dboolhuff.h
-+++ b/vp8/decoder/dboolhuff.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -12,7 +13,7 @@
- #define DBOOLHUFF_H
- #include "vpx_ports/config.h"
- #include "vpx_ports/mem.h"
--#include "vpx_ports/vpx_integer.h"
-+#include "vpx/vpx_integer.h"
-
- /* Size of the bool decoder backing storage
- *
-diff --git a/vp8/decoder/decodemv.c b/vp8/decoder/decodemv.c
-index 6035f3e..7e00423 100644
---- a/vp8/decoder/decodemv.c
-+++ b/vp8/decoder/decodemv.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -170,6 +171,7 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi)
- VP8_COMMON *const pc = &pbi->common;
- MACROBLOCKD *xd = &pbi->mb;
-
-+ mbmi->need_to_clamp_mvs = 0;
- vp8dx_bool_decoder_fill(bc);
-
- // Distance of Mb to the various image edges.
-@@ -268,6 +270,17 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi)
- break;
- }
-
-+ if (mv->col < xd->mb_to_left_edge
-+ - LEFT_TOP_MARGIN
-+ || mv->col > xd->mb_to_right_edge
-+ + RIGHT_BOTTOM_MARGIN
-+ || mv->row < xd->mb_to_top_edge
-+ - LEFT_TOP_MARGIN
-+ || mv->row > xd->mb_to_bottom_edge
-+ + RIGHT_BOTTOM_MARGIN
-+ )
-+ mbmi->need_to_clamp_mvs = 1;
-+
- /* Fill (uniform) modes, mvs of jth subset.
- Must do it here because ensuing subsets can
- refer back to us via "left" or "above". */
-@@ -324,27 +337,18 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi)
- read_mv(bc, mv, (const MV_CONTEXT *) mvc);
- mv->row += best_mv.row;
- mv->col += best_mv.col;
-- /* Encoder should not produce invalid motion vectors, but since
-- * arbitrary length MVs can be parsed from the bitstream, we
-- * need to clamp them here in case we're reading bad data to
-- * avoid a crash.
-- */
--#if CONFIG_DEBUG
-- assert(mv->col >= (xd->mb_to_left_edge - LEFT_TOP_MARGIN));
-- assert(mv->col <= (xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN));
-- assert(mv->row >= (xd->mb_to_top_edge - LEFT_TOP_MARGIN));
-- assert(mv->row <= (xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN));
--#endif
-
-- if (mv->col < (xd->mb_to_left_edge - LEFT_TOP_MARGIN))
-- mv->col = xd->mb_to_left_edge - LEFT_TOP_MARGIN;
-- else if (mv->col > xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN)
-- mv->col = xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN;
--
-- if (mv->row < (xd->mb_to_top_edge - LEFT_TOP_MARGIN))
-- mv->row = xd->mb_to_top_edge - LEFT_TOP_MARGIN;
-- else if (mv->row > xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN)
-- mv->row = xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN;
-+ /* Don't need to check this on NEARMV and NEARESTMV modes
-+ * since those modes clamp the MV. The NEWMV mode does not,
-+ * so signal to the prediction stage whether special
-+ * handling may be required.
-+ */
-+ if (mv->col < xd->mb_to_left_edge - LEFT_TOP_MARGIN
-+ || mv->col > xd->mb_to_right_edge + RIGHT_BOTTOM_MARGIN
-+ || mv->row < xd->mb_to_top_edge - LEFT_TOP_MARGIN
-+ || mv->row > xd->mb_to_bottom_edge + RIGHT_BOTTOM_MARGIN
-+ )
-+ mbmi->need_to_clamp_mvs = 1;
-
- propagate_mv: /* same MV throughout */
- {
-@@ -380,7 +384,6 @@ void vp8_decode_mode_mvs(VP8D_COMP *pbi)
- assert(0);
- #endif
- }
--
- }
- else
- {
-diff --git a/vp8/decoder/decodemv.h b/vp8/decoder/decodemv.h
-index 4030071..8b7fb68 100644
---- a/vp8/decoder/decodemv.h
-+++ b/vp8/decoder/decodemv.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/decoderthreading.h b/vp8/decoder/decoderthreading.h
-index ebc5c27..6c0363b 100644
---- a/vp8/decoder/decoderthreading.h
-+++ b/vp8/decoder/decoderthreading.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/decodframe.c b/vp8/decoder/decodframe.c
-index 4edf4f6..0f1b879 100644
---- a/vp8/decoder/decodframe.c
-+++ b/vp8/decoder/decodframe.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -125,6 +126,62 @@ static void skip_recon_mb(VP8D_COMP *pbi, MACROBLOCKD *xd)
- }
- }
-
-+
-+static void clamp_mv_to_umv_border(MV *mv, const MACROBLOCKD *xd)
-+{
-+ /* If the MV points so far into the UMV border that no visible pixels
-+ * are used for reconstruction, the subpel part of the MV can be
-+ * discarded and the MV limited to 16 pixels with equivalent results.
-+ *
-+ * This limit kicks in at 19 pixels for the top and left edges, for
-+ * the 16 pixels plus 3 taps right of the central pixel when subpel
-+ * filtering. The bottom and right edges use 16 pixels plus 2 pixels
-+ * left of the central pixel when filtering.
-+ */
-+ if (mv->col < (xd->mb_to_left_edge - (19 << 3)))
-+ mv->col = xd->mb_to_left_edge - (16 << 3);
-+ else if (mv->col > xd->mb_to_right_edge + (18 << 3))
-+ mv->col = xd->mb_to_right_edge + (16 << 3);
-+
-+ if (mv->row < (xd->mb_to_top_edge - (19 << 3)))
-+ mv->row = xd->mb_to_top_edge - (16 << 3);
-+ else if (mv->row > xd->mb_to_bottom_edge + (18 << 3))
-+ mv->row = xd->mb_to_bottom_edge + (16 << 3);
-+}
-+
-+/* A version of the above function for chroma block MVs.*/
-+static void clamp_uvmv_to_umv_border(MV *mv, const MACROBLOCKD *xd)
-+{
-+ if (2*mv->col < (xd->mb_to_left_edge - (19 << 3)))
-+ mv->col = (xd->mb_to_left_edge - (16 << 3)) >> 1;
-+ else if (2*mv->col > xd->mb_to_right_edge + (18 << 3))
-+ mv->col = (xd->mb_to_right_edge + (16 << 3)) >> 1;
-+
-+ if (2*mv->row < (xd->mb_to_top_edge - (19 << 3)))
-+ mv->row = (xd->mb_to_top_edge - (16 << 3)) >> 1;
-+ else if (2*mv->row > xd->mb_to_bottom_edge + (18 << 3))
-+ mv->row = (xd->mb_to_bottom_edge + (16 << 3)) >> 1;
-+}
-+
-+static void clamp_mvs(MACROBLOCKD *xd)
-+{
-+ if (xd->mbmi.mode == SPLITMV)
-+ {
-+ int i;
-+
-+ for (i=0; i<16; i++)
-+ clamp_mv_to_umv_border(&xd->block[i].bmi.mv.as_mv, xd);
-+ for (i=16; i<24; i++)
-+ clamp_uvmv_to_umv_border(&xd->block[i].bmi.mv.as_mv, xd);
-+ }
-+ else
-+ {
-+ clamp_mv_to_umv_border(&xd->mbmi.mv.as_mv, xd);
-+ clamp_uvmv_to_umv_border(&xd->block[16].bmi.mv.as_mv, xd);
-+ }
-+
-+}
-+
- static void reconstruct_mb(VP8D_COMP *pbi, MACROBLOCKD *xd)
- {
- if (xd->frame_type == KEY_FRAME || xd->mbmi.ref_frame == INTRA_FRAME)
-@@ -232,6 +289,8 @@ static void de_quantand_idct(VP8D_COMP *pbi, MACROBLOCKD *xd)
- void vp8_decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd)
- {
- int eobtotal = 0;
-+ MV orig_mvs[24];
-+ int i, do_clamp = xd->mbmi.need_to_clamp_mvs;
-
- if (xd->mbmi.mb_skip_coeff)
- {
-@@ -242,20 +301,49 @@ void vp8_decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd)
- eobtotal = vp8_decode_mb_tokens(pbi, xd);
- }
-
-+ /* Perform temporary clamping of the MV to be used for prediction */
-+ if (do_clamp)
-+ {
-+ if (xd->mbmi.mode == SPLITMV)
-+ for (i=0; i<24; i++)
-+ orig_mvs[i] = xd->block[i].bmi.mv.as_mv;
-+ else
-+ {
-+ orig_mvs[0] = xd->mbmi.mv.as_mv;
-+ orig_mvs[1] = xd->block[16].bmi.mv.as_mv;
-+ }
-+ clamp_mvs(xd);
-+ }
-+
- xd->mode_info_context->mbmi.dc_diff = 1;
-
- if (xd->mbmi.mode != B_PRED && xd->mbmi.mode != SPLITMV && eobtotal == 0)
- {
- xd->mode_info_context->mbmi.dc_diff = 0;
- skip_recon_mb(pbi, xd);
-- return;
- }
-+ else
-+ {
-+ if (xd->segmentation_enabled)
-+ mb_init_dequantizer(pbi, xd);
-
-- if (xd->segmentation_enabled)
-- mb_init_dequantizer(pbi, xd);
-+ de_quantand_idct(pbi, xd);
-+ reconstruct_mb(pbi, xd);
-+ }
-
-- de_quantand_idct(pbi, xd);
-- reconstruct_mb(pbi, xd);
-+
-+ /* Restore the original MV so as not to affect the entropy context. */
-+ if (do_clamp)
-+ {
-+ if (xd->mbmi.mode == SPLITMV)
-+ for (i=0; i<24; i++)
-+ xd->block[i].bmi.mv.as_mv = orig_mvs[i];
-+ else
-+ {
-+ xd->mbmi.mv.as_mv = orig_mvs[0];
-+ xd->block[16].bmi.mv.as_mv = orig_mvs[1];
-+ }
-+ }
- }
-
- static int get_delta_q(vp8_reader *bc, int prev, int *q_update)
-@@ -313,7 +401,9 @@ void vp8_decode_mb_row(VP8D_COMP *pbi,
- for (mb_col = 0; mb_col < pc->mb_cols; mb_col++)
- {
- // Take a copy of the mode and Mv information for this macroblock into the xd->mbmi
-- vpx_memcpy(&xd->mbmi, &xd->mode_info_context->mbmi, 32); //sizeof(MB_MODE_INFO) );
-+ // the partition_bmi array is unused in the decoder, so don't copy it.
-+ vpx_memcpy(&xd->mbmi, &xd->mode_info_context->mbmi,
-+ sizeof(MB_MODE_INFO) - sizeof(xd->mbmi.partition_bmi));
-
- if (xd->mbmi.mode == SPLITMV || xd->mbmi.mode == B_PRED)
- {
-@@ -360,7 +450,7 @@ void vp8_decode_mb_row(VP8D_COMP *pbi,
- vp8_build_uvmvs(xd, pc->full_pixel);
-
- /*
-- if(pbi->common.current_video_frame==0 &&mb_col==1 && mb_row==0)
-+ if(pc->current_video_frame==0 &&mb_col==1 && mb_row==0)
- pbi->debugoutput =1;
- else
- pbi->debugoutput =0;
-@@ -609,7 +699,7 @@ int vp8_decode_frame(VP8D_COMP *pbi)
- "Invalid frame height");
- }
-
-- if (vp8_alloc_frame_buffers(&pbi->common, pc->Width, pc->Height))
-+ if (vp8_alloc_frame_buffers(pc, pc->Width, pc->Height))
- vpx_internal_error(&pc->error, VPX_CODEC_MEM_ERROR,
- "Failed to allocate frame buffers");
- }
-@@ -846,17 +936,17 @@ int vp8_decode_frame(VP8D_COMP *pbi)
- vpx_memcpy(&xd->block[0].bmi, &xd->mode_info_context->bmi[0], sizeof(B_MODE_INFO));
-
-
-- if (pbi->b_multithreaded_lf && pbi->common.filter_level != 0)
-+ if (pbi->b_multithreaded_lf && pc->filter_level != 0)
- vp8_start_lfthread(pbi);
-
-- if (pbi->b_multithreaded_rd && pbi->common.multi_token_partition != ONE_PARTITION)
-+ if (pbi->b_multithreaded_rd && pc->multi_token_partition != ONE_PARTITION)
- {
- vp8_mtdecode_mb_rows(pbi, xd);
- }
- else
- {
- int ibc = 0;
-- int num_part = 1 << pbi->common.multi_token_partition;
-+ int num_part = 1 << pc->multi_token_partition;
-
- // Decode the individual macro block
- for (mb_row = 0; mb_row < pc->mb_rows; mb_row++)
-@@ -885,8 +975,11 @@ int vp8_decode_frame(VP8D_COMP *pbi)
- // vpx_log("Decoder: Frame Decoded, Size Roughly:%d bytes \n",bc->pos+pbi->bc2.pos);
-
- // If this was a kf or Gf note the Q used
-- if ((pc->frame_type == KEY_FRAME) || (pc->refresh_golden_frame) || pbi->common.refresh_alt_ref_frame)
-+ if ((pc->frame_type == KEY_FRAME) ||
-+ pc->refresh_golden_frame || pc->refresh_alt_ref_frame)
-+ {
- pc->last_kf_gf_q = pc->base_qindex;
-+ }
-
- if (pc->refresh_entropy_probs == 0)
- {
-diff --git a/vp8/decoder/demode.c b/vp8/decoder/demode.c
-index fd05e6d..881b49e 100644
---- a/vp8/decoder/demode.c
-+++ b/vp8/decoder/demode.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/demode.h b/vp8/decoder/demode.h
-index 51bbc5e..8d2fbee 100644
---- a/vp8/decoder/demode.h
-+++ b/vp8/decoder/demode.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/dequantize.c b/vp8/decoder/dequantize.c
-index 14798d9..2c286ec 100644
---- a/vp8/decoder/dequantize.c
-+++ b/vp8/decoder/dequantize.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/dequantize.h b/vp8/decoder/dequantize.h
-index d16b02e..7fd7cbb 100644
---- a/vp8/decoder/dequantize.h
-+++ b/vp8/decoder/dequantize.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/detokenize.c b/vp8/decoder/detokenize.c
-index a42f18d..d6f5ca2 100644
---- a/vp8/decoder/detokenize.c
-+++ b/vp8/decoder/detokenize.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -65,25 +66,43 @@ void vp8_reset_mb_tokens_context(MACROBLOCKD *x)
-
- ENTROPY_CONTEXT *a;
- ENTROPY_CONTEXT *l;
-- int i;
--
-- for (i = 0; i < 24; i++)
-- {
--
-- a = A[ vp8_block2context[i] ] + vp8_block2above[i];
-- l = L[ vp8_block2context[i] ] + vp8_block2left[i];
--
-- *a = *l = 0;
-- }
-
-+ /* Clear entropy contexts for Y blocks */
-+ a = A[Y1CONTEXT];
-+ l = L[Y1CONTEXT];
-+ *a = 0;
-+ *(a+1) = 0;
-+ *(a+2) = 0;
-+ *(a+3) = 0;
-+ *l = 0;
-+ *(l+1) = 0;
-+ *(l+2) = 0;
-+ *(l+3) = 0;
-+
-+ /* Clear entropy contexts for U blocks */
-+ a = A[UCONTEXT];
-+ l = L[UCONTEXT];
-+ *a = 0;
-+ *(a+1) = 0;
-+ *l = 0;
-+ *(l+1) = 0;
-+
-+ /* Clear entropy contexts for V blocks */
-+ a = A[VCONTEXT];
-+ l = L[VCONTEXT];
-+ *a = 0;
-+ *(a+1) = 0;
-+ *l = 0;
-+ *(l+1) = 0;
-+
-+ /* Clear entropy contexts for Y2 blocks */
- if (x->mbmi.mode != B_PRED && x->mbmi.mode != SPLITMV)
- {
-- a = A[Y2CONTEXT] + vp8_block2above[24];
-- l = L[Y2CONTEXT] + vp8_block2left[24];
-- *a = *l = 0;
-+ a = A[Y2CONTEXT];
-+ l = L[Y2CONTEXT];
-+ *a = 0;
-+ *l = 0;
- }
--
--
- }
- DECLARE_ALIGNED(16, extern const unsigned int, vp8dx_bitreader_norm[256]);
- #define NORMALIZE \
-diff --git a/vp8/decoder/detokenize.h b/vp8/decoder/detokenize.h
-index 6a9a476..6cfb66b 100644
---- a/vp8/decoder/detokenize.h
-+++ b/vp8/decoder/detokenize.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/generic/dsystemdependent.c b/vp8/decoder/generic/dsystemdependent.c
-index 302b64b..ad64a38 100644
---- a/vp8/decoder/generic/dsystemdependent.c
-+++ b/vp8/decoder/generic/dsystemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/onyxd_if.c b/vp8/decoder/onyxd_if.c
-index 6875585..76387f5 100644
---- a/vp8/decoder/onyxd_if.c
-+++ b/vp8/decoder/onyxd_if.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/onyxd_if_sjl.c b/vp8/decoder/onyxd_if_sjl.c
-index 363ad5d..12d28a5 100644
---- a/vp8/decoder/onyxd_if_sjl.c
-+++ b/vp8/decoder/onyxd_if_sjl.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/onyxd_int.h b/vp8/decoder/onyxd_int.h
-index fa4fa48..2eea614 100644
---- a/vp8/decoder/onyxd_int.h
-+++ b/vp8/decoder/onyxd_int.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/threading.c b/vp8/decoder/threading.c
-index e35d175..87bba20 100644
---- a/vp8/decoder/threading.c
-+++ b/vp8/decoder/threading.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -153,7 +154,9 @@ THREAD_FUNCTION vp8_thread_decoding_proc(void *p_data)
- }
-
- // Take a copy of the mode and Mv information for this macroblock into the xd->mbmi
-- vpx_memcpy(&xd->mbmi, &xd->mode_info_context->mbmi, 32); //sizeof(MB_MODE_INFO) );
-+ // the partition_bmi array is unused in the decoder, so don't copy it.
-+ vpx_memcpy(&xd->mbmi, &xd->mode_info_context->mbmi,
-+ sizeof(MB_MODE_INFO) - sizeof(xd->mbmi.partition_bmi));
-
- if (xd->mbmi.mode == SPLITMV || xd->mbmi.mode == B_PRED)
- {
-diff --git a/vp8/decoder/treereader.h b/vp8/decoder/treereader.h
-index eb10e24..f1893df 100644
---- a/vp8/decoder/treereader.h
-+++ b/vp8/decoder/treereader.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/x86/dequantize_mmx.asm b/vp8/decoder/x86/dequantize_mmx.asm
-index 02be487..1611e03 100644
---- a/vp8/decoder/x86/dequantize_mmx.asm
-+++ b/vp8/decoder/x86/dequantize_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/decoder/x86/dequantize_x86.h b/vp8/decoder/x86/dequantize_x86.h
-index 5def406..4c91633 100644
---- a/vp8/decoder/x86/dequantize_x86.h
-+++ b/vp8/decoder/x86/dequantize_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/x86/onyxdxv.c b/vp8/decoder/x86/onyxdxv.c
-index 75a676a..22d0548 100644
---- a/vp8/decoder/x86/onyxdxv.c
-+++ b/vp8/decoder/x86/onyxdxv.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/x86/x86_dsystemdependent.c b/vp8/decoder/x86/x86_dsystemdependent.c
-index 6d7cc36..2dfb469 100644
---- a/vp8/decoder/x86/x86_dsystemdependent.c
-+++ b/vp8/decoder/x86/x86_dsystemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/xprintf.c b/vp8/decoder/xprintf.c
-index cb2221c..7465010 100644
---- a/vp8/decoder/xprintf.c
-+++ b/vp8/decoder/xprintf.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/decoder/xprintf.h b/vp8/decoder/xprintf.h
-index 2f175e9..7656075 100644
---- a/vp8/decoder/xprintf.h
-+++ b/vp8/decoder/xprintf.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/armv6/walsh_v6.asm b/vp8/encoder/arm/armv6/walsh_v6.asm
-index 608c9ae..461e492 100644
---- a/vp8/encoder/arm/armv6/walsh_v6.asm
-+++ b/vp8/encoder/arm/armv6/walsh_v6.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
- EXPORT |vp8_short_walsh4x4_armv6|
-diff --git a/vp8/encoder/arm/boolhuff_arm.c b/vp8/encoder/arm/boolhuff_arm.c
-index e70b3ad..8c0faff 100644
---- a/vp8/encoder/arm/boolhuff_arm.c
-+++ b/vp8/encoder/arm/boolhuff_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/csystemdependent.c b/vp8/encoder/arm/csystemdependent.c
-index 0039796..7fba995 100644
---- a/vp8/encoder/arm/csystemdependent.c
-+++ b/vp8/encoder/arm/csystemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/dct_arm.h b/vp8/encoder/arm/dct_arm.h
-index a671862..bb60c9d 100644
---- a/vp8/encoder/arm/dct_arm.h
-+++ b/vp8/encoder/arm/dct_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/encodemb_arm.c b/vp8/encoder/arm/encodemb_arm.c
-index 3f1d053..7d58f94 100644
---- a/vp8/encoder/arm/encodemb_arm.c
-+++ b/vp8/encoder/arm/encodemb_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/encodemb_arm.h b/vp8/encoder/arm/encodemb_arm.h
-index 28f9e5c..525135a 100644
---- a/vp8/encoder/arm/encodemb_arm.h
-+++ b/vp8/encoder/arm/encodemb_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/mcomp_arm.c b/vp8/encoder/arm/mcomp_arm.c
-index 07f2186..9418a60 100644
---- a/vp8/encoder/arm/mcomp_arm.c
-+++ b/vp8/encoder/arm/mcomp_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/neon/boolhuff_armv7.asm b/vp8/encoder/arm/neon/boolhuff_armv7.asm
-index 9a5f366..674eea9 100644
---- a/vp8/encoder/arm/neon/boolhuff_armv7.asm
-+++ b/vp8/encoder/arm/neon/boolhuff_armv7.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/fastfdct4x4_neon.asm b/vp8/encoder/arm/neon/fastfdct4x4_neon.asm
-index d5dec44..44e6dfc 100644
---- a/vp8/encoder/arm/neon/fastfdct4x4_neon.asm
-+++ b/vp8/encoder/arm/neon/fastfdct4x4_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/fastfdct8x4_neon.asm b/vp8/encoder/arm/neon/fastfdct8x4_neon.asm
-index de1c254..6a286f6 100644
---- a/vp8/encoder/arm/neon/fastfdct8x4_neon.asm
-+++ b/vp8/encoder/arm/neon/fastfdct8x4_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/fastquantizeb_neon.asm b/vp8/encoder/arm/neon/fastquantizeb_neon.asm
-index 1107037..e3a94a6 100644
---- a/vp8/encoder/arm/neon/fastquantizeb_neon.asm
-+++ b/vp8/encoder/arm/neon/fastquantizeb_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/sad16_neon.asm b/vp8/encoder/arm/neon/sad16_neon.asm
-index 6169f10..7e2ab13 100644
---- a/vp8/encoder/arm/neon/sad16_neon.asm
-+++ b/vp8/encoder/arm/neon/sad16_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/sad8_neon.asm b/vp8/encoder/arm/neon/sad8_neon.asm
-index 28604dd..fc8c4e1 100644
---- a/vp8/encoder/arm/neon/sad8_neon.asm
-+++ b/vp8/encoder/arm/neon/sad8_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/shortfdct_neon.asm b/vp8/encoder/arm/neon/shortfdct_neon.asm
-index 26bc0d0..4399c97 100644
---- a/vp8/encoder/arm/neon/shortfdct_neon.asm
-+++ b/vp8/encoder/arm/neon/shortfdct_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/subtract_neon.asm b/vp8/encoder/arm/neon/subtract_neon.asm
-index 8781ca0..d4803ff 100644
---- a/vp8/encoder/arm/neon/subtract_neon.asm
-+++ b/vp8/encoder/arm/neon/subtract_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/variance_neon.asm b/vp8/encoder/arm/neon/variance_neon.asm
-index 64b83ca..b901693 100644
---- a/vp8/encoder/arm/neon/variance_neon.asm
-+++ b/vp8/encoder/arm/neon/variance_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_memcpy_neon.asm b/vp8/encoder/arm/neon/vp8_memcpy_neon.asm
-index f26b4d7..0a372c3 100644
---- a/vp8/encoder/arm/neon/vp8_memcpy_neon.asm
-+++ b/vp8/encoder/arm/neon/vp8_memcpy_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_mse16x16_neon.asm b/vp8/encoder/arm/neon/vp8_mse16x16_neon.asm
-index f535967..087ea17 100644
---- a/vp8/encoder/arm/neon/vp8_mse16x16_neon.asm
-+++ b/vp8/encoder/arm/neon/vp8_mse16x16_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_packtokens_armv7.asm b/vp8/encoder/arm/neon/vp8_packtokens_armv7.asm
-index 9c52c52..bfa97d7 100644
---- a/vp8/encoder/arm/neon/vp8_packtokens_armv7.asm
-+++ b/vp8/encoder/arm/neon/vp8_packtokens_armv7.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_packtokens_mbrow_armv7.asm b/vp8/encoder/arm/neon/vp8_packtokens_mbrow_armv7.asm
-index 92b0989..334c88f 100644
---- a/vp8/encoder/arm/neon/vp8_packtokens_mbrow_armv7.asm
-+++ b/vp8/encoder/arm/neon/vp8_packtokens_mbrow_armv7.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_packtokens_partitions_armv7.asm b/vp8/encoder/arm/neon/vp8_packtokens_partitions_armv7.asm
-index 6d5f882..267e216 100644
---- a/vp8/encoder/arm/neon/vp8_packtokens_partitions_armv7.asm
-+++ b/vp8/encoder/arm/neon/vp8_packtokens_partitions_armv7.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_shortwalsh4x4_neon.asm b/vp8/encoder/arm/neon/vp8_shortwalsh4x4_neon.asm
-index 5269c0a..ebd5dc1 100644
---- a/vp8/encoder/arm/neon/vp8_shortwalsh4x4_neon.asm
-+++ b/vp8/encoder/arm/neon/vp8_shortwalsh4x4_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_subpixelvariance16x16_neon.asm b/vp8/encoder/arm/neon/vp8_subpixelvariance16x16_neon.asm
-index aec716e..185277f 100644
---- a/vp8/encoder/arm/neon/vp8_subpixelvariance16x16_neon.asm
-+++ b/vp8/encoder/arm/neon/vp8_subpixelvariance16x16_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_subpixelvariance16x16s_neon.asm b/vp8/encoder/arm/neon/vp8_subpixelvariance16x16s_neon.asm
-index 3d02d7c..611b1e4 100644
---- a/vp8/encoder/arm/neon/vp8_subpixelvariance16x16s_neon.asm
-+++ b/vp8/encoder/arm/neon/vp8_subpixelvariance16x16s_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/neon/vp8_subpixelvariance8x8_neon.asm b/vp8/encoder/arm/neon/vp8_subpixelvariance8x8_neon.asm
-index bd56761..614d48f 100644
---- a/vp8/encoder/arm/neon/vp8_subpixelvariance8x8_neon.asm
-+++ b/vp8/encoder/arm/neon/vp8_subpixelvariance8x8_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/arm/picklpf_arm.c b/vp8/encoder/arm/picklpf_arm.c
-index 0586e55..fb0b3bd 100644
---- a/vp8/encoder/arm/picklpf_arm.c
-+++ b/vp8/encoder/arm/picklpf_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/quantize_arm.c b/vp8/encoder/arm/quantize_arm.c
-index 46906d3..e8bd44b 100644
---- a/vp8/encoder/arm/quantize_arm.c
-+++ b/vp8/encoder/arm/quantize_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/quantize_arm.h b/vp8/encoder/arm/quantize_arm.h
-index e93f0fe..14bc923 100644
---- a/vp8/encoder/arm/quantize_arm.h
-+++ b/vp8/encoder/arm/quantize_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/variance_arm.h b/vp8/encoder/arm/variance_arm.h
-index d9fc9b3..1c16020 100644
---- a/vp8/encoder/arm/variance_arm.h
-+++ b/vp8/encoder/arm/variance_arm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/arm/vpx_vp8_enc_asm_offsets.c b/vp8/encoder/arm/vpx_vp8_enc_asm_offsets.c
-index 8cdf079..28aac70 100644
---- a/vp8/encoder/arm/vpx_vp8_enc_asm_offsets.c
-+++ b/vp8/encoder/arm/vpx_vp8_enc_asm_offsets.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/bitstream.c b/vp8/encoder/bitstream.c
-index 31ad56a..ce9d2fd 100644
---- a/vp8/encoder/bitstream.c
-+++ b/vp8/encoder/bitstream.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -1385,8 +1386,6 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned long *size)
- // every keyframe send startcode, width, height, scale factor, clamp and color type
- if (oh.type == KEY_FRAME)
- {
-- int w, h, hs, vs;
--
- // Start / synch code
- cx_data[0] = 0x9D;
- cx_data[1] = 0x01;
-diff --git a/vp8/encoder/bitstream.h b/vp8/encoder/bitstream.h
-index ee69f66..de4b94d 100644
---- a/vp8/encoder/bitstream.h
-+++ b/vp8/encoder/bitstream.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/block.h b/vp8/encoder/block.h
-index cc4cbe0..2e866dd 100644
---- a/vp8/encoder/block.h
-+++ b/vp8/encoder/block.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -101,11 +102,9 @@ typedef struct
- void (*vp8_short_fdct8x4)(short *input, short *output, int pitch);
- void (*short_fdct4x4rd)(short *input, short *output, int pitch);
- void (*short_fdct8x4rd)(short *input, short *output, int pitch);
-- void (*vp8_short_fdct4x4_ptr)(short *input, short *output, int pitch);
- void (*short_walsh4x4)(short *input, short *output, int pitch);
-
- void (*quantize_b)(BLOCK *b, BLOCKD *d);
-- void (*quantize_brd)(BLOCK *b, BLOCKD *d);
-
-
-
-diff --git a/vp8/encoder/boolhuff.c b/vp8/encoder/boolhuff.c
-index c101384..2e95c75 100644
---- a/vp8/encoder/boolhuff.c
-+++ b/vp8/encoder/boolhuff.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/boolhuff.h b/vp8/encoder/boolhuff.h
-index 0d929f0..95635e3 100644
---- a/vp8/encoder/boolhuff.h
-+++ b/vp8/encoder/boolhuff.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/dct.c b/vp8/encoder/dct.c
-index 5207e39..4f5f9f0 100644
---- a/vp8/encoder/dct.c
-+++ b/vp8/encoder/dct.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/dct.h b/vp8/encoder/dct.h
-index fb307cf..2aaf731 100644
---- a/vp8/encoder/dct.h
-+++ b/vp8/encoder/dct.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c
-index a4e3772..46b697e 100644
---- a/vp8/encoder/encodeframe.c
-+++ b/vp8/encoder/encodeframe.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/encodeintra.c b/vp8/encoder/encodeintra.c
-index 403d020..d632bd8 100644
---- a/vp8/encoder/encodeintra.c
-+++ b/vp8/encoder/encodeintra.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -67,7 +68,7 @@ void vp8_encode_intra4x4block_rd(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x, BL
-
- x->short_fdct4x4rd(be->src_diff, be->coeff, 32);
-
-- x->quantize_brd(be, b);
-+ x->quantize_b(be, b);
-
- x->e_mbd.mbmi.mb_skip_coeff &= (!b->eob);
-
-@@ -159,8 +160,7 @@ void vp8_encode_intra16x16mbyrd(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
-
- x->e_mbd.mbmi.mb_skip_coeff = 1;
-
-- vp8_quantize_mbyrd(x);
--
-+ vp8_quantize_mby(x);
-
- vp8_inverse_transform_mby(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
-
-@@ -226,9 +226,7 @@ void vp8_encode_intra16x16mbuvrd(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
-
- vp8_transform_mbuvrd(x);
-
-- vp8_quantize_mbuvrd(x);
--
--
-+ vp8_quantize_mbuv(x);
-
- vp8_inverse_transform_mbuv(IF_RTCD(&rtcd->common->idct), &x->e_mbd);
-
-diff --git a/vp8/encoder/encodeintra.h b/vp8/encoder/encodeintra.h
-index 4a43ab2..49b3257 100644
---- a/vp8/encoder/encodeintra.h
-+++ b/vp8/encoder/encodeintra.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/encodemb.c b/vp8/encoder/encodemb.c
-index d825133..a66b90c 100644
---- a/vp8/encoder/encodemb.c
-+++ b/vp8/encoder/encodemb.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -493,140 +494,6 @@ void vp8_optimize_b(MACROBLOCK *x, int i, int type, ENTROPY_CONTEXT *a, ENTROPY_
- return;
- }
-
--void vp8_optimize_bplus(MACROBLOCK *x, int i, int type, ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l, const VP8_ENCODER_RTCD *rtcd)
--{
-- BLOCK *b = &x->block[i];
-- BLOCKD *bd = &x->e_mbd.block[i];
-- short *dequant_ptr = &bd->dequant[0][0];
-- int nzpos[16] = {0};
-- short saved_qcoefs[16];
-- short saved_dqcoefs[16];
-- int baserate, baseerror, baserd;
-- int rate, error, thisrd;
-- int k;
-- int nzcoefcount = 0;
-- int nc, bestnc = 0;
-- int besteob;
--
-- // count potential coefficient to be optimized
-- for (k = !type; k < 16; k++)
-- {
-- int qcoef = abs(bd->qcoeff[k]);
-- int coef = abs(b->coeff[k]);
-- int dq = dequant_ptr[k];
--
-- if (qcoef && (qcoef * dq < coef) && (coef < (qcoef * dq + dq)))
-- {
-- nzpos[nzcoefcount] = k;
-- nzcoefcount++;
-- }
-- }
--
-- // if nothing here, do nothing for this block.
-- if (!nzcoefcount)
-- {
-- //do not update context, we need do the other half.
-- //*a = *l = (bd->eob != !type);
-- return;
-- }
--
-- // save a copy of quantized coefficients
-- vpx_memcpy(saved_qcoefs, bd->qcoeff, 32);
-- vpx_memcpy(saved_dqcoefs, bd->dqcoeff, 32);
--
-- besteob = bd->eob;
-- baserate = cost_coeffs(x, bd, type, a, l);
-- baseerror = ENCODEMB_INVOKE(&rtcd->encodemb, berr)(b->coeff, bd->dqcoeff) >> 2;
-- baserd = RDFUNC(x->rdmult, x->rddiv, baserate, baseerror, 100);
--
-- for (nc = 1; nc < (1 << nzcoefcount); nc++)
-- {
-- //reset coefficients
-- vpx_memcpy(bd->qcoeff, saved_qcoefs, 32);
-- vpx_memcpy(bd->dqcoeff, saved_dqcoefs, 32);
--
-- for (k = 0; k < nzcoefcount; k++)
-- {
-- int pos = nzpos[k];
--
-- if ((nc & (1 << k)))
-- {
-- int cur_qcoef = bd->qcoeff[pos];
--
-- if (cur_qcoef < 0)
-- {
-- bd->qcoeff[pos]--;
-- bd->dqcoeff[pos] = bd->qcoeff[pos] * dequant_ptr[pos];
-- }
-- else
-- {
-- bd->qcoeff[pos]++;
-- bd->dqcoeff[pos] = bd->qcoeff[pos] * dequant_ptr[pos];
-- }
-- }
-- }
--
-- {
-- int eob = -1;
-- int rc;
-- int m;
--
-- for (m = 0; m < 16; m++)
-- {
-- rc = vp8_default_zig_zag1d[m];
--
-- if (bd->qcoeff[rc])
-- eob = m;
-- }
--
-- bd->eob = eob + 1;
-- }
--
-- rate = cost_coeffs(x, bd, type, a, l);
-- error = ENCODEMB_INVOKE(&rtcd->encodemb, berr)(b->coeff, bd->dqcoeff) >> 2;
-- thisrd = RDFUNC(x->rdmult, x->rddiv, rate, error, 100);
--
-- if (thisrd < baserd)
-- {
-- baserd = thisrd;
-- bestnc = nc;
-- besteob = bd->eob;
-- }
-- }
--
-- //reset coefficients
-- vpx_memcpy(bd->qcoeff, saved_qcoefs, 32);
-- vpx_memcpy(bd->dqcoeff, saved_dqcoefs, 32);
--
-- if (bestnc)
-- {
-- for (k = 0; k < nzcoefcount; k++)
-- {
-- int pos = nzpos[k];
--
-- if (bestnc & (1 << k))
-- {
-- int cur_qcoef = bd->qcoeff[pos];
--
-- if (cur_qcoef < 0)
-- {
-- bd->qcoeff[pos]++;
-- bd->dqcoeff[pos] = bd->qcoeff[pos] * dequant_ptr[pos];
-- }
-- else
-- {
-- bd->qcoeff[pos]--;
-- bd->dqcoeff[pos] = bd->qcoeff[pos] * dequant_ptr[pos];
-- }
-- }
-- }
-- }
--
-- bd->eob = besteob;
-- //do not update context, we need do the other half.
-- //*a = *l = (bd->eob != !type);
-- return;
--}
-
- void vp8_optimize_y2b(MACROBLOCK *x, int i, int type, ENTROPY_CONTEXT *a, ENTROPY_CONTEXT *l, const VP8_ENCODER_RTCD *rtcd)
- {
-@@ -718,7 +585,6 @@ void vp8_optimize_y2b(MACROBLOCK *x, int i, int type, ENTROPY_CONTEXT *a, ENTROP
-
- void vp8_optimize_mb(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
- {
-- int cost = 0;
- int b;
- TEMP_CONTEXT t, t2;
- int type = 0;
-@@ -752,181 +618,6 @@ void vp8_optimize_mb(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
-
-
-
--void vp8_super_slow_yquant_optimization(MACROBLOCK *x, int type, const VP8_ENCODER_RTCD *rtcd)
--{
-- BLOCK *b = &x->block[0];
-- BLOCKD *bd = &x->e_mbd.block[0];
-- short *dequant_ptr = &bd->dequant[0][0];
-- struct
-- {
-- int block;
-- int pos;
-- } nzpos[256];
-- short saved_qcoefs[256];
-- short saved_dqcoefs[256];
-- short *coef_ptr = x->coeff;
-- short *qcoef_ptr = x->e_mbd.qcoeff;
-- short *dqcoef_ptr = x->e_mbd.dqcoeff;
--
-- int baserate, baseerror, baserd;
-- int rate, error, thisrd;
-- int i, k;
-- int nzcoefcount = 0;
-- int nc, bestnc = 0;
-- int besteob;
--
-- //this code has assumption in macroblock coeff buffer layout
-- for (i = 0; i < 16; i++)
-- {
-- // count potential coefficient to be optimized
-- for (k = !type; k < 16; k++)
-- {
-- int qcoef = abs(qcoef_ptr[i*16 + k]);
-- int coef = abs(coef_ptr[i*16 + k]);
-- int dq = dequant_ptr[k];
--
-- if (qcoef && (qcoef * dq > coef) && (qcoef * dq < coef + dq))
-- {
-- nzpos[nzcoefcount].block = i;
-- nzpos[nzcoefcount].pos = k;
-- nzcoefcount++;
-- }
-- }
-- }
--
-- // if nothing here, do nothing for this macro_block.
-- if (!nzcoefcount || nzcoefcount > 15)
-- {
-- return;
-- }
--
-- /******************************************************************************
-- looking from each coeffient's perspective, each identifed coefficent above could
-- have 2 values:roundeddown(x) and roundedup(x). Therefore the total number of
-- different states is less than 2**nzcoefcount.
-- ******************************************************************************/
-- // save the qunatized coefficents and dequantized coefficicents
-- vpx_memcpy(saved_qcoefs, x->e_mbd.qcoeff, 256);
-- vpx_memcpy(saved_dqcoefs, x->e_mbd.dqcoeff, 256);
--
-- baserate = mbycost_coeffs(x);
-- baseerror = ENCODEMB_INVOKE(&rtcd->encodemb, mberr)(x, !type);
-- baserd = RDFUNC(x->rdmult, x->rddiv, baserate, baseerror, 100);
--
-- for (nc = 1; nc < (1 << nzcoefcount); nc++)
-- {
-- //reset coefficients
-- vpx_memcpy(x->e_mbd.qcoeff, saved_qcoefs, 256);
-- vpx_memcpy(x->e_mbd.dqcoeff, saved_dqcoefs, 256);
--
-- for (k = 0; k < nzcoefcount; k++)
-- {
-- int bk = nzpos[k].block;
-- int pos = nzpos[k].pos;
-- int mbkpos = bk * 16 + pos;
--
-- if ((nc & (1 << k)))
-- {
-- int cur_qcoef = x->e_mbd.qcoeff[mbkpos];
--
-- if (cur_qcoef < 0)
-- {
-- x->e_mbd.qcoeff[mbkpos]++;
-- x->e_mbd.dqcoeff[mbkpos] = x->e_mbd.qcoeff[mbkpos] * dequant_ptr[pos];
-- }
-- else
-- {
-- x->e_mbd.qcoeff[mbkpos]--;
-- x->e_mbd.dqcoeff[mbkpos] = x->e_mbd.qcoeff[mbkpos] * dequant_ptr[pos];
-- }
-- }
-- }
--
-- for (i = 0; i < 16; i++)
-- {
-- BLOCKD *bd = &x->e_mbd.block[i];
-- {
-- int eob = -1;
-- int rc;
-- int l;
--
-- for (l = 0; l < 16; l++)
-- {
-- rc = vp8_default_zig_zag1d[l];
--
-- if (bd->qcoeff[rc])
-- eob = l;
-- }
--
-- bd->eob = eob + 1;
-- }
-- }
--
-- rate = mbycost_coeffs(x);
-- error = ENCODEMB_INVOKE(&rtcd->encodemb, mberr)(x, !type);;
-- thisrd = RDFUNC(x->rdmult, x->rddiv, rate, error, 100);
--
-- if (thisrd < baserd)
-- {
-- baserd = thisrd;
-- bestnc = nc;
-- besteob = bd->eob;
-- }
-- }
--
-- //reset coefficients
-- vpx_memcpy(x->e_mbd.qcoeff, saved_qcoefs, 256);
-- vpx_memcpy(x->e_mbd.dqcoeff, saved_dqcoefs, 256);
--
-- if (bestnc)
-- {
-- for (k = 0; k < nzcoefcount; k++)
-- {
-- int bk = nzpos[k].block;
-- int pos = nzpos[k].pos;
-- int mbkpos = bk * 16 + pos;
--
-- if ((nc & (1 << k)))
-- {
-- int cur_qcoef = x->e_mbd.qcoeff[mbkpos];
--
-- if (cur_qcoef < 0)
-- {
-- x->e_mbd.qcoeff[mbkpos]++;
-- x->e_mbd.dqcoeff[mbkpos] = x->e_mbd.qcoeff[mbkpos] * dequant_ptr[pos];
-- }
-- else
-- {
-- x->e_mbd.qcoeff[mbkpos]--;
-- x->e_mbd.dqcoeff[mbkpos] = x->e_mbd.qcoeff[mbkpos] * dequant_ptr[pos];
-- }
-- }
-- }
-- }
--
-- for (i = 0; i < 16; i++)
-- {
-- BLOCKD *bd = &x->e_mbd.block[i];
-- {
-- int eob = -1;
-- int rc;
-- int l;
--
-- for (l = 0; l < 16; l++)
-- {
-- rc = vp8_default_zig_zag1d[l];
--
-- if (bd->qcoeff[rc])
-- eob = l;
-- }
--
-- bd->eob = eob + 1;
-- }
-- }
--
-- return;
--}
--
- static void vp8_find_mb_skip_coef(MACROBLOCK *x)
- {
- int i;
-@@ -955,46 +646,8 @@ static void vp8_find_mb_skip_coef(MACROBLOCK *x)
- }
-
-
--void vp8_optimize_mb_slow(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
--{
-- int cost = 0;
-- int b;
-- TEMP_CONTEXT t, t2;
-- int type = 0;
--
--
-- vp8_setup_temp_context(&t, x->e_mbd.above_context[Y1CONTEXT], x->e_mbd.left_context[Y1CONTEXT], 4);
--
-- if (x->e_mbd.mbmi.mode == SPLITMV || x->e_mbd.mbmi.mode == B_PRED)
-- type = 3;
--
-- vp8_super_slow_yquant_optimization(x, type, rtcd);
-- /*
-- for(b=0;b<16;b++)
-- {
-- vp8_optimize_b(x, b, type, t.a + vp8_block2above[b], t.l + vp8_block2left[b]);
-- }
-- */
--
-- vp8_setup_temp_context(&t, x->e_mbd.above_context[UCONTEXT], x->e_mbd.left_context[UCONTEXT], 2);
--
-- for (b = 16; b < 20; b++)
-- {
-- vp8_optimize_b(x, b, vp8_block2type[b], t.a + vp8_block2above[b], t.l + vp8_block2left[b], rtcd);
-- }
--
-- vp8_setup_temp_context(&t2, x->e_mbd.above_context[VCONTEXT], x->e_mbd.left_context[VCONTEXT], 2);
--
-- for (b = 20; b < 24; b++)
-- {
-- vp8_optimize_b(x, b, vp8_block2type[b], t2.a + vp8_block2above[b], t2.l + vp8_block2left[b], rtcd);
-- }
--}
--
--
- void vp8_optimize_mby(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
- {
-- int cost = 0;
- int b;
- TEMP_CONTEXT t;
- int type = 0;
-@@ -1019,10 +672,8 @@ void vp8_optimize_mby(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
-
- void vp8_optimize_mbuv(MACROBLOCK *x, const VP8_ENCODER_RTCD *rtcd)
- {
-- int cost = 0;
- int b;
- TEMP_CONTEXT t, t2;
-- int type = 0;
-
- if (!x->e_mbd.above_context[UCONTEXT])
- return;
-@@ -1124,6 +775,6 @@ void vp8_encode_inter16x16uvrd(const VP8_ENCODER_RTCD *rtcd, MACROBLOCK *x)
-
- vp8_transform_mbuvrd(x);
-
-- vp8_quantize_mbuvrd(x);
-+ vp8_quantize_mbuv(x);
-
- }
-diff --git a/vp8/encoder/encodemb.h b/vp8/encoder/encodemb.h
-index 91ca8f5..5285a38 100644
---- a/vp8/encoder/encodemb.h
-+++ b/vp8/encoder/encodemb.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/encodemv.c b/vp8/encoder/encodemv.c
-index f287edc..3b58a80 100644
---- a/vp8/encoder/encodemv.c
-+++ b/vp8/encoder/encodemv.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -282,8 +283,6 @@ static void write_component_probs(
-
- //j=0
- {
-- int j = 0;
--
- const int c = events [mv_max];
-
- is_short_ct [0] += c; // Short vector
-diff --git a/vp8/encoder/encodemv.h b/vp8/encoder/encodemv.h
-index 1c1f450..bf6d7af 100644
---- a/vp8/encoder/encodemv.h
-+++ b/vp8/encoder/encodemv.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/ethreading.c b/vp8/encoder/ethreading.c
-index a0b50d2..11b1936 100644
---- a/vp8/encoder/ethreading.c
-+++ b/vp8/encoder/ethreading.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -259,10 +260,8 @@ static void setup_mbby_copy(MACROBLOCK *mbdst, MACROBLOCK *mbsrc)
- z->short_fdct4x4rd = x->short_fdct4x4rd;
- z->short_fdct8x4rd = x->short_fdct8x4rd;
- z->short_fdct8x4rd = x->short_fdct8x4rd;
-- z->vp8_short_fdct4x4_ptr = x->vp8_short_fdct4x4_ptr;
- z->short_walsh4x4 = x->short_walsh4x4;
- z->quantize_b = x->quantize_b;
-- z->quantize_brd = x->quantize_brd;
-
- /*
- z->mvc = x->mvc;
-diff --git a/vp8/encoder/firstpass.c b/vp8/encoder/firstpass.c
-index c519080..ced2d7c 100644
---- a/vp8/encoder/firstpass.c
-+++ b/vp8/encoder/firstpass.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -175,7 +176,6 @@ static double calculate_modified_err(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
- double vp8_simple_weight(YV12_BUFFER_CONFIG *source)
- {
- int i, j;
-- int Total = 0;
-
- unsigned char *src = source->y_buffer;
- unsigned char value;
-@@ -779,7 +779,6 @@ void vp8_first_pass(VP8_COMP *cpi)
- vp8_clear_system_state(); //__asm emms;
- {
- double weight = 0.0;
-- double weigth2 = 0.0;
-
- FIRSTPASS_STATS fps;
-
-@@ -1193,7 +1192,6 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
- FIRSTPASS_STATS next_frame;
- FIRSTPASS_STATS *start_pos;
- int i;
-- int count = 0;
- int image_size = cpi->common.last_frame.y_width * cpi->common.last_frame.y_height;
- double boost_score = 0.0;
- double old_boost_score = 0.0;
-@@ -1234,6 +1232,8 @@ static void define_gf_group(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
-
- start_pos = cpi->stats_in;
-
-+ vpx_memset(&next_frame, 0, sizeof(next_frame)); // assure clean
-+
- // Preload the stats for the next frame.
- mod_frame_err = calculate_modified_err(cpi, this_frame);
-
-@@ -1871,6 +1871,18 @@ void vp8_second_pass(VP8_COMP *cpi)
- }
- }
-
-+ // Keep a globally available copy of this and the next frame's iiratio.
-+ cpi->this_iiratio = this_frame_intra_error /
-+ DOUBLE_DIVIDE_CHECK(this_frame_coded_error);
-+ {
-+ FIRSTPASS_STATS next_frame;
-+ if ( lookup_next_frame_stats(cpi, &next_frame) != EOF )
-+ {
-+ cpi->next_iiratio = next_frame.intra_error /
-+ DOUBLE_DIVIDE_CHECK(next_frame.coded_error);
-+ }
-+ }
-+
- // Set nominal per second bandwidth for this frame
- cpi->target_bandwidth = cpi->per_frame_bandwidth * cpi->output_frame_rate;
- if (cpi->target_bandwidth < 0)
-@@ -2028,6 +2040,8 @@ void vp8_find_next_key_frame(VP8_COMP *cpi, FIRSTPASS_STATS *this_frame)
- double kf_group_coded_err = 0.0;
- double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth * cpi->oxcf.two_pass_vbrmin_section / 100);
-
-+ vpx_memset(&next_frame, 0, sizeof(next_frame)); // assure clean
-+
- vp8_clear_system_state(); //__asm emms;
- start_position = cpi->stats_in;
-
-diff --git a/vp8/encoder/firstpass.h b/vp8/encoder/firstpass.h
-index d7b52f3..48257ce 100644
---- a/vp8/encoder/firstpass.h
-+++ b/vp8/encoder/firstpass.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/generic/csystemdependent.c b/vp8/encoder/generic/csystemdependent.c
-index 52aab66..96028b3 100644
---- a/vp8/encoder/generic/csystemdependent.c
-+++ b/vp8/encoder/generic/csystemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/mcomp.c b/vp8/encoder/mcomp.c
-index d80059d..3c1507f 100644
---- a/vp8/encoder/mcomp.c
-+++ b/vp8/encoder/mcomp.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -1137,7 +1138,6 @@ int vp8_diamond_search_sadx4
- }
-
-
--#if !(CONFIG_REALTIME_ONLY)
- int vp8_full_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int error_per_bit, int distance, vp8_variance_fn_ptr_t *fn_ptr, int *mvcost[2], int *mvsadcost[2])
- {
- unsigned char *what = (*(b->base_src) + b->src);
-@@ -1350,7 +1350,6 @@ int vp8_full_search_sadx3(MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *ref_mv, int er
- else
- return INT_MAX;
- }
--#endif
-
- #ifdef ENTROPY_STATS
- void print_mode_context(void)
-diff --git a/vp8/encoder/mcomp.h b/vp8/encoder/mcomp.h
-index 921206f..40cbb07 100644
---- a/vp8/encoder/mcomp.h
-+++ b/vp8/encoder/mcomp.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/modecosts.c b/vp8/encoder/modecosts.c
-index 73170cf..6632a36 100644
---- a/vp8/encoder/modecosts.c
-+++ b/vp8/encoder/modecosts.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/modecosts.h b/vp8/encoder/modecosts.h
-index 5ade265..0c46acd 100644
---- a/vp8/encoder/modecosts.h
-+++ b/vp8/encoder/modecosts.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c
-index 7662720..98827f9 100644
---- a/vp8/encoder/onyx_if.c
-+++ b/vp8/encoder/onyx_if.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -281,7 +282,6 @@ static void segmentation_test_function(VP8_PTR ptr)
-
- unsigned char *seg_map;
- signed char feature_data[MB_LVL_MAX][MAX_MB_SEGMENTS];
-- int i, j;
-
- // Create a temporary map for segmentation data.
- CHECK_MEM_ERROR(seg_map, vpx_calloc(cpi->common.mb_rows * cpi->common.mb_cols, 1));
-@@ -811,7 +811,7 @@ void vp8_set_speed_features(VP8_COMP *cpi)
- sf->full_freq[1] = 31;
- sf->search_method = NSTEP;
-
-- if (!cpi->ref_frame_flags & VP8_LAST_FLAG)
-+ if (!(cpi->ref_frame_flags & VP8_LAST_FLAG))
- {
- sf->thresh_mult[THR_NEWMV ] = INT_MAX;
- sf->thresh_mult[THR_NEARESTMV] = INT_MAX;
-@@ -820,7 +820,7 @@ void vp8_set_speed_features(VP8_COMP *cpi)
- sf->thresh_mult[THR_SPLITMV ] = INT_MAX;
- }
-
-- if (!cpi->ref_frame_flags & VP8_GOLD_FLAG)
-+ if (!(cpi->ref_frame_flags & VP8_GOLD_FLAG))
- {
- sf->thresh_mult[THR_NEARESTG ] = INT_MAX;
- sf->thresh_mult[THR_ZEROG ] = INT_MAX;
-@@ -829,7 +829,7 @@ void vp8_set_speed_features(VP8_COMP *cpi)
- sf->thresh_mult[THR_SPLITG ] = INT_MAX;
- }
-
-- if (!cpi->ref_frame_flags & VP8_ALT_FLAG)
-+ if (!(cpi->ref_frame_flags & VP8_ALT_FLAG))
- {
- sf->thresh_mult[THR_NEARESTA ] = INT_MAX;
- sf->thresh_mult[THR_ZEROA ] = INT_MAX;
-@@ -1144,18 +1144,15 @@ void vp8_set_speed_features(VP8_COMP *cpi)
- cpi->mb.short_fdct4x4rd = FDCT_INVOKE(&cpi->rtcd.fdct, fast4x4);
- }
-
-- cpi->mb.vp8_short_fdct4x4_ptr = FDCT_INVOKE(&cpi->rtcd.fdct, short4x4);
- cpi->mb.short_walsh4x4 = FDCT_INVOKE(&cpi->rtcd.fdct, walsh_short4x4);
-
- if (cpi->sf.improved_quant)
- {
- cpi->mb.quantize_b = QUANTIZE_INVOKE(&cpi->rtcd.quantize, quantb);
-- cpi->mb.quantize_brd = QUANTIZE_INVOKE(&cpi->rtcd.quantize, quantb);
- }
- else
- {
- cpi->mb.quantize_b = QUANTIZE_INVOKE(&cpi->rtcd.quantize, fastquantb);
-- cpi->mb.quantize_brd = QUANTIZE_INVOKE(&cpi->rtcd.quantize, fastquantb);
- }
-
- #if CONFIG_RUNTIME_CPU_DETECT
-@@ -2252,7 +2249,7 @@ void vp8_remove_compressor(VP8_PTR *ptr)
- double total_psnr2 = vp8_mse2psnr(samples, 255.0, cpi->total_sq_error2);
- double total_ssim = 100 * pow(cpi->summed_quality / cpi->summed_weights, 8.0);
-
-- fprintf(f, "Bitrate\AVGPsnr\tGLBPsnr\tAVPsnrP\tGLPsnrP\tVPXSSIM\t Time(us)\n");
-+ fprintf(f, "Bitrate\tAVGPsnr\tGLBPsnr\tAVPsnrP\tGLPsnrP\tVPXSSIM\t Time(us)\n");
- fprintf(f, "%7.3f\t%7.3f\t%7.3f\t%7.3f\t%7.3f\t%7.3f %8.0f\n",
- dr, cpi->total / cpi->count, total_psnr, cpi->totalp / cpi->count, total_psnr2, total_ssim,
- total_encode_time);
-@@ -4739,7 +4736,6 @@ void vp8_check_gf_quality(VP8_COMP *cpi)
- #if !(CONFIG_REALTIME_ONLY)
- static void Pass2Encode(VP8_COMP *cpi, unsigned long *size, unsigned char *dest, unsigned int *frame_flags)
- {
-- double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth * cpi->oxcf.two_pass_vbrmin_section / 100);
-
- if (!cpi->common.refresh_alt_ref_frame)
- vp8_second_pass(cpi);
-@@ -4748,7 +4744,11 @@ static void Pass2Encode(VP8_COMP *cpi, unsigned long *size, unsigned char *dest,
- cpi->bits_left -= 8 * *size;
-
- if (!cpi->common.refresh_alt_ref_frame)
-+ {
-+ double two_pass_min_rate = (double)(cpi->oxcf.target_bandwidth
-+ *cpi->oxcf.two_pass_vbrmin_section / 100);
- cpi->bits_left += (long long)(two_pass_min_rate / cpi->oxcf.frame_rate);
-+ }
- }
- #endif
-
-@@ -5402,7 +5402,7 @@ int vp8_calc_low_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest, co
- {
- for (j = 0; j < source->y_width; j += 16)
- {
-- unsigned int sse, sse2, sum2;
-+ unsigned int sse;
- VARIANCE_INVOKE(rtcd, mse16x16)(src + j, source->y_stride, dst + j, dest->y_stride, &sse);
-
- if (sse < 8096)
-diff --git a/vp8/encoder/onyx_int.h b/vp8/encoder/onyx_int.h
-index 29b120e..889bf73 100644
---- a/vp8/encoder/onyx_int.h
-+++ b/vp8/encoder/onyx_int.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -25,7 +26,7 @@
- #include "entropy.h"
- #include "threading.h"
- #include "vpx_ports/mem.h"
--#include "vpx_codec/internal/vpx_codec_internal.h"
-+#include "vpx/internal/vpx_codec_internal.h"
- #include "mcomp.h"
-
- #define INTRARDOPT
-@@ -522,8 +523,8 @@ typedef struct
- int motion_lvl;
- int motion_speed;
- int motion_var;
-- int next_iiratio;
-- int this_iiratio;
-+ unsigned int next_iiratio;
-+ unsigned int this_iiratio;
- int this_frame_modified_error;
-
- double norm_intra_err_per_mb;
-diff --git a/vp8/encoder/parms.cpp b/vp8/encoder/parms.cpp
-index 66fdafb..d7d30a8 100644
---- a/vp8/encoder/parms.cpp
-+++ b/vp8/encoder/parms.cpp
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/pickinter.c b/vp8/encoder/pickinter.c
-index d61e2ce..a50f99b 100644
---- a/vp8/encoder/pickinter.c
-+++ b/vp8/encoder/pickinter.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -453,6 +454,7 @@ int vp8_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rec
- vpx_memset(mode_mv, 0, sizeof(mode_mv));
- vpx_memset(nearest_mv, 0, sizeof(nearest_mv));
- vpx_memset(near_mv, 0, sizeof(near_mv));
-+ vpx_memset(&best_mbmode, 0, sizeof(best_mbmode));
-
-
- // set up all the refframe dependent pointers.
-diff --git a/vp8/encoder/pickinter.h b/vp8/encoder/pickinter.h
-index fb28837..76fdb99 100644
---- a/vp8/encoder/pickinter.h
-+++ b/vp8/encoder/pickinter.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/picklpf.c b/vp8/encoder/picklpf.c
-index bbd7840..0527b80 100644
---- a/vp8/encoder/picklpf.c
-+++ b/vp8/encoder/picklpf.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/ppc/csystemdependent.c b/vp8/encoder/ppc/csystemdependent.c
-index f99277f..66fca8f 100644
---- a/vp8/encoder/ppc/csystemdependent.c
-+++ b/vp8/encoder/ppc/csystemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/ppc/encodemb_altivec.asm b/vp8/encoder/ppc/encodemb_altivec.asm
-index e0e976d..14a36a1 100644
---- a/vp8/encoder/ppc/encodemb_altivec.asm
-+++ b/vp8/encoder/ppc/encodemb_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/ppc/fdct_altivec.asm b/vp8/encoder/ppc/fdct_altivec.asm
-index eaab14c..01f3364 100644
---- a/vp8/encoder/ppc/fdct_altivec.asm
-+++ b/vp8/encoder/ppc/fdct_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/ppc/rdopt_altivec.asm b/vp8/encoder/ppc/rdopt_altivec.asm
-index 917bfe0..4f9b050 100644
---- a/vp8/encoder/ppc/rdopt_altivec.asm
-+++ b/vp8/encoder/ppc/rdopt_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/ppc/sad_altivec.asm b/vp8/encoder/ppc/sad_altivec.asm
-index 1102ccf..6d92728 100644
---- a/vp8/encoder/ppc/sad_altivec.asm
-+++ b/vp8/encoder/ppc/sad_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/ppc/variance_altivec.asm b/vp8/encoder/ppc/variance_altivec.asm
-index 952bf72..4e3fd59 100644
---- a/vp8/encoder/ppc/variance_altivec.asm
-+++ b/vp8/encoder/ppc/variance_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/ppc/variance_subpixel_altivec.asm b/vp8/encoder/ppc/variance_subpixel_altivec.asm
-index 148a8d2..4dcf7e4 100644
---- a/vp8/encoder/ppc/variance_subpixel_altivec.asm
-+++ b/vp8/encoder/ppc/variance_subpixel_altivec.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/preproc.c b/vp8/encoder/preproc.c
-index d2a13dc..e9cc075 100644
---- a/vp8/encoder/preproc.c
-+++ b/vp8/encoder/preproc.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/psnr.c b/vp8/encoder/psnr.c
-index 0e34cec..c5e9dad 100644
---- a/vp8/encoder/psnr.c
-+++ b/vp8/encoder/psnr.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/psnr.h b/vp8/encoder/psnr.h
-index 9f6ca0b..dd0b4e5 100644
---- a/vp8/encoder/psnr.h
-+++ b/vp8/encoder/psnr.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/quantize.c b/vp8/encoder/quantize.c
-index 6028ebf..73e80e3 100644
---- a/vp8/encoder/quantize.c
-+++ b/vp8/encoder/quantize.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -55,9 +56,7 @@ void vp8_fast_quantize_b_c(BLOCK *b, BLOCKD *d)
- }
- }
- }
--
- d->eob = eob + 1;
--
- }
-
- void vp8_regular_quantize_b(BLOCK *b, BLOCKD *d)
-@@ -111,61 +110,40 @@ void vp8_regular_quantize_b(BLOCK *b, BLOCKD *d)
-
- d->eob = eob + 1;
- }
-+
- void vp8_quantize_mby(MACROBLOCK *x)
- {
- int i;
-+ int has_2nd_order = (x->e_mbd.mbmi.mode != B_PRED
-+ && x->e_mbd.mbmi.mode != SPLITMV);
-
-- if (x->e_mbd.mbmi.mode != B_PRED && x->e_mbd.mbmi.mode != SPLITMV)
-+ for (i = 0; i < 16; i++)
- {
-- for (i = 0; i < 16; i++)
-- {
-- x->quantize_b(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (x->e_mbd.block[i].eob < 2);
-- }
-+ x->quantize_b(&x->block[i], &x->e_mbd.block[i]);
-+ x->e_mbd.mbmi.mb_skip_coeff &=
-+ (x->e_mbd.block[i].eob <= has_2nd_order);
-+ }
-
-+ if(has_2nd_order)
-+ {
- x->quantize_b(&x->block[24], &x->e_mbd.block[24]);
- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[24].eob);
--
-- }
-- else
-- {
-- for (i = 0; i < 16; i++)
-- {
-- x->quantize_b(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[i].eob);
-- }
- }
- }
-
- void vp8_quantize_mb(MACROBLOCK *x)
- {
- int i;
-+ int has_2nd_order=(x->e_mbd.mbmi.mode != B_PRED
-+ && x->e_mbd.mbmi.mode != SPLITMV);
-
- x->e_mbd.mbmi.mb_skip_coeff = 1;
--
-- if (x->e_mbd.mbmi.mode != B_PRED && x->e_mbd.mbmi.mode != SPLITMV)
-+ for (i = 0; i < 24+has_2nd_order; i++)
- {
-- for (i = 0; i < 16; i++)
-- {
-- x->quantize_b(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (x->e_mbd.block[i].eob < 2);
-- }
--
-- for (i = 16; i < 25; i++)
-- {
-- x->quantize_b(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[i].eob);
-- }
-- }
-- else
-- {
-- for (i = 0; i < 24; i++)
-- {
-- x->quantize_b(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[i].eob);
-- }
-+ x->quantize_b(&x->block[i], &x->e_mbd.block[i]);
-+ x->e_mbd.mbmi.mb_skip_coeff &=
-+ (x->e_mbd.block[i].eob <= (has_2nd_order && i<16));
- }
--
- }
-
-
-@@ -179,71 +157,3 @@ void vp8_quantize_mbuv(MACROBLOCK *x)
- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[i].eob);
- }
- }
--
--// This function is not currently called
--void vp8_quantize_mbrd(MACROBLOCK *x)
--{
-- int i;
--
-- x->e_mbd.mbmi.mb_skip_coeff = 1;
--
-- if (x->e_mbd.mbmi.mode != B_PRED && x->e_mbd.mbmi.mode != SPLITMV)
-- {
-- for (i = 0; i < 16; i++)
-- {
-- x->quantize_brd(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (x->e_mbd.block[i].eob < 2);
-- }
--
-- for (i = 16; i < 25; i++)
-- {
-- x->quantize_brd(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[i].eob);
-- }
-- }
-- else
-- {
-- for (i = 0; i < 24; i++)
-- {
-- x->quantize_brd(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[i].eob);
-- }
-- }
--}
--
--void vp8_quantize_mbuvrd(MACROBLOCK *x)
--{
-- int i;
--
-- for (i = 16; i < 24; i++)
-- {
-- x->quantize_brd(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[i].eob);
-- }
--}
--
--void vp8_quantize_mbyrd(MACROBLOCK *x)
--{
-- int i;
--
-- if (x->e_mbd.mbmi.mode != B_PRED && x->e_mbd.mbmi.mode != SPLITMV)
-- {
-- for (i = 0; i < 16; i++)
-- {
-- x->quantize_brd(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (x->e_mbd.block[i].eob < 2);
-- }
--
-- x->quantize_brd(&x->block[24], &x->e_mbd.block[24]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[24].eob);
--
-- }
-- else
-- {
-- for (i = 0; i < 16; i++)
-- {
-- x->quantize_brd(&x->block[i], &x->e_mbd.block[i]);
-- x->e_mbd.mbmi.mb_skip_coeff &= (!x->e_mbd.block[i].eob);
-- }
-- }
--}
-diff --git a/vp8/encoder/quantize.h b/vp8/encoder/quantize.h
-index 868e8e3..ca073ef 100644
---- a/vp8/encoder/quantize.h
-+++ b/vp8/encoder/quantize.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -16,6 +17,10 @@
- #define prototype_quantize_block(sym) \
- void (sym)(BLOCK *b,BLOCKD *d)
-
-+#if ARCH_X86 || ARCH_X86_64
-+#include "x86/quantize_x86.h"
-+#endif
-+
- #if ARCH_ARM
- #include "arm/quantize_arm.h"
- #endif
-@@ -45,8 +50,5 @@ typedef struct
- extern void vp8_quantize_mb(MACROBLOCK *x);
- extern void vp8_quantize_mbuv(MACROBLOCK *x);
- extern void vp8_quantize_mby(MACROBLOCK *x);
--extern void vp8_quantize_mbyrd(MACROBLOCK *x);
--extern void vp8_quantize_mbuvrd(MACROBLOCK *x);
--extern void vp8_quantize_mbrd(MACROBLOCK *x);
-
- #endif
-diff --git a/vp8/encoder/ratectrl.c b/vp8/encoder/ratectrl.c
-index 05040d3..944a2e8 100644
---- a/vp8/encoder/ratectrl.c
-+++ b/vp8/encoder/ratectrl.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -1063,7 +1064,6 @@ void vp8_calc_pframe_target_size(VP8_COMP *cpi)
-
- if (cpi->common.refresh_golden_frame == TRUE)
- {
-- int isize_adjustment = 0;
- #if 0
-
- if (0) // p_gw
-@@ -1119,8 +1119,9 @@ void vp8_calc_pframe_target_size(VP8_COMP *cpi)
- cpi->this_frame_target = (baseline_bits_at_q(1, Q, cpi->common.MBs) * cpi->last_boost) / 100;
-
- }
-- // If there is an active ARF at this location use the minimum bits on this frame
-- else
-+ // If there is an active ARF at this location use the minimum
-+ // bits on this frame unless it was a contructed arf.
-+ else if (cpi->oxcf.arnr_max_frames == 0)
- {
- cpi->this_frame_target = 0; // Minimial spend on gf that is replacing an arf
- }
-@@ -1171,7 +1172,8 @@ void vp8_update_rate_correction_factors(VP8_COMP *cpi, int damp_var)
- while (Z > 0)
- {
- Z --;
-- projected_size_based_on_q *= (int)Factor;
-+ projected_size_based_on_q =
-+ (int)(Factor * projected_size_based_on_q);
- Factor += factor_adjustment;
-
- if (Factor >= 0.999)
-@@ -1362,7 +1364,8 @@ int vp8_regulate_q(VP8_COMP *cpi, int target_bits_per_frame)
- if (cpi->zbin_over_quant > zbin_oqmax)
- cpi->zbin_over_quant = zbin_oqmax;
-
-- bits_per_mb_at_this_q *= (int)Factor; // Each over-ruin step is assumed to equate to approximately 3% reduction in bitrate
-+ // Adjust bits_per_mb_at_this_q estimate
-+ bits_per_mb_at_this_q = (int)(Factor * bits_per_mb_at_this_q);
- Factor += factor_adjustment;
-
- if (Factor >= 0.999)
-diff --git a/vp8/encoder/ratectrl.h b/vp8/encoder/ratectrl.h
-index 588c7a8..ff5778f 100644
---- a/vp8/encoder/ratectrl.h
-+++ b/vp8/encoder/ratectrl.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
-index 0846996..9a772a7 100644
---- a/vp8/encoder/rdopt.c
-+++ b/vp8/encoder/rdopt.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -170,15 +171,13 @@ static void fill_token_costs(
-
- }
-
--static int rd_iifactor [ 32 ] = { 16, 16, 16, 12, 8, 4, 2, 0,
-+static int rd_iifactor [ 32 ] = { 4, 4, 3, 2, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- };
-
-
--
--
- // The values in this table should be reviewed
- static int sad_per_bit16lut[128] =
- {
-@@ -237,36 +236,32 @@ void vp8_initialize_rd_consts(VP8_COMP *cpi, int Qvalue)
-
- vp8_clear_system_state(); //__asm emms;
-
-- cpi->RDMULT = (int)((0.00007 * (capped_q * capped_q * capped_q * capped_q)) - (0.0125 * (capped_q * capped_q * capped_q)) +
-- (2.25 * (capped_q * capped_q)) - (12.5 * capped_q) + 25.0);
-+ cpi->RDMULT = (int)( (0.0001 * (capped_q * capped_q * capped_q * capped_q))
-+ -(0.015 * (capped_q * capped_q * capped_q))
-+ +(3.25 * (capped_q * capped_q))
-+ -(17.5 * capped_q) + 125.0);
-
-- if (cpi->RDMULT < 25)
-- cpi->RDMULT = 25;
-+ if (cpi->RDMULT < 125)
-+ cpi->RDMULT = 125;
-
-- if (cpi->pass == 2)
-+ if (cpi->pass == 2 && (cpi->common.frame_type != KEY_FRAME))
- {
-- if (cpi->common.frame_type == KEY_FRAME)
-- cpi->RDMULT += (cpi->RDMULT * rd_iifactor[0]) / 16;
-- else if (cpi->next_iiratio > 31)
-- cpi->RDMULT += (cpi->RDMULT * rd_iifactor[31]) / 16;
-+ if (cpi->next_iiratio > 31)
-+ cpi->RDMULT += (cpi->RDMULT * rd_iifactor[31]) >> 4;
- else
-- cpi->RDMULT += (cpi->RDMULT * rd_iifactor[cpi->next_iiratio]) / 16;
-+ cpi->RDMULT += (cpi->RDMULT * rd_iifactor[cpi->next_iiratio]) >> 4;
- }
-
-
- // Extend rate multiplier along side quantizer zbin increases
- if (cpi->zbin_over_quant > 0)
- {
-- // Extend rate multiplier along side quantizer zbin increases
-- if (cpi->zbin_over_quant > 0)
-- {
-- double oq_factor = pow(1.006, cpi->zbin_over_quant);
-+ double oq_factor = pow(1.006, cpi->zbin_over_quant);
-
-- if (oq_factor > (1.0 + ((double)cpi->zbin_over_quant / 64.0)))
-- oq_factor = (1.0 + (double)cpi->zbin_over_quant / 64.0);
-+ if (oq_factor > (1.0 + ((double)cpi->zbin_over_quant / 64.0)))
-+ oq_factor = (1.0 + (double)cpi->zbin_over_quant / 64.0);
-
-- cpi->RDMULT *= (int)oq_factor;
-- }
-+ cpi->RDMULT = (int)(oq_factor * cpi->RDMULT);
- }
-
- cpi->mb.errorperbit = (cpi->RDMULT / 100);
-@@ -1037,7 +1032,7 @@ static unsigned int vp8_encode_inter_mb_segment(MACROBLOCK *x, int const *labels
-
- // set to 0 no way to account for 2nd order DC so discount
- //be->coeff[0] = 0;
-- x->quantize_brd(be, bd);
-+ x->quantize_b(be, bd);
-
- distortion += ENCODEMB_INVOKE(rtcd, berr)(be->coeff, bd->dqcoeff);
- }
-@@ -1075,7 +1070,7 @@ static void macro_block_yrd(MACROBLOCK *mb, int *Rate, int *Distortion, const vp
- // Quantization
- for (b = 0; b < 16; b++)
- {
-- mb->quantize_brd(&mb->block[b], &mb->e_mbd.block[b]);
-+ mb->quantize_b(&mb->block[b], &mb->e_mbd.block[b]);
- }
-
- // DC predication and Quantization of 2nd Order block
-@@ -1083,7 +1078,7 @@ static void macro_block_yrd(MACROBLOCK *mb, int *Rate, int *Distortion, const vp
- {
-
- {
-- mb->quantize_brd(mb_y2, x_y2);
-+ mb->quantize_b(mb_y2, x_y2);
- }
- }
-
-@@ -1130,6 +1125,9 @@ static int vp8_rd_pick_best_mbsegmentation(VP8_COMP *cpi, MACROBLOCK *x, MV *bes
- MV bmvs[16];
- int beobs[16];
-
-+ vpx_memset(beobs, 0, sizeof(beobs));
-+
-+
- for (segmentation = 0; segmentation < VP8_NUMMBSPLITS; segmentation++)
- {
- int label_count;
-@@ -1464,6 +1462,8 @@ int vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
-
- *returnintra = INT_MAX;
-
-+ vpx_memset(&best_mbmode, 0, sizeof(best_mbmode)); // clean
-+
- cpi->mbs_tested_so_far++; // Count of the number of MBs tested so far this frame
-
- x->skip = 0;
-diff --git a/vp8/encoder/rdopt.h b/vp8/encoder/rdopt.h
-index c6eae4b..617241d 100644
---- a/vp8/encoder/rdopt.h
-+++ b/vp8/encoder/rdopt.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/sad_c.c b/vp8/encoder/sad_c.c
-index 74c6bd7..1914c60 100644
---- a/vp8/encoder/sad_c.c
-+++ b/vp8/encoder/sad_c.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/ssim.c b/vp8/encoder/ssim.c
-index df214a8..35dd10c 100644
---- a/vp8/encoder/ssim.c
-+++ b/vp8/encoder/ssim.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/tokenize.c b/vp8/encoder/tokenize.c
-index 33ddd64..819f6a5 100644
---- a/vp8/encoder/tokenize.c
-+++ b/vp8/encoder/tokenize.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/tokenize.h b/vp8/encoder/tokenize.h
-index 02aacc2..51f912b 100644
---- a/vp8/encoder/tokenize.h
-+++ b/vp8/encoder/tokenize.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/treewriter.c b/vp8/encoder/treewriter.c
-index e398044..942442b 100644
---- a/vp8/encoder/treewriter.c
-+++ b/vp8/encoder/treewriter.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/treewriter.h b/vp8/encoder/treewriter.h
-index 05ac74c..075df50 100644
---- a/vp8/encoder/treewriter.h
-+++ b/vp8/encoder/treewriter.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/variance.h b/vp8/encoder/variance.h
-index b3b55c3..6610e7d 100644
---- a/vp8/encoder/variance.h
-+++ b/vp8/encoder/variance.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/variance_c.c b/vp8/encoder/variance_c.c
-index 85269b9..efcf2b7 100644
---- a/vp8/encoder/variance_c.c
-+++ b/vp8/encoder/variance_c.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/x86/csystemdependent.c b/vp8/encoder/x86/csystemdependent.c
-index 186ee68..8bc6877 100644
---- a/vp8/encoder/x86/csystemdependent.c
-+++ b/vp8/encoder/x86/csystemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/x86/dct_mmx.asm b/vp8/encoder/x86/dct_mmx.asm
-index e134237..3dfc47b 100644
---- a/vp8/encoder/x86/dct_mmx.asm
-+++ b/vp8/encoder/x86/dct_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/dct_sse2.asm b/vp8/encoder/x86/dct_sse2.asm
-index 3e5e9a7..8ddc5d7 100644
---- a/vp8/encoder/x86/dct_sse2.asm
-+++ b/vp8/encoder/x86/dct_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/dct_x86.h b/vp8/encoder/x86/dct_x86.h
-index bc80e64..fec1a2e 100644
---- a/vp8/encoder/x86/dct_x86.h
-+++ b/vp8/encoder/x86/dct_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/x86/encodemb_x86.h b/vp8/encoder/x86/encodemb_x86.h
-index 9397a6c..d1ba7d9 100644
---- a/vp8/encoder/x86/encodemb_x86.h
-+++ b/vp8/encoder/x86/encodemb_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/x86/encodeopt.asm b/vp8/encoder/x86/encodeopt.asm
-index 1940471..cdc17a5 100644
---- a/vp8/encoder/x86/encodeopt.asm
-+++ b/vp8/encoder/x86/encodeopt.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/fwalsh_sse2.asm b/vp8/encoder/x86/fwalsh_sse2.asm
-index 7d86201..1966697 100644
---- a/vp8/encoder/x86/fwalsh_sse2.asm
-+++ b/vp8/encoder/x86/fwalsh_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/mcomp_x86.h b/vp8/encoder/x86/mcomp_x86.h
-index 5661491..c2b4b36 100644
---- a/vp8/encoder/x86/mcomp_x86.h
-+++ b/vp8/encoder/x86/mcomp_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/x86/preproc_mmx.c b/vp8/encoder/x86/preproc_mmx.c
-index 69617ca..8b23bb5 100644
---- a/vp8/encoder/x86/preproc_mmx.c
-+++ b/vp8/encoder/x86/preproc_mmx.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/x86/quantize_mmx.asm b/vp8/encoder/x86/quantize_mmx.asm
-index 847fc6e..25adca0 100644
---- a/vp8/encoder/x86/quantize_mmx.asm
-+++ b/vp8/encoder/x86/quantize_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/quantize_sse2.asm b/vp8/encoder/x86/quantize_sse2.asm
-new file mode 100644
-index 0000000..c64a8ba
---- /dev/null
-+++ b/vp8/encoder/x86/quantize_sse2.asm
-@@ -0,0 +1,254 @@
-+;
-+; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+;
-+; Use of this source code is governed by a BSD-style license and patent
-+; grant that can be found in the LICENSE file in the root of the source
-+; tree. All contributing project authors may be found in the AUTHORS
-+; file in the root of the source tree.
-+;
-+
-+
-+%include "vpx_ports/x86_abi_support.asm"
-+
-+
-+;int vp8_regular_quantize_b_impl_sse2(short *coeff_ptr, short *zbin_ptr,
-+; short *qcoeff_ptr,short *dequant_ptr,
-+; const int *default_zig_zag, short *round_ptr,
-+; short *quant_ptr, short *dqcoeff_ptr,
-+; unsigned short zbin_oq_value,
-+; short *zbin_boost_ptr);
-+;
-+global sym(vp8_regular_quantize_b_impl_sse2)
-+sym(vp8_regular_quantize_b_impl_sse2):
-+ push rbp
-+ mov rbp, rsp
-+ SHADOW_ARGS_TO_STACK 10
-+ push rsi
-+ push rdi
-+ push rbx
-+ ; end prolog
-+
-+ ALIGN_STACK 16, rax
-+
-+ %define abs_minus_zbin_lo 0
-+ %define abs_minus_zbin_hi 16
-+ %define temp_qcoeff_lo 32
-+ %define temp_qcoeff_hi 48
-+ %define save_xmm6 64
-+ %define save_xmm7 80
-+ %define eob 96
-+
-+ %define vp8_regularquantizeb_stack_size eob + 16
-+
-+ sub rsp, vp8_regularquantizeb_stack_size
-+
-+ movdqa DQWORD PTR[rsp + save_xmm6], xmm6
-+ movdqa DQWORD PTR[rsp + save_xmm7], xmm7
-+
-+ mov rdx, arg(0) ;coeff_ptr
-+ mov eax, arg(8) ;zbin_oq_value
-+
-+ mov rcx, arg(1) ;zbin_ptr
-+ movd xmm7, eax
-+
-+ movdqa xmm0, DQWORD PTR[rdx]
-+ movdqa xmm4, DQWORD PTR[rdx + 16]
-+
-+ movdqa xmm1, xmm0
-+ movdqa xmm5, xmm4
-+
-+ psraw xmm0, 15 ;sign of z (aka sz)
-+ psraw xmm4, 15 ;sign of z (aka sz)
-+
-+ pxor xmm1, xmm0
-+ pxor xmm5, xmm4
-+
-+ movdqa xmm2, DQWORD PTR[rcx] ;load zbin_ptr
-+ movdqa xmm3, DQWORD PTR[rcx + 16] ;load zbin_ptr
-+
-+ pshuflw xmm7, xmm7, 0
-+ psubw xmm1, xmm0 ;x = abs(z)
-+
-+ punpcklwd xmm7, xmm7 ;duplicated zbin_oq_value
-+ psubw xmm5, xmm4 ;x = abs(z)
-+
-+ paddw xmm2, xmm7
-+ paddw xmm3, xmm7
-+
-+ psubw xmm1, xmm2 ;sub (zbin_ptr + zbin_oq_value)
-+ psubw xmm5, xmm3 ;sub (zbin_ptr + zbin_oq_value)
-+
-+ mov rdi, arg(5) ;round_ptr
-+ mov rsi, arg(6) ;quant_ptr
-+
-+ movdqa DQWORD PTR[rsp + abs_minus_zbin_lo], xmm1
-+ movdqa DQWORD PTR[rsp + abs_minus_zbin_hi], xmm5
-+
-+ paddw xmm1, xmm2 ;add (zbin_ptr + zbin_oq_value) back
-+ paddw xmm5, xmm3 ;add (zbin_ptr + zbin_oq_value) back
-+
-+ movdqa xmm2, DQWORD PTR[rdi]
-+ movdqa xmm3, DQWORD PTR[rsi]
-+
-+ movdqa xmm6, DQWORD PTR[rdi + 16]
-+ movdqa xmm7, DQWORD PTR[rsi + 16]
-+
-+ paddw xmm1, xmm2
-+ paddw xmm5, xmm6
-+
-+ pmulhw xmm1, xmm3
-+ pmulhw xmm5, xmm7
-+
-+ mov rsi, arg(2) ;qcoeff_ptr
-+ pxor xmm6, xmm6
-+
-+ pxor xmm1, xmm0
-+ pxor xmm5, xmm4
-+
-+ psubw xmm1, xmm0
-+ psubw xmm5, xmm4
-+
-+ movdqa DQWORD PTR[rsp + temp_qcoeff_lo], xmm1
-+ movdqa DQWORD PTR[rsp + temp_qcoeff_hi], xmm5
-+
-+ movdqa DQWORD PTR[rsi], xmm6 ;zero qcoeff
-+ movdqa DQWORD PTR[rsi + 16], xmm6 ;zero qcoeff
-+
-+ xor rax, rax
-+ mov rcx, -1
-+
-+ mov [rsp + eob], rcx
-+ mov rsi, arg(9) ;zbin_boost_ptr
-+
-+ mov rbx, arg(4) ;default_zig_zag
-+
-+rq_zigzag_loop:
-+ movsxd rcx, DWORD PTR[rbx + rax*4] ;now we have rc
-+ movsx edi, WORD PTR [rsi] ;*zbin_boost_ptr aka zbin
-+ lea rsi, [rsi + 2] ;zbin_boost_ptr++
-+
-+ movsx edx, WORD PTR[rsp + abs_minus_zbin_lo + rcx *2]
-+
-+ sub edx, edi ;x - zbin
-+ jl rq_zigzag_1
-+
-+ mov rdi, arg(2) ;qcoeff_ptr
-+
-+ movsx edx, WORD PTR[rsp + temp_qcoeff_lo + rcx *2]
-+
-+ cmp edx, 0
-+ je rq_zigzag_1
-+
-+ mov WORD PTR[rdi + rcx * 2], dx ;qcoeff_ptr[rc] = temp_qcoeff[rc]
-+
-+ mov rsi, arg(9) ;zbin_boost_ptr
-+ mov [rsp + eob], rax ;eob = i
-+
-+rq_zigzag_1:
-+ movsxd rcx, DWORD PTR[rbx + rax*4 + 4]
-+ movsx edi, WORD PTR [rsi] ;*zbin_boost_ptr aka zbin
-+ lea rsi, [rsi + 2] ;zbin_boost_ptr++
-+
-+ movsx edx, WORD PTR[rsp + abs_minus_zbin_lo + rcx *2]
-+ lea rax, [rax + 1]
-+
-+ sub edx, edi ;x - zbin
-+ jl rq_zigzag_1a
-+
-+ mov rdi, arg(2) ;qcoeff_ptr
-+
-+ movsx edx, WORD PTR[rsp + temp_qcoeff_lo + rcx *2]
-+
-+ cmp edx, 0
-+ je rq_zigzag_1a
-+
-+ mov WORD PTR[rdi + rcx * 2], dx ;qcoeff_ptr[rc] = temp_qcoeff[rc]
-+
-+ mov rsi, arg(9) ;zbin_boost_ptr
-+ mov [rsp + eob], rax ;eob = i
-+
-+rq_zigzag_1a:
-+ movsxd rcx, DWORD PTR[rbx + rax*4 + 4]
-+ movsx edi, WORD PTR [rsi] ;*zbin_boost_ptr aka zbin
-+ lea rsi, [rsi + 2] ;zbin_boost_ptr++
-+
-+ movsx edx, WORD PTR[rsp + abs_minus_zbin_lo + rcx *2]
-+ lea rax, [rax + 1]
-+
-+ sub edx, edi ;x - zbin
-+ jl rq_zigzag_1b
-+
-+ mov rdi, arg(2) ;qcoeff_ptr
-+
-+ movsx edx, WORD PTR[rsp + temp_qcoeff_lo + rcx *2]
-+
-+ cmp edx, 0
-+ je rq_zigzag_1b
-+
-+ mov WORD PTR[rdi + rcx * 2], dx ;qcoeff_ptr[rc] = temp_qcoeff[rc]
-+
-+ mov rsi, arg(9) ;zbin_boost_ptr
-+ mov [rsp + eob], rax ;eob = i
-+
-+rq_zigzag_1b:
-+ movsxd rcx, DWORD PTR[rbx + rax*4 + 4]
-+ movsx edi, WORD PTR [rsi] ;*zbin_boost_ptr aka zbin
-+ lea rsi, [rsi + 2] ;zbin_boost_ptr++
-+
-+ movsx edx, WORD PTR[rsp + abs_minus_zbin_lo + rcx *2]
-+ lea rax, [rax + 1]
-+
-+ sub edx, edi ;x - zbin
-+ jl rq_zigzag_1c
-+
-+ mov rdi, arg(2) ;qcoeff_ptr
-+
-+ movsx edx, WORD PTR[rsp + temp_qcoeff_lo + rcx *2]
-+
-+ cmp edx, 0
-+ je rq_zigzag_1c
-+
-+ mov WORD PTR[rdi + rcx * 2], dx ;qcoeff_ptr[rc] = temp_qcoeff[rc]
-+
-+ mov rsi, arg(9) ;zbin_boost_ptr
-+ mov [rsp + eob], rax ;eob = i
-+
-+rq_zigzag_1c:
-+ lea rax, [rax + 1]
-+
-+ cmp rax, 16
-+ jl rq_zigzag_loop
-+
-+ mov rdi, arg(2) ;qcoeff_ptr
-+ mov rcx, arg(3) ;dequant_ptr
-+ mov rsi, arg(7) ;dqcoeff_ptr
-+
-+ movdqa xmm2, DQWORD PTR[rdi]
-+ movdqa xmm3, DQWORD PTR[rdi + 16]
-+
-+ movdqa xmm0, DQWORD PTR[rcx]
-+ movdqa xmm1, DQWORD PTR[rcx + 16]
-+
-+ pmullw xmm0, xmm2
-+ pmullw xmm1, xmm3
-+
-+ movdqa DQWORD PTR[rsi], xmm0 ;store dqcoeff
-+ movdqa DQWORD PTR[rsi + 16], xmm1 ;store dqcoeff
-+
-+ mov rax, [rsp + eob]
-+
-+ movdqa xmm6, DQWORD PTR[rsp + save_xmm6]
-+ movdqa xmm7, DQWORD PTR[rsp + save_xmm7]
-+
-+ add rax, 1
-+
-+ add rsp, vp8_regularquantizeb_stack_size
-+ pop rsp
-+
-+ ; begin epilog
-+ pop rbx
-+ pop rdi
-+ pop rsi
-+ UNSHADOW_ARGS
-+ pop rbp
-+ ret
-diff --git a/vp8/encoder/x86/quantize_x86.h b/vp8/encoder/x86/quantize_x86.h
-new file mode 100644
-index 0000000..37d69a8
---- /dev/null
-+++ b/vp8/encoder/x86/quantize_x86.h
-@@ -0,0 +1,38 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license and patent
-+ * grant that can be found in the LICENSE file in the root of the source
-+ * tree. All contributing project authors may be found in the AUTHORS
-+ * file in the root of the source tree.
-+ */
-+
-+#ifndef QUANTIZE_X86_H
-+#define QUANTIZE_X86_H
-+
-+
-+/* Note:
-+ *
-+ * This platform is commonly built for runtime CPU detection. If you modify
-+ * any of the function mappings present in this file, be sure to also update
-+ * them in the function pointer initialization code
-+ */
-+#if HAVE_MMX
-+
-+#endif
-+
-+
-+#if HAVE_SSE2
-+extern prototype_quantize_block(vp8_regular_quantize_b_sse2);
-+
-+#if !CONFIG_RUNTIME_CPU_DETECT
-+
-+#undef vp8_quantize_quantb
-+#define vp8_quantize_quantb vp8_regular_quantize_b_sse2
-+
-+#endif
-+
-+#endif
-+
-+
-+#endif
-diff --git a/vp8/encoder/x86/sad_mmx.asm b/vp8/encoder/x86/sad_mmx.asm
-index a825698..4b35749 100644
---- a/vp8/encoder/x86/sad_mmx.asm
-+++ b/vp8/encoder/x86/sad_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/sad_sse2.asm b/vp8/encoder/x86/sad_sse2.asm
-index 53240bb..f4ef551 100644
---- a/vp8/encoder/x86/sad_sse2.asm
-+++ b/vp8/encoder/x86/sad_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/sad_sse3.asm b/vp8/encoder/x86/sad_sse3.asm
-index 38cc029..edfe82f 100644
---- a/vp8/encoder/x86/sad_sse3.asm
-+++ b/vp8/encoder/x86/sad_sse3.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/sad_ssse3.asm b/vp8/encoder/x86/sad_ssse3.asm
-index 1bb9561..79c4b44 100644
---- a/vp8/encoder/x86/sad_ssse3.asm
-+++ b/vp8/encoder/x86/sad_ssse3.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/subtract_mmx.asm b/vp8/encoder/x86/subtract_mmx.asm
-index ce3e610..d9babd3 100644
---- a/vp8/encoder/x86/subtract_mmx.asm
-+++ b/vp8/encoder/x86/subtract_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/variance_impl_mmx.asm b/vp8/encoder/x86/variance_impl_mmx.asm
-index d0da82a..31f66ec 100644
---- a/vp8/encoder/x86/variance_impl_mmx.asm
-+++ b/vp8/encoder/x86/variance_impl_mmx.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/variance_impl_sse2.asm b/vp8/encoder/x86/variance_impl_sse2.asm
-index 7e5ee28..1ccc6c5 100644
---- a/vp8/encoder/x86/variance_impl_sse2.asm
-+++ b/vp8/encoder/x86/variance_impl_sse2.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vp8/encoder/x86/variance_mmx.c b/vp8/encoder/x86/variance_mmx.c
-index 4a5b25b..788b833 100644
---- a/vp8/encoder/x86/variance_mmx.c
-+++ b/vp8/encoder/x86/variance_mmx.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/x86/variance_sse2.c b/vp8/encoder/x86/variance_sse2.c
-index ea80753..78ecd7b 100644
---- a/vp8/encoder/x86/variance_sse2.c
-+++ b/vp8/encoder/x86/variance_sse2.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vp8/encoder/x86/variance_x86.h b/vp8/encoder/x86/variance_x86.h
-index 35fc90c..9cdd662 100644
---- a/vp8/encoder/x86/variance_x86.h
-+++ b/vp8/encoder/x86/variance_x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -240,7 +241,7 @@ extern prototype_sad_multi_dif_address(vp8_sad4x4x4d_sse3);
- #define vp8_variance_sad4x4x3 vp8_sad4x4x3_sse3
-
- #undef vp8_variance_sad16x16x4d
--#define vp8_variance_sad16x16x4 vp8_sad16x16x4d_sse3
-+#define vp8_variance_sad16x16x4d vp8_sad16x16x4d_sse3
-
- #undef vp8_variance_sad16x8x4d
- #define vp8_variance_sad16x8x4d vp8_sad16x8x4d_sse3
-diff --git a/vp8/encoder/x86/x86_csystemdependent.c b/vp8/encoder/x86/x86_csystemdependent.c
-index f1391ba..f6123a8 100644
---- a/vp8/encoder/x86/x86_csystemdependent.c
-+++ b/vp8/encoder/x86/x86_csystemdependent.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -120,6 +121,40 @@ void vp8_fast_quantize_b_sse(BLOCK *b, BLOCKD *d)
- );
- }
-
-+int vp8_regular_quantize_b_impl_sse2(short *coeff_ptr, short *zbin_ptr,
-+ short *qcoeff_ptr,short *dequant_ptr,
-+ const int *default_zig_zag, short *round_ptr,
-+ short *quant_ptr, short *dqcoeff_ptr,
-+ unsigned short zbin_oq_value,
-+ short *zbin_boost_ptr);
-+
-+void vp8_regular_quantize_b_sse2(BLOCK *b,BLOCKD *d)
-+{
-+ short *zbin_boost_ptr = &b->zrun_zbin_boost[0];
-+ short *coeff_ptr = &b->coeff[0];
-+ short *zbin_ptr = &b->zbin[0][0];
-+ short *round_ptr = &b->round[0][0];
-+ short *quant_ptr = &b->quant[0][0];
-+ short *qcoeff_ptr = d->qcoeff;
-+ short *dqcoeff_ptr = d->dqcoeff;
-+ short *dequant_ptr = &d->dequant[0][0];
-+ short zbin_oq_value = b->zbin_extra;
-+
-+ d->eob = vp8_regular_quantize_b_impl_sse2(
-+ coeff_ptr,
-+ zbin_ptr,
-+ qcoeff_ptr,
-+ dequant_ptr,
-+ vp8_default_zig_zag1d,
-+
-+ round_ptr,
-+ quant_ptr,
-+ dqcoeff_ptr,
-+ zbin_oq_value,
-+ zbin_boost_ptr
-+ );
-+}
-+
- int vp8_mbblock_error_xmm_impl(short *coeff_ptr, short *dcoef_ptr, int dc);
- int vp8_mbblock_error_xmm(MACROBLOCK *mb, int dc)
- {
-@@ -250,6 +285,7 @@ void vp8_arch_x86_encoder_init(VP8_COMP *cpi)
- /* cpi->rtcd.encodemb.sub* not implemented for wmt */
-
- cpi->rtcd.quantize.fastquantb = vp8_fast_quantize_b_sse;
-+ cpi->rtcd.quantize.quantb = vp8_regular_quantize_b_sse2;
- }
-
- #endif
-diff --git a/vp8/exports_dec b/vp8/exports_dec
-new file mode 100644
-index 0000000..f9b985c
---- /dev/null
-+++ b/vp8/exports_dec
-@@ -0,0 +1 @@
-+data vpx_codec_vp8_dx_algo
-diff --git a/vp8/exports_enc b/vp8/exports_enc
-new file mode 100644
-index 0000000..9967011
---- /dev/null
-+++ b/vp8/exports_enc
-@@ -0,0 +1 @@
-+data vpx_codec_vp8_cx_algo
-diff --git a/vp8/vp8.h b/vp8/vp8.h
-deleted file mode 100644
-index 87ca217..0000000
---- a/vp8/vp8.h
-+++ /dev/null
-@@ -1,116 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\defgroup vp8 VP8
-- * \ingroup codecs
-- * VP8 is vpx's newest video compression algorithm that uses motion
-- * compensated prediction, Discrete Cosine Transform (DCT) coding of the
-- * prediction error signal and context dependent entropy coding techniques
-- * based on arithmatic principles. It features:
-- * - YUV 4:2:0 image format
-- * - Macro-block based coding (16x16 luma plus two 8x8 chroma)
-- * - 1/4 (1/8) pixel accuracy motion compensated prediction
-- * - 4x4 DCT transform
-- * - 128 level linear quantizer
-- * - In loop deblocking filter
-- * - Context-based entropy coding
-- *
-- * @{
-- */
--/*!\file vp8.h
-- * \brief Provides controls common to both the VP8 encoder and decoder.
-- */
--#ifndef VP8_H
--#define VP8_H
--#include "vpx_codec_impl_top.h"
--
--/*!\brief Control functions
-- *
-- * The set of macros define the control functions of VP8 interface
-- */
--enum vp8_dec_control_id
--{
-- VP8_SET_REFERENCE = 1, /**< pass in an external frame into decoder to be used as reference frame */
-- VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */
-- VP8_SET_POSTPROC = 3, /**< set decoder's the post processing settings */
-- VP8_COMMON_CTRL_ID_MAX
--};
--
--/*!\brief post process flags
-- *
-- * The set of macros define VP8 decoder post processing flags
-- */
--enum vp8_postproc_level
--{
-- VP8_NOFILTERING = 0,
-- VP8_DEBLOCK = 1,
-- VP8_DEMACROBLOCK = 2,
-- VP8_ADDNOISE = 4,
--};
--
--/*!\brief post process flags
-- *
-- * This define a structure that describe the post processing settings. For
-- * the best objective measure (using thet PSNR metric) set post_proc_flag
-- * to VP8_DEBLOCK and deblocking_level to 1.
-- */
--
--typedef struct vp8_postproc_cfg
--{
-- int post_proc_flag; /**< the types of post processing to be done, should be combination of "vp8_postproc_level" */
-- int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */
-- int noise_level; /**< the strength of additive noise, valid range [0, 16] */
--} vp8_postproc_cfg_t;
--
--/*!\brief reference frame type
-- *
-- * The set of macros define the type of VP8 reference frames
-- */
--typedef enum vpx_ref_frame_type
--{
-- VP8_LAST_FRAME = 1,
-- VP8_GOLD_FRAME = 2,
-- VP8_ALTR_FRAME = 4
--} vpx_ref_frame_type_t;
--
--/*!\brief reference frame data struct
-- *
-- * define the data struct to access vp8 reference frames
-- */
--
--typedef struct vpx_ref_frame
--{
-- vpx_ref_frame_type_t frame_type; /**< which reference frame */
-- vpx_image_t img; /**< reference frame data in image format */
--} vpx_ref_frame_t;
--
--
--/*!\brief vp8 decoder control funciton parameter type
-- *
-- * defines the data type for each of VP8 decoder control funciton requires
-- */
--
--VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *)
--VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *)
--VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *)
--
--
--/*! @} - end defgroup vp8 */
--
--#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
--/* The following definitions are provided for backward compatibility with
-- * the VP8 1.0.x SDK. USE IN PRODUCTION CODE IS NOT RECOMMENDED.
-- */
--
--DECLSPEC_DEPRECATED extern vpx_codec_iface_t vpx_codec_vp8_algo DEPRECATED;
--#endif
--
--#include "vpx_codec_impl_bottom.h"
--#endif
-diff --git a/vp8/vp8_common.mk b/vp8/vp8_common.mk
-index ec467c5..5ed53ba 100644
---- a/vp8/vp8_common.mk
-+++ b/vp8/vp8_common.mk
-@@ -1,19 +1,17 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
- #add this file to the installed sources list
- VP8_COMMON_SRCS-yes += vp8_common.mk
-
--#common interface
--VP8_COMMON_SRCS-yes += vp8.h
--
- CFLAGS+=-I$(SRC_PATH_BARE)/$(VP8_PREFIX)common
- VP8_COMMON_SRCS-yes += common/type_aliases.h
- VP8_COMMON_SRCS-yes += common/pragmas.h
-diff --git a/vp8/vp8_cx_iface.c b/vp8/vp8_cx_iface.c
-index e129ec9..d63c039 100644
---- a/vp8/vp8_cx_iface.c
-+++ b/vp8/vp8_cx_iface.c
-@@ -1,18 +1,19 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
--#include "vpx_codec/vpx_codec.h"
--#include "vpx_codec/internal/vpx_codec_internal.h"
-+#include "vpx/vpx_codec.h"
-+#include "vpx/internal/vpx_codec_internal.h"
- #include "vpx_version.h"
- #include "onyx_int.h"
--#include "vp8e.h"
-+#include "vpx/vp8e.h"
- #include "onyx.h"
- #include <stdlib.h>
- #include <string.h>
-@@ -52,15 +53,15 @@ static const struct extraconfig_map extracfg_map[] =
- NULL,
- #if !(CONFIG_REALTIME_ONLY)
- VP8_BEST_QUALITY_ENCODING, /* Encoding Mode */
-- -4, /* cpu_used */
-+ 0, /* cpu_used */
- #else
- VP8_REAL_TIME_ENCODING, /* Encoding Mode */
-- -8, /* cpu_used */
-+ 4, /* cpu_used */
- #endif
- 0, /* enable_auto_alt_ref */
- 0, /* noise_sensitivity */
- 0, /* Sharpness */
-- 800, /* static_thresh */
-+ 0, /* static_thresh */
- VP8_ONE_TOKENPARTITION, /* token_partitions */
- 0, /* arnr_max_frames */
- 0, /* arnr_strength */
-@@ -81,7 +82,7 @@ struct vpx_codec_alg_priv
- vpx_image_t preview_img;
- unsigned int next_frame_flag;
- vp8_postproc_cfg_t preview_ppcfg;
-- vpx_codec_pkt_list_decl(26) pkt_list; // changed to accomendate the maximum number of lagged frames allowed
-+ vpx_codec_pkt_list_decl(64) pkt_list; // changed to accomendate the maximum number of lagged frames allowed
- int deprecated_mode;
- unsigned int fixed_kf_cntr;
- };
-@@ -108,7 +109,7 @@ update_error_state(vpx_codec_alg_priv_t *ctx,
- } while(0)
-
- #define RANGE_CHECK(p,memb,lo,hi) do {\
-- if(!((p)->memb >= (lo) && (p)->memb <= hi)) \
-+ if(!(((p)->memb == lo || (p)->memb > (lo)) && (p)->memb <= hi)) \
- ERROR(#memb " out of range ["#lo".."#hi"]");\
- } while(0)
-
-@@ -211,10 +212,10 @@ static vpx_codec_err_t validate_img(vpx_codec_alg_priv_t *ctx,
- {
- switch (img->fmt)
- {
-- case IMG_FMT_YV12:
-- case IMG_FMT_I420:
-- case IMG_FMT_VPXI420:
-- case IMG_FMT_VPXYV12:
-+ case VPX_IMG_FMT_YV12:
-+ case VPX_IMG_FMT_I420:
-+ case VPX_IMG_FMT_VPXI420:
-+ case VPX_IMG_FMT_VPXYV12:
- break;
- default:
- ERROR("Invalid image format. Only YV12 and I420 images are supported");
-@@ -536,20 +537,20 @@ static vpx_codec_err_t image2yuvconfig(const vpx_image_t *img,
- YV12_BUFFER_CONFIG *yv12)
- {
- vpx_codec_err_t res = VPX_CODEC_OK;
-- yv12->y_buffer = img->planes[PLANE_Y];
-- yv12->u_buffer = img->planes[PLANE_U];
-- yv12->v_buffer = img->planes[PLANE_V];
-+ yv12->y_buffer = img->planes[VPX_PLANE_Y];
-+ yv12->u_buffer = img->planes[VPX_PLANE_U];
-+ yv12->v_buffer = img->planes[VPX_PLANE_V];
-
- yv12->y_width = img->d_w;
- yv12->y_height = img->d_h;
- yv12->uv_width = (1 + yv12->y_width) / 2;
- yv12->uv_height = (1 + yv12->y_height) / 2;
-
-- yv12->y_stride = img->stride[PLANE_Y];
-- yv12->uv_stride = img->stride[PLANE_U];
-+ yv12->y_stride = img->stride[VPX_PLANE_Y];
-+ yv12->uv_stride = img->stride[VPX_PLANE_U];
-
-- yv12->border = (img->stride[PLANE_Y] - img->w) / 2;
-- yv12->clrtype = (img->fmt == IMG_FMT_VPXI420 || img->fmt == IMG_FMT_VPXYV12); //REG_YUV = 0
-+ yv12->border = (img->stride[VPX_PLANE_Y] - img->w) / 2;
-+ yv12->clrtype = (img->fmt == VPX_IMG_FMT_VPXI420 || img->fmt == VPX_IMG_FMT_VPXYV12); //REG_YUV = 0
- return res;
- }
-
-@@ -846,7 +847,7 @@ static vpx_image_t *vp8e_get_preview(vpx_codec_alg_priv_t *ctx)
- {
-
- /*
-- vpx_img_wrap(&ctx->preview_img, IMG_FMT_YV12,
-+ vpx_img_wrap(&ctx->preview_img, VPX_IMG_FMT_YV12,
- sd.y_width + 2*VP8BORDERINPIXELS,
- sd.y_height + 2*VP8BORDERINPIXELS,
- 1,
-@@ -857,23 +858,23 @@ static vpx_image_t *vp8e_get_preview(vpx_codec_alg_priv_t *ctx)
- */
-
- ctx->preview_img.bps = 12;
-- ctx->preview_img.planes[PLANE_Y] = sd.y_buffer;
-- ctx->preview_img.planes[PLANE_U] = sd.u_buffer;
-- ctx->preview_img.planes[PLANE_V] = sd.v_buffer;
-+ ctx->preview_img.planes[VPX_PLANE_Y] = sd.y_buffer;
-+ ctx->preview_img.planes[VPX_PLANE_U] = sd.u_buffer;
-+ ctx->preview_img.planes[VPX_PLANE_V] = sd.v_buffer;
-
- if (sd.clrtype == REG_YUV)
-- ctx->preview_img.fmt = IMG_FMT_I420;
-+ ctx->preview_img.fmt = VPX_IMG_FMT_I420;
- else
-- ctx->preview_img.fmt = IMG_FMT_VPXI420;
-+ ctx->preview_img.fmt = VPX_IMG_FMT_VPXI420;
-
- ctx->preview_img.x_chroma_shift = 1;
- ctx->preview_img.y_chroma_shift = 1;
-
- ctx->preview_img.d_w = ctx->cfg.g_w;
- ctx->preview_img.d_h = ctx->cfg.g_h;
-- ctx->preview_img.stride[PLANE_Y] = sd.y_stride;
-- ctx->preview_img.stride[PLANE_U] = sd.uv_stride;
-- ctx->preview_img.stride[PLANE_V] = sd.uv_stride;
-+ ctx->preview_img.stride[VPX_PLANE_Y] = sd.y_stride;
-+ ctx->preview_img.stride[VPX_PLANE_U] = sd.uv_stride;
-+ ctx->preview_img.stride[VPX_PLANE_V] = sd.uv_stride;
- ctx->preview_img.w = sd.y_width;
- ctx->preview_img.h = sd.y_height;
-
-@@ -1067,7 +1068,7 @@ static vpx_codec_enc_cfg_map_t vp8e_usage_cfg_map[] =
- #endif
- vpx_codec_iface_t vpx_codec_vp8_cx_algo =
- {
-- "vpx Technologies VP8 Encoder" VERSION_STRING,
-+ "WebM Project VP8 Encoder" VERSION_STRING,
- VPX_CODEC_INTERNAL_ABI_VERSION,
- VPX_CODEC_CAP_ENCODER | VPX_CODEC_CAP_PSNR,
- /* vpx_codec_caps_t caps; */
-@@ -1156,7 +1157,7 @@ static vpx_codec_err_t api1_encode(vpx_codec_alg_priv_t *ctx,
-
- vpx_codec_iface_t vpx_enc_vp8_algo =
- {
-- "vpx Technologies VP8 Encoder (Deprecated API)" VERSION_STRING,
-+ "WebM Project VP8 Encoder (Deprecated API)" VERSION_STRING,
- VPX_CODEC_INTERNAL_ABI_VERSION,
- VPX_CODEC_CAP_ENCODER,
- /* vpx_codec_caps_t caps; */
-diff --git a/vp8/vp8_dx_iface.c b/vp8/vp8_dx_iface.c
-index 3e6cdf4..a99364d 100644
---- a/vp8/vp8_dx_iface.c
-+++ b/vp8/vp8_dx_iface.c
-@@ -1,18 +1,19 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
- #include <stdlib.h>
- #include <string.h>
--#include "vpx_codec/vpx_decoder.h"
--#include "vp8dx.h"
--#include "vpx_codec/internal/vpx_codec_internal.h"
-+#include "vpx/vpx_decoder.h"
-+#include "vpx/vp8dx.h"
-+#include "vpx/internal/vpx_codec_internal.h"
- #include "vpx_version.h"
- #include "onyxd.h"
- #include "onyxd_int.h"
-@@ -257,12 +258,12 @@ static vpx_codec_err_t vp8_peek_si(const uint8_t *data,
-
- vpx_codec_err_t res = VPX_CODEC_OK;
- {
-- /*Parse from VP8 compressed data, the implies knowledge of the
-- *VP8 bitsteam.
-- * First 3 byte header including version, frame type and an offset
-- * Next 3 bytes are image sizewith 12 bit each for width and height
-+ /* Parse uncompresssed part of key frame header.
-+ * 3 bytes:- including version, frame type and an offset
-+ * 3 bytes:- sync code (0x9d, 0x01, 0x2a)
-+ * 4 bytes:- including image width and height in the lowest 14 bits
-+ * of each 2-byte value.
- */
--
- si->is_kf = 0;
-
- if (data_sz >= 10 && !(data[0] & 0x01)) /* I-Frame */
-@@ -434,7 +435,7 @@ static vpx_codec_err_t vp8_decode(vpx_codec_alg_priv_t *ctx,
- unsigned int a_w = (sd.y_width + 15) & ~15;
- unsigned int a_h = (sd.y_height + 15) & ~15;
-
-- vpx_img_wrap(&ctx->img, IMG_FMT_I420,
-+ vpx_img_wrap(&ctx->img, VPX_IMG_FMT_I420,
- a_w + 2 * VP8BORDERINPIXELS,
- a_h + 2 * VP8BORDERINPIXELS,
- 1,
-@@ -557,20 +558,20 @@ static vpx_codec_err_t image2yuvconfig(const vpx_image_t *img,
- YV12_BUFFER_CONFIG *yv12)
- {
- vpx_codec_err_t res = VPX_CODEC_OK;
-- yv12->y_buffer = img->planes[PLANE_Y];
-- yv12->u_buffer = img->planes[PLANE_U];
-- yv12->v_buffer = img->planes[PLANE_V];
-+ yv12->y_buffer = img->planes[VPX_PLANE_Y];
-+ yv12->u_buffer = img->planes[VPX_PLANE_U];
-+ yv12->v_buffer = img->planes[VPX_PLANE_V];
-
- yv12->y_width = img->d_w;
- yv12->y_height = img->d_h;
- yv12->uv_width = yv12->y_width / 2;
- yv12->uv_height = yv12->y_height / 2;
-
-- yv12->y_stride = img->stride[PLANE_Y];
-- yv12->uv_stride = img->stride[PLANE_U];
-+ yv12->y_stride = img->stride[VPX_PLANE_Y];
-+ yv12->uv_stride = img->stride[VPX_PLANE_U];
-
-- yv12->border = (img->stride[PLANE_Y] - img->d_w) / 2;
-- yv12->clrtype = (img->fmt == IMG_FMT_VPXI420 || img->fmt == IMG_FMT_VPXYV12);
-+ yv12->border = (img->stride[VPX_PLANE_Y] - img->d_w) / 2;
-+ yv12->clrtype = (img->fmt == VPX_IMG_FMT_VPXI420 || img->fmt == VPX_IMG_FMT_VPXYV12);
-
- return res;
- }
-@@ -656,7 +657,7 @@ vpx_codec_ctrl_fn_map_t vp8_ctf_maps[] =
- #endif
- vpx_codec_iface_t vpx_codec_vp8_dx_algo =
- {
-- "vpx Technologies VP8 Decoder" VERSION_STRING,
-+ "WebM Project VP8 Decoder" VERSION_STRING,
- VPX_CODEC_INTERNAL_ABI_VERSION,
- VPX_CODEC_CAP_DECODER | VP8_CAP_POSTPROC,
- /* vpx_codec_caps_t caps; */
-@@ -679,7 +680,7 @@ vpx_codec_iface_t vpx_codec_vp8_dx_algo =
- */
- vpx_codec_iface_t vpx_codec_vp8_algo =
- {
-- "vpx Technologies VP8 Decoder (Deprecated API)" VERSION_STRING,
-+ "WebM Project VP8 Decoder (Deprecated API)" VERSION_STRING,
- VPX_CODEC_INTERNAL_ABI_VERSION,
- VPX_CODEC_CAP_DECODER | VP8_CAP_POSTPROC,
- /* vpx_codec_caps_t caps; */
-diff --git a/vp8/vp8cx.h b/vp8/vp8cx.h
-deleted file mode 100644
-index dd48c07..0000000
---- a/vp8/vp8cx.h
-+++ /dev/null
-@@ -1,261 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\defgroup vp8_encoder WebM VP8 Encoder
-- * \ingroup vp8
-- *
-- * @{
-- */
--#include "vp8.h"
--
--/*!\file vp8cx.h
-- * \brief Provides definitions for using the VP8 encoder algorithm within the
-- * vpx Codec Interface.
-- */
--#ifndef VP8CX_H
--#define VP8CX_H
--#include "vpx_codec_impl_top.h"
--
--/*!\brief Algorithm interface for VP8
-- *
-- * This interface provides the capability to encode raw VP8 streams, as would
-- * be found in AVI files.
-- */
--extern vpx_codec_iface_t vpx_codec_vp8_cx_algo;
--
--
--/*
-- * Algorithm Flags
-- */
--
--/*!\brief Don't reference the last frame
-- *
-- * When this flag is set, the encoder will not use the last frame as a
-- * predictor. When not set, the encoder will choose whether to use the
-- * last frame or not automatically.
-- */
--#define VP8_EFLAG_NO_REF_LAST (1<<16)
--
--
--/*!\brief Don't reference the golden frame
-- *
-- * When this flag is set, the encoder will not use the golden frame as a
-- * predictor. When not set, the encoder will choose whether to use the
-- * golden frame or not automatically.
-- */
--#define VP8_EFLAG_NO_REF_GF (1<<17)
--
--
--/*!\brief Don't reference the alternate reference frame
-- *
-- * When this flag is set, the encoder will not use the alt ref frame as a
-- * predictor. When not set, the encoder will choose whether to use the
-- * alt ref frame or not automatically.
-- */
--#define VP8_EFLAG_NO_REF_ARF (1<<21)
--
--
--/*!\brief Don't update the last frame
-- *
-- * When this flag is set, the encoder will not update the last frame with
-- * the contents of the current frame.
-- */
--#define VP8_EFLAG_NO_UPD_LAST (1<<18)
--
--
--/*!\brief Don't update the golden frame
-- *
-- * When this flag is set, the encoder will not update the golden frame with
-- * the contents of the current frame.
-- */
--#define VP8_EFLAG_NO_UPD_GF (1<<22)
--
--
--/*!\brief Don't update the alternate reference frame
-- *
-- * When this flag is set, the encoder will not update the alt ref frame with
-- * the contents of the current frame.
-- */
--#define VP8_EFLAG_NO_UPD_ARF (1<<23)
--
--
--/*!\brief Force golden frame update
-- *
-- * When this flag is set, the encoder copy the contents of the current frame
-- * to the golden frame buffer.
-- */
--#define VP8_EFLAG_FORCE_GF (1<<19)
--
--
--/*!\brief Force alternate reference frame update
-- *
-- * When this flag is set, the encoder copy the contents of the current frame
-- * to the alternate reference frame buffer.
-- */
--#define VP8_EFLAG_FORCE_ARF (1<<24)
--
--
--/*!\brief Disable entropy update
-- *
-- * When this flag is set, the encoder will not update its internal entropy
-- * model based on the entropy of this frame.
-- */
--#define VP8_EFLAG_NO_UPD_ENTROPY (1<<20)
--
--
--/*!\brief VP8 encoder control functions
-- *
-- * The set of macros define the control functions of VP8 encoder interface
-- */
--enum vp8e_enc_control_id
--{
-- VP8E_UPD_ENTROPY = 5, /**< control function to set mode of entropy update in encoder */
-- VP8E_UPD_REFERENCE, /**< control function to set reference update mode in encoder */
-- VP8E_USE_REFERENCE, /**< control function to set which reference frame encoder can use */
-- VP8E_SET_ROI_MAP, /**< control function to pass an ROI map to encoder */
-- VP8E_SET_ACTIVEMAP, /**< control function to pass an Active map to encoder */
-- VP8E_SET_SCALEMODE = 11, /**< control function to set encoder scaling mode */
-- VP8E_SET_CPUUSED = 13, /**< control function to set vp8 encoder cpuused */
-- VP8E_SET_ENABLEAUTOALTREF, /**< control function to enable vp8 to automatic set and use altref frame */
-- VP8E_SET_NOISE_SENSITIVITY, /**< control function to set noise sensitivity */
-- VP8E_SET_SHARPNESS, /**< control function to set sharpness */
-- VP8E_SET_STATIC_THRESHOLD, /**< control function to set the threshold for macroblocks treated static */
-- VP8E_SET_TOKEN_PARTITIONS, /**< control function to set the number of token partitions */
-- VP8E_GET_LAST_QUANTIZER, /**< return the quantizer chosen by the
-- encoder for the last frame using the internal
-- scale */
-- VP8E_GET_LAST_QUANTIZER_64, /**< return the quantizer chosen by the
-- encoder for the last frame, using the 0..63
-- scale as used by the rc_*_quantizer config
-- parameters */
-- VP8E_SET_ARNR_MAXFRAMES, /**< control function to set the max number of frames blurred creating arf*/
-- VP8E_SET_ARNR_STRENGTH , /**< control function to set the filter strength for the arf */
-- VP8E_SET_ARNR_TYPE , /**< control function to set the type of filter to use for the arf*/
--} ;
--
--/*!\brief vpx 1-D scaling mode
-- *
-- * This set of constants define 1-D vpx scaling modes
-- */
--typedef enum vpx_scaling_mode_1d
--{
-- VP8E_NORMAL = 0,
-- VP8E_FOURFIVE = 1,
-- VP8E_THREEFIVE = 2,
-- VP8E_ONETWO = 3
--} VPX_SCALING_MODE;
--
--
--/*!\brief vpx region of interest map
-- *
-- * These defines the data structures for the region of interest map
-- *
-- */
--
--typedef struct vpx_roi_map
--{
-- unsigned char *roi_map; /**< specify an id between 0 and 3 for each 16x16 region within a frame */
-- unsigned int rows; /**< number of rows */
-- unsigned int cols; /**< number of cols */
-- int delta_q[4]; /**< quantizer delta [-64, 64] off baseline for regions with id between 0 and 3*/
-- int delta_lf[4]; /**< loop filter strength delta [-32, 32] for regions with id between 0 and 3 */
-- unsigned int static_threshold[4];/**< threshold for region to be treated as static */
--} vpx_roi_map_t;
--
--/*!\brief vpx active region map
-- *
-- * These defines the data structures for active region map
-- *
-- */
--
--
--typedef struct vpx_active_map
--{
-- unsigned char *active_map; /**< specify an on (1) or off (0) each 16x16 region within a frame */
-- unsigned int rows; /**< number of rows */
-- unsigned int cols; /**< number of cols */
--} vpx_active_map_t;
--
--/*!\brief vpx image scaling mode
-- *
-- * This defines the data structure for image scaling mode
-- *
-- */
--typedef struct vpx_scaling_mode
--{
-- VPX_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */
-- VPX_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */
--} vpx_scaling_mode_t;
--
--/*!\brief VP8 encoding mode
-- *
-- * This defines VP8 encoding mode
-- *
-- */
--typedef enum
--{
-- VP8_BEST_QUALITY_ENCODING,
-- VP8_GOOD_QUALITY_ENCODING,
-- VP8_REAL_TIME_ENCODING
--} vp8e_encoding_mode;
--
--/*!\brief VP8 token partition mode
-- *
-- * This defines VP8 partitioning mode for compressed data, i.e., the number of
-- * sub-streams in the bitstream. Used for parallelized decoding.
-- *
-- */
--
--typedef enum
--{
-- VP8_ONE_TOKENPARTITION = 0,
-- VP8_TWO_TOKENPARTITION = 1,
-- VP8_FOUR_TOKENPARTITION = 2,
-- VP8_EIGHT_TOKENPARTITION = 3,
--} vp8e_token_partitions;
--
--
--/*!\brief VP8 encoder control function parameter type
-- *
-- * Defines the data types that VP8E control functions take. Note that
-- * additional common controls are defined in vp8.h
-- *
-- */
--
--
--/* These controls have been deprecated in favor of the flags parameter to
-- * vpx_codec_encode(). See the definition of VP8_EFLAG_* above.
-- */
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_UPD_ENTROPY, int)
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_UPD_REFERENCE, int)
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_USE_REFERENCE, int)
--
--VPX_CTRL_USE_TYPE(VP8E_SET_ROI_MAP, vpx_roi_map_t *)
--VPX_CTRL_USE_TYPE(VP8E_SET_ACTIVEMAP, vpx_active_map_t *)
--VPX_CTRL_USE_TYPE(VP8E_SET_SCALEMODE, vpx_scaling_mode_t *)
--
--VPX_CTRL_USE_TYPE(VP8E_SET_CPUUSED, int)
--VPX_CTRL_USE_TYPE(VP8E_SET_ENABLEAUTOALTREF, unsigned int)
--VPX_CTRL_USE_TYPE(VP8E_SET_NOISE_SENSITIVITY, unsigned int)
--VPX_CTRL_USE_TYPE(VP8E_SET_SHARPNESS, unsigned int)
--VPX_CTRL_USE_TYPE(VP8E_SET_STATIC_THRESHOLD, unsigned int)
--VPX_CTRL_USE_TYPE(VP8E_SET_TOKEN_PARTITIONS, vp8e_token_partitions)
--
--VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_MAXFRAMES, unsigned int)
--VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_STRENGTH , unsigned int)
--VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_TYPE , unsigned int)
--
--
--VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER, int *)
--VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64, int *)
--
--/*! @} - end defgroup vp8_encoder */
--#include "vpx_codec_impl_bottom.h"
--#endif
-diff --git a/vp8/vp8cx.mk b/vp8/vp8cx.mk
-index e7e7663..971a175 100644
---- a/vp8/vp8cx.mk
-+++ b/vp8/vp8cx.mk
-@@ -1,14 +1,18 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
- include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8_common.mk
-+
-+VP8_CX_EXPORTS += exports_enc
-+
- VP8_CX_SRCS-yes += $(VP8_COMMON_SRCS-yes)
- VP8_CX_SRCS-no += $(VP8_COMMON_SRCS-no)
- VP8_CX_SRCS_REMOVE-yes += $(VP8_COMMON_SRCS_REMOVE-yes)
-@@ -18,7 +22,7 @@ ifeq ($(ARCH_ARM),yes)
- include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8cx_arm.mk
- endif
-
--VP8_CX_SRCS-yes += vp8cx.h vp8e.h vp8_cx_iface.c
-+VP8_CX_SRCS-yes += vp8_cx_iface.c
-
- # encoder
- #INCLUDES += algo/vpx_common/vpx_mem/include
-@@ -70,7 +74,7 @@ VP8_CX_SRCS-yes += encoder/quantize.c
- VP8_CX_SRCS-yes += encoder/ratectrl.c
- VP8_CX_SRCS-yes += encoder/rdopt.c
- VP8_CX_SRCS-yes += encoder/sad_c.c
--VP8_CX_SRCS-yes += encoder/ssim.c
-+VP8_CX_SRCS-$(CONFIG_PSNR) += encoder/ssim.c
- VP8_CX_SRCS-yes += encoder/tokenize.c
- VP8_CX_SRCS-yes += encoder/treewriter.c
- VP8_CX_SRCS-yes += encoder/variance_c.c
-@@ -94,11 +98,10 @@ VP8_CX_SRCS-$(HAVE_SSE2) += encoder/x86/variance_impl_sse2.asm
- VP8_CX_SRCS-$(HAVE_SSE2) += encoder/x86/sad_sse2.asm
- VP8_CX_SRCS-$(HAVE_SSE2) += encoder/x86/dct_sse2.asm
- VP8_CX_SRCS-$(HAVE_SSE2) += encoder/x86/fwalsh_sse2.asm
-+VP8_CX_SRCS-$(HAVE_SSE2) += encoder/x86/quantize_sse2.asm
- VP8_CX_SRCS-$(HAVE_SSE3) += encoder/x86/sad_sse3.asm
- VP8_CX_SRCS-$(HAVE_SSSE3) += encoder/x86/sad_ssse3.asm
- VP8_CX_SRCS-$(ARCH_X86)$(ARCH_X86_64) += encoder/x86/quantize_mmx.asm
- VP8_CX_SRCS-$(ARCH_X86)$(ARCH_X86_64) += encoder/x86/encodeopt.asm
-
- VP8_CX_SRCS-yes := $(filter-out $(VP8_CX_SRCS_REMOVE-yes),$(VP8_CX_SRCS-yes))
--
--INSTALL-LIBS-yes += include/vp8.h include/vp8e.h include/vp8cx.h
-diff --git a/vp8/vp8cx_arm.mk b/vp8/vp8cx_arm.mk
-index f0753d9..16009f9 100644
---- a/vp8/vp8cx_arm.mk
-+++ b/vp8/vp8cx_arm.mk
-@@ -1,10 +1,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/vp8/vp8dx.h b/vp8/vp8dx.h
-deleted file mode 100644
-index 7310b3b..0000000
---- a/vp8/vp8dx.h
-+++ /dev/null
-@@ -1,41 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--#include "vp8.h"
--
--/*!\defgroup vp8_decoder WebM VP8 Decoder
-- * \ingroup vp8
-- *
-- * @{
-- */
--/*!\file vp8dx.h
-- * \brief Provides definitions for using the VP8 algorithm within the vpx Decoder
-- * interface.
-- */
--#ifndef VP8DX_H
--#define VP8DX_H
--#include "vpx_codec_impl_top.h"
--
--/*!\brief Algorithm interface for VP8
-- *
-- * This interface provides the capability to decode raw VP8 streams, as would
-- * be found in AVI files and other non-Flash uses.
-- */
--extern vpx_codec_iface_t vpx_codec_vp8_dx_algo;
--
--/* Include controls common to both the encoder and decoder */
--#include "vp8.h"
--
--
--/*! @} - end defgroup vp8_decoder */
--
--
--#include "vpx_codec_impl_bottom.h"
--#endif
-diff --git a/vp8/vp8dx.mk b/vp8/vp8dx.mk
-index e6af543..24f18b7 100644
---- a/vp8/vp8dx.mk
-+++ b/vp8/vp8dx.mk
-@@ -1,14 +1,18 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
- include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8_common.mk
-+
-+VP8_DX_EXPORTS += exports_dec
-+
- VP8_DX_SRCS-yes += $(VP8_COMMON_SRCS-yes)
- VP8_DX_SRCS-no += $(VP8_COMMON_SRCS-no)
- VP8_DX_SRCS_REMOVE-yes += $(VP8_COMMON_SRCS_REMOVE-yes)
-@@ -18,7 +22,7 @@ ifeq ($(ARCH_ARM),yes)
- include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8dx_arm.mk
- endif
-
--VP8_DX_SRCS-yes += vp8dx.h vp8_dx_iface.c
-+VP8_DX_SRCS-yes += vp8_dx_iface.c
-
- CFLAGS+=-I$(SRC_PATH_BARE)/$(VP8_PREFIX)decoder
-
-@@ -69,8 +73,6 @@ VP8_DX_SRCS-yes += decoder/threading.c
-
- VP8_DX_SRCS-yes := $(filter-out $(VP8_DX_SRCS_REMOVE-yes),$(VP8_DX_SRCS-yes))
-
--INSTALL-LIBS-yes += include/vp8.h include/vp8dx.h
--
- VP8_DX_SRCS-$(ARCH_X86)$(ARCH_X86_64) += decoder/x86/dequantize_x86.h
- VP8_DX_SRCS-$(ARCH_X86)$(ARCH_X86_64) += decoder/x86/x86_dsystemdependent.c
- VP8_DX_SRCS-$(HAVE_MMX) += decoder/x86/dequantize_mmx.asm
-diff --git a/vp8/vp8dx_arm.mk b/vp8/vp8dx_arm.mk
-index 1b4a7ec..58ccac5 100644
---- a/vp8/vp8dx_arm.mk
-+++ b/vp8/vp8dx_arm.mk
-@@ -1,10 +1,11 @@
- ##
- ## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
- ##
-
-
-diff --git a/vp8/vp8e.h b/vp8/vp8e.h
-deleted file mode 100644
-index a90aa2a..0000000
---- a/vp8/vp8e.h
-+++ /dev/null
-@@ -1,62 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/* This file contains backwards compatibility stubs for applications using
-- * the VP8 version 1.0 API.
-- */
--#ifndef VP8E_H
--#define VP8E_H
--#include "vpx_codec_impl_top.h"
--
--#if defined(VPX_CODEC_DISABLE_COMPAT) && VPX_CODEC_DISABLE_COMPAT
--#error "Backwards compatibility disabled: don't include vp8e.h"
--#endif
--
--#include "vp8cx.h"
--DECLSPEC_DEPRECATED extern vpx_codec_iface_t vpx_enc_vp8_algo DEPRECATED;
--
--
--enum
--{
-- VP8E_SET_REFERENCE = VP8_SET_REFERENCE,
-- VP8E_COPY_REFERENCE = VP8_COPY_REFERENCE,
-- VP8E_SET_PREVIEWPP = VP8_SET_POSTPROC,
-- VP8E_SET_FLUSHFLAG = 4,
-- VP8E_SET_FRAMETYPE = 10,
-- VP8E_SET_ENCODING_MODE = 12
--};
--
--#define NORMAL_FRAME (0)
--#define KEY_FRAME (1)
--
--/* Change VP8E to VP8 to get the undeprecated version of these (defined in
-- * vp8.h)
-- */
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_REFERENCE, vpx_ref_frame_t *)
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_COPY_REFERENCE, vpx_ref_frame_t *)
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_PREVIEWPP, vp8_postproc_cfg_t *)
--
--
--/* Flush is done by calling vpx_codec_encode with a NULL input image. */
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_FLUSHFLAG, int)
--
--
--/* Frame type is set with a flag to vpx_codec_control. See VPX_EFLAG_FORCE_KF
-- */
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_FRAMETYPE, int)
--
--
--/* This control has been deprecated in favor of the duration parameter to
-- * vpx_codec_encode(). Use the #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY,
-- * #VPX_DL_BEST_QUALITY constants to that parameter instead.
-- */
--VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_ENCODING_MODE, vp8e_encoding_mode)
--#include "vpx_codec_impl_bottom.h"
--#endif
-diff --git a/vpx/exports_com b/vpx/exports_com
-new file mode 100644
-index 0000000..2ab0509
---- /dev/null
-+++ b/vpx/exports_com
-@@ -0,0 +1,16 @@
-+text vpx_codec_build_config
-+text vpx_codec_control_
-+text vpx_codec_destroy
-+text vpx_codec_err_to_string
-+text vpx_codec_error
-+text vpx_codec_error_detail
-+text vpx_codec_get_caps
-+text vpx_codec_iface_name
-+text vpx_codec_version
-+text vpx_codec_version_extra_str
-+text vpx_codec_version_str
-+text vpx_img_alloc
-+text vpx_img_flip
-+text vpx_img_free
-+text vpx_img_set_rect
-+text vpx_img_wrap
-diff --git a/vpx/exports_dec b/vpx/exports_dec
-new file mode 100644
-index 0000000..ed121f7
---- /dev/null
-+++ b/vpx/exports_dec
-@@ -0,0 +1,9 @@
-+text vpx_codec_dec_init_ver
-+text vpx_codec_decode
-+text vpx_codec_get_frame
-+text vpx_codec_get_mem_map
-+text vpx_codec_get_stream_info
-+text vpx_codec_peek_stream_info
-+text vpx_codec_register_put_frame_cb
-+text vpx_codec_register_put_slice_cb
-+text vpx_codec_set_mem_map
-diff --git a/vpx/exports_enc b/vpx/exports_enc
-new file mode 100644
-index 0000000..3d56749
---- /dev/null
-+++ b/vpx/exports_enc
-@@ -0,0 +1,8 @@
-+text vpx_codec_enc_config_default
-+text vpx_codec_enc_config_set
-+text vpx_codec_enc_init_ver
-+text vpx_codec_encode
-+text vpx_codec_get_cx_data
-+text vpx_codec_get_global_headers
-+text vpx_codec_get_preview_frame
-+text vpx_codec_set_cx_data_buf
-diff --git a/vpx/internal/vpx_codec_internal.h b/vpx/internal/vpx_codec_internal.h
-new file mode 100644
-index 0000000..c653cc5
---- /dev/null
-+++ b/vpx/internal/vpx_codec_internal.h
-@@ -0,0 +1,457 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\file decoder_impl.h
-+ * \brief Describes the decoder algorithm interface for algorithm
-+ * implementations.
-+ *
-+ * This file defines the private structures and data types that are only
-+ * relevant to implementing an algorithm, as opposed to using it.
-+ *
-+ * To create a decoder algorithm class, an interface structure is put
-+ * into the global namespace:
-+ * <pre>
-+ * my_codec.c:
-+ * vpx_codec_iface_t my_codec = {
-+ * "My Codec v1.0",
-+ * VPX_CODEC_ALG_ABI_VERSION,
-+ * ...
-+ * };
-+ * </pre>
-+ *
-+ * An application instantiates a specific decoder instance by using
-+ * vpx_codec_init() and a pointer to the algorithm's interface structure:
-+ * <pre>
-+ * my_app.c:
-+ * extern vpx_codec_iface_t my_codec;
-+ * {
-+ * vpx_codec_ctx_t algo;
-+ * res = vpx_codec_init(&algo, &my_codec);
-+ * }
-+ * </pre>
-+ *
-+ * Once initialized, the instance is manged using other functions from
-+ * the vpx_codec_* family.
-+ */
-+#ifndef VPX_CODEC_INTERNAL_H
-+#define VPX_CODEC_INTERNAL_H
-+#include "../vpx_decoder.h"
-+#include "../vpx_encoder.h"
-+#include <stdarg.h>
-+
-+
-+/*!\brief Current ABI version number
-+ *
-+ * \internal
-+ * If this file is altered in any way that changes the ABI, this value
-+ * must be bumped. Examples include, but are not limited to, changing
-+ * types, removing or reassigning enums, adding/removing/rearranging
-+ * fields to structures
-+ */
-+#define VPX_CODEC_INTERNAL_ABI_VERSION (3) /**<\hideinitializer*/
-+
-+typedef struct vpx_codec_alg_priv vpx_codec_alg_priv_t;
-+
-+/*!\brief init function pointer prototype
-+ *
-+ * Performs algorithm-specific initialization of the decoder context. This
-+ * function is called by the generic vpx_codec_init() wrapper function, so
-+ * plugins implementing this interface may trust the input parameters to be
-+ * properly initialized.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \retval #VPX_CODEC_OK
-+ * The input stream was recognized and decoder initialized.
-+ * \retval #VPX_CODEC_MEM_ERROR
-+ * Memory operation failed.
-+ */
-+typedef vpx_codec_err_t (*vpx_codec_init_fn_t)(vpx_codec_ctx_t *ctx);
-+
-+/*!\brief destroy function pointer prototype
-+ *
-+ * Performs algorithm-specific destruction of the decoder context. This
-+ * function is called by the generic vpx_codec_destroy() wrapper function,
-+ * so plugins implementing this interface may trust the input parameters
-+ * to be properly initialized.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \retval #VPX_CODEC_OK
-+ * The input stream was recognized and decoder initialized.
-+ * \retval #VPX_CODEC_MEM_ERROR
-+ * Memory operation failed.
-+ */
-+typedef vpx_codec_err_t (*vpx_codec_destroy_fn_t)(vpx_codec_alg_priv_t *ctx);
-+
-+/*!\brief parse stream info function pointer prototype
-+ *
-+ * Performs high level parsing of the bitstream. This function is called by
-+ * the generic vpx_codec_parse_stream() wrapper function, so plugins implementing
-+ * this interface may trust the input parameters to be properly initialized.
-+ *
-+ * \param[in] data Pointer to a block of data to parse
-+ * \param[in] data_sz Size of the data buffer
-+ * \param[in,out] si Pointer to stream info to update. The size member
-+ * \ref MUST be properly initialized, but \ref MAY be
-+ * clobbered by the algorithm. This parameter \ref MAY
-+ * be NULL.
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * Bitstream is parsable and stream information updated
-+ */
-+typedef vpx_codec_err_t (*vpx_codec_peek_si_fn_t)(const uint8_t *data,
-+ unsigned int data_sz,
-+ vpx_codec_stream_info_t *si);
-+
-+/*!\brief Return information about the current stream.
-+ *
-+ * Returns information about the stream that has been parsed during decoding.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in,out] si Pointer to stream info to update. The size member
-+ * \ref MUST be properly initialized, but \ref MAY be
-+ * clobbered by the algorithm. This parameter \ref MAY
-+ * be NULL.
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * Bitstream is parsable and stream information updated
-+ */
-+typedef vpx_codec_err_t (*vpx_codec_get_si_fn_t)(vpx_codec_alg_priv_t *ctx,
-+ vpx_codec_stream_info_t *si);
-+
-+/*!\brief control function pointer prototype
-+ *
-+ * This function is used to exchange algorithm specific data with the decoder
-+ * instance. This can be used to implement features specific to a particular
-+ * algorithm.
-+ *
-+ * This function is called by the generic vpx_codec_control() wrapper
-+ * function, so plugins implementing this interface may trust the input
-+ * parameters to be properly initialized. However, this interface does not
-+ * provide type safety for the exchanged data or assign meanings to the
-+ * control codes. Those details should be specified in the algorithm's
-+ * header file. In particular, the ctrl_id parameter is guaranteed to exist
-+ * in the algorithm's control mapping table, and the data paramter may be NULL.
-+ *
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] ctrl_id Algorithm specific control identifier
-+ * \param[in,out] data Data to exchange with algorithm instance.
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The internal state data was deserialized.
-+ */
-+typedef vpx_codec_err_t (*vpx_codec_control_fn_t)(vpx_codec_alg_priv_t *ctx,
-+ int ctrl_id,
-+ va_list ap);
-+
-+/*!\brief control function pointer mapping
-+ *
-+ * This structure stores the mapping between control identifiers and
-+ * implementing functions. Each algorithm provides a list of these
-+ * mappings. This list is searched by the vpx_codec_control() wrapper
-+ * function to determine which function to invoke. The special
-+ * value {0, NULL} is used to indicate end-of-list, and must be
-+ * present. The special value {0, <non-null>} can be used as a catch-all
-+ * mapping. This implies that ctrl_id values chosen by the algorithm
-+ * \ref MUST be non-zero.
-+ */
-+typedef const struct
-+{
-+ int ctrl_id;
-+ vpx_codec_control_fn_t fn;
-+} vpx_codec_ctrl_fn_map_t;
-+
-+/*!\brief decode data function pointer prototype
-+ *
-+ * Processes a buffer of coded data. If the processing results in a new
-+ * decoded frame becoming available, #VPX_CODEC_CB_PUT_SLICE and
-+ * #VPX_CODEC_CB_PUT_FRAME events are generated as appropriate. This
-+ * function is called by the generic vpx_codec_decode() wrapper function,
-+ * so plugins implementing this interface may trust the input parameters
-+ * to be properly initialized.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] data Pointer to this block of new coded data. If
-+ * NULL, a #VPX_CODEC_CB_PUT_FRAME event is posted
-+ * for the previously decoded frame.
-+ * \param[in] data_sz Size of the coded data, in bytes.
-+ *
-+ * \return Returns #VPX_CODEC_OK if the coded data was processed completely
-+ * and future pictures can be decoded without error. Otherwise,
-+ * see the descriptions of the other error codes in ::vpx_codec_err_t
-+ * for recoverability capabilities.
-+ */
-+typedef vpx_codec_err_t (*vpx_codec_decode_fn_t)(vpx_codec_alg_priv_t *ctx,
-+ const uint8_t *data,
-+ unsigned int data_sz,
-+ void *user_priv,
-+ long deadline);
-+
-+/*!\brief Decoded frames iterator
-+ *
-+ * Iterates over a list of the frames available for display. The iterator
-+ * storage should be initialized to NULL to start the iteration. Iteration is
-+ * complete when this function returns NULL.
-+ *
-+ * The list of available frames becomes valid upon completion of the
-+ * vpx_codec_decode call, and remains valid until the next call to vpx_codec_decode.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in out] iter Iterator storage, initialized to NULL
-+ *
-+ * \return Returns a pointer to an image, if one is ready for display. Frames
-+ * produced will always be in PTS (presentation time stamp) order.
-+ */
-+typedef vpx_image_t*(*vpx_codec_get_frame_fn_t)(vpx_codec_alg_priv_t *ctx,
-+ vpx_codec_iter_t *iter);
-+
-+
-+/*\brief e_xternal Memory Allocation memory map get iterator
-+ *
-+ * Iterates over a list of the memory maps requested by the decoder. The
-+ * iterator storage should be initialized to NULL to start the iteration.
-+ * Iteration is complete when this function returns NULL.
-+ *
-+ * \param[in out] iter Iterator storage, initialized to NULL
-+ *
-+ * \return Returns a pointer to an memory segment descriptor, or NULL to
-+ * indicate end-of-list.
-+ */
-+typedef vpx_codec_err_t (*vpx_codec_get_mmap_fn_t)(const vpx_codec_ctx_t *ctx,
-+ vpx_codec_mmap_t *mmap,
-+ vpx_codec_iter_t *iter);
-+
-+
-+/*\brief e_xternal Memory Allocation memory map set iterator
-+ *
-+ * Sets a memory descriptor inside the decoder instance.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] mmap Memory map to store.
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The memory map was accepted and stored.
-+ * \retval #VPX_CODEC_MEM_ERROR
-+ * The memory map was rejected.
-+ */
-+typedef vpx_codec_err_t (*vpx_codec_set_mmap_fn_t)(vpx_codec_ctx_t *ctx,
-+ const vpx_codec_mmap_t *mmap);
-+
-+
-+typedef vpx_codec_err_t (*vpx_codec_encode_fn_t)(vpx_codec_alg_priv_t *ctx,
-+ const vpx_image_t *img,
-+ vpx_codec_pts_t pts,
-+ unsigned long duration,
-+ vpx_enc_frame_flags_t flags,
-+ unsigned long deadline);
-+typedef const vpx_codec_cx_pkt_t*(*vpx_codec_get_cx_data_fn_t)(vpx_codec_alg_priv_t *ctx,
-+ vpx_codec_iter_t *iter);
-+
-+typedef vpx_codec_err_t
-+(*vpx_codec_enc_config_set_fn_t)(vpx_codec_alg_priv_t *ctx,
-+ const vpx_codec_enc_cfg_t *cfg);
-+typedef vpx_fixed_buf_t *
-+(*vpx_codec_get_global_headers_fn_t)(vpx_codec_alg_priv_t *ctx);
-+
-+typedef vpx_image_t *
-+(*vpx_codec_get_preview_frame_fn_t)(vpx_codec_alg_priv_t *ctx);
-+
-+/*!\brief usage configuration mapping
-+ *
-+ * This structure stores the mapping between usage identifiers and
-+ * configuration structures. Each algorithm provides a list of these
-+ * mappings. This list is searched by the vpx_codec_enc_config_default()
-+ * wrapper function to determine which config to return. The special value
-+ * {-1, {0}} is used to indicate end-of-list, and must be present. At least
-+ * one mapping must be present, in addition to the end-of-list.
-+ *
-+ */
-+typedef const struct
-+{
-+ int usage;
-+ vpx_codec_enc_cfg_t cfg;
-+} vpx_codec_enc_cfg_map_t;
-+
-+#define NOT_IMPLEMENTED 0
-+
-+/*!\brief Decoder algorithm interface interface
-+ *
-+ * All decoders \ref MUST expose a variable of this type.
-+ */
-+struct vpx_codec_iface
-+{
-+ const char *name; /**< Identification String */
-+ int abi_version; /**< Implemented ABI version */
-+ vpx_codec_caps_t caps; /**< Decoder capabilities */
-+ vpx_codec_init_fn_t init; /**< \copydoc ::vpx_codec_init_fn_t */
-+ vpx_codec_destroy_fn_t destroy; /**< \copydoc ::vpx_codec_destroy_fn_t */
-+ vpx_codec_ctrl_fn_map_t *ctrl_maps; /**< \copydoc ::vpx_codec_ctrl_fn_map_t */
-+ vpx_codec_get_mmap_fn_t get_mmap; /**< \copydoc ::vpx_codec_get_mmap_fn_t */
-+ vpx_codec_set_mmap_fn_t set_mmap; /**< \copydoc ::vpx_codec_set_mmap_fn_t */
-+ struct
-+ {
-+ vpx_codec_peek_si_fn_t peek_si; /**< \copydoc ::vpx_codec_peek_si_fn_t */
-+ vpx_codec_get_si_fn_t get_si; /**< \copydoc ::vpx_codec_peek_si_fn_t */
-+ vpx_codec_decode_fn_t decode; /**< \copydoc ::vpx_codec_decode_fn_t */
-+ vpx_codec_get_frame_fn_t get_frame; /**< \copydoc ::vpx_codec_get_frame_fn_t */
-+ } dec;
-+ struct
-+ {
-+ vpx_codec_enc_cfg_map_t *cfg_maps; /**< \copydoc ::vpx_codec_enc_cfg_map_t */
-+ vpx_codec_encode_fn_t encode; /**< \copydoc ::vpx_codec_encode_fn_t */
-+ vpx_codec_get_cx_data_fn_t get_cx_data; /**< \copydoc ::vpx_codec_get_cx_data_fn_t */
-+ vpx_codec_enc_config_set_fn_t cfg_set; /**< \copydoc ::vpx_codec_enc_config_set_fn_t */
-+ vpx_codec_get_global_headers_fn_t get_glob_hdrs; /**< \copydoc ::vpx_codec_enc_config_set_fn_t */
-+ vpx_codec_get_preview_frame_fn_t get_preview; /**< \copydoc ::vpx_codec_get_preview_frame_fn_t */
-+ } enc;
-+};
-+
-+/*!\brief Callback function pointer / user data pair storage */
-+typedef struct vpx_codec_priv_cb_pair
-+{
-+ union
-+ {
-+ vpx_codec_put_frame_cb_fn_t put_frame;
-+ vpx_codec_put_slice_cb_fn_t put_slice;
-+ };
-+ void *user_priv;
-+} vpx_codec_priv_cb_pair_t;
-+
-+
-+/*!\brief Instance private storage
-+ *
-+ * This structure is allocated by the algorithm's init function. It can be
-+ * extended in one of two ways. First, a second, algorithm specific structure
-+ * can be allocated and the priv member pointed to it. Alternatively, this
-+ * structure can be made the first member of the algorithm specific structure,
-+ * and the pointer casted to the proper type.
-+ */
-+struct vpx_codec_priv
-+{
-+ unsigned int sz;
-+ vpx_codec_iface_t *iface;
-+ struct vpx_codec_alg_priv *alg_priv;
-+ const char *err_detail;
-+ vpx_codec_flags_t init_flags;
-+ struct
-+ {
-+ vpx_codec_priv_cb_pair_t put_frame_cb;
-+ vpx_codec_priv_cb_pair_t put_slice_cb;
-+ } dec;
-+ struct
-+ {
-+ int tbd;
-+ struct vpx_fixed_buf cx_data_dst_buf;
-+ unsigned int cx_data_pad_before;
-+ unsigned int cx_data_pad_after;
-+ vpx_codec_cx_pkt_t cx_data_pkt;
-+ } enc;
-+};
-+
-+#undef VPX_CTRL_USE_TYPE
-+#define VPX_CTRL_USE_TYPE(id, typ) \
-+ static typ id##__value(va_list args) {return va_arg(args, typ);} \
-+ static typ id##__convert(void *x)\
-+ {\
-+ union\
-+ {\
-+ void *x;\
-+ typ d;\
-+ } u;\
-+ u.x = x;\
-+ return u.d;\
-+ }
-+
-+
-+#undef VPX_CTRL_USE_TYPE_DEPRECATED
-+#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \
-+ static typ id##__value(va_list args) {return va_arg(args, typ);} \
-+ static typ id##__convert(void *x)\
-+ {\
-+ union\
-+ {\
-+ void *x;\
-+ typ d;\
-+ } u;\
-+ u.x = x;\
-+ return u.d;\
-+ }
-+
-+#define CAST(id, arg) id##__value(arg)
-+#define RECAST(id, x) id##__convert(x)
-+
-+
-+/* Internal Utility Functions
-+ *
-+ * The following functions are indended to be used inside algorithms as
-+ * utilities for manipulating vpx_codec_* data structures.
-+ */
-+struct vpx_codec_pkt_list
-+{
-+ unsigned int cnt;
-+ unsigned int max;
-+ struct vpx_codec_cx_pkt pkts[1];
-+};
-+
-+#define vpx_codec_pkt_list_decl(n)\
-+ union {struct vpx_codec_pkt_list head;\
-+ struct {struct vpx_codec_pkt_list head;\
-+ struct vpx_codec_cx_pkt pkts[n];} alloc;}
-+
-+#define vpx_codec_pkt_list_init(m)\
-+ (m)->alloc.head.cnt = 0,\
-+ (m)->alloc.head.max = sizeof((m)->alloc.pkts) / sizeof((m)->alloc.pkts[0])
-+
-+int
-+vpx_codec_pkt_list_add(struct vpx_codec_pkt_list *,
-+ const struct vpx_codec_cx_pkt *);
-+
-+const vpx_codec_cx_pkt_t*
-+vpx_codec_pkt_list_get(struct vpx_codec_pkt_list *list,
-+ vpx_codec_iter_t *iter);
-+
-+
-+#include <stdio.h>
-+#include <setjmp.h>
-+struct vpx_internal_error_info
-+{
-+ vpx_codec_err_t error_code;
-+ int has_detail;
-+ char detail[80];
-+ int setjmp;
-+ jmp_buf jmp;
-+};
-+
-+static void vpx_internal_error(struct vpx_internal_error_info *info,
-+ vpx_codec_err_t error,
-+ const char *fmt,
-+ ...)
-+{
-+ va_list ap;
-+
-+ info->error_code = error;
-+ info->has_detail = 0;
-+
-+ if (fmt)
-+ {
-+ size_t sz = sizeof(info->detail);
-+
-+ info->has_detail = 1;
-+ va_start(ap, fmt);
-+ vsnprintf(info->detail, sz - 1, fmt, ap);
-+ va_end(ap);
-+ info->detail[sz-1] = '\0';
-+ }
-+
-+ if (info->setjmp)
-+ longjmp(info->jmp, info->error_code);
-+}
-+#endif
-diff --git a/vpx/src/vpx_codec.c b/vpx/src/vpx_codec.c
-new file mode 100644
-index 0000000..0ef3a7b
---- /dev/null
-+++ b/vpx/src/vpx_codec.c
-@@ -0,0 +1,150 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\file vpx_decoder.c
-+ * \brief Provides the high level interface to wrap decoder algorithms.
-+ *
-+ */
-+#include <stdarg.h>
-+#include "vpx/vpx_integer.h"
-+#include "vpx/internal/vpx_codec_internal.h"
-+#include "vpx_version.h"
-+
-+#define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
-+
-+int vpx_codec_version(void)
-+{
-+ return VERSION_PACKED;
-+}
-+
-+
-+const char *vpx_codec_version_str(void)
-+{
-+ return VERSION_STRING_NOSP;
-+}
-+
-+
-+const char *vpx_codec_version_extra_str(void)
-+{
-+ return VERSION_EXTRA;
-+}
-+
-+
-+const char *vpx_codec_iface_name(vpx_codec_iface_t *iface)
-+{
-+ return iface ? iface->name : "<invalid interface>";
-+}
-+
-+const char *vpx_codec_err_to_string(vpx_codec_err_t err)
-+{
-+ switch (err)
-+ {
-+ case VPX_CODEC_OK:
-+ return "Success";
-+ case VPX_CODEC_ERROR:
-+ return "Unspecified internal error";
-+ case VPX_CODEC_MEM_ERROR:
-+ return "Memory allocation error";
-+ case VPX_CODEC_ABI_MISMATCH:
-+ return "ABI version mismatch";
-+ case VPX_CODEC_INCAPABLE:
-+ return "Codec does not implement requested capability";
-+ case VPX_CODEC_UNSUP_BITSTREAM:
-+ return "Bitstream not supported by this decoder";
-+ case VPX_CODEC_UNSUP_FEATURE:
-+ return "Bitstream required feature not supported by this decoder";
-+ case VPX_CODEC_CORRUPT_FRAME:
-+ return "Corrupt frame detected";
-+ case VPX_CODEC_INVALID_PARAM:
-+ return "Invalid parameter";
-+ case VPX_CODEC_LIST_END:
-+ return "End of iterated list";
-+ }
-+
-+ return "Unrecognized error code";
-+}
-+
-+const char *vpx_codec_error(vpx_codec_ctx_t *ctx)
-+{
-+ return (ctx) ? vpx_codec_err_to_string(ctx->err)
-+ : vpx_codec_err_to_string(VPX_CODEC_INVALID_PARAM);
-+}
-+
-+const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx)
-+{
-+ if (ctx && ctx->err)
-+ return ctx->priv ? ctx->priv->err_detail : ctx->err_detail;
-+
-+ return NULL;
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!ctx)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!ctx->iface || !ctx->priv)
-+ res = VPX_CODEC_ERROR;
-+ else
-+ {
-+ if (ctx->priv->alg_priv)
-+ ctx->iface->destroy(ctx->priv->alg_priv);
-+
-+ ctx->iface = NULL;
-+ ctx->name = NULL;
-+ ctx->priv = NULL;
-+ res = VPX_CODEC_OK;
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface)
-+{
-+ return (iface) ? iface->caps : 0;
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx,
-+ int ctrl_id,
-+ ...)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!ctx || !ctrl_id)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!ctx->iface || !ctx->priv || !ctx->iface->ctrl_maps)
-+ res = VPX_CODEC_ERROR;
-+ else
-+ {
-+ vpx_codec_ctrl_fn_map_t *entry;
-+
-+ res = VPX_CODEC_ERROR;
-+
-+ for (entry = ctx->iface->ctrl_maps; entry && entry->fn; entry++)
-+ {
-+ if (!entry->ctrl_id || entry->ctrl_id == ctrl_id)
-+ {
-+ va_list ap;
-+
-+ va_start(ap, ctrl_id);
-+ res = entry->fn(ctx->priv->alg_priv, ctrl_id, ap);
-+ va_end(ap);
-+ break;
-+ }
-+ }
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-diff --git a/vpx/src/vpx_decoder.c b/vpx/src/vpx_decoder.c
-new file mode 100644
-index 0000000..cbf5259
---- /dev/null
-+++ b/vpx/src/vpx_decoder.c
-@@ -0,0 +1,237 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\file vpx_decoder.c
-+ * \brief Provides the high level interface to wrap decoder algorithms.
-+ *
-+ */
-+#include <string.h>
-+#include "vpx/internal/vpx_codec_internal.h"
-+
-+#define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
-+
-+vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx,
-+ vpx_codec_iface_t *iface,
-+ vpx_codec_dec_cfg_t *cfg,
-+ vpx_codec_flags_t flags,
-+ int ver)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (ver != VPX_DECODER_ABI_VERSION)
-+ res = VPX_CODEC_ABI_MISMATCH;
-+ else if (!ctx || !iface)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (iface->abi_version != VPX_CODEC_INTERNAL_ABI_VERSION)
-+ res = VPX_CODEC_ABI_MISMATCH;
-+ else if ((flags & VPX_CODEC_USE_XMA) && !(iface->caps & VPX_CODEC_CAP_XMA))
-+ res = VPX_CODEC_INCAPABLE;
-+ else if ((flags & VPX_CODEC_USE_POSTPROC) && !(iface->caps & VPX_CODEC_CAP_POSTPROC))
-+ res = VPX_CODEC_INCAPABLE;
-+ else
-+ {
-+ memset(ctx, 0, sizeof(*ctx));
-+ ctx->iface = iface;
-+ ctx->name = iface->name;
-+ ctx->priv = NULL;
-+ ctx->init_flags = flags;
-+ ctx->config.dec = cfg;
-+ res = VPX_CODEC_OK;
-+
-+ if (!(flags & VPX_CODEC_USE_XMA))
-+ {
-+ res = ctx->iface->init(ctx);
-+
-+ if (res)
-+ {
-+ ctx->err_detail = ctx->priv ? ctx->priv->err_detail : NULL;
-+ vpx_codec_destroy(ctx);
-+ }
-+
-+ if (ctx->priv)
-+ ctx->priv->iface = ctx->iface;
-+ }
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface,
-+ const uint8_t *data,
-+ unsigned int data_sz,
-+ vpx_codec_stream_info_t *si)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!iface || !data || !data_sz || !si
-+ || si->sz < sizeof(vpx_codec_stream_info_t))
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else
-+ {
-+ /* Set default/unknown values */
-+ si->w = 0;
-+ si->h = 0;
-+
-+ res = iface->dec.peek_si(data, data_sz, si);
-+ }
-+
-+ return res;
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx,
-+ vpx_codec_stream_info_t *si)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!ctx || !si || si->sz < sizeof(vpx_codec_stream_info_t))
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!ctx->iface || !ctx->priv)
-+ res = VPX_CODEC_ERROR;
-+ else
-+ {
-+ /* Set default/unknown values */
-+ si->w = 0;
-+ si->h = 0;
-+
-+ res = ctx->iface->dec.get_si(ctx->priv->alg_priv, si);
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx,
-+ const uint8_t *data,
-+ unsigned int data_sz,
-+ void *user_priv,
-+ long deadline)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!ctx || !data || !data_sz)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!ctx->iface || !ctx->priv)
-+ res = VPX_CODEC_ERROR;
-+ else
-+ {
-+ res = ctx->iface->dec.decode(ctx->priv->alg_priv, data, data_sz,
-+ user_priv, deadline);
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx,
-+ vpx_codec_iter_t *iter)
-+{
-+ vpx_image_t *img;
-+
-+ if (!ctx || !iter || !ctx->iface || !ctx->priv)
-+ img = NULL;
-+ else
-+ img = ctx->iface->dec.get_frame(ctx->priv->alg_priv, iter);
-+
-+ return img;
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx,
-+ vpx_codec_put_frame_cb_fn_t cb,
-+ void *user_priv)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!ctx || !cb)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!ctx->iface || !ctx->priv
-+ || !(ctx->iface->caps & VPX_CODEC_CAP_PUT_FRAME))
-+ res = VPX_CODEC_ERROR;
-+ else
-+ {
-+ ctx->priv->dec.put_frame_cb.put_frame = cb;
-+ ctx->priv->dec.put_frame_cb.user_priv = user_priv;
-+ res = VPX_CODEC_OK;
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx,
-+ vpx_codec_put_slice_cb_fn_t cb,
-+ void *user_priv)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!ctx || !cb)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!ctx->iface || !ctx->priv
-+ || !(ctx->iface->caps & VPX_CODEC_CAP_PUT_FRAME))
-+ res = VPX_CODEC_ERROR;
-+ else
-+ {
-+ ctx->priv->dec.put_slice_cb.put_slice = cb;
-+ ctx->priv->dec.put_slice_cb.user_priv = user_priv;
-+ res = VPX_CODEC_OK;
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_get_mem_map(vpx_codec_ctx_t *ctx,
-+ vpx_codec_mmap_t *mmap,
-+ vpx_codec_iter_t *iter)
-+{
-+ vpx_codec_err_t res = VPX_CODEC_OK;
-+
-+ if (!ctx || !mmap || !iter || !ctx->iface)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!(ctx->iface->caps & VPX_CODEC_CAP_XMA))
-+ res = VPX_CODEC_ERROR;
-+ else
-+ res = ctx->iface->get_mmap(ctx, mmap, iter);
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_set_mem_map(vpx_codec_ctx_t *ctx,
-+ vpx_codec_mmap_t *mmap,
-+ unsigned int num_maps)
-+{
-+ vpx_codec_err_t res = VPX_CODEC_MEM_ERROR;
-+
-+ if (!ctx || !mmap || !ctx->iface)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!(ctx->iface->caps & VPX_CODEC_CAP_XMA))
-+ res = VPX_CODEC_ERROR;
-+ else
-+ {
-+ unsigned int i;
-+
-+ for (i = 0; i < num_maps; i++, mmap++)
-+ {
-+ if (!mmap->base)
-+ break;
-+
-+ /* Everything look ok, set the mmap in the decoder */
-+ res = ctx->iface->set_mmap(ctx, mmap);
-+
-+ if (res)
-+ break;
-+ }
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-diff --git a/vpx/src/vpx_decoder_compat.c b/vpx/src/vpx_decoder_compat.c
-new file mode 100644
-index 0000000..d5cc16e
---- /dev/null
-+++ b/vpx/src/vpx_decoder_compat.c
-@@ -0,0 +1,201 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\file vpx_decoder.c
-+ * \brief Provides the high level interface to wrap decoder algorithms.
-+ *
-+ */
-+#include <stdlib.h>
-+#include <string.h>
-+#include "vpx/vpx_decoder.h"
-+#include "vpx/internal/vpx_codec_internal.h"
-+
-+#define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
-+
-+const char *vpx_dec_iface_name(vpx_dec_iface_t *iface)
-+{
-+ return vpx_codec_iface_name((vpx_codec_iface_t *)iface);
-+}
-+
-+const char *vpx_dec_err_to_string(vpx_dec_err_t err)
-+{
-+ return vpx_codec_err_to_string(err);
-+}
-+
-+const char *vpx_dec_error(vpx_dec_ctx_t *ctx)
-+{
-+ return vpx_codec_error((vpx_codec_ctx_t *)ctx);
-+}
-+
-+const char *vpx_dec_error_detail(vpx_dec_ctx_t *ctx)
-+{
-+ return vpx_codec_error_detail((vpx_codec_ctx_t *)ctx);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_init_ver(vpx_dec_ctx_t *ctx,
-+ vpx_dec_iface_t *iface,
-+ int ver)
-+{
-+ return vpx_codec_dec_init_ver((vpx_codec_ctx_t *)ctx,
-+ (vpx_codec_iface_t *)iface,
-+ NULL,
-+ 0,
-+ ver);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_destroy(vpx_dec_ctx_t *ctx)
-+{
-+ return vpx_codec_destroy((vpx_codec_ctx_t *)ctx);
-+}
-+
-+
-+vpx_dec_caps_t vpx_dec_get_caps(vpx_dec_iface_t *iface)
-+{
-+ return vpx_codec_get_caps((vpx_codec_iface_t *)iface);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_peek_stream_info(vpx_dec_iface_t *iface,
-+ const uint8_t *data,
-+ unsigned int data_sz,
-+ vpx_dec_stream_info_t *si)
-+{
-+ return vpx_codec_peek_stream_info((vpx_codec_iface_t *)iface, data, data_sz,
-+ (vpx_codec_stream_info_t *)si);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_get_stream_info(vpx_dec_ctx_t *ctx,
-+ vpx_dec_stream_info_t *si)
-+{
-+ return vpx_codec_get_stream_info((vpx_codec_ctx_t *)ctx,
-+ (vpx_codec_stream_info_t *)si);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_control(vpx_dec_ctx_t *ctx,
-+ int ctrl_id,
-+ void *data)
-+{
-+ return vpx_codec_control_((vpx_codec_ctx_t *)ctx, ctrl_id, data);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_decode(vpx_dec_ctx_t *ctx,
-+ uint8_t *data,
-+ unsigned int data_sz,
-+ void *user_priv,
-+ int rel_pts)
-+{
-+ (void)rel_pts;
-+ return vpx_codec_decode((vpx_codec_ctx_t *)ctx, data, data_sz, user_priv,
-+ 0);
-+}
-+
-+vpx_image_t *vpx_dec_get_frame(vpx_dec_ctx_t *ctx,
-+ vpx_dec_iter_t *iter)
-+{
-+ return vpx_codec_get_frame((vpx_codec_ctx_t *)ctx, iter);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_register_put_frame_cb(vpx_dec_ctx_t *ctx,
-+ vpx_dec_put_frame_cb_fn_t cb,
-+ void *user_priv)
-+{
-+ return vpx_codec_register_put_frame_cb((vpx_codec_ctx_t *)ctx, cb,
-+ user_priv);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_register_put_slice_cb(vpx_dec_ctx_t *ctx,
-+ vpx_dec_put_slice_cb_fn_t cb,
-+ void *user_priv)
-+{
-+ return vpx_codec_register_put_slice_cb((vpx_codec_ctx_t *)ctx, cb,
-+ user_priv);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_xma_init_ver(vpx_dec_ctx_t *ctx,
-+ vpx_dec_iface_t *iface,
-+ int ver)
-+{
-+ return vpx_codec_dec_init_ver((vpx_codec_ctx_t *)ctx,
-+ (vpx_codec_iface_t *)iface,
-+ NULL,
-+ VPX_CODEC_USE_XMA,
-+ ver);
-+}
-+
-+vpx_dec_err_t vpx_dec_get_mem_map(vpx_dec_ctx_t *ctx_,
-+ vpx_dec_mmap_t *mmap,
-+ const vpx_dec_stream_info_t *si,
-+ vpx_dec_iter_t *iter)
-+{
-+ vpx_codec_ctx_t *ctx = (vpx_codec_ctx_t *)ctx_;
-+ vpx_dec_err_t res = VPX_DEC_OK;
-+
-+ if (!ctx || !mmap || !si || !iter || !ctx->iface)
-+ res = VPX_DEC_INVALID_PARAM;
-+ else if (!(ctx->iface->caps & VPX_DEC_CAP_XMA))
-+ res = VPX_DEC_ERROR;
-+ else
-+ {
-+ if (!ctx->config.dec)
-+ {
-+ ctx->config.dec = malloc(sizeof(vpx_codec_dec_cfg_t));
-+ ctx->config.dec->w = si->w;
-+ ctx->config.dec->h = si->h;
-+ }
-+
-+ res = ctx->iface->get_mmap(ctx, mmap, iter);
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+vpx_dec_err_t vpx_dec_set_mem_map(vpx_dec_ctx_t *ctx_,
-+ vpx_dec_mmap_t *mmap,
-+ unsigned int num_maps)
-+{
-+ vpx_codec_ctx_t *ctx = (vpx_codec_ctx_t *)ctx_;
-+ vpx_dec_err_t res = VPX_DEC_MEM_ERROR;
-+
-+ if (!ctx || !mmap || !ctx->iface)
-+ res = VPX_DEC_INVALID_PARAM;
-+ else if (!(ctx->iface->caps & VPX_DEC_CAP_XMA))
-+ res = VPX_DEC_ERROR;
-+ else
-+ {
-+ void *save = (ctx->priv) ? NULL : ctx->config.dec;
-+ unsigned int i;
-+
-+ for (i = 0; i < num_maps; i++, mmap++)
-+ {
-+ if (!mmap->base)
-+ break;
-+
-+ /* Everything look ok, set the mmap in the decoder */
-+ res = ctx->iface->set_mmap(ctx, mmap);
-+
-+ if (res)
-+ break;
-+ }
-+
-+ if (save) free(save);
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-diff --git a/vpx/src/vpx_encoder.c b/vpx/src/vpx_encoder.c
-new file mode 100644
-index 0000000..f43328f
---- /dev/null
-+++ b/vpx/src/vpx_encoder.c
-@@ -0,0 +1,312 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\file vpx_encoder.c
-+ * \brief Provides the high level interface to wrap encoder algorithms.
-+ *
-+ */
-+#include <limits.h>
-+#include <string.h>
-+#include "vpx/internal/vpx_codec_internal.h"
-+
-+#define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
-+
-+vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx,
-+ vpx_codec_iface_t *iface,
-+ vpx_codec_enc_cfg_t *cfg,
-+ vpx_codec_flags_t flags,
-+ int ver)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (ver != VPX_ENCODER_ABI_VERSION)
-+ res = VPX_CODEC_ABI_MISMATCH;
-+ else if (!ctx || !iface || !cfg)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (iface->abi_version != VPX_CODEC_INTERNAL_ABI_VERSION)
-+ res = VPX_CODEC_ABI_MISMATCH;
-+ else if (!(iface->caps & VPX_CODEC_CAP_ENCODER))
-+ res = VPX_CODEC_INCAPABLE;
-+ else if ((flags & VPX_CODEC_USE_XMA) && !(iface->caps & VPX_CODEC_CAP_XMA))
-+ res = VPX_CODEC_INCAPABLE;
-+ else if ((flags & VPX_CODEC_USE_PSNR)
-+ && !(iface->caps & VPX_CODEC_CAP_PSNR))
-+ res = VPX_CODEC_INCAPABLE;
-+ else
-+ {
-+ ctx->iface = iface;
-+ ctx->name = iface->name;
-+ ctx->priv = NULL;
-+ ctx->init_flags = flags;
-+ ctx->config.enc = cfg;
-+ res = ctx->iface->init(ctx);
-+
-+ if (res)
-+ {
-+ ctx->err_detail = ctx->priv ? ctx->priv->err_detail : NULL;
-+ vpx_codec_destroy(ctx);
-+ }
-+
-+ if (ctx->priv)
-+ ctx->priv->iface = ctx->iface;
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+
-+vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface,
-+ vpx_codec_enc_cfg_t *cfg,
-+ unsigned int usage)
-+{
-+ vpx_codec_err_t res;
-+ vpx_codec_enc_cfg_map_t *map;
-+
-+ if (!iface || !cfg || usage > INT_MAX)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!(iface->caps & VPX_CODEC_CAP_ENCODER))
-+ res = VPX_CODEC_INCAPABLE;
-+ else
-+ {
-+ res = VPX_CODEC_INVALID_PARAM;
-+
-+ for (map = iface->enc.cfg_maps; map->usage >= 0; map++)
-+ {
-+ if (map->usage == (int)usage)
-+ {
-+ *cfg = map->cfg;
-+ cfg->g_usage = usage;
-+ res = VPX_CODEC_OK;
-+ break;
-+ }
-+ }
-+ }
-+
-+ return res;
-+}
-+
-+
-+#if ARCH_X86 || ARCH_X86_64
-+/* On X86, disable the x87 unit's internal 80 bit precision for better
-+ * consistency with the SSE unit's 64 bit precision.
-+ */
-+#include "vpx_ports/x86.h"
-+#define FLOATING_POINT_INIT() do {\
-+ unsigned short x87_orig_mode = x87_set_double_precision();
-+#define FLOATING_POINT_RESTORE() \
-+ x87_set_control_word(x87_orig_mode); }while(0)
-+
-+
-+#else
-+static void FLOATING_POINT_INIT() {}
-+static void FLOATING_POINT_RESTORE() {}
-+#endif
-+
-+
-+vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx,
-+ const vpx_image_t *img,
-+ vpx_codec_pts_t pts,
-+ unsigned long duration,
-+ vpx_enc_frame_flags_t flags,
-+ unsigned long deadline)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!ctx || (img && !duration))
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!ctx->iface || !ctx->priv)
-+ res = VPX_CODEC_ERROR;
-+ else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-+ res = VPX_CODEC_INCAPABLE;
-+ else
-+ {
-+ /* Execute in a normalized floating point environment, if the platform
-+ * requires it.
-+ */
-+ FLOATING_POINT_INIT();
-+ res = ctx->iface->enc.encode(ctx->priv->alg_priv, img, pts,
-+ duration, flags, deadline);
-+ FLOATING_POINT_RESTORE();
-+ }
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx,
-+ vpx_codec_iter_t *iter)
-+{
-+ const vpx_codec_cx_pkt_t *pkt = NULL;
-+
-+ if (ctx)
-+ {
-+ if (!iter)
-+ ctx->err = VPX_CODEC_INVALID_PARAM;
-+ else if (!ctx->iface || !ctx->priv)
-+ ctx->err = VPX_CODEC_ERROR;
-+ else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-+ ctx->err = VPX_CODEC_INCAPABLE;
-+ else
-+ pkt = ctx->iface->enc.get_cx_data(ctx->priv->alg_priv, iter);
-+ }
-+
-+ if (pkt && pkt->kind == VPX_CODEC_CX_FRAME_PKT)
-+ {
-+ /* If the application has specified a destination area for the
-+ * compressed data, and the codec has not placed the data there,
-+ * and it fits, copy it.
-+ */
-+ char *dst_buf = ctx->priv->enc.cx_data_dst_buf.buf;
-+
-+ if (dst_buf
-+ && pkt->data.raw.buf != dst_buf
-+ && pkt->data.raw.sz
-+ + ctx->priv->enc.cx_data_pad_before
-+ + ctx->priv->enc.cx_data_pad_after
-+ <= ctx->priv->enc.cx_data_dst_buf.sz)
-+ {
-+ vpx_codec_cx_pkt_t *modified_pkt = &ctx->priv->enc.cx_data_pkt;
-+
-+ memcpy(dst_buf + ctx->priv->enc.cx_data_pad_before,
-+ pkt->data.raw.buf, pkt->data.raw.sz);
-+ *modified_pkt = *pkt;
-+ modified_pkt->data.raw.buf = dst_buf;
-+ modified_pkt->data.raw.sz += ctx->priv->enc.cx_data_pad_before
-+ + ctx->priv->enc.cx_data_pad_after;
-+ pkt = modified_pkt;
-+ }
-+
-+ if (dst_buf == pkt->data.raw.buf)
-+ {
-+ ctx->priv->enc.cx_data_dst_buf.buf = dst_buf + pkt->data.raw.sz;
-+ ctx->priv->enc.cx_data_dst_buf.sz -= pkt->data.raw.sz;
-+ }
-+ }
-+
-+ return pkt;
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx,
-+ const vpx_fixed_buf_t *buf,
-+ unsigned int pad_before,
-+ unsigned int pad_after)
-+{
-+ if (!ctx || !ctx->priv)
-+ return VPX_CODEC_INVALID_PARAM;
-+
-+ if (buf)
-+ {
-+ ctx->priv->enc.cx_data_dst_buf = *buf;
-+ ctx->priv->enc.cx_data_pad_before = pad_before;
-+ ctx->priv->enc.cx_data_pad_after = pad_after;
-+ }
-+ else
-+ {
-+ ctx->priv->enc.cx_data_dst_buf.buf = NULL;
-+ ctx->priv->enc.cx_data_dst_buf.sz = 0;
-+ ctx->priv->enc.cx_data_pad_before = 0;
-+ ctx->priv->enc.cx_data_pad_after = 0;
-+ }
-+
-+ return VPX_CODEC_OK;
-+}
-+
-+
-+const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx)
-+{
-+ vpx_image_t *img = NULL;
-+
-+ if (ctx)
-+ {
-+ if (!ctx->iface || !ctx->priv)
-+ ctx->err = VPX_CODEC_ERROR;
-+ else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-+ ctx->err = VPX_CODEC_INCAPABLE;
-+ else if (!ctx->iface->enc.get_preview)
-+ ctx->err = VPX_CODEC_INCAPABLE;
-+ else
-+ img = ctx->iface->enc.get_preview(ctx->priv->alg_priv);
-+ }
-+
-+ return img;
-+}
-+
-+
-+vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx)
-+{
-+ vpx_fixed_buf_t *buf = NULL;
-+
-+ if (ctx)
-+ {
-+ if (!ctx->iface || !ctx->priv)
-+ ctx->err = VPX_CODEC_ERROR;
-+ else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-+ ctx->err = VPX_CODEC_INCAPABLE;
-+ else if (!ctx->iface->enc.get_glob_hdrs)
-+ ctx->err = VPX_CODEC_INCAPABLE;
-+ else
-+ buf = ctx->iface->enc.get_glob_hdrs(ctx->priv->alg_priv);
-+ }
-+
-+ return buf;
-+}
-+
-+
-+vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx,
-+ const vpx_codec_enc_cfg_t *cfg)
-+{
-+ vpx_codec_err_t res;
-+
-+ if (!ctx || !ctx->iface || !ctx->priv || !cfg)
-+ res = VPX_CODEC_INVALID_PARAM;
-+ else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-+ res = VPX_CODEC_INCAPABLE;
-+ else
-+ res = ctx->iface->enc.cfg_set(ctx->priv->alg_priv, cfg);
-+
-+ return SAVE_STATUS(ctx, res);
-+}
-+
-+
-+int vpx_codec_pkt_list_add(struct vpx_codec_pkt_list *list,
-+ const struct vpx_codec_cx_pkt *pkt)
-+{
-+ if (list->cnt < list->max)
-+ {
-+ list->pkts[list->cnt++] = *pkt;
-+ return 0;
-+ }
-+
-+ return 1;
-+}
-+
-+
-+const vpx_codec_cx_pkt_t *vpx_codec_pkt_list_get(struct vpx_codec_pkt_list *list,
-+ vpx_codec_iter_t *iter)
-+{
-+ const vpx_codec_cx_pkt_t *pkt;
-+
-+ if (!(*iter))
-+ {
-+ *iter = list->pkts;
-+ }
-+
-+ pkt = (const void *) * iter;
-+
-+ if (pkt - list->pkts < list->cnt)
-+ *iter = pkt + 1;
-+ else
-+ pkt = NULL;
-+
-+ return pkt;
-+}
-diff --git a/vpx/src/vpx_image.c b/vpx/src/vpx_image.c
-new file mode 100644
-index 0000000..e8a2959
---- /dev/null
-+++ b/vpx/src/vpx_image.c
-@@ -0,0 +1,262 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+#include <stdlib.h>
-+#include <string.h>
-+#include "vpx/vpx_image.h"
-+
-+static vpx_image_t *img_alloc_helper(vpx_image_t *img,
-+ vpx_img_fmt_t fmt,
-+ unsigned int d_w,
-+ unsigned int d_h,
-+ unsigned int stride_align,
-+ unsigned char *img_data)
-+{
-+
-+ unsigned int h, w, s, xcs, ycs, bps;
-+ int align;
-+
-+ /* Treat align==0 like align==1 */
-+ if (!stride_align)
-+ stride_align = 1;
-+
-+ /* Validate alignment (must be power of 2) */
-+ if (stride_align & (stride_align - 1))
-+ goto fail;
-+
-+ /* Get sample size for this format */
-+ switch (fmt)
-+ {
-+ case VPX_IMG_FMT_RGB32:
-+ case VPX_IMG_FMT_RGB32_LE:
-+ case VPX_IMG_FMT_ARGB:
-+ case VPX_IMG_FMT_ARGB_LE:
-+ bps = 32;
-+ break;
-+ case VPX_IMG_FMT_RGB24:
-+ case VPX_IMG_FMT_BGR24:
-+ bps = 24;
-+ break;
-+ case VPX_IMG_FMT_RGB565:
-+ case VPX_IMG_FMT_RGB565_LE:
-+ case VPX_IMG_FMT_RGB555:
-+ case VPX_IMG_FMT_RGB555_LE:
-+ case VPX_IMG_FMT_UYVY:
-+ case VPX_IMG_FMT_YUY2:
-+ case VPX_IMG_FMT_YVYU:
-+ bps = 16;
-+ break;
-+ case VPX_IMG_FMT_I420:
-+ case VPX_IMG_FMT_YV12:
-+ case VPX_IMG_FMT_VPXI420:
-+ case VPX_IMG_FMT_VPXYV12:
-+ bps = 12;
-+ break;
-+ default:
-+ bps = 16;
-+ break;
-+ }
-+
-+ /* Get chroma shift values for this format */
-+ switch (fmt)
-+ {
-+ case VPX_IMG_FMT_I420:
-+ case VPX_IMG_FMT_YV12:
-+ case VPX_IMG_FMT_VPXI420:
-+ case VPX_IMG_FMT_VPXYV12:
-+ xcs = 1;
-+ break;
-+ default:
-+ xcs = 0;
-+ break;
-+ }
-+
-+ switch (fmt)
-+ {
-+ case VPX_IMG_FMT_I420:
-+ case VPX_IMG_FMT_YV12:
-+ case VPX_IMG_FMT_VPXI420:
-+ case VPX_IMG_FMT_VPXYV12:
-+ ycs = 1;
-+ break;
-+ default:
-+ ycs = 0;
-+ break;
-+ }
-+
-+ /* Calculate storage sizes given the chroma subsampling */
-+ align = (1 << xcs) - 1;
-+ w = (d_w + align) & ~align;
-+ align = (1 << ycs) - 1;
-+ h = (d_h + align) & ~align;
-+ s = (fmt & VPX_IMG_FMT_PLANAR) ? w : bps * w / 8;
-+ s = (s + stride_align - 1) & ~(stride_align - 1);
-+
-+ /* Allocate the new image */
-+ if (!img)
-+ {
-+ img = (vpx_image_t *)calloc(1, sizeof(vpx_image_t));
-+
-+ if (!img)
-+ goto fail;
-+
-+ img->self_allocd = 1;
-+ }
-+ else
-+ {
-+ memset(img, 0, sizeof(vpx_image_t));
-+ }
-+
-+ img->img_data = img_data;
-+
-+ if (!img_data)
-+ {
-+ img->img_data = malloc((fmt & VPX_IMG_FMT_PLANAR) ? h * w * bps / 8 : h * s);
-+ img->img_data_owner = 1;
-+ }
-+
-+ if (!img->img_data)
-+ goto fail;
-+
-+ img->fmt = fmt;
-+ img->w = w;
-+ img->h = h;
-+ img->x_chroma_shift = xcs;
-+ img->y_chroma_shift = ycs;
-+ img->bps = bps;
-+
-+ /* Calculate strides */
-+ img->stride[VPX_PLANE_Y] = img->stride[VPX_PLANE_ALPHA] = s;
-+ img->stride[VPX_PLANE_U] = img->stride[VPX_PLANE_V] = s >> xcs;
-+
-+ /* Default viewport to entire image */
-+ if (!vpx_img_set_rect(img, 0, 0, d_w, d_h))
-+ return img;
-+
-+fail:
-+ vpx_img_free(img);
-+ return NULL;
-+}
-+
-+vpx_image_t *vpx_img_alloc(vpx_image_t *img,
-+ vpx_img_fmt_t fmt,
-+ unsigned int d_w,
-+ unsigned int d_h,
-+ unsigned int stride_align)
-+{
-+ return img_alloc_helper(img, fmt, d_w, d_h, stride_align, NULL);
-+}
-+
-+vpx_image_t *vpx_img_wrap(vpx_image_t *img,
-+ vpx_img_fmt_t fmt,
-+ unsigned int d_w,
-+ unsigned int d_h,
-+ unsigned int stride_align,
-+ unsigned char *img_data)
-+{
-+ return img_alloc_helper(img, fmt, d_w, d_h, stride_align, img_data);
-+}
-+
-+int vpx_img_set_rect(vpx_image_t *img,
-+ unsigned int x,
-+ unsigned int y,
-+ unsigned int w,
-+ unsigned int h)
-+{
-+ unsigned char *data;
-+
-+ if (x + w <= img->w && y + h <= img->h)
-+ {
-+ img->d_w = w;
-+ img->d_h = h;
-+
-+ /* Calculate plane pointers */
-+ if (!(img->fmt & VPX_IMG_FMT_PLANAR))
-+ {
-+ img->planes[VPX_PLANE_PACKED] =
-+ img->img_data + x * img->bps / 8 + y * img->stride[VPX_PLANE_PACKED];
-+ }
-+ else
-+ {
-+ data = img->img_data;
-+
-+ if (img->fmt & VPX_IMG_FMT_HAS_ALPHA)
-+ {
-+ img->planes[VPX_PLANE_ALPHA] =
-+ data + x + y * img->stride[VPX_PLANE_ALPHA];
-+ data += img->h * img->stride[VPX_PLANE_ALPHA];
-+ }
-+
-+ img->planes[VPX_PLANE_Y] = data + x + y * img->stride[VPX_PLANE_Y];
-+ data += img->h * img->stride[VPX_PLANE_Y];
-+
-+ if (!(img->fmt & VPX_IMG_FMT_UV_FLIP))
-+ {
-+ img->planes[VPX_PLANE_U] = data
-+ + (x >> img->x_chroma_shift)
-+ + (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_U];
-+ data += (img->h >> img->y_chroma_shift) * img->stride[VPX_PLANE_U];
-+ img->planes[VPX_PLANE_V] = data
-+ + (x >> img->x_chroma_shift)
-+ + (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_V];
-+ }
-+ else
-+ {
-+ img->planes[VPX_PLANE_V] = data
-+ + (x >> img->x_chroma_shift)
-+ + (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_V];
-+ data += (img->h >> img->y_chroma_shift) * img->stride[VPX_PLANE_V];
-+ img->planes[VPX_PLANE_U] = data
-+ + (x >> img->x_chroma_shift)
-+ + (y >> img->y_chroma_shift) * img->stride[VPX_PLANE_U];
-+ }
-+ }
-+
-+ return 0;
-+ }
-+
-+ return -1;
-+}
-+
-+void vpx_img_flip(vpx_image_t *img)
-+{
-+ /* Note: In the calculation pointer adjustment calculation, we want the
-+ * rhs to be promoted to a signed type. Section 6.3.1.8 of the ISO C99
-+ * standard indicates that if the adjustment parameter is unsigned, the
-+ * stride parameter will be promoted to unsigned, causing errors when
-+ * the lhs is a larger type than the rhs.
-+ */
-+ img->planes[VPX_PLANE_Y] += (signed)(img->d_h - 1) * img->stride[VPX_PLANE_Y];
-+ img->stride[VPX_PLANE_Y] = -img->stride[VPX_PLANE_Y];
-+
-+ img->planes[VPX_PLANE_U] += (signed)((img->d_h >> img->y_chroma_shift) - 1)
-+ * img->stride[VPX_PLANE_U];
-+ img->stride[VPX_PLANE_U] = -img->stride[VPX_PLANE_U];
-+
-+ img->planes[VPX_PLANE_V] += (signed)((img->d_h >> img->y_chroma_shift) - 1)
-+ * img->stride[VPX_PLANE_V];
-+ img->stride[VPX_PLANE_V] = -img->stride[VPX_PLANE_V];
-+
-+ img->planes[VPX_PLANE_ALPHA] += (signed)(img->d_h - 1) * img->stride[VPX_PLANE_ALPHA];
-+ img->stride[VPX_PLANE_ALPHA] = -img->stride[VPX_PLANE_ALPHA];
-+}
-+
-+void vpx_img_free(vpx_image_t *img)
-+{
-+ if (img)
-+ {
-+ if (img->img_data && img->img_data_owner)
-+ free(img->img_data);
-+
-+ if (img->self_allocd)
-+ free(img);
-+ }
-+}
-diff --git a/vpx/vp8.h b/vpx/vp8.h
-new file mode 100644
-index 0000000..a493ef6
---- /dev/null
-+++ b/vpx/vp8.h
-@@ -0,0 +1,117 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\defgroup vp8 VP8
-+ * \ingroup codecs
-+ * VP8 is vpx's newest video compression algorithm that uses motion
-+ * compensated prediction, Discrete Cosine Transform (DCT) coding of the
-+ * prediction error signal and context dependent entropy coding techniques
-+ * based on arithmatic principles. It features:
-+ * - YUV 4:2:0 image format
-+ * - Macro-block based coding (16x16 luma plus two 8x8 chroma)
-+ * - 1/4 (1/8) pixel accuracy motion compensated prediction
-+ * - 4x4 DCT transform
-+ * - 128 level linear quantizer
-+ * - In loop deblocking filter
-+ * - Context-based entropy coding
-+ *
-+ * @{
-+ */
-+/*!\file vp8.h
-+ * \brief Provides controls common to both the VP8 encoder and decoder.
-+ */
-+#ifndef VP8_H
-+#define VP8_H
-+#include "vpx/vpx_codec_impl_top.h"
-+
-+/*!\brief Control functions
-+ *
-+ * The set of macros define the control functions of VP8 interface
-+ */
-+enum vp8_dec_control_id
-+{
-+ VP8_SET_REFERENCE = 1, /**< pass in an external frame into decoder to be used as reference frame */
-+ VP8_COPY_REFERENCE = 2, /**< get a copy of reference frame from the decoder */
-+ VP8_SET_POSTPROC = 3, /**< set decoder's the post processing settings */
-+ VP8_COMMON_CTRL_ID_MAX
-+};
-+
-+/*!\brief post process flags
-+ *
-+ * The set of macros define VP8 decoder post processing flags
-+ */
-+enum vp8_postproc_level
-+{
-+ VP8_NOFILTERING = 0,
-+ VP8_DEBLOCK = 1,
-+ VP8_DEMACROBLOCK = 2,
-+ VP8_ADDNOISE = 4,
-+};
-+
-+/*!\brief post process flags
-+ *
-+ * This define a structure that describe the post processing settings. For
-+ * the best objective measure (using thet PSNR metric) set post_proc_flag
-+ * to VP8_DEBLOCK and deblocking_level to 1.
-+ */
-+
-+typedef struct vp8_postproc_cfg
-+{
-+ int post_proc_flag; /**< the types of post processing to be done, should be combination of "vp8_postproc_level" */
-+ int deblocking_level; /**< the strength of deblocking, valid range [0, 16] */
-+ int noise_level; /**< the strength of additive noise, valid range [0, 16] */
-+} vp8_postproc_cfg_t;
-+
-+/*!\brief reference frame type
-+ *
-+ * The set of macros define the type of VP8 reference frames
-+ */
-+typedef enum vpx_ref_frame_type
-+{
-+ VP8_LAST_FRAME = 1,
-+ VP8_GOLD_FRAME = 2,
-+ VP8_ALTR_FRAME = 4
-+} vpx_ref_frame_type_t;
-+
-+/*!\brief reference frame data struct
-+ *
-+ * define the data struct to access vp8 reference frames
-+ */
-+
-+typedef struct vpx_ref_frame
-+{
-+ vpx_ref_frame_type_t frame_type; /**< which reference frame */
-+ vpx_image_t img; /**< reference frame data in image format */
-+} vpx_ref_frame_t;
-+
-+
-+/*!\brief vp8 decoder control funciton parameter type
-+ *
-+ * defines the data type for each of VP8 decoder control funciton requires
-+ */
-+
-+VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE, vpx_ref_frame_t *)
-+VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE, vpx_ref_frame_t *)
-+VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC, vp8_postproc_cfg_t *)
-+
-+
-+/*! @} - end defgroup vp8 */
-+
-+#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
-+/* The following definitions are provided for backward compatibility with
-+ * the VP8 1.0.x SDK. USE IN PRODUCTION CODE IS NOT RECOMMENDED.
-+ */
-+
-+DECLSPEC_DEPRECATED extern vpx_codec_iface_t vpx_codec_vp8_algo DEPRECATED;
-+#endif
-+
-+#include "vpx/vpx_codec_impl_bottom.h"
-+#endif
-diff --git a/vpx/vp8cx.h b/vpx/vp8cx.h
-new file mode 100644
-index 0000000..1104064
---- /dev/null
-+++ b/vpx/vp8cx.h
-@@ -0,0 +1,262 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\defgroup vp8_encoder WebM VP8 Encoder
-+ * \ingroup vp8
-+ *
-+ * @{
-+ */
-+#include "vp8.h"
-+
-+/*!\file vp8cx.h
-+ * \brief Provides definitions for using the VP8 encoder algorithm within the
-+ * vpx Codec Interface.
-+ */
-+#ifndef VP8CX_H
-+#define VP8CX_H
-+#include "vpx/vpx_codec_impl_top.h"
-+
-+/*!\brief Algorithm interface for VP8
-+ *
-+ * This interface provides the capability to encode raw VP8 streams, as would
-+ * be found in AVI files.
-+ */
-+extern vpx_codec_iface_t vpx_codec_vp8_cx_algo;
-+
-+
-+/*
-+ * Algorithm Flags
-+ */
-+
-+/*!\brief Don't reference the last frame
-+ *
-+ * When this flag is set, the encoder will not use the last frame as a
-+ * predictor. When not set, the encoder will choose whether to use the
-+ * last frame or not automatically.
-+ */
-+#define VP8_EFLAG_NO_REF_LAST (1<<16)
-+
-+
-+/*!\brief Don't reference the golden frame
-+ *
-+ * When this flag is set, the encoder will not use the golden frame as a
-+ * predictor. When not set, the encoder will choose whether to use the
-+ * golden frame or not automatically.
-+ */
-+#define VP8_EFLAG_NO_REF_GF (1<<17)
-+
-+
-+/*!\brief Don't reference the alternate reference frame
-+ *
-+ * When this flag is set, the encoder will not use the alt ref frame as a
-+ * predictor. When not set, the encoder will choose whether to use the
-+ * alt ref frame or not automatically.
-+ */
-+#define VP8_EFLAG_NO_REF_ARF (1<<21)
-+
-+
-+/*!\brief Don't update the last frame
-+ *
-+ * When this flag is set, the encoder will not update the last frame with
-+ * the contents of the current frame.
-+ */
-+#define VP8_EFLAG_NO_UPD_LAST (1<<18)
-+
-+
-+/*!\brief Don't update the golden frame
-+ *
-+ * When this flag is set, the encoder will not update the golden frame with
-+ * the contents of the current frame.
-+ */
-+#define VP8_EFLAG_NO_UPD_GF (1<<22)
-+
-+
-+/*!\brief Don't update the alternate reference frame
-+ *
-+ * When this flag is set, the encoder will not update the alt ref frame with
-+ * the contents of the current frame.
-+ */
-+#define VP8_EFLAG_NO_UPD_ARF (1<<23)
-+
-+
-+/*!\brief Force golden frame update
-+ *
-+ * When this flag is set, the encoder copy the contents of the current frame
-+ * to the golden frame buffer.
-+ */
-+#define VP8_EFLAG_FORCE_GF (1<<19)
-+
-+
-+/*!\brief Force alternate reference frame update
-+ *
-+ * When this flag is set, the encoder copy the contents of the current frame
-+ * to the alternate reference frame buffer.
-+ */
-+#define VP8_EFLAG_FORCE_ARF (1<<24)
-+
-+
-+/*!\brief Disable entropy update
-+ *
-+ * When this flag is set, the encoder will not update its internal entropy
-+ * model based on the entropy of this frame.
-+ */
-+#define VP8_EFLAG_NO_UPD_ENTROPY (1<<20)
-+
-+
-+/*!\brief VP8 encoder control functions
-+ *
-+ * The set of macros define the control functions of VP8 encoder interface
-+ */
-+enum vp8e_enc_control_id
-+{
-+ VP8E_UPD_ENTROPY = 5, /**< control function to set mode of entropy update in encoder */
-+ VP8E_UPD_REFERENCE, /**< control function to set reference update mode in encoder */
-+ VP8E_USE_REFERENCE, /**< control function to set which reference frame encoder can use */
-+ VP8E_SET_ROI_MAP, /**< control function to pass an ROI map to encoder */
-+ VP8E_SET_ACTIVEMAP, /**< control function to pass an Active map to encoder */
-+ VP8E_SET_SCALEMODE = 11, /**< control function to set encoder scaling mode */
-+ VP8E_SET_CPUUSED = 13, /**< control function to set vp8 encoder cpuused */
-+ VP8E_SET_ENABLEAUTOALTREF, /**< control function to enable vp8 to automatic set and use altref frame */
-+ VP8E_SET_NOISE_SENSITIVITY, /**< control function to set noise sensitivity */
-+ VP8E_SET_SHARPNESS, /**< control function to set sharpness */
-+ VP8E_SET_STATIC_THRESHOLD, /**< control function to set the threshold for macroblocks treated static */
-+ VP8E_SET_TOKEN_PARTITIONS, /**< control function to set the number of token partitions */
-+ VP8E_GET_LAST_QUANTIZER, /**< return the quantizer chosen by the
-+ encoder for the last frame using the internal
-+ scale */
-+ VP8E_GET_LAST_QUANTIZER_64, /**< return the quantizer chosen by the
-+ encoder for the last frame, using the 0..63
-+ scale as used by the rc_*_quantizer config
-+ parameters */
-+ VP8E_SET_ARNR_MAXFRAMES, /**< control function to set the max number of frames blurred creating arf*/
-+ VP8E_SET_ARNR_STRENGTH , /**< control function to set the filter strength for the arf */
-+ VP8E_SET_ARNR_TYPE , /**< control function to set the type of filter to use for the arf*/
-+} ;
-+
-+/*!\brief vpx 1-D scaling mode
-+ *
-+ * This set of constants define 1-D vpx scaling modes
-+ */
-+typedef enum vpx_scaling_mode_1d
-+{
-+ VP8E_NORMAL = 0,
-+ VP8E_FOURFIVE = 1,
-+ VP8E_THREEFIVE = 2,
-+ VP8E_ONETWO = 3
-+} VPX_SCALING_MODE;
-+
-+
-+/*!\brief vpx region of interest map
-+ *
-+ * These defines the data structures for the region of interest map
-+ *
-+ */
-+
-+typedef struct vpx_roi_map
-+{
-+ unsigned char *roi_map; /**< specify an id between 0 and 3 for each 16x16 region within a frame */
-+ unsigned int rows; /**< number of rows */
-+ unsigned int cols; /**< number of cols */
-+ int delta_q[4]; /**< quantizer delta [-64, 64] off baseline for regions with id between 0 and 3*/
-+ int delta_lf[4]; /**< loop filter strength delta [-32, 32] for regions with id between 0 and 3 */
-+ unsigned int static_threshold[4];/**< threshold for region to be treated as static */
-+} vpx_roi_map_t;
-+
-+/*!\brief vpx active region map
-+ *
-+ * These defines the data structures for active region map
-+ *
-+ */
-+
-+
-+typedef struct vpx_active_map
-+{
-+ unsigned char *active_map; /**< specify an on (1) or off (0) each 16x16 region within a frame */
-+ unsigned int rows; /**< number of rows */
-+ unsigned int cols; /**< number of cols */
-+} vpx_active_map_t;
-+
-+/*!\brief vpx image scaling mode
-+ *
-+ * This defines the data structure for image scaling mode
-+ *
-+ */
-+typedef struct vpx_scaling_mode
-+{
-+ VPX_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */
-+ VPX_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */
-+} vpx_scaling_mode_t;
-+
-+/*!\brief VP8 encoding mode
-+ *
-+ * This defines VP8 encoding mode
-+ *
-+ */
-+typedef enum
-+{
-+ VP8_BEST_QUALITY_ENCODING,
-+ VP8_GOOD_QUALITY_ENCODING,
-+ VP8_REAL_TIME_ENCODING
-+} vp8e_encoding_mode;
-+
-+/*!\brief VP8 token partition mode
-+ *
-+ * This defines VP8 partitioning mode for compressed data, i.e., the number of
-+ * sub-streams in the bitstream. Used for parallelized decoding.
-+ *
-+ */
-+
-+typedef enum
-+{
-+ VP8_ONE_TOKENPARTITION = 0,
-+ VP8_TWO_TOKENPARTITION = 1,
-+ VP8_FOUR_TOKENPARTITION = 2,
-+ VP8_EIGHT_TOKENPARTITION = 3,
-+} vp8e_token_partitions;
-+
-+
-+/*!\brief VP8 encoder control function parameter type
-+ *
-+ * Defines the data types that VP8E control functions take. Note that
-+ * additional common controls are defined in vp8.h
-+ *
-+ */
-+
-+
-+/* These controls have been deprecated in favor of the flags parameter to
-+ * vpx_codec_encode(). See the definition of VP8_EFLAG_* above.
-+ */
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_UPD_ENTROPY, int)
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_UPD_REFERENCE, int)
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_USE_REFERENCE, int)
-+
-+VPX_CTRL_USE_TYPE(VP8E_SET_ROI_MAP, vpx_roi_map_t *)
-+VPX_CTRL_USE_TYPE(VP8E_SET_ACTIVEMAP, vpx_active_map_t *)
-+VPX_CTRL_USE_TYPE(VP8E_SET_SCALEMODE, vpx_scaling_mode_t *)
-+
-+VPX_CTRL_USE_TYPE(VP8E_SET_CPUUSED, int)
-+VPX_CTRL_USE_TYPE(VP8E_SET_ENABLEAUTOALTREF, unsigned int)
-+VPX_CTRL_USE_TYPE(VP8E_SET_NOISE_SENSITIVITY, unsigned int)
-+VPX_CTRL_USE_TYPE(VP8E_SET_SHARPNESS, unsigned int)
-+VPX_CTRL_USE_TYPE(VP8E_SET_STATIC_THRESHOLD, unsigned int)
-+VPX_CTRL_USE_TYPE(VP8E_SET_TOKEN_PARTITIONS, vp8e_token_partitions)
-+
-+VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_MAXFRAMES, unsigned int)
-+VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_STRENGTH , unsigned int)
-+VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_TYPE , unsigned int)
-+
-+
-+VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER, int *)
-+VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64, int *)
-+
-+/*! @} - end defgroup vp8_encoder */
-+#include "vpx/vpx_codec_impl_bottom.h"
-+#endif
-diff --git a/vpx/vp8dx.h b/vpx/vp8dx.h
-new file mode 100644
-index 0000000..d602e80
---- /dev/null
-+++ b/vpx/vp8dx.h
-@@ -0,0 +1,42 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+#include "vp8.h"
-+
-+/*!\defgroup vp8_decoder WebM VP8 Decoder
-+ * \ingroup vp8
-+ *
-+ * @{
-+ */
-+/*!\file vp8dx.h
-+ * \brief Provides definitions for using the VP8 algorithm within the vpx Decoder
-+ * interface.
-+ */
-+#ifndef VP8DX_H
-+#define VP8DX_H
-+#include "vpx/vpx_codec_impl_top.h"
-+
-+/*!\brief Algorithm interface for VP8
-+ *
-+ * This interface provides the capability to decode raw VP8 streams, as would
-+ * be found in AVI files and other non-Flash uses.
-+ */
-+extern vpx_codec_iface_t vpx_codec_vp8_dx_algo;
-+
-+/* Include controls common to both the encoder and decoder */
-+#include "vp8.h"
-+
-+
-+/*! @} - end defgroup vp8_decoder */
-+
-+
-+#include "vpx/vpx_codec_impl_bottom.h"
-+#endif
-diff --git a/vpx/vp8e.h b/vpx/vp8e.h
-new file mode 100644
-index 0000000..f72fd24
---- /dev/null
-+++ b/vpx/vp8e.h
-@@ -0,0 +1,63 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/* This file contains backwards compatibility stubs for applications using
-+ * the VP8 version 1.0 API.
-+ */
-+#ifndef VP8E_H
-+#define VP8E_H
-+#include "vpx/vpx_codec_impl_top.h"
-+
-+#if defined(VPX_CODEC_DISABLE_COMPAT) && VPX_CODEC_DISABLE_COMPAT
-+#error "Backwards compatibility disabled: don't include vp8e.h"
-+#endif
-+
-+#include "vp8cx.h"
-+DECLSPEC_DEPRECATED extern vpx_codec_iface_t vpx_enc_vp8_algo DEPRECATED;
-+
-+
-+enum
-+{
-+ VP8E_SET_REFERENCE = VP8_SET_REFERENCE,
-+ VP8E_COPY_REFERENCE = VP8_COPY_REFERENCE,
-+ VP8E_SET_PREVIEWPP = VP8_SET_POSTPROC,
-+ VP8E_SET_FLUSHFLAG = 4,
-+ VP8E_SET_FRAMETYPE = 10,
-+ VP8E_SET_ENCODING_MODE = 12
-+};
-+
-+#define NORMAL_FRAME (0)
-+#define KEY_FRAME (1)
-+
-+/* Change VP8E to VP8 to get the undeprecated version of these (defined in
-+ * vp8.h)
-+ */
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_REFERENCE, vpx_ref_frame_t *)
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_COPY_REFERENCE, vpx_ref_frame_t *)
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_PREVIEWPP, vp8_postproc_cfg_t *)
-+
-+
-+/* Flush is done by calling vpx_codec_encode with a NULL input image. */
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_FLUSHFLAG, int)
-+
-+
-+/* Frame type is set with a flag to vpx_codec_control. See VPX_EFLAG_FORCE_KF
-+ */
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_FRAMETYPE, int)
-+
-+
-+/* This control has been deprecated in favor of the duration parameter to
-+ * vpx_codec_encode(). Use the #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY,
-+ * #VPX_DL_BEST_QUALITY constants to that parameter instead.
-+ */
-+VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_SET_ENCODING_MODE, vp8e_encoding_mode)
-+#include "vpx/vpx_codec_impl_bottom.h"
-+#endif
-diff --git a/vpx/vpx_codec.h b/vpx/vpx_codec.h
-new file mode 100644
-index 0000000..f821559
---- /dev/null
-+++ b/vpx/vpx_codec.h
-@@ -0,0 +1,554 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\defgroup codec Common Algorithm Interface
-+ * This abstraction allows applications to easily support multiple video
-+ * formats with minimal code duplication. This section describes the interface
-+ * common to all codecs (both encoders and decoders).
-+ * @{
-+ */
-+
-+/*!\file vpx_codec.h
-+ * \brief Describes the codec algorithm interface to applications.
-+ *
-+ * This file describes the interface between an application and a
-+ * video codec algorithm.
-+ *
-+ * An application instantiates a specific codec instance by using
-+ * vpx_codec_init() and a pointer to the algorithm's interface structure:
-+ * <pre>
-+ * my_app.c:
-+ * extern vpx_codec_iface_t my_codec;
-+ * {
-+ * vpx_codec_ctx_t algo;
-+ * res = vpx_codec_init(&algo, &my_codec);
-+ * }
-+ * </pre>
-+ *
-+ * Once initialized, the instance is manged using other functions from
-+ * the vpx_codec_* family.
-+ */
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#ifndef VPX_CODEC_H
-+#define VPX_CODEC_H
-+#include "vpx_integer.h"
-+#include "vpx_image.h"
-+
-+ /*!\brief Decorator indicating a function is deprecated */
-+#ifndef DEPRECATED
-+#if defined(__GNUC__) && __GNUC__
-+#define DEPRECATED __attribute__ ((deprecated))
-+#define DECLSPEC_DEPRECATED /**< \copydoc #DEPRECATED */
-+#elif defined(_MSC_VER)
-+#define DEPRECATED
-+#define DECLSPEC_DEPRECATED __declspec(deprecated) /**< \copydoc #DEPRECATED */
-+#else
-+#define DEPRECATED
-+#define DECLSPEC_DEPRECATED /**< \copydoc #DEPRECATED */
-+#endif
-+#endif
-+
-+ /*!\brief Decorator indicating a function is potentially unused */
-+#ifdef UNUSED
-+#elif __GNUC__
-+#define UNUSED __attribute__ ((unused));
-+#else
-+#define UNUSED
-+#endif
-+
-+ /*!\brief Current ABI version number
-+ *
-+ * \internal
-+ * If this file is altered in any way that changes the ABI, this value
-+ * must be bumped. Examples include, but are not limited to, changing
-+ * types, removing or reassigning enums, adding/removing/rearranging
-+ * fields to structures
-+ */
-+#define VPX_CODEC_ABI_VERSION (2 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/
-+
-+ /*!\brief Algorithm return codes */
-+ typedef enum {
-+ /*!\brief Operation completed without error */
-+ VPX_CODEC_OK,
-+
-+ /*!\brief Unspecified error */
-+ VPX_CODEC_ERROR,
-+
-+ /*!\brief Memory operation failed */
-+ VPX_CODEC_MEM_ERROR,
-+
-+ /*!\brief ABI version mismatch */
-+ VPX_CODEC_ABI_MISMATCH,
-+
-+ /*!\brief Algorithm does not have required capability */
-+ VPX_CODEC_INCAPABLE,
-+
-+ /*!\brief The given bitstream is not supported.
-+ *
-+ * The bitstream was unable to be parsed at the highest level. The decoder
-+ * is unable to proceed. This error \ref SHOULD be treated as fatal to the
-+ * stream. */
-+ VPX_CODEC_UNSUP_BITSTREAM,
-+
-+ /*!\brief Encoded bitstream uses an unsupported feature
-+ *
-+ * The decoder does not implement a feature required by the encoder. This
-+ * return code should only be used for features that prevent future
-+ * pictures from being properly decoded. This error \ref MAY be treated as
-+ * fatal to the stream or \ref MAY be treated as fatal to the current GOP.
-+ */
-+ VPX_CODEC_UNSUP_FEATURE,
-+
-+ /*!\brief The coded data for this stream is corrupt or incomplete
-+ *
-+ * There was a problem decoding the current frame. This return code
-+ * should only be used for failures that prevent future pictures from
-+ * being properly decoded. This error \ref MAY be treated as fatal to the
-+ * stream or \ref MAY be treated as fatal to the current GOP. If decoding
-+ * is continued for the current GOP, artifacts may be present.
-+ */
-+ VPX_CODEC_CORRUPT_FRAME,
-+
-+ /*!\brief An application-supplied parameter is not valid.
-+ *
-+ */
-+ VPX_CODEC_INVALID_PARAM,
-+
-+ /*!\brief An iterator reached the end of list.
-+ *
-+ */
-+ VPX_CODEC_LIST_END,
-+
-+ }
-+ vpx_codec_err_t;
-+
-+
-+ /*! \brief Codec capabilities bitfield
-+ *
-+ * Each codec advertises the capabilities it supports as part of its
-+ * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces
-+ * or functionality, and are not required to be supported.
-+ *
-+ * The available flags are specified by VPX_CODEC_CAP_* defines.
-+ */
-+ typedef long vpx_codec_caps_t;
-+#define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */
-+#define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */
-+#define VPX_CODEC_CAP_XMA 0x4 /**< Supports e_xternal Memory Allocation */
-+
-+
-+ /*! \brief Initialization-time Feature Enabling
-+ *
-+ * Certain codec features must be known at initialization time, to allow for
-+ * proper memory allocation.
-+ *
-+ * The available flags are specified by VPX_CODEC_USE_* defines.
-+ */
-+ typedef long vpx_codec_flags_t;
-+#define VPX_CODEC_USE_XMA 0x00000001 /**< Use e_xternal Memory Allocation mode */
-+
-+
-+ /*!\brief Codec interface structure.
-+ *
-+ * Contains function pointers and other data private to the codec
-+ * implementation. This structure is opaque to the application.
-+ */
-+ typedef const struct vpx_codec_iface vpx_codec_iface_t;
-+
-+
-+ /*!\brief Codec private data structure.
-+ *
-+ * Contains data private to the codec implementation. This structure is opaque
-+ * to the application.
-+ */
-+ typedef struct vpx_codec_priv vpx_codec_priv_t;
-+
-+
-+ /*!\brief Iterator
-+ *
-+ * Opaque storage used for iterating over lists.
-+ */
-+ typedef const void *vpx_codec_iter_t;
-+
-+
-+ /*!\brief Codec context structure
-+ *
-+ * All codecs \ref MUST support this context structure fully. In general,
-+ * this data should be considered private to the codec algorithm, and
-+ * not be manipulated or examined by the calling application. Applications
-+ * may reference the 'name' member to get a printable description of the
-+ * algorithm.
-+ */
-+ typedef struct vpx_codec_ctx
-+ {
-+ const char *name; /**< Printable interface name */
-+ vpx_codec_iface_t *iface; /**< Interface pointers */
-+ vpx_codec_err_t err; /**< Last returned error */
-+ const char *err_detail; /**< Detailed info, if available */
-+ vpx_codec_flags_t init_flags; /**< Flags passed at init time */
-+ union
-+ {
-+ struct vpx_codec_dec_cfg *dec; /**< Decoder Configuration Pointer */
-+ struct vpx_codec_enc_cfg *enc; /**< Encoder Configuration Pointer */
-+ void *raw;
-+ } config; /**< Configuration pointer aliasing union */
-+ vpx_codec_priv_t *priv; /**< Algorithm private storage */
-+ } vpx_codec_ctx_t;
-+
-+
-+ /*
-+ * Library Version Number Interface
-+ *
-+ * For example, see the following sample return values:
-+ * vpx_codec_version() (1<<16 | 2<<8 | 3)
-+ * vpx_codec_version_str() "v1.2.3-rc1-16-gec6a1ba"
-+ * vpx_codec_version_extra_str() "rc1-16-gec6a1ba"
-+ */
-+
-+ /*!\brief Return the version information (as an integer)
-+ *
-+ * Returns a packed encoding of the library version number. This will only include
-+ * the major.minor.patch component of the version number. Note that this encoded
-+ * value should be accessed through the macros provided, as the encoding may change
-+ * in the future.
-+ *
-+ */
-+ int vpx_codec_version(void);
-+#define VPX_VERSION_MAJOR(v) ((v>>16)&0xff) /**< extract major from packed version */
-+#define VPX_VERSION_MINOR(v) ((v>>8)&0xff) /**< extract minor from packed version */
-+#define VPX_VERSION_PATCH(v) ((v>>0)&0xff) /**< extract patch from packed version */
-+
-+ /*!\brief Return the version major number */
-+#define vpx_codec_version_major() ((vpx_codec_version()>>16)&0xff)
-+
-+ /*!\brief Return the version minr number */
-+#define vpx_codec_version_minor() ((vpx_codec_version()>>8)&0xff)
-+
-+ /*!\brief Return the version patch number */
-+#define vpx_codec_version_patch() ((vpx_codec_version()>>0)&0xff)
-+
-+
-+ /*!\brief Return the version information (as a string)
-+ *
-+ * Returns a printable string containing the full library version number. This may
-+ * contain additional text following the three digit version number, as to indicate
-+ * release candidates, prerelease versions, etc.
-+ *
-+ */
-+ const char *vpx_codec_version_str(void);
-+
-+
-+ /*!\brief Return the version information (as a string)
-+ *
-+ * Returns a printable "extra string". This is the component of the string returned
-+ * by vpx_codec_version_str() following the three digit version number.
-+ *
-+ */
-+ const char *vpx_codec_version_extra_str(void);
-+
-+
-+ /*!\brief Return the build configuration
-+ *
-+ * Returns a printable string containing an encoded version of the build
-+ * configuration. This may be useful to vpx support.
-+ *
-+ */
-+ const char *vpx_codec_build_config(void);
-+
-+
-+ /*!\brief Return the name for a given interface
-+ *
-+ * Returns a human readable string for name of the given codec interface.
-+ *
-+ * \param[in] iface Interface pointer
-+ *
-+ */
-+ const char *vpx_codec_iface_name(vpx_codec_iface_t *iface);
-+
-+
-+ /*!\brief Convert error number to printable string
-+ *
-+ * Returns a human readable string for the last error returned by the
-+ * algorithm. The returned error will be one line and will not contain
-+ * any newline characters.
-+ *
-+ *
-+ * \param[in] err Error number.
-+ *
-+ */
-+ const char *vpx_codec_err_to_string(vpx_codec_err_t err);
-+
-+
-+ /*!\brief Retrieve error synopsis for codec context
-+ *
-+ * Returns a human readable string for the last error returned by the
-+ * algorithm. The returned error will be one line and will not contain
-+ * any newline characters.
-+ *
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ *
-+ */
-+ const char *vpx_codec_error(vpx_codec_ctx_t *ctx);
-+
-+
-+ /*!\brief Retrieve detailed error information for codec context
-+ *
-+ * Returns a human readable string providing detailed information about
-+ * the last error.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ *
-+ * \retval NULL
-+ * No detailed information is available.
-+ */
-+ const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx);
-+
-+
-+ /* REQUIRED FUNCTIONS
-+ *
-+ * The following functions are required to be implemented for all codecs.
-+ * They represent the base case functionality expected of all codecs.
-+ */
-+
-+ /*!\brief Destroy a codec instance
-+ *
-+ * Destroys a codec context, freeing any associated memory buffers.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The codec algorithm initialized.
-+ * \retval #VPX_CODEC_MEM_ERROR
-+ * Memory allocation failed.
-+ */
-+ vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx);
-+
-+
-+ /*!\brief Get the capabilities of an algorithm.
-+ *
-+ * Retrieves the capabliities bitfield from the algorithm's interface.
-+ *
-+ * \param[in] iface Pointer to the alogrithm interface
-+ *
-+ */
-+ vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface);
-+
-+
-+ /*!\brief Control algorithm
-+ *
-+ * This function is used to exchange algorithm specific data with the codec
-+ * instance. This can be used to implement features specific to a particular
-+ * algorithm.
-+ *
-+ * This wrapper function dispatches the request to the helper function
-+ * associated with the given ctrl_id. It tries to call this function
-+ * transparantly, but will return #VPX_CODEC_ERROR if the request could not
-+ * be dispatched.
-+ *
-+ * Note that this function should not be used directly. Call the
-+ * #vpx_codec_control wrapper macro instead.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] ctrl_id Algorithm specific control identifier
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The control request was processed.
-+ * \retval #VPX_CODEC_ERROR
-+ * The control request was not processed.
-+ * \retval #VPX_CODEC_INVALID_PARAM
-+ * The data was not valid.
-+ */
-+ vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx,
-+ int ctrl_id,
-+ ...);
-+#if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS
-+# define vpx_codec_control(ctx,id,data) vpx_codec_control_(ctx,id,data)
-+# define VPX_CTRL_USE_TYPE(id, typ)
-+# define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ)
-+# define VPX_CTRL_VOID(id, typ)
-+
-+#else
-+ /*!\brief vpx_codec_control wrapper macro
-+ *
-+ * This macro allows for type safe conversions across the variadic parameter
-+ * to vpx_codec_control_().
-+ *
-+ * \internal
-+ * It works by dispatching the call to the control function through a wrapper
-+ * function named with the id parameter.
-+ */
-+# define vpx_codec_control(ctx,id,data) vpx_codec_control_##id(ctx,id,data)\
-+ /**<\hideinitializer*/
-+
-+
-+ /*!\brief vpx_codec_control type definition macro
-+ *
-+ * This macro allows for type safe conversions across the variadic parameter
-+ * to vpx_codec_control_(). It defines the type of the argument for a given
-+ * control identifier.
-+ *
-+ * \internal
-+ * It defines a static function with
-+ * the correctly typed arguments as a wrapper to the type-unsafe internal
-+ * function.
-+ */
-+# define VPX_CTRL_USE_TYPE(id, typ) \
-+ static vpx_codec_err_t \
-+ vpx_codec_control_##id(vpx_codec_ctx_t*, int, typ) UNUSED;\
-+ \
-+ static vpx_codec_err_t \
-+ vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id, typ data) {\
-+ return vpx_codec_control_(ctx, ctrl_id, data);\
-+ } /**<\hideinitializer*/
-+
-+
-+ /*!\brief vpx_codec_control deprecated type definition macro
-+ *
-+ * Like #VPX_CTRL_USE_TYPE, but indicates that the specified control is
-+ * deprecated and should not be used. Consult the documentation for your
-+ * codec for more information.
-+ *
-+ * \internal
-+ * It defines a static function with the correctly typed arguments as a
-+ * wrapper to the type-unsafe internal function.
-+ */
-+# define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \
-+ DECLSPEC_DEPRECATED static vpx_codec_err_t \
-+ vpx_codec_control_##id(vpx_codec_ctx_t*, int, typ) DEPRECATED UNUSED;\
-+ \
-+ DECLSPEC_DEPRECATED static vpx_codec_err_t \
-+ vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id, typ data) {\
-+ return vpx_codec_control_(ctx, ctrl_id, data);\
-+ } /**<\hideinitializer*/
-+
-+
-+ /*!\brief vpx_codec_control void type definition macro
-+ *
-+ * This macro allows for type safe conversions across the variadic parameter
-+ * to vpx_codec_control_(). It indicates that a given control identifier takes
-+ * no argument.
-+ *
-+ * \internal
-+ * It defines a static function without a data argument as a wrapper to the
-+ * type-unsafe internal function.
-+ */
-+# define VPX_CTRL_VOID(id) \
-+ static vpx_codec_err_t \
-+ vpx_codec_control_##id(vpx_codec_ctx_t*, int) UNUSED;\
-+ \
-+ static vpx_codec_err_t \
-+ vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id) {\
-+ return vpx_codec_control_(ctx, ctrl_id);\
-+ } /**<\hideinitializer*/
-+
-+
-+#endif
-+
-+
-+ /*!\defgroup cap_xma External Memory Allocation Functions
-+ *
-+ * The following functions are required to be implemented for all codecs
-+ * that advertise the VPX_CODEC_CAP_XMA capability. Calling these functions
-+ * for codecs that don't advertise this capability will result in an error
-+ * code being returned, usually VPX_CODEC_INCAPABLE
-+ * @{
-+ */
-+
-+
-+ /*!\brief Memory Map Entry
-+ *
-+ * This structure is used to contain the properties of a memory segment. It
-+ * is populated by the codec in the request phase, and by the calling
-+ * application once the requested allocation has been performed.
-+ */
-+ typedef struct vpx_codec_mmap
-+ {
-+ /*
-+ * The following members are set by the codec when requesting a segment
-+ */
-+ unsigned int id; /**< identifier for the segment's contents */
-+ unsigned long sz; /**< size of the segment, in bytes */
-+ unsigned int align; /**< required alignment of the segment, in bytes */
-+ unsigned int flags; /**< bitfield containing segment properties */
-+#define VPX_CODEC_MEM_ZERO 0x1 /**< Segment must be zeroed by allocation */
-+#define VPX_CODEC_MEM_WRONLY 0x2 /**< Segment need not be readable */
-+#define VPX_CODEC_MEM_FAST 0x4 /**< Place in fast memory, if available */
-+
-+ /* The following members are to be filled in by the allocation function */
-+ void *base; /**< pointer to the allocated segment */
-+ void (*dtor)(struct vpx_codec_mmap *map); /**< destructor to call */
-+ void *priv; /**< allocator private storage */
-+ } vpx_codec_mmap_t; /**< alias for struct vpx_codec_mmap */
-+
-+
-+ /*!\brief Iterate over the list of segments to allocate.
-+ *
-+ * Iterates over a list of the segments to allocate. The iterator storage
-+ * should be initialized to NULL to start the iteration. Iteration is complete
-+ * when this function returns VPX_CODEC_LIST_END. The amount of memory needed to
-+ * allocate is dependant upon the size of the encoded stream. In cases where the
-+ * stream is not available at allocation time, a fixed size must be requested.
-+ * The codec will not be able to operate on streams larger than the size used at
-+ * allocation time.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ * \param[out] mmap Pointer to the memory map entry to populate.
-+ * \param[in,out] iter Iterator storage, initialized to NULL
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The memory map entry was populated.
-+ * \retval #VPX_CODEC_ERROR
-+ * Codec does not support XMA mode.
-+ * \retval #VPX_CODEC_MEM_ERROR
-+ * Unable to determine segment size from stream info.
-+ */
-+ vpx_codec_err_t vpx_codec_get_mem_map(vpx_codec_ctx_t *ctx,
-+ vpx_codec_mmap_t *mmap,
-+ vpx_codec_iter_t *iter);
-+
-+
-+ /*!\brief Identify allocated segments to codec instance
-+ *
-+ * Stores a list of allocated segments in the codec. Segments \ref MUST be
-+ * passed in the order they are read from vpx_codec_get_mem_map(), but may be
-+ * passed in groups of any size. Segments \ref MUST be set only once. The
-+ * allocation function \ref MUST ensure that the vpx_codec_mmap_t::base member
-+ * is non-NULL. If the segment requires cleanup handling (eg, calling free()
-+ * or close()) then the vpx_codec_mmap_t::dtor member \ref MUST be populated.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ * \param[in] mmaps Pointer to the first memory map entry in the list.
-+ * \param[in] num_maps Number of entries being set at this time
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The segment was stored in the codec context.
-+ * \retval #VPX_CODEC_INCAPABLE
-+ * Codec does not support XMA mode.
-+ * \retval #VPX_CODEC_MEM_ERROR
-+ * Segment base address was not set, or segment was already stored.
-+
-+ */
-+ vpx_codec_err_t vpx_codec_set_mem_map(vpx_codec_ctx_t *ctx,
-+ vpx_codec_mmap_t *mmaps,
-+ unsigned int num_maps);
-+
-+ /*!@} - end defgroup cap_xma*/
-+ /*!@} - end defgroup codec*/
-+
-+
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-diff --git a/vpx/vpx_codec.mk b/vpx/vpx_codec.mk
-new file mode 100644
-index 0000000..4e09b5f
---- /dev/null
-+++ b/vpx/vpx_codec.mk
-@@ -0,0 +1,27 @@
-+##
-+## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+##
-+## Use of this source code is governed by a BSD-style license
-+## that can be found in the LICENSE file in the root of the source
-+## tree. An additional intellectual property rights grant can be found
-+## in the file PATENTS. All contributing project authors may
-+## be found in the AUTHORS file in the root of the source tree.
-+##
-+
-+
-+API_EXPORTS += exports
-+
-+API_SRCS-$(CONFIG_DECODERS) += src/vpx_decoder.c
-+API_SRCS-$(CONFIG_DECODERS) += src/vpx_decoder_compat.c
-+API_SRCS-$(CONFIG_DECODERS) += vpx_decoder.h
-+API_SRCS-$(CONFIG_DECODERS) += vpx_decoder_compat.h
-+API_SRCS-$(CONFIG_ENCODERS) += src/vpx_encoder.c
-+API_SRCS-$(CONFIG_ENCODERS) += vpx_encoder.h
-+API_SRCS-yes += internal/vpx_codec_internal.h
-+API_SRCS-yes += src/vpx_codec.c
-+API_SRCS-yes += src/vpx_image.c
-+API_SRCS-yes += vpx_codec.h
-+API_SRCS-yes += vpx_codec.mk
-+API_SRCS-yes += vpx_codec_impl_bottom.h
-+API_SRCS-yes += vpx_codec_impl_top.h
-+API_SRCS-yes += vpx_image.h
-diff --git a/vpx/vpx_codec_impl_bottom.h b/vpx/vpx_codec_impl_bottom.h
-new file mode 100644
-index 0000000..02bf8b3
---- /dev/null
-+++ b/vpx/vpx_codec_impl_bottom.h
-@@ -0,0 +1,19 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*
-+ * This file is to be included at the bottom of the header files defining the
-+ * interface to individual codecs and contains matching blocks to those defined
-+ * in vpx_codec_impl_top.h
-+ */
-+#ifdef __cplusplus
-+}
-+#endif
-diff --git a/vpx/vpx_codec_impl_top.h b/vpx/vpx_codec_impl_top.h
-new file mode 100644
-index 0000000..fce14c1
---- /dev/null
-+++ b/vpx/vpx_codec_impl_top.h
-@@ -0,0 +1,19 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*
-+ * This file is to be included at the top of the header files defining the
-+ * interface to individual codecs and contains various workarounds common
-+ * to all codec implementations.
-+ */
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-diff --git a/vpx/vpx_decoder.h b/vpx/vpx_decoder.h
-new file mode 100644
-index 0000000..865f5df
---- /dev/null
-+++ b/vpx/vpx_decoder.h
-@@ -0,0 +1,317 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\defgroup decoder Decoder Algorithm Interface
-+ * \ingroup codec
-+ * This abstraction allows applications using this decoder to easily support
-+ * multiple video formats with minimal code duplication. This section describes
-+ * the interface common to all decoders.
-+ * @{
-+ */
-+
-+/*!\file vpx_decoder.h
-+ * \brief Describes the decoder algorithm interface to applications.
-+ *
-+ * This file describes the interface between an application and a
-+ * video decoder algorithm.
-+ *
-+ */
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#ifndef VPX_DECODER_H
-+#define VPX_DECODER_H
-+#include "vpx_codec.h"
-+
-+ /*!\brief Current ABI version number
-+ *
-+ * \internal
-+ * If this file is altered in any way that changes the ABI, this value
-+ * must be bumped. Examples include, but are not limited to, changing
-+ * types, removing or reassigning enums, adding/removing/rearranging
-+ * fields to structures
-+ */
-+#define VPX_DECODER_ABI_VERSION (2 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/
-+
-+ /*! \brief Decoder capabilities bitfield
-+ *
-+ * Each decoder advertises the capabilities it supports as part of its
-+ * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces
-+ * or functionality, and are not required to be supported by a decoder.
-+ *
-+ * The available flags are specifiedby VPX_CODEC_CAP_* defines.
-+ */
-+#define VPX_CODEC_CAP_PUT_SLICE 0x10000 /**< Will issue put_slice callbacks */
-+#define VPX_CODEC_CAP_PUT_FRAME 0x20000 /**< Will issue put_frame callbacks */
-+#define VPX_CODEC_CAP_POSTPROC 0x40000 /**< Can postprocess decoded frame */
-+
-+ /*! \brief Initialization-time Feature Enabling
-+ *
-+ * Certain codec features must be known at initialization time, to allow for
-+ * proper memory allocation.
-+ *
-+ * The available flags are specified by VPX_CODEC_USE_* defines.
-+ */
-+#define VPX_CODEC_USE_POSTPROC 0x10000 /**< Postprocess decoded frame */
-+
-+ /*!\brief Stream properties
-+ *
-+ * This structure is used to query or set properties of the decoded
-+ * stream. Algorithms may extend this structure with data specific
-+ * to their bitstream by setting the sz member appropriately.
-+ */
-+ typedef struct vpx_codec_stream_info
-+ {
-+ unsigned int sz; /**< Size of this structure */
-+ unsigned int w; /**< Width (or 0 for unknown/default) */
-+ unsigned int h; /**< Height (or 0 for unknown/default) */
-+ unsigned int is_kf; /**< Current frame is a keyframe */
-+ } vpx_codec_stream_info_t;
-+
-+ /* REQUIRED FUNCTIONS
-+ *
-+ * The following functions are required to be implemented for all decoders.
-+ * They represent the base case functionality expected of all decoders.
-+ */
-+
-+
-+ /*!\brief Initialization Configurations
-+ *
-+ * This structure is used to pass init time configuration options to the
-+ * decoder.
-+ */
-+ typedef struct vpx_codec_dec_cfg
-+ {
-+ unsigned int threads; /**< Maximum number of threads to use, default 1 */
-+ unsigned int w; /**< Width */
-+ unsigned int h; /**< Height */
-+ } vpx_codec_dec_cfg_t; /**< alias for struct vpx_codec_dec_cfg */
-+
-+
-+ /*!\brief Initialize a decoder instance
-+ *
-+ * Initializes a decoder context using the given interface. Applications
-+ * should call the vpx_codec_dec_init convenience macro instead of this
-+ * function directly, to ensure that the ABI version number parameter
-+ * is properly initialized.
-+ *
-+ * In XMA mode (activated by setting VPX_CODEC_USE_XMA in the flags
-+ * parameter), the storage pointed to by the cfg parameter must be
-+ * kept readable and stable until all memory maps have been set.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ * \param[in] iface Pointer to the alogrithm interface to use.
-+ * \param[in] cfg Configuration to use, if known. May be NULL.
-+ * \param[in] flags Bitfield of VPX_CODEC_USE_* flags
-+ * \param[in] ver ABI version number. Must be set to
-+ * VPX_DECODER_ABI_VERSION
-+ * \retval #VPX_CODEC_OK
-+ * The decoder algorithm initialized.
-+ * \retval #VPX_CODEC_MEM_ERROR
-+ * Memory allocation failed.
-+ */
-+ vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx,
-+ vpx_codec_iface_t *iface,
-+ vpx_codec_dec_cfg_t *cfg,
-+ vpx_codec_flags_t flags,
-+ int ver);
-+
-+ /*!\brief Convenience macro for vpx_codec_dec_init_ver()
-+ *
-+ * Ensures the ABI version parameter is properly set.
-+ */
-+#define vpx_codec_dec_init(ctx, iface, cfg, flags) \
-+ vpx_codec_dec_init_ver(ctx, iface, cfg, flags, VPX_DECODER_ABI_VERSION)
-+
-+
-+ /*!\brief Parse stream info from a buffer
-+ *
-+ * Performs high level parsing of the bitstream. Construction of a decoder
-+ * context is not necessary. Can be used to determine if the bitstream is
-+ * of the proper format, and to extract information from the stream.
-+ *
-+ * \param[in] iface Pointer to the alogrithm interface
-+ * \param[in] data Pointer to a block of data to parse
-+ * \param[in] data_sz Size of the data buffer
-+ * \param[in,out] si Pointer to stream info to update. The size member
-+ * \ref MUST be properly initialized, but \ref MAY be
-+ * clobbered by the algorithm. This parameter \ref MAY
-+ * be NULL.
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * Bitstream is parsable and stream information updated
-+ */
-+ vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface,
-+ const uint8_t *data,
-+ unsigned int data_sz,
-+ vpx_codec_stream_info_t *si);
-+
-+
-+ /*!\brief Return information about the current stream.
-+ *
-+ * Returns information about the stream that has been parsed during decoding.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in,out] si Pointer to stream info to update. The size member
-+ * \ref MUST be properly initialized, but \ref MAY be
-+ * clobbered by the algorithm. This parameter \ref MAY
-+ * be NULL.
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * Bitstream is parsable and stream information updated
-+ */
-+ vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx,
-+ vpx_codec_stream_info_t *si);
-+
-+
-+ /*!\brief Decode data
-+ *
-+ * Processes a buffer of coded data. If the processing results in a new
-+ * decoded frame becoming available, PUT_SLICE and PUT_FRAME events may be
-+ * generated, as appropriate. Encoded data \ref MUST be passed in DTS (decode
-+ * time stamp) order. Frames produced will always be in PTS (presentation
-+ * time stamp) order.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] data Pointer to this block of new coded data. If
-+ * NULL, a VPX_CODEC_CB_PUT_FRAME event is posted
-+ * for the previously decoded frame.
-+ * \param[in] data_sz Size of the coded data, in bytes.
-+ * \param[in] user_priv Application specific data to associate with
-+ * this frame.
-+ * \param[in] deadline Soft deadline the decoder should attempt to meet,
-+ * in us. Set to zero for unlimited.
-+ *
-+ * \return Returns #VPX_CODEC_OK if the coded data was processed completely
-+ * and future pictures can be decoded without error. Otherwise,
-+ * see the descriptions of the other error codes in ::vpx_codec_err_t
-+ * for recoverability capabilities.
-+ */
-+ vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx,
-+ const uint8_t *data,
-+ unsigned int data_sz,
-+ void *user_priv,
-+ long deadline);
-+
-+
-+ /*!\brief Decoded frames iterator
-+ *
-+ * Iterates over a list of the frames available for display. The iterator
-+ * storage should be initialized to NULL to start the iteration. Iteration is
-+ * complete when this function returns NULL.
-+ *
-+ * The list of available frames becomes valid upon completion of the
-+ * vpx_codec_decode call, and remains valid until the next call to vpx_codec_decode.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in,out] iter Iterator storage, initialized to NULL
-+ *
-+ * \return Returns a pointer to an image, if one is ready for display. Frames
-+ * produced will always be in PTS (presentation time stamp) order.
-+ */
-+ vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx,
-+ vpx_codec_iter_t *iter);
-+
-+
-+ /*!\defgroup cap_put_frame Frame-Based Decoding Functions
-+ *
-+ * The following functions are required to be implemented for all decoders
-+ * that advertise the VPX_CODEC_CAP_PUT_FRAME capability. Calling these functions
-+ * for codecs that don't advertise this capability will result in an error
-+ * code being returned, usually VPX_CODEC_ERROR
-+ * @{
-+ */
-+
-+ /*!\brief put frame callback prototype
-+ *
-+ * This callback is invoked by the decoder to notify the application of
-+ * the availability of decoded image data.
-+ */
-+ typedef void (*vpx_codec_put_frame_cb_fn_t)(void *user_priv,
-+ const vpx_image_t *img);
-+
-+
-+ /*!\brief Register for notification of frame completion.
-+ *
-+ * Registers a given function to be called when a decoded frame is
-+ * available.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] cb Pointer to the callback function
-+ * \param[in] user_priv User's private data
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * Callback successfully registered.
-+ * \retval #VPX_CODEC_ERROR
-+ * Decoder context not initialized, or algorithm not capable of
-+ * posting slice completion.
-+ */
-+ vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx,
-+ vpx_codec_put_frame_cb_fn_t cb,
-+ void *user_priv);
-+
-+
-+ /*!@} - end defgroup cap_put_frame */
-+
-+ /*!\defgroup cap_put_slice Slice-Based Decoding Functions
-+ *
-+ * The following functions are required to be implemented for all decoders
-+ * that advertise the VPX_CODEC_CAP_PUT_SLICE capability. Calling these functions
-+ * for codecs that don't advertise this capability will result in an error
-+ * code being returned, usually VPX_CODEC_ERROR
-+ * @{
-+ */
-+
-+ /*!\brief put slice callback prototype
-+ *
-+ * This callback is invoked by the decoder to notify the application of
-+ * the availability of partially decoded image data. The
-+ */
-+ typedef void (*vpx_codec_put_slice_cb_fn_t)(void *user_priv,
-+ const vpx_image_t *img,
-+ const vpx_image_rect_t *valid,
-+ const vpx_image_rect_t *update);
-+
-+
-+ /*!\brief Register for notification of slice completion.
-+ *
-+ * Registers a given function to be called when a decoded slice is
-+ * available.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] cb Pointer to the callback function
-+ * \param[in] user_priv User's private data
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * Callback successfully registered.
-+ * \retval #VPX_CODEC_ERROR
-+ * Decoder context not initialized, or algorithm not capable of
-+ * posting slice completion.
-+ */
-+ vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx,
-+ vpx_codec_put_slice_cb_fn_t cb,
-+ void *user_priv);
-+
-+
-+ /*!@} - end defgroup cap_put_slice*/
-+
-+ /*!@} - end defgroup decoder*/
-+
-+#endif
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
-+#include "vpx_decoder_compat.h"
-+#endif
-diff --git a/vpx/vpx_decoder_compat.h b/vpx/vpx_decoder_compat.h
-new file mode 100644
-index 0000000..e66a096
---- /dev/null
-+++ b/vpx/vpx_decoder_compat.h
-@@ -0,0 +1,587 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\defgroup decoder Common Decoder Algorithm Interface
-+ * This abstraction allows applications using this decoder to easily support
-+ * multiple video formats with minimal code duplication. This section describes
-+ * the interface common to all codecs.
-+ * @{
-+ */
-+
-+/*!\file vpx_decoder_compat.h
-+ * \brief Provides a compatibility layer between version 1 and 2 of this API.
-+ *
-+ * This interface has been deprecated. Only existing code should make use
-+ * of this interface, and therefore, it is only thinly documented. Existing
-+ * code should be ported to the vpx_codec_* API.
-+ */
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#ifndef VPX_DECODER_COMPAT_H
-+#define VPX_DECODER_COMPAT_H
-+
-+ /*!\brief Decoder algorithm return codes */
-+ typedef enum {
-+ /*!\brief Operation completed without error */
-+ VPX_DEC_OK = VPX_CODEC_OK,
-+
-+ /*!\brief Unspecified error */
-+ VPX_DEC_ERROR = VPX_CODEC_ERROR,
-+
-+ /*!\brief Memory operation failed */
-+ VPX_DEC_MEM_ERROR = VPX_CODEC_MEM_ERROR,
-+
-+ /*!\brief ABI version mismatch */
-+ VPX_DEC_ABI_MISMATCH = VPX_CODEC_ABI_MISMATCH,
-+
-+ /*!\brief The given bitstream is not supported.
-+ *
-+ * The bitstream was unable to be parsed at the highest level. The decoder
-+ * is unable to proceed. This error \ref SHOULD be treated as fatal to the
-+ * stream. */
-+ VPX_DEC_UNSUP_BITSTREAM = VPX_CODEC_UNSUP_BITSTREAM,
-+
-+ /*!\brief Encoded bitstream uses an unsupported feature
-+ *
-+ * The decoder does not implement a feature required by the encoder. This
-+ * return code should only be used for features that prevent future
-+ * pictures from being properly decoded. This error \ref MAY be treated as
-+ * fatal to the stream or \ref MAY be treated as fatal to the current GOP.
-+ */
-+ VPX_DEC_UNSUP_FEATURE = VPX_CODEC_UNSUP_FEATURE,
-+
-+ /*!\brief The coded data for this stream is corrupt or incomplete
-+ *
-+ * There was a problem decoding the current frame. This return code
-+ * should only be used for failures that prevent future pictures from
-+ * being properly decoded. This error \ref MAY be treated as fatal to the
-+ * stream or \ref MAY be treated as fatal to the current GOP. If decoding
-+ * is continued for the current GOP, artifacts may be present.
-+ */
-+ VPX_DEC_CORRUPT_FRAME = VPX_CODEC_CORRUPT_FRAME,
-+
-+ /*!\brief An application-supplied parameter is not valid.
-+ *
-+ */
-+ VPX_DEC_INVALID_PARAM = VPX_CODEC_INVALID_PARAM,
-+
-+ /*!\brief An iterator reached the end of list.
-+ *
-+ */
-+ VPX_DEC_LIST_END = VPX_CODEC_LIST_END,
-+
-+ }
-+ vpx_dec_err_t;
-+
-+ /*! \brief Decoder capabilities bitfield
-+ *
-+ * Each decoder advertises the capabilities it supports as part of its
-+ * ::vpx_dec_iface_t interface structure. Capabilities are extra interfaces
-+ * or functionality, and are not required to be supported by a decoder.
-+ *
-+ * The available flags are specifiedby VPX_DEC_CAP_* defines.
-+ */
-+ typedef int vpx_dec_caps_t;
-+#define VPX_DEC_CAP_PUT_SLICE 0x0001 /**< Will issue put_slice callbacks */
-+#define VPX_DEC_CAP_PUT_FRAME 0x0002 /**< Will issue put_frame callbacks */
-+#define VPX_DEC_CAP_XMA 0x0004 /**< Supports e_xternal Memory Allocation */
-+
-+ /*!\brief Stream properties
-+ *
-+ * This structure is used to query or set properties of the decoded
-+ * stream. Algorithms may extend this structure with data specific
-+ * to their bitstream by setting the sz member appropriately.
-+ */
-+#if 1
-+ typedef vpx_codec_stream_info_t vpx_dec_stream_info_t;
-+#else
-+ typedef struct
-+ {
-+ unsigned int sz; /**< Size of this structure */
-+ unsigned int w; /**< Width (or 0 for unknown/default) */
-+ unsigned int h; /**< Height (or 0 for unknown/default) */
-+ unsigned int is_kf; /**< Current frame is a keyframe */
-+ } vpx_dec_stream_info_t;
-+#endif
-+
-+
-+ /*!\brief Decoder interface structure.
-+ *
-+ * Contains function pointers and other data private to the decoder
-+ * implementation. This structure is opaque to the application.
-+ */
-+ typedef const struct vpx_codec_iface vpx_dec_iface_t;
-+ typedef struct vpx_codec_priv vpx_dec_priv_t;
-+
-+ /*!\brief Iterator
-+ *
-+ * Opaque storage used for iterating over lists.
-+ */
-+ typedef vpx_codec_iter_t vpx_dec_iter_t;
-+
-+ /*!\brief Decoder context structure
-+ *
-+ * All decoders \ref MUST support this context structure fully. In general,
-+ * this data should be considered private to the decoder algorithm, and
-+ * not be manipulated or examined by the calling application. Applications
-+ * may reference the 'name' member to get a printable description of the
-+ * algorithm.
-+ */
-+#if 1
-+ typedef vpx_codec_ctx_t vpx_dec_ctx_t;
-+#else
-+ typedef struct
-+ {
-+ const char *name; /**< Printable interface name */
-+ vpx_dec_iface_t *iface; /**< Interface pointers */
-+ vpx_dec_err_t err; /**< Last returned error */
-+ vpx_dec_priv_t *priv; /**< Algorithm private storage */
-+ } vpx_dec_ctx_t;
-+#endif
-+
-+
-+ /*!\brief Return the build configuration
-+ *
-+ * Returns a printable string containing an encoded version of the build
-+ * configuration. This may be useful to vpx support.
-+ *
-+ */
-+ const char *vpx_dec_build_config(void) DEPRECATED;
-+
-+ /*!\brief Return the name for a given interface
-+ *
-+ * Returns a human readable string for name of the given decoder interface.
-+ *
-+ * \param[in] iface Interface pointer
-+ *
-+ */
-+ const char *vpx_dec_iface_name(vpx_dec_iface_t *iface) DEPRECATED;
-+
-+
-+ /*!\brief Convert error number to printable string
-+ *
-+ * Returns a human readable string for the last error returned by the
-+ * algorithm. The returned error will be one line and will not contain
-+ * any newline characters.
-+ *
-+ *
-+ * \param[in] err Error number.
-+ *
-+ */
-+ const char *vpx_dec_err_to_string(vpx_dec_err_t err) DEPRECATED;
-+
-+
-+ /*!\brief Retrieve error synopsis for decoder context
-+ *
-+ * Returns a human readable string for the last error returned by the
-+ * algorithm. The returned error will be one line and will not contain
-+ * any newline characters.
-+ *
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ *
-+ */
-+ const char *vpx_dec_error(vpx_dec_ctx_t *ctx) DEPRECATED;
-+
-+
-+ /*!\brief Retrieve detailed error information for decoder context
-+ *
-+ * Returns a human readable string providing detailed information about
-+ * the last error.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ *
-+ * \retval NULL
-+ * No detailed information is available.
-+ */
-+ const char *vpx_dec_error_detail(vpx_dec_ctx_t *ctx) DEPRECATED;
-+
-+
-+ /* REQUIRED FUNCTIONS
-+ *
-+ * The following functions are required to be implemented for all decoders.
-+ * They represent the base case functionality expected of all decoders.
-+ */
-+
-+
-+ /*!\brief Initialize a decoder instance
-+ *
-+ * Initializes a decoder context using the given interface. Applications
-+ * should call the vpx_dec_init convenience macro instead of this
-+ * function directly, to ensure that the ABI version number parameter
-+ * is properly initialized.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ * \param[in] iface Pointer to the alogrithm interface to use.
-+ * \param[in] ver ABI version number. Must be set to
-+ * VPX_DECODER_ABI_VERSION
-+ * \retval #VPX_DEC_OK
-+ * The decoder algorithm initialized.
-+ * \retval #VPX_DEC_MEM_ERROR
-+ * Memory allocation failed.
-+ */
-+ vpx_dec_err_t vpx_dec_init_ver(vpx_dec_ctx_t *ctx,
-+ vpx_dec_iface_t *iface,
-+ int ver) DEPRECATED;
-+#define vpx_dec_init(ctx, iface) \
-+ vpx_dec_init_ver(ctx, iface, VPX_DECODER_ABI_VERSION)
-+
-+
-+ /*!\brief Destroy a decoder instance
-+ *
-+ * Destroys a decoder context, freeing any associated memory buffers.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ *
-+ * \retval #VPX_DEC_OK
-+ * The decoder algorithm initialized.
-+ * \retval #VPX_DEC_MEM_ERROR
-+ * Memory allocation failed.
-+ */
-+ vpx_dec_err_t vpx_dec_destroy(vpx_dec_ctx_t *ctx) DEPRECATED;
-+
-+
-+ /*!\brief Get the capabilities of an algorithm.
-+ *
-+ * Retrieves the capabliities bitfield from the algorithm's interface.
-+ *
-+ * \param[in] iface Pointer to the alogrithm interface
-+ *
-+ */
-+ vpx_dec_caps_t vpx_dec_get_caps(vpx_dec_iface_t *iface) DEPRECATED;
-+
-+
-+ /*!\brief Parse stream info from a buffer
-+ *
-+ * Performs high level parsing of the bitstream. Construction of a decoder
-+ * context is not necessary. Can be used to determine if the bitstream is
-+ * of the proper format, and to extract information from the stream.
-+ *
-+ * \param[in] iface Pointer to the alogrithm interface
-+ * \param[in] data Pointer to a block of data to parse
-+ * \param[in] data_sz Size of the data buffer
-+ * \param[in,out] si Pointer to stream info to update. The size member
-+ * \ref MUST be properly initialized, but \ref MAY be
-+ * clobbered by the algorithm. This parameter \ref MAY
-+ * be NULL.
-+ *
-+ * \retval #VPX_DEC_OK
-+ * Bitstream is parsable and stream information updated
-+ */
-+ vpx_dec_err_t vpx_dec_peek_stream_info(vpx_dec_iface_t *iface,
-+ const uint8_t *data,
-+ unsigned int data_sz,
-+ vpx_dec_stream_info_t *si) DEPRECATED;
-+
-+
-+ /*!\brief Return information about the current stream.
-+ *
-+ * Returns information about the stream that has been parsed during decoding.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in,out] si Pointer to stream info to update. The size member
-+ * \ref MUST be properly initialized, but \ref MAY be
-+ * clobbered by the algorithm. This parameter \ref MAY
-+ * be NULL.
-+ *
-+ * \retval #VPX_DEC_OK
-+ * Bitstream is parsable and stream information updated
-+ */
-+ vpx_dec_err_t vpx_dec_get_stream_info(vpx_dec_ctx_t *ctx,
-+ vpx_dec_stream_info_t *si) DEPRECATED;
-+
-+
-+ /*!\brief Control algorithm
-+ *
-+ * This function is used to exchange algorithm specific data with the decoder
-+ * instance. This can be used to implement features specific to a particular
-+ * algorithm.
-+ *
-+ * This wrapper function dispatches the request to the helper function
-+ * associated with the given ctrl_id. It tries to call this function
-+ * transparantly, but will return #VPX_DEC_ERROR if the request could not
-+ * be dispatched.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] ctrl_id Algorithm specific control identifier
-+ * \param[in,out] data Data to exchange with algorithm instance.
-+ *
-+ * \retval #VPX_DEC_OK
-+ * The control request was processed.
-+ * \retval #VPX_DEC_ERROR
-+ * The control request was not processed.
-+ * \retval #VPX_DEC_INVALID_PARAM
-+ * The data was not valid.
-+ */
-+ vpx_dec_err_t vpx_dec_control(vpx_dec_ctx_t *ctx,
-+ int ctrl_id,
-+ void *data) DEPRECATED;
-+
-+ /*!\brief Decode data
-+ *
-+ * Processes a buffer of coded data. If the processing results in a new
-+ * decoded frame becoming available, #VPX_DEC_CB_PUT_SLICE and
-+ * #VPX_DEC_CB_PUT_FRAME events may be generated, as appropriate. Encoded data
-+ * \ref MUST be passed in DTS (decode time stamp) order. Frames produced will
-+ * always be in PTS (presentation time stamp) order.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] data Pointer to this block of new coded data. If
-+ * NULL, a VPX_DEC_CB_PUT_FRAME event is posted
-+ * for the previously decoded frame.
-+ * \param[in] data_sz Size of the coded data, in bytes.
-+ * \param[in] user_priv Application specific data to associate with
-+ * this frame.
-+ * \param[in] rel_pts PTS relative to the previous frame, in us. If
-+ * unknown or unavailable, set to zero.
-+ *
-+ * \return Returns #VPX_DEC_OK if the coded data was processed completely
-+ * and future pictures can be decoded without error. Otherwise,
-+ * see the descriptions of the other error codes in ::vpx_dec_err_t
-+ * for recoverability capabilities.
-+ */
-+ vpx_dec_err_t vpx_dec_decode(vpx_dec_ctx_t *ctx,
-+ uint8_t *data,
-+ unsigned int data_sz,
-+ void *user_priv,
-+ int rel_pts) DEPRECATED;
-+
-+
-+ /*!\brief Decoded frames iterator
-+ *
-+ * Iterates over a list of the frames available for display. The iterator
-+ * storage should be initialized to NULL to start the iteration. Iteration is
-+ * complete when this function returns NULL.
-+ *
-+ * The list of available frames becomes valid upon completion of the
-+ * vpx_dec_decode call, and remains valid until the next call to vpx_dec_decode.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in out] iter Iterator storage, initialized to NULL
-+ *
-+ * \return Returns a pointer to an image, if one is ready for display. Frames
-+ * produced will always be in PTS (presentation time stamp) order.
-+ */
-+ vpx_image_t *vpx_dec_get_frame(vpx_dec_ctx_t *ctx,
-+ vpx_dec_iter_t *iter) DEPRECATED;
-+
-+
-+ /*!\defgroup cap_put_frame Frame-Based Decoding Functions
-+ *
-+ * The following functions are required to be implemented for all decoders
-+ * that advertise the VPX_DEC_CAP_PUT_FRAME capability. Calling these functions
-+ * for codecs that don't advertise this capability will result in an error
-+ * code being returned, usually VPX_DEC_ERROR
-+ * @{
-+ */
-+
-+ /*!\brief put frame callback prototype
-+ *
-+ * This callback is invoked by the decoder to notify the application of
-+ * the availability of decoded image data.
-+ */
-+ typedef void (*vpx_dec_put_frame_cb_fn_t)(void *user_priv,
-+ const vpx_image_t *img);
-+
-+
-+ /*!\brief Register for notification of frame completion.
-+ *
-+ * Registers a given function to be called when a decoded frame is
-+ * available.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] cb Pointer to the callback function
-+ * \param[in] user_priv User's private data
-+ *
-+ * \retval #VPX_DEC_OK
-+ * Callback successfully registered.
-+ * \retval #VPX_DEC_ERROR
-+ * Decoder context not initialized, or algorithm not capable of
-+ * posting slice completion.
-+ */
-+ vpx_dec_err_t vpx_dec_register_put_frame_cb(vpx_dec_ctx_t *ctx,
-+ vpx_dec_put_frame_cb_fn_t cb,
-+ void *user_priv) DEPRECATED;
-+
-+
-+ /*!@} - end defgroup cap_put_frame */
-+
-+ /*!\defgroup cap_put_slice Slice-Based Decoding Functions
-+ *
-+ * The following functions are required to be implemented for all decoders
-+ * that advertise the VPX_DEC_CAP_PUT_SLICE capability. Calling these functions
-+ * for codecs that don't advertise this capability will result in an error
-+ * code being returned, usually VPX_DEC_ERROR
-+ * @{
-+ */
-+
-+ /*!\brief put slice callback prototype
-+ *
-+ * This callback is invoked by the decoder to notify the application of
-+ * the availability of partially decoded image data. The
-+ */
-+ typedef void (*vpx_dec_put_slice_cb_fn_t)(void *user_priv,
-+ const vpx_image_t *img,
-+ const vpx_image_rect_t *valid,
-+ const vpx_image_rect_t *update);
-+
-+
-+ /*!\brief Register for notification of slice completion.
-+ *
-+ * Registers a given function to be called when a decoded slice is
-+ * available.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] cb Pointer to the callback function
-+ * \param[in] user_priv User's private data
-+ *
-+ * \retval #VPX_DEC_OK
-+ * Callback successfully registered.
-+ * \retval #VPX_DEC_ERROR
-+ * Decoder context not initialized, or algorithm not capable of
-+ * posting slice completion.
-+ */
-+ vpx_dec_err_t vpx_dec_register_put_slice_cb(vpx_dec_ctx_t *ctx,
-+ vpx_dec_put_slice_cb_fn_t cb,
-+ void *user_priv) DEPRECATED;
-+
-+
-+ /*!@} - end defgroup cap_put_slice*/
-+
-+ /*!\defgroup cap_xma External Memory Allocation Functions
-+ *
-+ * The following functions are required to be implemented for all decoders
-+ * that advertise the VPX_DEC_CAP_XMA capability. Calling these functions
-+ * for codecs that don't advertise this capability will result in an error
-+ * code being returned, usually VPX_DEC_ERROR
-+ * @{
-+ */
-+
-+ /*!\brief Memory Map Entry
-+ *
-+ * This structure is used to contain the properties of a memory segment. It
-+ * is populated by the decoder in the request phase, and by the calling
-+ * application once the requested allocation has been performed.
-+ */
-+#if 1
-+#define VPX_DEC_MEM_ZERO 0x1 /**< Segment must be zeroed by allocation */
-+#define VPX_DEC_MEM_WRONLY 0x2 /**< Segment need not be readable */
-+#define VPX_DEC_MEM_FAST 0x4 /**< Place in fast memory, if available */
-+ typedef struct vpx_codec_mmap vpx_dec_mmap_t;
-+#else
-+ typedef struct vpx_dec_mmap
-+ {
-+ /*
-+ * The following members are set by the codec when requesting a segment
-+ */
-+ unsigned int id; /**< identifier for the segment's contents */
-+ unsigned long sz; /**< size of the segment, in bytes */
-+ unsigned int align; /**< required alignment of the segment, in bytes */
-+ unsigned int flags; /**< bitfield containing segment properties */
-+#define VPX_DEC_MEM_ZERO 0x1 /**< Segment must be zeroed by allocation */
-+#define VPX_DEC_MEM_WRONLY 0x2 /**< Segment need not be readable */
-+#define VPX_DEC_MEM_FAST 0x4 /**< Place in fast memory, if available */
-+
-+ /* The following members are to be filled in by the allocation function */
-+ void *base; /**< pointer to the allocated segment */
-+ void (*dtor)(struct vpx_dec_mmap *map); /**< destructor to call */
-+ void *priv; /**< allocator private storage */
-+ } vpx_dec_mmap_t;
-+#endif
-+
-+ /*!\brief Initialize a decoder instance in external allocation mode
-+ *
-+ * Initializes a decoder context using the given interface. Applications
-+ * should call the vpx_dec_xma_init convenience macro instead of this
-+ * function directly, to ensure that the ABI version number parameter
-+ * is properly initialized.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ * \param[in] iface Pointer to the alogrithm interface to use.
-+ * \param[in] ver ABI version number. Must be set to
-+ * VPX_DECODER_ABI_VERSION
-+ * \retval #VPX_DEC_OK
-+ * The decoder algorithm initialized.
-+ * \retval #VPX_DEC_ERROR
-+ * Decoder does not support XMA mode.
-+ */
-+ vpx_dec_err_t vpx_dec_xma_init_ver(vpx_dec_ctx_t *ctx,
-+ vpx_dec_iface_t *iface,
-+ int ver) DEPRECATED;
-+#define vpx_dec_xma_init(ctx, iface) \
-+ vpx_dec_xma_init_ver(ctx, iface, VPX_DECODER_ABI_VERSION)
-+
-+
-+ /*!\brief Iterate over the list of segments to allocate.
-+ *
-+ * Iterates over a list of the segments to allocate. The iterator storage
-+ * should be initialized to NULL to start the iteration. Iteration is complete
-+ * when this function returns VPX_DEC_LIST_END. The amount of memory needed to
-+ * allocate is dependant upon the size of the encoded stream. This means that
-+ * the stream info structure must be known at allocation time. It can be
-+ * populated with the vpx_dec_peek_stream_info() function. In cases where the
-+ * stream to be decoded is not available at allocation time, a fixed size must
-+ * be requested. The decoder will not be able to decode streams larger than
-+ * the size used at allocation time.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ * \param[out] mmap Pointer to the memory map entry to populate.
-+ * \param[in] si Pointer to the stream info.
-+ * \param[in out] iter Iterator storage, initialized to NULL
-+ *
-+ * \retval #VPX_DEC_OK
-+ * The memory map entry was populated.
-+ * \retval #VPX_DEC_ERROR
-+ * Decoder does not support XMA mode.
-+ * \retval #VPX_DEC_MEM_ERROR
-+ * Unable to determine segment size from stream info.
-+ */
-+ vpx_dec_err_t vpx_dec_get_mem_map(vpx_dec_ctx_t *ctx,
-+ vpx_dec_mmap_t *mmap,
-+ const vpx_dec_stream_info_t *si,
-+ vpx_dec_iter_t *iter) DEPRECATED;
-+
-+
-+ /*!\brief Identify allocated segments to decoder instance
-+ *
-+ * Stores a list of allocated segments in the decoder. Segments \ref MUST be
-+ * passed in the order they are read from vpx_dec_get_mem_map(), but may be
-+ * passed in groups of any size. Segments \ref MUST be set only once. The
-+ * allocation function \ref MUST ensure that the vpx_dec_mmap_t::base member
-+ * is non-NULL. If the segment requires cleanup handling (eg, calling free()
-+ * or close()) then the vpx_dec_mmap_t::dtor member \ref MUST be populated.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ * \param[in] mmaps Pointer to the first memory map entry in the list.
-+ * \param[in] num_maps Number of entries being set at this time
-+ *
-+ * \retval #VPX_DEC_OK
-+ * The segment was stored in the decoder context.
-+ * \retval #VPX_DEC_ERROR
-+ * Decoder does not support XMA mode.
-+ * \retval #VPX_DEC_MEM_ERROR
-+ * Segment base address was not set, or segment was already stored.
-+
-+ */
-+ vpx_dec_err_t vpx_dec_set_mem_map(vpx_dec_ctx_t *ctx,
-+ vpx_dec_mmap_t *mmaps,
-+ unsigned int num_maps) DEPRECATED;
-+
-+ /*!@} - end defgroup cap_xma*/
-+ /*!@} - end defgroup decoder*/
-+
-+
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-diff --git a/vpx/vpx_encoder.h b/vpx/vpx_encoder.h
-new file mode 100644
-index 0000000..8ad7055
---- /dev/null
-+++ b/vpx/vpx_encoder.h
-@@ -0,0 +1,793 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\defgroup encoder Encoder Algorithm Interface
-+ * \ingroup codec
-+ * This abstraction allows applications using this encoder to easily support
-+ * multiple video formats with minimal code duplication. This section describes
-+ * the interface common to all encoders.
-+ * @{
-+ */
-+
-+/*!\file vpx_encoder.h
-+ * \brief Describes the encoder algorithm interface to applications.
-+ *
-+ * This file describes the interface between an application and a
-+ * video encoder algorithm.
-+ *
-+ */
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#ifndef VPX_ENCODER_H
-+#define VPX_ENCODER_H
-+#include "vpx_codec.h"
-+
-+
-+ /*!\brief Current ABI version number
-+ *
-+ * \internal
-+ * If this file is altered in any way that changes the ABI, this value
-+ * must be bumped. Examples include, but are not limited to, changing
-+ * types, removing or reassigning enums, adding/removing/rearranging
-+ * fields to structures
-+ */
-+#define VPX_ENCODER_ABI_VERSION (2 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/
-+
-+
-+ /*! \brief Encoder capabilities bitfield
-+ *
-+ * Each encoder advertises the capabilities it supports as part of its
-+ * ::vpx_codec_iface_t interface structure. Capabilities are extra
-+ * interfaces or functionality, and are not required to be supported
-+ * by an encoder.
-+ *
-+ * The available flags are specifiedby VPX_CODEC_CAP_* defines.
-+ */
-+#define VPX_CODEC_CAP_PSNR 0x10000 /**< Can issue PSNR packets */
-+
-+
-+ /*! \brief Initialization-time Feature Enabling
-+ *
-+ * Certain codec features must be known at initialization time, to allow
-+ * for proper memory allocation.
-+ *
-+ * The available flags are specified by VPX_CODEC_USE_* defines.
-+ */
-+#define VPX_CODEC_USE_PSNR 0x10000 /**< Calculate PSNR on each frame */
-+
-+
-+ /*!\brief Generic fixed size buffer structure
-+ *
-+ * This structure is able to hold a reference to any fixed size buffer.
-+ */
-+ typedef struct vpx_fixed_buf
-+ {
-+ void *buf; /**< Pointer to the data */
-+ size_t sz; /**< Length of the buffer, in chars */
-+ } vpx_fixed_buf_t; /**< alias for struct vpx_fixed_buf */
-+
-+
-+ /*!\brief Time Stamp Type
-+ *
-+ * An integer, which when multiplied by the stream's time base, provides
-+ * the absolute time of a sample.
-+ */
-+ typedef int64_t vpx_codec_pts_t;
-+
-+
-+ /*!\brief Compressed Frame Flags
-+ *
-+ * This type represents a bitfield containing information about a compressed
-+ * frame that may be useful to an application. The most significant 16 bits
-+ * can be used by an algorithm to provide additional detail, for example to
-+ * support frame types that are codec specific (MPEG-1 D-frames for example)
-+ */
-+ typedef uint32_t vpx_codec_frame_flags_t;
-+#define VPX_FRAME_IS_KEY 0x1 /**< frame is the start of a GOP */
-+#define VPX_FRAME_IS_DROPPABLE 0x2 /**< frame can be dropped without affecting
-+ the stream (no future frame depends on
-+ this one) */
-+#define VPX_FRAME_IS_INVISIBLE 0x4 /**< frame should be decoded but will not
-+ be shown */
-+
-+
-+ /*!\brief Encoder output packet variants
-+ *
-+ * This enumeration lists the different kinds of data packets that can be
-+ * returned by calls to vpx_codec_get_cx_data(). Algorithms \ref MAY
-+ * extend this list to provide additional functionality.
-+ */
-+ enum vpx_codec_cx_pkt_kind
-+ {
-+ VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */
-+ VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */
-+ VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */
-+ VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */
-+ };
-+
-+
-+ /*!\brief Encoder output packet
-+ *
-+ * This structure contains the different kinds of output data the encoder
-+ * may produce while compressing a frame.
-+ */
-+ typedef struct vpx_codec_cx_pkt
-+ {
-+ enum vpx_codec_cx_pkt_kind kind; /**< packet variant */
-+ union
-+ {
-+ struct
-+ {
-+ void *buf; /**< compressed data buffer */
-+ size_t sz; /**< length of compressed data */
-+ vpx_codec_pts_t pts; /**< time stamp to show frame
-+ (in timebase units) */
-+ unsigned long duration; /**< duration to show frame
-+ (in timebase units) */
-+ vpx_codec_frame_flags_t flags; /**< flags for this frame */
-+ } frame; /**< data for compressed frame packet */
-+ struct vpx_fixed_buf twopass_stats; /**< data for two-pass packet */
-+ struct vpx_psnr_pkt
-+ {
-+ unsigned int samples[4]; /**< Number of samples, total/y/u/v */
-+ uint64_t sse[4]; /**< sum squared error, total/y/u/v */
-+ double psnr[4]; /**< PSNR, total/y/u/v */
-+ } psnr; /**< data for PSNR packet */
-+ struct vpx_fixed_buf raw; /**< data for arbitrary packets */
-+
-+ /* This packet size is fixed to allow codecs to extend this
-+ * interface without having to manage storage for raw packets,
-+ * ie if it's smaller than 128 bytes, you can store in the
-+ * packet list directly.
-+ */
-+ char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)]; /**< fixed sz */
-+ } data; /**< packet data */
-+ } vpx_codec_cx_pkt_t; /**< alias for struct vpx_codec_cx_pkt */
-+
-+
-+ /*!\brief Rational Number
-+ *
-+ * This structure holds a fractional value.
-+ */
-+ typedef struct vpx_rational
-+ {
-+ int num; /**< fraction numerator */
-+ int den; /**< fraction denominator */
-+ } vpx_rational_t; /**< alias for struct vpx_rational */
-+
-+
-+ /*!\brief Multi-pass Encoding Pass */
-+ enum vpx_enc_pass
-+ {
-+ VPX_RC_ONE_PASS, /**< Single pass mode */
-+ VPX_RC_FIRST_PASS, /**< First pass of multi-pass mode */
-+ VPX_RC_LAST_PASS, /**< Final pass of multi-pass mode */
-+ };
-+
-+
-+ /*!\brief Rate control mode */
-+ enum vpx_rc_mode
-+ {
-+ VPX_VBR, /**< Variable Bit Rate (VBR) mode */
-+ VPX_CBR /**< Constant Bit Rate (CBR) mode */
-+ };
-+
-+
-+ /*!\brief Keyframe placement mode.
-+ *
-+ * This enumeration determines whether keyframes are placed automatically by
-+ * the encoder or whether this behavior is disabled. Older releases of this
-+ * SDK were implemented such that VPX_KF_FIXED meant keyframes were disabled.
-+ * This name is confusing for this behavior, so the new symbols to be used
-+ * are VPX_KF_AUTO and VPX_KF_DISABLED.
-+ */
-+ enum vpx_kf_mode
-+ {
-+ VPX_KF_FIXED, /**< deprecated, implies VPX_KF_DISABLED */
-+ VPX_KF_AUTO, /**< Encoder determines optimal placement automatically */
-+ VPX_KF_DISABLED = 0 /**< Encoder does not place keyframes. */
-+ };
-+
-+
-+ /*!\brief Encoded Frame Flags
-+ *
-+ * This type indicates a bitfield to be passed to vpx_codec_encode(), defining
-+ * per-frame boolean values. By convention, bits common to all codecs will be
-+ * named VPX_EFLAG_*, and bits specific to an algorithm will be named
-+ * /algo/_eflag_*. The lower order 16 bits are reserved for common use.
-+ */
-+ typedef long vpx_enc_frame_flags_t;
-+#define VPX_EFLAG_FORCE_KF (1<<0) /**< Force this frame to be a keyframe */
-+
-+
-+ /*!\brief Encoder configuration structure
-+ *
-+ * This structure contains the encoder settings that have common representations
-+ * across all codecs. This doesn't imply that all codecs support all features,
-+ * however.
-+ */
-+ typedef struct vpx_codec_enc_cfg
-+ {
-+ /*
-+ * generic settings (g)
-+ */
-+
-+ /*!\brief Algorithm specific "usage" value
-+ *
-+ * Algorithms may define multiple values for usage, which may convey the
-+ * intent of how the application intends to use the stream. If this value
-+ * is non-zero, consult the documentation for the codec to determine its
-+ * meaning.
-+ */
-+ unsigned int g_usage;
-+
-+
-+ /*!\brief Maximum number of threads to use
-+ *
-+ * For multi-threaded implementations, use no more than this number of
-+ * threads. The codec may use fewer threads than allowed. The value
-+ * 0 is equivalent to the value 1.
-+ */
-+ unsigned int g_threads;
-+
-+
-+ /*!\brief Bitstream profile to use
-+ *
-+ * Some codecs support a notion of multiple bitstream profiles. Typically
-+ * this maps to a set of features that are turned on or off. Often the
-+ * profile to use is determined by the features of the intended decoder.
-+ * Consult the documentation for the codec to determine the valid values
-+ * for this parameter, or set to zero for a sane default.
-+ */
-+ unsigned int g_profile; /**< profile of bitstream to use */
-+
-+
-+
-+ /*!\brief Width of the frame
-+ *
-+ * This value identifies the presentation resolution of the frame,
-+ * in pixels. Note that the frames passed as input to the encoder must
-+ * have this resolution. Frames will be presented by the decoder in this
-+ * resolution, independent of any spatial resampling the encoder may do.
-+ */
-+ unsigned int g_w;
-+
-+
-+ /*!\brief Height of the frame
-+ *
-+ * This value identifies the presentation resolution of the frame,
-+ * in pixels. Note that the frames passed as input to the encoder must
-+ * have this resolution. Frames will be presented by the decoder in this
-+ * resolution, independent of any spatial resampling the encoder may do.
-+ */
-+ unsigned int g_h;
-+
-+
-+ /*!\brief Stream timebase units
-+ *
-+ * Indicates the smallest interval of time, in seconds, used by the stream.
-+ * For fixed frame rate material, or variable frame rate material where
-+ * frames are timed at a multiple of a given clock (ex: video capture),
-+ * the \ref RECOMMENDED method is to set the timebase to the reciprocal
-+ * of the frame rate (ex: 1001/30000 for 29.970 Hz NTSC). This allows the
-+ * pts to correspond to the frame number, which can be handy. For
-+ * re-encoding video from containers with absolute time timestamps, the
-+ * \ref RECOMMENDED method is to set the timebase to that of the parent
-+ * container or multimedia framework (ex: 1/1000 for ms, as in FLV).
-+ */
-+ struct vpx_rational g_timebase;
-+
-+
-+ /*!\brief Enable error resilient mode.
-+ *
-+ * Error resilient mode indicates to the encoder that it should take
-+ * measures appropriate for streaming over lossy or noisy links, if
-+ * possible. Set to 1 to enable this feature, 0 to disable it.
-+ */
-+ unsigned int g_error_resilient;
-+
-+
-+ /*!\brief Multi-pass Encoding Mode
-+ *
-+ * This value should be set to the current phase for multi-pass encoding.
-+ * For single pass, set to #VPX_RC_ONE_PASS.
-+ */
-+ enum vpx_enc_pass g_pass;
-+
-+
-+ /*!\brief Allow lagged encoding
-+ *
-+ * If set, this value allows the encoder to consume a number of input
-+ * frames before producing output frames. This allows the encoder to
-+ * base decisions for the current frame on future frames. This does
-+ * increase the latency of the encoding pipeline, so it is not appropriate
-+ * in all situations (ex: realtime encoding).
-+ *
-+ * Note that this is a maximum value -- the encoder may produce frames
-+ * sooner than the given limit. Set this value to 0 to disable this
-+ * feature.
-+ */
-+ unsigned int g_lag_in_frames;
-+
-+
-+ /*
-+ * rate control settings (rc)
-+ */
-+
-+ /*!\brief Temporal resampling configuration, if supported by the codec.
-+ *
-+ * Temporal resampling allows the codec to "drop" frames as a strategy to
-+ * meet its target data rate. This can cause temporal discontinuities in
-+ * the encoded video, which may appear as stuttering during playback. This
-+ * trade-off is often acceptable, but for many applications is not. It can
-+ * be disabled in these cases.
-+ *
-+ * Note that not all codecs support this feature. All vpx VPx codecs do.
-+ * For other codecs, consult the documentation for that algorithm.
-+ *
-+ * This threshold is described as a percentage of the target data buffer.
-+ * When the data buffer falls below this percentage of fullness, a
-+ * dropped frame is indicated. Set the threshold to zero (0) to disable
-+ * this feature.
-+ */
-+ unsigned int rc_dropframe_thresh;
-+
-+
-+ /*!\brief Enable/disable spatial resampling, if supported by the codec.
-+ *
-+ * Spatial resampling allows the codec to compress a lower resolution
-+ * version of the frame, which is then upscaled by the encoder to the
-+ * correct presentation resolution. This increases visual quality at
-+ * low data rates, at the expense of CPU time on the encoder/decoder.
-+ */
-+ unsigned int rc_resize_allowed;
-+
-+
-+ /*!\brief Spatial resampling up watermark.
-+ *
-+ * This threshold is described as a percentage of the target data buffer.
-+ * When the data buffer rises above this percentage of fullness, the
-+ * encoder will step up to a higher resolution version of the frame.
-+ */
-+ unsigned int rc_resize_up_thresh;
-+
-+
-+ /*!\brief Spatial resampling down watermark.
-+ *
-+ * This threshold is described as a percentage of the target data buffer.
-+ * When the data buffer falls below this percentage of fullness, the
-+ * encoder will step down to a lower resolution version of the frame.
-+ */
-+ unsigned int rc_resize_down_thresh;
-+
-+
-+ /*!\brief Rate control algorithm to use.
-+ *
-+ * Indicates whether the end usage of this stream is to be streamed over
-+ * a bandwidth constrained link, indicating that Constant Bit Rate (CBR)
-+ * mode should be used, or whether it will be played back on a high
-+ * bandwidth link, as from a local disk, where higher variations in
-+ * bitrate are acceptable.
-+ */
-+ enum vpx_rc_mode rc_end_usage;
-+
-+
-+ /*!\brief Two-pass stats buffer.
-+ *
-+ * A buffer containing all of the stats packets produced in the first
-+ * pass, concatenated.
-+ */
-+ struct vpx_fixed_buf rc_twopass_stats_in;
-+
-+
-+ /*!\brief Target data rate
-+ *
-+ * Target bandwidth to use for this stream, in kilobits per second.
-+ */
-+ unsigned int rc_target_bitrate;
-+
-+
-+ /*
-+ * quantizer settings
-+ */
-+
-+
-+ /*!\brief Minimum (Best Quality) Quantizer
-+ *
-+ * The quantizer is the most direct control over the quality of the
-+ * encoded image. The range of valid values for the quantizer is codec
-+ * specific. Consult the documentation for the codec to determine the
-+ * values to use. To determine the range programmatically, call
-+ * vpx_codec_enc_config_default() with a usage value of 0.
-+ */
-+ unsigned int rc_min_quantizer;
-+
-+
-+ /*!\brief Maximum (Worst Quality) Quantizer
-+ *
-+ * The quantizer is the most direct control over the quality of the
-+ * encoded image. The range of valid values for the quantizer is codec
-+ * specific. Consult the documentation for the codec to determine the
-+ * values to use. To determine the range programmatically, call
-+ * vpx_codec_enc_config_default() with a usage value of 0.
-+ */
-+ unsigned int rc_max_quantizer;
-+
-+
-+ /*
-+ * bitrate tolerance
-+ */
-+
-+
-+ /*!\brief Rate control undershoot tolerance
-+ *
-+ * This value, expressed as a percentage of the target bitrate, describes
-+ * the target bitrate for easier frames, allowing bits to be saved for
-+ * harder frames. Set to zero to use the codec default.
-+ */
-+ unsigned int rc_undershoot_pct;
-+
-+
-+ /*!\brief Rate control overshoot tolerance
-+ *
-+ * This value, expressed as a percentage of the target bitrate, describes
-+ * the maximum allowed bitrate for a given frame. Set to zero to use the
-+ * codec default.
-+ */
-+ unsigned int rc_overshoot_pct;
-+
-+
-+ /*
-+ * decoder buffer model parameters
-+ */
-+
-+
-+ /*!\brief Decoder Buffer Size
-+ *
-+ * This value indicates the amount of data that may be buffered by the
-+ * decoding application. Note that this value is expressed in units of
-+ * time (milliseconds). For example, a value of 5000 indicates that the
-+ * client will buffer (at least) 5000ms worth of encoded data. Use the
-+ * target bitrate (#rc_target_bitrate) to convert to bits/bytes, if
-+ * necessary.
-+ */
-+ unsigned int rc_buf_sz;
-+
-+
-+ /*!\brief Decoder Buffer Initial Size
-+ *
-+ * This value indicates the amount of data that will be buffered by the
-+ * decoding application prior to beginning playback. This value is
-+ * expressed in units of time (milliseconds). Use the target bitrate
-+ * (#rc_target_bitrate) to convert to bits/bytes, if necessary.
-+ */
-+ unsigned int rc_buf_initial_sz;
-+
-+
-+ /*!\brief Decoder Buffer Optimal Size
-+ *
-+ * This value indicates the amount of data that the encoder should try
-+ * to maintain in the decoder's buffer. This value is expressed in units
-+ * of time (milliseconds). Use the target bitrate (#rc_target_bitrate)
-+ * to convert to bits/bytes, if necessary.
-+ */
-+ unsigned int rc_buf_optimal_sz;
-+
-+
-+ /*
-+ * 2 pass rate control parameters
-+ */
-+
-+
-+ /*!\brief Two-pass mode CBR/VBR bias
-+ *
-+ * Bias, expressed on a scale of 0 to 100, for determining target size
-+ * for the current frame. The value 0 indicates the optimal CBR mode
-+ * value should be used. The value 100 indicates the optimal VBR mode
-+ * value should be used. Values in between indicate which way the
-+ * encoder should "lean."
-+ */
-+ unsigned int rc_2pass_vbr_bias_pct; /**< RC mode bias between CBR and VBR(0-100: 0->CBR, 100->VBR) */
-+
-+
-+ /*!\brief Two-pass mode per-GOP minimum bitrate
-+ *
-+ * This value, expressed as a percentage of the target bitrate, indicates
-+ * the minimum bitrate to be used for a single GOP (aka "section")
-+ */
-+ unsigned int rc_2pass_vbr_minsection_pct;
-+
-+
-+ /*!\brief Two-pass mode per-GOP maximum bitrate
-+ *
-+ * This value, expressed as a percentage of the target bitrate, indicates
-+ * the maximum bitrate to be used for a single GOP (aka "section")
-+ */
-+ unsigned int rc_2pass_vbr_maxsection_pct;
-+
-+
-+ /*
-+ * keyframing settings (kf)
-+ */
-+
-+ /*!\brief Keyframe placement mode
-+ *
-+ * This value indicates whether the encoder should place keyframes at a
-+ * fixed interval, or determine the optimal placement automatically
-+ * (as governed by the #kf_min_dist and #kf_max_dist parameters)
-+ */
-+ enum vpx_kf_mode kf_mode;
-+
-+
-+ /*!\brief Keyframe minimum interval
-+ *
-+ * This value, expressed as a number of frames, prevents the encoder from
-+ * placing a keyframe nearer than kf_min_dist to the previous keyframe. At
-+ * least kf_min_dist frames non-keyframes will be coded before the next
-+ * keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval.
-+ */
-+ unsigned int kf_min_dist;
-+
-+
-+ /*!\brief Keyframe maximum interval
-+ *
-+ * This value, expressed as a number of frames, forces the encoder to code
-+ * a keyframe if one has not been coded in the last kf_max_dist frames.
-+ * A value of 0 implies all frames will be keyframes. Set kf_min_dist
-+ * equal to kf_max_dist for a fixed interval.
-+ */
-+ unsigned int kf_max_dist;
-+
-+ } vpx_codec_enc_cfg_t; /**< alias for struct vpx_codec_enc_cfg */
-+
-+
-+ /*!\brief Initialize an encoder instance
-+ *
-+ * Initializes a encoder context using the given interface. Applications
-+ * should call the vpx_codec_enc_init convenience macro instead of this
-+ * function directly, to ensure that the ABI version number parameter
-+ * is properly initialized.
-+ *
-+ * In XMA mode (activated by setting VPX_CODEC_USE_XMA in the flags
-+ * parameter), the storage pointed to by the cfg parameter must be
-+ * kept readable and stable until all memory maps have been set.
-+ *
-+ * \param[in] ctx Pointer to this instance's context.
-+ * \param[in] iface Pointer to the algorithm interface to use.
-+ * \param[in] cfg Configuration to use, if known. May be NULL.
-+ * \param[in] flags Bitfield of VPX_CODEC_USE_* flags
-+ * \param[in] ver ABI version number. Must be set to
-+ * VPX_ENCODER_ABI_VERSION
-+ * \retval #VPX_CODEC_OK
-+ * The decoder algorithm initialized.
-+ * \retval #VPX_CODEC_MEM_ERROR
-+ * Memory allocation failed.
-+ */
-+ vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx,
-+ vpx_codec_iface_t *iface,
-+ vpx_codec_enc_cfg_t *cfg,
-+ vpx_codec_flags_t flags,
-+ int ver);
-+
-+
-+ /*!\brief Convenience macro for vpx_codec_enc_init_ver()
-+ *
-+ * Ensures the ABI version parameter is properly set.
-+ */
-+#define vpx_codec_enc_init(ctx, iface, cfg, flags) \
-+ vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION)
-+
-+
-+ /*!\brief Get a default configuration
-+ *
-+ * Initializes a encoder configuration structure with default values. Supports
-+ * the notion of "usages" so that an algorithm may offer different default
-+ * settings depending on the user's intended goal. This function \ref SHOULD
-+ * be called by all applications to initialize the configuration structure
-+ * before specializing the configuration with application specific values.
-+ *
-+ * \param[in] iface Pointer to the algorithm interface to use.
-+ * \param[out] cfg Configuration buffer to populate
-+ * \param[in] usage End usage. Set to 0 or use codec specific values.
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The configuration was populated.
-+ * \retval #VPX_CODEC_INCAPABLE
-+ * Interface is not an encoder interface.
-+ * \retval #VPX_CODEC_INVALID_PARAM
-+ * A parameter was NULL, or the usage value was not recognized.
-+ */
-+ vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface,
-+ vpx_codec_enc_cfg_t *cfg,
-+ unsigned int usage);
-+
-+
-+ /*!\brief Set or change configuration
-+ *
-+ * Reconfigures an encoder instance according to the given configuration.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] cfg Configuration buffer to use
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The configuration was populated.
-+ * \retval #VPX_CODEC_INCAPABLE
-+ * Interface is not an encoder interface.
-+ * \retval #VPX_CODEC_INVALID_PARAM
-+ * A parameter was NULL, or the usage value was not recognized.
-+ */
-+ vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx,
-+ const vpx_codec_enc_cfg_t *cfg);
-+
-+
-+ /*!\brief Get global stream headers
-+ *
-+ * Retrieves a stream level global header packet, if supported by the codec.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ *
-+ * \retval NULL
-+ * Encoder does not support global header
-+ * \retval Non-NULL
-+ * Pointer to buffer containing global header packet
-+ */
-+ vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx);
-+
-+
-+#define VPX_DL_REALTIME (1) /**< deadline parameter analogous to
-+ * VPx REALTIME mode. */
-+#define VPX_DL_GOOD_QUALITY (1000000) /**< deadline parameter analogous to
-+ * VPx GOOD QUALITY mode. */
-+#define VPX_DL_BEST_QUALITY (0) /**< deadline parameter analogous to
-+ * VPx BEST QUALITY mode. */
-+ /*!\brief Encode a frame
-+ *
-+ * Encodes a video frame at the given "presentation time." The presentation
-+ * time stamp (PTS) \ref MUST be strictly increasing.
-+ *
-+ * The encoder supports the notion of a soft real-time deadline. Given a
-+ * non-zero value to the deadline parameter, the encoder will make a "best
-+ * effort" guarantee to return before the given time slice expires. It is
-+ * implicit that limiting the available time to encode will degrade the
-+ * output quality. The encoder can be given an unlimited time to produce the
-+ * best possible frame by specifying a deadline of '0'. This deadline
-+ * supercedes the VPx notion of "best quality, good quality, realtime".
-+ * Applications that wish to map these former settings to the new deadline
-+ * based system can use the symbols #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY,
-+ * and #VPX_DL_BEST_QUALITY.
-+ *
-+ * When the last frame has been passed to the encoder, this function should
-+ * continue to be called, with the img parameter set to NULL. This will
-+ * signal the end-of-stream condition to the encoder and allow it to encode
-+ * any held buffers. Encoding is complete when vpx_codec_encode() is called
-+ * and vpx_codec_get_cx_data() returns no data.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] img Image data to encode, NULL to flush.
-+ * \param[in] pts Presentation time stamp, in timebase units.
-+ * \param[in] duration Duration to show frame, in timebase units.
-+ * \param[in] flags Flags to use for encoding this frame.
-+ * \param[in] deadline Time to spend encoding, in microseconds. (0=infinite)
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The configuration was populated.
-+ * \retval #VPX_CODEC_INCAPABLE
-+ * Interface is not an encoder interface.
-+ * \retval #VPX_CODEC_INVALID_PARAM
-+ * A parameter was NULL, the image format is unsupported, etc.
-+ */
-+ vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx,
-+ const vpx_image_t *img,
-+ vpx_codec_pts_t pts,
-+ unsigned long duration,
-+ vpx_enc_frame_flags_t flags,
-+ unsigned long deadline);
-+
-+
-+ /*!\brief Set compressed data output buffer
-+ *
-+ * Sets the buffer that the codec should output the compressed data
-+ * into. This call effectively sets the buffer pointer returned in the
-+ * next VPX_CODEC_CX_FRAME_PKT packet. Subsequent packets will be
-+ * appended into this buffer. The buffer is preserved across frames,
-+ * so applications must periodically call this function after flushing
-+ * the accumulated compressed data to disk or to the network to reset
-+ * the pointer to the buffer's head.
-+ *
-+ * `pad_before` bytes will be skipped before writing the compressed
-+ * data, and `pad_after` bytes will be appended to the packet. The size
-+ * of the packet will be the sum of the size of the actual compressed
-+ * data, pad_before, and pad_after. The padding bytes will be preserved
-+ * (not overwritten).
-+ *
-+ * Note that calling this function does not guarantee that the returned
-+ * compressed data will be placed into the specified buffer. In the
-+ * event that the encoded data will not fit into the buffer provided,
-+ * the returned packet \ref MAY point to an internal buffer, as it would
-+ * if this call were never used. In this event, the output packet will
-+ * NOT have any padding, and the application must free space and copy it
-+ * to the proper place. This is of particular note in configurations
-+ * that may output multiple packets for a single encoded frame (e.g., lagged
-+ * encoding) or if the application does not reset the buffer periodically.
-+ *
-+ * Applications may restore the default behavior of the codec providing
-+ * the compressed data buffer by calling this function with a NULL
-+ * buffer.
-+ *
-+ * Applications \ref MUSTNOT call this function during iteration of
-+ * vpx_codec_get_cx_data().
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in] buf Buffer to store compressed data into
-+ * \param[in] pad_before Bytes to skip before writing compressed data
-+ * \param[in] pad_after Bytes to skip after writing compressed data
-+ *
-+ * \retval #VPX_CODEC_OK
-+ * The buffer was set successfully.
-+ * \retval #VPX_CODEC_INVALID_PARAM
-+ * A parameter was NULL, the image format is unsupported, etc.
-+ */
-+ vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx,
-+ const vpx_fixed_buf_t *buf,
-+ unsigned int pad_before,
-+ unsigned int pad_after);
-+
-+
-+ /*!\brief Encoded data iterator
-+ *
-+ * Iterates over a list of data packets to be passed from the encoder to the
-+ * application. The different kinds of packets available are enumerated in
-+ * #vpx_codec_cx_pkt_kind.
-+ *
-+ * #VPX_CODEC_CX_FRAME_PKT packets should be passed to the application's
-+ * muxer. Multiple compressed frames may be in the list.
-+ * #VPX_CODEC_STATS_PKT packets should be appended to a global buffer.
-+ *
-+ * The application \ref MUST silently ignore any packet kinds that it does
-+ * not recognize or support.
-+ *
-+ * The data buffers returned from this function are only guaranteed to be
-+ * valid until the application makes another call to any vpx_codec_* function.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ * \param[in,out] iter Iterator storage, initialized to NULL
-+ *
-+ * \return Returns a pointer to an output data packet (compressed frame data,
-+ * two-pass statistics, etc.) or NULL to signal end-of-list.
-+ *
-+ */
-+ const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx,
-+ vpx_codec_iter_t *iter);
-+
-+
-+ /*!\brief Get Preview Frame
-+ *
-+ * Returns an image that can be used as a preview. Shows the image as it would
-+ * exist at the decompressor. The application \ref MUST NOT write into this
-+ * image buffer.
-+ *
-+ * \param[in] ctx Pointer to this instance's context
-+ *
-+ * \return Returns a pointer to a preview image, or NULL if no image is
-+ * available.
-+ *
-+ */
-+ const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx);
-+
-+
-+ /*!@} - end defgroup encoder*/
-+
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-diff --git a/vpx/vpx_image.h b/vpx/vpx_image.h
-new file mode 100644
-index 0000000..7e4a03a
---- /dev/null
-+++ b/vpx/vpx_image.h
-@@ -0,0 +1,242 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+/*!\file vpx_image.h
-+ * \brief Describes the vpx image descriptor and associated operations
-+ *
-+ */
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#ifndef VPX_IMAGE_H
-+#define VPX_IMAGE_H
-+
-+ /*!\brief Current ABI version number
-+ *
-+ * \internal
-+ * If this file is altered in any way that changes the ABI, this value
-+ * must be bumped. Examples include, but are not limited to, changing
-+ * types, removing or reassigning enums, adding/removing/rearranging
-+ * fields to structures
-+ */
-+#define VPX_IMAGE_ABI_VERSION (1) /**<\hideinitializer*/
-+
-+
-+#define VPX_IMG_FMT_PLANAR 0x100 /**< Image is a planar format */
-+#define VPX_IMG_FMT_UV_FLIP 0x200 /**< V plane precedes U plane in memory */
-+#define VPX_IMG_FMT_HAS_ALPHA 0x400 /**< Image has an alpha channel componnent */
-+
-+
-+ /*!\brief List of supported image formats */
-+ typedef enum vpx_img_fmt {
-+ VPX_IMG_FMT_NONE,
-+ VPX_IMG_FMT_RGB24, /**< 24 bit per pixel packed RGB */
-+ VPX_IMG_FMT_RGB32, /**< 32 bit per pixel packed 0RGB */
-+ VPX_IMG_FMT_RGB565, /**< 16 bit per pixel, 565 */
-+ VPX_IMG_FMT_RGB555, /**< 16 bit per pixel, 555 */
-+ VPX_IMG_FMT_UYVY, /**< UYVY packed YUV */
-+ VPX_IMG_FMT_YUY2, /**< YUYV packed YUV */
-+ VPX_IMG_FMT_YVYU, /**< YVYU packed YUV */
-+ VPX_IMG_FMT_BGR24, /**< 24 bit per pixel packed BGR */
-+ VPX_IMG_FMT_RGB32_LE, /**< 32 bit packed BGR0 */
-+ VPX_IMG_FMT_ARGB, /**< 32 bit packed ARGB, alpha=255 */
-+ VPX_IMG_FMT_ARGB_LE, /**< 32 bit packed BGRA, alpha=255 */
-+ VPX_IMG_FMT_RGB565_LE, /**< 16 bit per pixel, gggbbbbb rrrrrggg */
-+ VPX_IMG_FMT_RGB555_LE, /**< 16 bit per pixel, gggbbbbb 0rrrrrgg */
-+ VPX_IMG_FMT_YV12 = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 1, /**< planar YVU */
-+ VPX_IMG_FMT_I420 = VPX_IMG_FMT_PLANAR | 2,
-+ VPX_IMG_FMT_VPXYV12 = VPX_IMG_FMT_PLANAR | VPX_IMG_FMT_UV_FLIP | 3, /** < planar 4:2:0 format with vpx color space */
-+ VPX_IMG_FMT_VPXI420 = VPX_IMG_FMT_PLANAR | 4, /** < planar 4:2:0 format with vpx color space */
-+ }
-+ vpx_img_fmt_t; /**< alias for enum vpx_img_fmt */
-+
-+#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
-+#define IMG_FMT_PLANAR VPX_IMG_FMT_PLANAR /**< \deprecated Use #VPX_IMG_FMT_PLANAR */
-+#define IMG_FMT_UV_FLIP VPX_IMG_FMT_UV_FLIP /**< \deprecated Use #VPX_IMG_FMT_UV_FLIP */
-+#define IMG_FMT_HAS_ALPHA VPX_IMG_FMT_HAS_ALPHA /**< \deprecated Use #VPX_IMG_FMT_HAS_ALPHA */
-+
-+ /*!\brief Deprecated list of supported image formats
-+ * \deprecated New code should use #vpx_img_fmt
-+ */
-+#define img_fmt vpx_img_fmt
-+ /*!\brief alias for enum img_fmt.
-+ * \deprecated New code should use #vpx_img_fmt_t
-+ */
-+#define img_fmt_t vpx_img_fmt_t
-+
-+#define IMG_FMT_NONE VPX_IMG_FMT_NONE /**< \deprecated Use #VPX_IMG_FMT_NONE */
-+#define IMG_FMT_RGB24 VPX_IMG_FMT_RGB24 /**< \deprecated Use #VPX_IMG_FMT_RGB24 */
-+#define IMG_FMT_RGB32 VPX_IMG_FMT_RGB32 /**< \deprecated Use #VPX_IMG_FMT_RGB32 */
-+#define IMG_FMT_RGB565 VPX_IMG_FMT_RGB565 /**< \deprecated Use #VPX_IMG_FMT_RGB565 */
-+#define IMG_FMT_RGB555 VPX_IMG_FMT_RGB555 /**< \deprecated Use #VPX_IMG_FMT_RGB555 */
-+#define IMG_FMT_UYVY VPX_IMG_FMT_UYVY /**< \deprecated Use #VPX_IMG_FMT_UYVY */
-+#define IMG_FMT_YUY2 VPX_IMG_FMT_YUY2 /**< \deprecated Use #VPX_IMG_FMT_YUY2 */
-+#define IMG_FMT_YVYU VPX_IMG_FMT_YVYU /**< \deprecated Use #VPX_IMG_FMT_YVYU */
-+#define IMG_FMT_BGR24 VPX_IMG_FMT_BGR24 /**< \deprecated Use #VPX_IMG_FMT_BGR24 */
-+#define IMG_FMT_RGB32_LE VPX_IMG_FMT_RGB32_LE /**< \deprecated Use #VPX_IMG_FMT_RGB32_LE */
-+#define IMG_FMT_ARGB VPX_IMG_FMT_ARGB /**< \deprecated Use #VPX_IMG_FMT_ARGB */
-+#define IMG_FMT_ARGB_LE VPX_IMG_FMT_ARGB_LE /**< \deprecated Use #VPX_IMG_FMT_ARGB_LE */
-+#define IMG_FMT_RGB565_LE VPX_IMG_FMT_RGB565_LE /**< \deprecated Use #VPX_IMG_FMT_RGB565_LE */
-+#define IMG_FMT_RGB555_LE VPX_IMG_FMT_RGB555_LE /**< \deprecated Use #VPX_IMG_FMT_RGB555_LE */
-+#define IMG_FMT_YV12 VPX_IMG_FMT_YV12 /**< \deprecated Use #VPX_IMG_FMT_YV12 */
-+#define IMG_FMT_I420 VPX_IMG_FMT_I420 /**< \deprecated Use #VPX_IMG_FMT_I420 */
-+#define IMG_FMT_VPXYV12 VPX_IMG_FMT_VPXYV12 /**< \deprecated Use #VPX_IMG_FMT_VPXYV12 */
-+#define IMG_FMT_VPXI420 VPX_IMG_FMT_VPXI420 /**< \deprecated Use #VPX_IMG_FMT_VPXI420 */
-+#endif /* VPX_CODEC_DISABLE_COMPAT */
-+
-+ /**\brief Image Descriptor */
-+ typedef struct vpx_image
-+ {
-+ vpx_img_fmt_t fmt; /**< Image Format */
-+
-+ /* Image storage dimensions */
-+ unsigned int w; /**< Stored image width */
-+ unsigned int h; /**< Stored image height */
-+
-+ /* Image display dimensions */
-+ unsigned int d_w; /**< Displayed image width */
-+ unsigned int d_h; /**< Displayed image height */
-+
-+ /* Chroma subsampling info */
-+ unsigned int x_chroma_shift; /**< subsampling order, X */
-+ unsigned int y_chroma_shift; /**< subsampling order, Y */
-+
-+ /* Image data pointers. */
-+#define VPX_PLANE_PACKED 0 /**< To be used for all packed formats */
-+#define VPX_PLANE_Y 0 /**< Y (Luminance) plane */
-+#define VPX_PLANE_U 1 /**< U (Chroma) plane */
-+#define VPX_PLANE_V 2 /**< V (Chroma) plane */
-+#define VPX_PLANE_ALPHA 3 /**< A (Transparancy) plane */
-+#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
-+#define PLANE_PACKED VPX_PLANE_PACKED
-+#define PLANE_Y VPX_PLANE_Y
-+#define PLANE_U VPX_PLANE_U
-+#define PLANE_V VPX_PLANE_V
-+#define PLANE_ALPHA VPX_PLANE_ALPHA
-+#endif
-+ unsigned char *planes[4]; /**< pointer to the top left pixel for each plane */
-+ int stride[4]; /**< stride between rows for each plane */
-+
-+ int bps; /**< bits per sample (for packed formats) */
-+
-+ /* The following member may be set by the application to associate data
-+ * with this image.
-+ */
-+ void *user_priv; /**< may be set by the application to associate data
-+ * with this image. */
-+
-+ /* The following members should be treated as private. */
-+ unsigned char *img_data; /**< private */
-+ int img_data_owner; /**< private */
-+ int self_allocd; /**< private */
-+ } vpx_image_t; /**< alias for struct vpx_image */
-+
-+ /**\brief Representation of a rectangle on a surface */
-+ typedef struct vpx_image_rect
-+ {
-+ unsigned int x; /**< leftmost column */
-+ unsigned int y; /**< topmost row */
-+ unsigned int w; /**< width */
-+ unsigned int h; /**< height */
-+ } vpx_image_rect_t; /**< alias for struct vpx_image_rect */
-+
-+ /*!\brief Open a descriptor, allocating storage for the underlying image
-+ *
-+ * Returns a descriptor for storing an image of the given format. The
-+ * storage for the descriptor is allocated on the heap.
-+ *
-+ * \param[in] img Pointer to storage for descriptor. If this parameter
-+ * is NULL, the storage for the descriptor will be
-+ * allocated on the heap.
-+ * \param[in] fmt Format for the image
-+ * \param[in] d_w Width of the image
-+ * \param[in] d_h Height of the image
-+ * \param[in] align Alignment, in bytes, of each row in the image.
-+ *
-+ * \return Returns a pointer to the initialized image descriptor. If the img
-+ * parameter is non-null, the value of the img parameter will be
-+ * returned.
-+ */
-+ vpx_image_t *vpx_img_alloc(vpx_image_t *img,
-+ vpx_img_fmt_t fmt,
-+ unsigned int d_w,
-+ unsigned int d_h,
-+ unsigned int align);
-+
-+ /*!\brief Open a descriptor, using existing storage for the underlying image
-+ *
-+ * Returns a descriptor for storing an image of the given format. The
-+ * storage for descriptor has been allocated elsewhere, and a descriptor is
-+ * desired to "wrap" that storage.
-+ *
-+ * \param[in] img Pointer to storage for descriptor. If this parameter
-+ * is NULL, the storage for the descriptor will be
-+ * allocated on the heap.
-+ * \param[in] fmt Format for the image
-+ * \param[in] d_w Width of the image
-+ * \param[in] d_h Height of the image
-+ * \param[in] align Alignment, in bytes, of each row in the image.
-+ * \param[in] img_data Storage to use for the image
-+ *
-+ * \return Returns a pointer to the initialized image descriptor. If the img
-+ * parameter is non-null, the value of the img parameter will be
-+ * returned.
-+ */
-+ vpx_image_t *vpx_img_wrap(vpx_image_t *img,
-+ vpx_img_fmt_t fmt,
-+ unsigned int d_w,
-+ unsigned int d_h,
-+ unsigned int align,
-+ unsigned char *img_data);
-+
-+
-+ /*!\brief Set the rectangle identifying the displayed portion of the image
-+ *
-+ * Updates the displayed rectangle (aka viewport) on the image surface to
-+ * match the specified coordinates and size.
-+ *
-+ * \param[in] img Image descriptor
-+ * \param[in] x leftmost column
-+ * \param[in] y topmost row
-+ * \param[in] w width
-+ * \param[in] h height
-+ *
-+ * \return 0 if the requested rectangle is valid, nonzero otherwise.
-+ */
-+ int vpx_img_set_rect(vpx_image_t *img,
-+ unsigned int x,
-+ unsigned int y,
-+ unsigned int w,
-+ unsigned int h);
-+
-+
-+ /*!\brief Flip the image vertically (top for bottom)
-+ *
-+ * Adjusts the image descriptor's pointers and strides to make the image
-+ * be referenced upside-down.
-+ *
-+ * \param[in] img Image descriptor
-+ */
-+ void vpx_img_flip(vpx_image_t *img);
-+
-+ /*!\brief Close an image descriptor
-+ *
-+ * Frees all allocated storage associated with an image descriptor.
-+ *
-+ * \param[in] img Image descriptor
-+ */
-+ void vpx_img_free(vpx_image_t *img);
-+
-+#endif
-+#ifdef __cplusplus
-+}
-+#endif
-diff --git a/vpx/vpx_integer.h b/vpx/vpx_integer.h
-new file mode 100644
-index 0000000..f06c641
---- /dev/null
-+++ b/vpx/vpx_integer.h
-@@ -0,0 +1,57 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ */
-+
-+
-+#ifndef VPX_INTEGER_H
-+#define VPX_INTEGER_H
-+
-+/* get ptrdiff_t, size_t, wchar_t, NULL */
-+#include <stddef.h>
-+
-+#if defined(_MSC_VER) || defined(VPX_EMULATE_INTTYPES)
-+typedef signed char int8_t;
-+typedef signed short int16_t;
-+typedef signed int int32_t;
-+
-+typedef unsigned char uint8_t;
-+typedef unsigned short uint16_t;
-+typedef unsigned int uint32_t;
-+
-+#if defined(_MSC_VER)
-+typedef signed __int64 int64_t;
-+typedef unsigned __int64 uint64_t;
-+#define PRId64 "I64d"
-+#endif
-+
-+#ifdef HAVE_ARMV6
-+typedef unsigned int int_fast16_t;
-+#else
-+typedef signed short int_fast16_t;
-+#endif
-+typedef signed char int_fast8_t;
-+typedef unsigned char uint_fast8_t;
-+
-+#ifndef _UINTPTR_T_DEFINED
-+typedef unsigned int uintptr_t;
-+#endif
-+
-+#else
-+
-+/* Most platforms have the C99 standard integer types. */
-+
-+#if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS)
-+#define __STDC_FORMAT_MACROS
-+#endif
-+#include <stdint.h>
-+#include <inttypes.h>
-+
-+#endif
-+
-+#endif
-diff --git a/vpx_codec/exports b/vpx_codec/exports
-deleted file mode 100644
-index f5e7473..0000000
---- a/vpx_codec/exports
-+++ /dev/null
-@@ -1,17 +0,0 @@
--text vpx_dec_control
--text vpx_dec_decode
--text vpx_dec_destroy
--text vpx_dec_err_to_string
--text vpx_dec_error
--text vpx_dec_error_detail
--text vpx_dec_get_caps
--text vpx_dec_get_frame
--text vpx_dec_get_mem_map
--text vpx_dec_get_stream_info
--text vpx_dec_iface_name
--text vpx_dec_init_ver
--text vpx_dec_peek_stream_info
--text vpx_dec_register_put_frame_cb
--text vpx_dec_register_put_slice_cb
--text vpx_dec_set_mem_map
--text vpx_dec_xma_init_ver
-diff --git a/vpx_codec/internal/vpx_codec_internal.h b/vpx_codec/internal/vpx_codec_internal.h
-deleted file mode 100644
-index 0867552..0000000
---- a/vpx_codec/internal/vpx_codec_internal.h
-+++ /dev/null
-@@ -1,457 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\file decoder_impl.h
-- * \brief Describes the decoder algorithm interface for algorithm
-- * implementations.
-- *
-- * This file defines the private structures and data types that are only
-- * relevant to implementing an algorithm, as opposed to using it.
-- *
-- * To create a decoder algorithm class, an interface structure is put
-- * into the global namespace:
-- * <pre>
-- * my_codec.c:
-- * vpx_codec_iface_t my_codec = {
-- * "My Codec v1.0",
-- * VPX_CODEC_ALG_ABI_VERSION,
-- * ...
-- * };
-- * </pre>
-- *
-- * An application instantiates a specific decoder instance by using
-- * vpx_codec_init() and a pointer to the algorithm's interface structure:
-- * <pre>
-- * my_app.c:
-- * extern vpx_codec_iface_t my_codec;
-- * {
-- * vpx_codec_ctx_t algo;
-- * res = vpx_codec_init(&algo, &my_codec);
-- * }
-- * </pre>
-- *
-- * Once initialized, the instance is manged using other functions from
-- * the vpx_codec_* family.
-- */
--#ifndef VPX_CODEC_INTERNAL_H
--#define VPX_CODEC_INTERNAL_H
--#include "../vpx_decoder.h"
--#include "../vpx_encoder.h"
--#include <stdarg.h>
--
--
--/*!\brief Current ABI version number
-- *
-- * \internal
-- * If this file is altered in any way that changes the ABI, this value
-- * must be bumped. Examples include, but are not limited to, changing
-- * types, removing or reassigning enums, adding/removing/rearranging
-- * fields to structures
-- */
--#define VPX_CODEC_INTERNAL_ABI_VERSION (2) /**<\hideinitializer*/
--
--typedef struct vpx_codec_alg_priv vpx_codec_alg_priv_t;
--
--/*!\brief init function pointer prototype
-- *
-- * Performs algorithm-specific initialization of the decoder context. This
-- * function is called by the generic vpx_codec_init() wrapper function, so
-- * plugins implementing this interface may trust the input parameters to be
-- * properly initialized.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \retval #VPX_CODEC_OK
-- * The input stream was recognized and decoder initialized.
-- * \retval #VPX_CODEC_MEM_ERROR
-- * Memory operation failed.
-- */
--typedef vpx_codec_err_t (*vpx_codec_init_fn_t)(vpx_codec_ctx_t *ctx);
--
--/*!\brief destroy function pointer prototype
-- *
-- * Performs algorithm-specific destruction of the decoder context. This
-- * function is called by the generic vpx_codec_destroy() wrapper function,
-- * so plugins implementing this interface may trust the input parameters
-- * to be properly initialized.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \retval #VPX_CODEC_OK
-- * The input stream was recognized and decoder initialized.
-- * \retval #VPX_CODEC_MEM_ERROR
-- * Memory operation failed.
-- */
--typedef vpx_codec_err_t (*vpx_codec_destroy_fn_t)(vpx_codec_alg_priv_t *ctx);
--
--/*!\brief parse stream info function pointer prototype
-- *
-- * Performs high level parsing of the bitstream. This function is called by
-- * the generic vpx_codec_parse_stream() wrapper function, so plugins implementing
-- * this interface may trust the input parameters to be properly initialized.
-- *
-- * \param[in] data Pointer to a block of data to parse
-- * \param[in] data_sz Size of the data buffer
-- * \param[in,out] si Pointer to stream info to update. The size member
-- * \ref MUST be properly initialized, but \ref MAY be
-- * clobbered by the algorithm. This parameter \ref MAY
-- * be NULL.
-- *
-- * \retval #VPX_CODEC_OK
-- * Bitstream is parsable and stream information updated
-- */
--typedef vpx_codec_err_t (*vpx_codec_peek_si_fn_t)(const uint8_t *data,
-- unsigned int data_sz,
-- vpx_codec_stream_info_t *si);
--
--/*!\brief Return information about the current stream.
-- *
-- * Returns information about the stream that has been parsed during decoding.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in,out] si Pointer to stream info to update. The size member
-- * \ref MUST be properly initialized, but \ref MAY be
-- * clobbered by the algorithm. This parameter \ref MAY
-- * be NULL.
-- *
-- * \retval #VPX_CODEC_OK
-- * Bitstream is parsable and stream information updated
-- */
--typedef vpx_codec_err_t (*vpx_codec_get_si_fn_t)(vpx_codec_alg_priv_t *ctx,
-- vpx_codec_stream_info_t *si);
--
--/*!\brief control function pointer prototype
-- *
-- * This function is used to exchange algorithm specific data with the decoder
-- * instance. This can be used to implement features specific to a particular
-- * algorithm.
-- *
-- * This function is called by the generic vpx_codec_control() wrapper
-- * function, so plugins implementing this interface may trust the input
-- * parameters to be properly initialized. However, this interface does not
-- * provide type safety for the exchanged data or assign meanings to the
-- * control codes. Those details should be specified in the algorithm's
-- * header file. In particular, the ctrl_id parameter is guaranteed to exist
-- * in the algorithm's control mapping table, and the data paramter may be NULL.
-- *
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] ctrl_id Algorithm specific control identifier
-- * \param[in,out] data Data to exchange with algorithm instance.
-- *
-- * \retval #VPX_CODEC_OK
-- * The internal state data was deserialized.
-- */
--typedef vpx_codec_err_t (*vpx_codec_control_fn_t)(vpx_codec_alg_priv_t *ctx,
-- int ctrl_id,
-- va_list ap);
--
--/*!\brief control function pointer mapping
-- *
-- * This structure stores the mapping between control identifiers and
-- * implementing functions. Each algorithm provides a list of these
-- * mappings. This list is searched by the vpx_codec_control() wrapper
-- * function to determine which function to invoke. The special
-- * value {0, NULL} is used to indicate end-of-list, and must be
-- * present. The special value {0, <non-null>} can be used as a catch-all
-- * mapping. This implies that ctrl_id values chosen by the algorithm
-- * \ref MUST be non-zero.
-- */
--typedef const struct
--{
-- int ctrl_id;
-- vpx_codec_control_fn_t fn;
--} vpx_codec_ctrl_fn_map_t;
--
--/*!\brief decode data function pointer prototype
-- *
-- * Processes a buffer of coded data. If the processing results in a new
-- * decoded frame becoming available, #VPX_CODEC_CB_PUT_SLICE and
-- * #VPX_CODEC_CB_PUT_FRAME events are generated as appropriate. This
-- * function is called by the generic vpx_codec_decode() wrapper function,
-- * so plugins implementing this interface may trust the input parameters
-- * to be properly initialized.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] data Pointer to this block of new coded data. If
-- * NULL, a #VPX_CODEC_CB_PUT_FRAME event is posted
-- * for the previously decoded frame.
-- * \param[in] data_sz Size of the coded data, in bytes.
-- *
-- * \return Returns #VPX_CODEC_OK if the coded data was processed completely
-- * and future pictures can be decoded without error. Otherwise,
-- * see the descriptions of the other error codes in ::vpx_codec_err_t
-- * for recoverability capabilities.
-- */
--typedef vpx_codec_err_t (*vpx_codec_decode_fn_t)(vpx_codec_alg_priv_t *ctx,
-- const uint8_t *data,
-- unsigned int data_sz,
-- void *user_priv,
-- long deadline);
--
--/*!\brief Decoded frames iterator
-- *
-- * Iterates over a list of the frames available for display. The iterator
-- * storage should be initialized to NULL to start the iteration. Iteration is
-- * complete when this function returns NULL.
-- *
-- * The list of available frames becomes valid upon completion of the
-- * vpx_codec_decode call, and remains valid until the next call to vpx_codec_decode.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in out] iter Iterator storage, initialized to NULL
-- *
-- * \return Returns a pointer to an image, if one is ready for display. Frames
-- * produced will always be in PTS (presentation time stamp) order.
-- */
--typedef vpx_image_t*(*vpx_codec_get_frame_fn_t)(vpx_codec_alg_priv_t *ctx,
-- vpx_codec_iter_t *iter);
--
--
--/*\brief e_xternal Memory Allocation memory map get iterator
-- *
-- * Iterates over a list of the memory maps requested by the decoder. The
-- * iterator storage should be initialized to NULL to start the iteration.
-- * Iteration is complete when this function returns NULL.
-- *
-- * \param[in out] iter Iterator storage, initialized to NULL
-- *
-- * \return Returns a pointer to an memory segment descriptor, or NULL to
-- * indicate end-of-list.
-- */
--typedef vpx_codec_err_t (*vpx_codec_get_mmap_fn_t)(const vpx_codec_ctx_t *ctx,
-- vpx_codec_mmap_t *mmap,
-- vpx_codec_iter_t *iter);
--
--
--/*\brief e_xternal Memory Allocation memory map set iterator
-- *
-- * Sets a memory descriptor inside the decoder instance.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] mmap Memory map to store.
-- *
-- * \retval #VPX_CODEC_OK
-- * The memory map was accepted and stored.
-- * \retval #VPX_CODEC_MEM_ERROR
-- * The memory map was rejected.
-- */
--typedef vpx_codec_err_t (*vpx_codec_set_mmap_fn_t)(vpx_codec_ctx_t *ctx,
-- const vpx_codec_mmap_t *mmap);
--
--
--typedef vpx_codec_err_t (*vpx_codec_encode_fn_t)(vpx_codec_alg_priv_t *ctx,
-- const vpx_image_t *img,
-- vpx_codec_pts_t pts,
-- unsigned long duration,
-- vpx_enc_frame_flags_t flags,
-- unsigned long deadline);
--typedef const vpx_codec_cx_pkt_t*(*vpx_codec_get_cx_data_fn_t)(vpx_codec_alg_priv_t *ctx,
-- vpx_codec_iter_t *iter);
--
--typedef vpx_codec_err_t
--(*vpx_codec_enc_config_set_fn_t)(vpx_codec_alg_priv_t *ctx,
-- const vpx_codec_enc_cfg_t *cfg);
--typedef vpx_fixed_buf_t *
--(*vpx_codec_get_global_headers_fn_t)(vpx_codec_alg_priv_t *ctx);
--
--typedef vpx_image_t *
--(*vpx_codec_get_preview_frame_fn_t)(vpx_codec_alg_priv_t *ctx);
--
--/*!\brief usage configuration mapping
-- *
-- * This structure stores the mapping between usage identifiers and
-- * configuration structures. Each algorithm provides a list of these
-- * mappings. This list is searched by the vpx_codec_enc_config_default()
-- * wrapper function to determine which config to return. The special value
-- * {-1, {0}} is used to indicate end-of-list, and must be present. At least
-- * one mapping must be present, in addition to the end-of-list.
-- *
-- */
--typedef const struct
--{
-- int usage;
-- vpx_codec_enc_cfg_t cfg;
--} vpx_codec_enc_cfg_map_t;
--
--#define NOT_IMPLEMENTED 0
--
--/*!\brief Decoder algorithm interface interface
-- *
-- * All decoders \ref MUST expose a variable of this type.
-- */
--struct vpx_codec_iface
--{
-- const char *name; /**< Identification String */
-- int abi_version; /**< Implemented ABI version */
-- vpx_codec_caps_t caps; /**< Decoder capabilities */
-- vpx_codec_init_fn_t init; /**< \copydoc ::vpx_codec_init_fn_t */
-- vpx_codec_destroy_fn_t destroy; /**< \copydoc ::vpx_codec_destroy_fn_t */
-- vpx_codec_ctrl_fn_map_t *ctrl_maps; /**< \copydoc ::vpx_codec_ctrl_fn_map_t */
-- vpx_codec_get_mmap_fn_t get_mmap; /**< \copydoc ::vpx_codec_get_mmap_fn_t */
-- vpx_codec_set_mmap_fn_t set_mmap; /**< \copydoc ::vpx_codec_set_mmap_fn_t */
-- struct
-- {
-- vpx_codec_peek_si_fn_t peek_si; /**< \copydoc ::vpx_codec_peek_si_fn_t */
-- vpx_codec_get_si_fn_t get_si; /**< \copydoc ::vpx_codec_peek_si_fn_t */
-- vpx_codec_decode_fn_t decode; /**< \copydoc ::vpx_codec_decode_fn_t */
-- vpx_codec_get_frame_fn_t get_frame; /**< \copydoc ::vpx_codec_get_frame_fn_t */
-- } dec;
-- struct
-- {
-- vpx_codec_enc_cfg_map_t *cfg_maps; /**< \copydoc ::vpx_codec_enc_cfg_map_t */
-- vpx_codec_encode_fn_t encode; /**< \copydoc ::vpx_codec_encode_fn_t */
-- vpx_codec_get_cx_data_fn_t get_cx_data; /**< \copydoc ::vpx_codec_get_cx_data_fn_t */
-- vpx_codec_enc_config_set_fn_t cfg_set; /**< \copydoc ::vpx_codec_enc_config_set_fn_t */
-- vpx_codec_get_global_headers_fn_t get_glob_hdrs; /**< \copydoc ::vpx_codec_enc_config_set_fn_t */
-- vpx_codec_get_preview_frame_fn_t get_preview; /**< \copydoc ::vpx_codec_get_preview_frame_fn_t */
-- } enc;
--};
--
--/*!\brief Callback function pointer / user data pair storage */
--typedef struct
--{
-- union
-- {
-- vpx_codec_put_frame_cb_fn_t put_frame;
-- vpx_codec_put_slice_cb_fn_t put_slice;
-- };
-- void *user_priv;
--} vpx_codec_priv_cb_pair_t;
--
--
--/*!\brief Instance private storage
-- *
-- * This structure is allocated by the algorithm's init function. It can be
-- * extended in one of two ways. First, a second, algorithm specific structure
-- * can be allocated and the priv member pointed to it. Alternatively, this
-- * structure can be made the first member of the algorithm specific structure,
-- * and the pointer casted to the proper type.
-- */
--struct vpx_codec_priv
--{
-- unsigned int sz;
-- vpx_codec_iface_t *iface;
-- struct vpx_codec_alg_priv *alg_priv;
-- const char *err_detail;
-- unsigned int eval_counter;
-- vpx_codec_flags_t init_flags;
-- struct
-- {
-- vpx_codec_priv_cb_pair_t put_frame_cb;
-- vpx_codec_priv_cb_pair_t put_slice_cb;
-- } dec;
-- struct
-- {
-- int tbd;
-- struct vpx_fixed_buf cx_data_dst_buf;
-- unsigned int cx_data_pad_before;
-- unsigned int cx_data_pad_after;
-- vpx_codec_cx_pkt_t cx_data_pkt;
-- } enc;
--};
--
--#undef VPX_CTRL_USE_TYPE
--#define VPX_CTRL_USE_TYPE(id, typ) \
-- static typ id##__value(va_list args) {return va_arg(args, typ);} \
-- static typ id##__convert(void *x)\
-- {\
-- union\
-- {\
-- void *x;\
-- typ d;\
-- } u;\
-- u.x = x;\
-- return u.d;\
-- }
--
--
--#undef VPX_CTRL_USE_TYPE_DEPRECATED
--#define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \
-- static typ id##__value(va_list args) {return va_arg(args, typ);} \
-- static typ id##__convert(void *x)\
-- {\
-- union\
-- {\
-- void *x;\
-- typ d;\
-- } u;\
-- u.x = x;\
-- return u.d;\
-- }
--
--#define CAST(id, arg) id##__value(arg)
--#define RECAST(id, x) id##__convert(x)
--
--
--/* Internal Utility Functions
-- *
-- * The following functions are indended to be used inside algorithms as
-- * utilities for manipulating vpx_codec_* data structures.
-- */
--struct vpx_codec_pkt_list
--{
-- unsigned int cnt;
-- unsigned int max;
-- struct vpx_codec_cx_pkt pkts[1];
--};
--
--#define vpx_codec_pkt_list_decl(n)\
-- union {struct vpx_codec_pkt_list head;\
-- struct {struct vpx_codec_pkt_list head;\
-- struct vpx_codec_cx_pkt pkts[n];} alloc;}
--
--#define vpx_codec_pkt_list_init(m)\
-- (m)->alloc.head.cnt = 0,\
-- (m)->alloc.head.max = sizeof((m)->alloc.pkts) / sizeof((m)->alloc.pkts[0])
--
--int
--vpx_codec_pkt_list_add(struct vpx_codec_pkt_list *,
-- const struct vpx_codec_cx_pkt *);
--
--const vpx_codec_cx_pkt_t*
--vpx_codec_pkt_list_get(struct vpx_codec_pkt_list *list,
-- vpx_codec_iter_t *iter);
--
--
--#include <stdio.h>
--#include <setjmp.h>
--struct vpx_internal_error_info
--{
-- vpx_codec_err_t error_code;
-- int has_detail;
-- char detail[80];
-- int setjmp;
-- jmp_buf jmp;
--};
--
--static void vpx_internal_error(struct vpx_internal_error_info *info,
-- vpx_codec_err_t error,
-- const char *fmt,
-- ...)
--{
-- va_list ap;
--
-- info->error_code = error;
-- info->has_detail = 0;
--
-- if (fmt)
-- {
-- size_t sz = sizeof(info->detail);
--
-- info->has_detail = 1;
-- va_start(ap, fmt);
-- vsnprintf(info->detail, sz - 1, fmt, ap);
-- va_end(ap);
-- info->detail[sz-1] = '\0';
-- }
--
-- if (info->setjmp)
-- longjmp(info->jmp, info->error_code);
--}
--#endif
-diff --git a/vpx_codec/src/vpx_codec.c b/vpx_codec/src/vpx_codec.c
-deleted file mode 100644
-index 6366416..0000000
---- a/vpx_codec/src/vpx_codec.c
-+++ /dev/null
-@@ -1,196 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\file vpx_decoder.c
-- * \brief Provides the high level interface to wrap decoder algorithms.
-- *
-- */
--#include <stdlib.h>
--#include <string.h>
--#include "vpx_codec/internal/vpx_codec_internal.h"
--#include "vpx_version.h"
--
--#define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
--
--int vpx_codec_version(void)
--{
-- return VERSION_PACKED;
--}
--
--
--const char *vpx_codec_version_str(void)
--{
-- return VERSION_STRING_NOSP;
--}
--
--
--const char *vpx_codec_version_extra_str(void)
--{
-- return VERSION_EXTRA;
--}
--
--
--const char *vpx_codec_iface_name(vpx_codec_iface_t *iface)
--{
-- return iface ? iface->name : "<invalid interface>";
--}
--
--const char *vpx_codec_err_to_string(vpx_codec_err_t err)
--{
-- switch (err)
-- {
-- case VPX_CODEC_OK:
-- return "Success";
-- case VPX_CODEC_ERROR:
-- return "Unspecified internal error";
-- case VPX_CODEC_MEM_ERROR:
-- return "Memory allocation error";
-- case VPX_CODEC_ABI_MISMATCH:
-- return "ABI version mismatch";
-- case VPX_CODEC_INCAPABLE:
-- return "Codec does not implement requested capability";
-- case VPX_CODEC_UNSUP_BITSTREAM:
-- return "Bitstream not supported by this decoder";
-- case VPX_CODEC_UNSUP_FEATURE:
-- return "Bitstream required feature not supported by this decoder";
-- case VPX_CODEC_CORRUPT_FRAME:
-- return "Corrupt frame detected";
-- case VPX_CODEC_INVALID_PARAM:
-- return "Invalid parameter";
-- case VPX_CODEC_LIST_END:
-- return "End of iterated list";
-- }
--
-- return "Unrecognized error code";
--}
--
--const char *vpx_codec_error(vpx_codec_ctx_t *ctx)
--{
-- return (ctx) ? vpx_codec_err_to_string(ctx->err)
-- : vpx_codec_err_to_string(VPX_CODEC_INVALID_PARAM);
--}
--
--const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx)
--{
-- if (ctx && ctx->err)
-- return ctx->priv ? ctx->priv->err_detail : ctx->err_detail;
--
-- return NULL;
--}
--
--
--vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx,
-- vpx_codec_iface_t *iface,
-- vpx_codec_dec_cfg_t *cfg,
-- vpx_codec_flags_t flags,
-- int ver)
--{
-- vpx_codec_err_t res;
--
-- if (ver != VPX_DECODER_ABI_VERSION)
-- res = VPX_CODEC_ABI_MISMATCH;
-- else if (!ctx || !iface)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (iface->abi_version != VPX_CODEC_INTERNAL_ABI_VERSION)
-- res = VPX_CODEC_ABI_MISMATCH;
-- else if ((flags & VPX_CODEC_USE_XMA) && !(iface->caps & VPX_CODEC_CAP_XMA))
-- res = VPX_CODEC_INCAPABLE;
-- else if ((flags & VPX_CODEC_USE_POSTPROC) && !(iface->caps & VPX_CODEC_CAP_POSTPROC))
-- res = VPX_CODEC_INCAPABLE;
-- else
-- {
-- memset(ctx, 0, sizeof(*ctx));
-- ctx->iface = iface;
-- ctx->name = iface->name;
-- ctx->priv = NULL;
-- ctx->init_flags = flags;
-- ctx->config.dec = cfg;
-- res = VPX_CODEC_OK;
--
-- if (!(flags & VPX_CODEC_USE_XMA))
-- {
-- res = ctx->iface->init(ctx);
--
-- if (res)
-- {
-- ctx->err_detail = ctx->priv ? ctx->priv->err_detail : NULL;
-- vpx_codec_destroy(ctx);
-- }
--
-- if (ctx->priv)
-- ctx->priv->iface = ctx->iface;
-- }
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx)
--{
-- vpx_codec_err_t res;
--
-- if (!ctx)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!ctx->iface || !ctx->priv)
-- res = VPX_CODEC_ERROR;
-- else
-- {
-- if (ctx->priv->alg_priv)
-- ctx->iface->destroy(ctx->priv->alg_priv);
--
-- ctx->iface = NULL;
-- ctx->name = NULL;
-- ctx->priv = NULL;
-- res = VPX_CODEC_OK;
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface)
--{
-- return (iface) ? iface->caps : 0;
--}
--
--
--vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx,
-- int ctrl_id,
-- ...)
--{
-- vpx_codec_err_t res;
--
-- if (!ctx || !ctrl_id)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!ctx->iface || !ctx->priv || !ctx->iface->ctrl_maps)
-- res = VPX_CODEC_ERROR;
-- else
-- {
-- vpx_codec_ctrl_fn_map_t *entry;
--
-- res = VPX_CODEC_ERROR;
--
-- for (entry = ctx->iface->ctrl_maps; entry && entry->fn; entry++)
-- {
-- if (!entry->ctrl_id || entry->ctrl_id == ctrl_id)
-- {
-- va_list ap;
--
-- va_start(ap, ctrl_id);
-- res = entry->fn(ctx->priv->alg_priv, ctrl_id, ap);
-- va_end(ap);
-- break;
-- }
-- }
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
-diff --git a/vpx_codec/src/vpx_decoder.c b/vpx_codec/src/vpx_decoder.c
-deleted file mode 100644
-index 7e8575f..0000000
---- a/vpx_codec/src/vpx_decoder.c
-+++ /dev/null
-@@ -1,201 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\file vpx_decoder.c
-- * \brief Provides the high level interface to wrap decoder algorithms.
-- *
-- */
--#include <stdlib.h>
--#include "vpx_codec/internal/vpx_codec_internal.h"
--
--#define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
--
--vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface,
-- const uint8_t *data,
-- unsigned int data_sz,
-- vpx_codec_stream_info_t *si)
--{
-- vpx_codec_err_t res;
--
-- if (!iface || !data || !data_sz || !si
-- || si->sz < sizeof(vpx_codec_stream_info_t))
-- res = VPX_CODEC_INVALID_PARAM;
-- else
-- {
-- /* Set default/unknown values */
-- si->w = 0;
-- si->h = 0;
--
-- res = iface->dec.peek_si(data, data_sz, si);
-- }
--
-- return res;
--}
--
--
--vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx,
-- vpx_codec_stream_info_t *si)
--{
-- vpx_codec_err_t res;
--
-- if (!ctx || !si || si->sz < sizeof(vpx_codec_stream_info_t))
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!ctx->iface || !ctx->priv)
-- res = VPX_CODEC_ERROR;
-- else
-- {
-- /* Set default/unknown values */
-- si->w = 0;
-- si->h = 0;
--
-- res = ctx->iface->dec.get_si(ctx->priv->alg_priv, si);
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx,
-- const uint8_t *data,
-- unsigned int data_sz,
-- void *user_priv,
-- long deadline)
--{
-- vpx_codec_err_t res;
--
-- if (!ctx || !data || !data_sz)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!ctx->iface || !ctx->priv)
-- res = VPX_CODEC_ERROR;
--
--#if CONFIG_EVAL_LIMIT
-- else if (ctx->priv->eval_counter >= 500)
-- {
-- ctx->priv->err_detail = "Evaluation limit exceeded.";
-- res = VPX_CODEC_ERROR;
-- }
--
--#endif
-- else
-- {
-- res = ctx->iface->dec.decode(ctx->priv->alg_priv, data, data_sz,
-- user_priv, deadline);
--#if CONFIG_EVAL_LIMIT
-- ctx->priv->eval_counter++;
--#endif
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx,
-- vpx_codec_iter_t *iter)
--{
-- vpx_image_t *img;
--
-- if (!ctx || !iter || !ctx->iface || !ctx->priv)
-- img = NULL;
-- else
-- img = ctx->iface->dec.get_frame(ctx->priv->alg_priv, iter);
--
-- return img;
--}
--
--
--vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx,
-- vpx_codec_put_frame_cb_fn_t cb,
-- void *user_priv)
--{
-- vpx_codec_err_t res;
--
-- if (!ctx || !cb)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!ctx->iface || !ctx->priv
-- || !(ctx->iface->caps & VPX_CODEC_CAP_PUT_FRAME))
-- res = VPX_CODEC_ERROR;
-- else
-- {
-- ctx->priv->dec.put_frame_cb.put_frame = cb;
-- ctx->priv->dec.put_frame_cb.user_priv = user_priv;
-- res = VPX_CODEC_OK;
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx,
-- vpx_codec_put_slice_cb_fn_t cb,
-- void *user_priv)
--{
-- vpx_codec_err_t res;
--
-- if (!ctx || !cb)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!ctx->iface || !ctx->priv
-- || !(ctx->iface->caps & VPX_CODEC_CAP_PUT_FRAME))
-- res = VPX_CODEC_ERROR;
-- else
-- {
-- ctx->priv->dec.put_slice_cb.put_slice = cb;
-- ctx->priv->dec.put_slice_cb.user_priv = user_priv;
-- res = VPX_CODEC_OK;
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--vpx_codec_err_t vpx_codec_get_mem_map(vpx_codec_ctx_t *ctx,
-- vpx_codec_mmap_t *mmap,
-- vpx_codec_iter_t *iter)
--{
-- vpx_codec_err_t res = VPX_CODEC_OK;
--
-- if (!ctx || !mmap || !iter || !ctx->iface)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!(ctx->iface->caps & VPX_CODEC_CAP_XMA))
-- res = VPX_CODEC_ERROR;
-- else
-- res = ctx->iface->get_mmap(ctx, mmap, iter);
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--vpx_codec_err_t vpx_codec_set_mem_map(vpx_codec_ctx_t *ctx,
-- vpx_codec_mmap_t *mmap,
-- unsigned int num_maps)
--{
-- vpx_codec_err_t res = VPX_CODEC_MEM_ERROR;
--
-- if (!ctx || !mmap || !ctx->iface)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!(ctx->iface->caps & VPX_CODEC_CAP_XMA))
-- res = VPX_CODEC_ERROR;
-- else
-- {
-- unsigned int i;
--
-- for (i = 0; i < num_maps; i++, mmap++)
-- {
-- if (!mmap->base)
-- break;
--
-- /* Everything look ok, set the mmap in the decoder */
-- res = ctx->iface->set_mmap(ctx, mmap);
--
-- if (res)
-- break;
-- }
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
-diff --git a/vpx_codec/src/vpx_decoder_compat.c b/vpx_codec/src/vpx_decoder_compat.c
-deleted file mode 100644
-index d5b04ae..0000000
---- a/vpx_codec/src/vpx_decoder_compat.c
-+++ /dev/null
-@@ -1,200 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\file vpx_decoder.c
-- * \brief Provides the high level interface to wrap decoder algorithms.
-- *
-- */
--#include <stdlib.h>
--#include <string.h>
--#include "vpx_codec/vpx_decoder.h"
--#include "vpx_codec/internal/vpx_codec_internal.h"
--
--#define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
--
--const char *vpx_dec_iface_name(vpx_dec_iface_t *iface)
--{
-- return vpx_codec_iface_name((vpx_codec_iface_t *)iface);
--}
--
--const char *vpx_dec_err_to_string(vpx_dec_err_t err)
--{
-- return vpx_codec_err_to_string(err);
--}
--
--const char *vpx_dec_error(vpx_dec_ctx_t *ctx)
--{
-- return vpx_codec_error((vpx_codec_ctx_t *)ctx);
--}
--
--const char *vpx_dec_error_detail(vpx_dec_ctx_t *ctx)
--{
-- return vpx_codec_error_detail((vpx_codec_ctx_t *)ctx);
--}
--
--
--vpx_dec_err_t vpx_dec_init_ver(vpx_dec_ctx_t *ctx,
-- vpx_dec_iface_t *iface,
-- int ver)
--{
-- return vpx_codec_dec_init_ver((vpx_codec_ctx_t *)ctx,
-- (vpx_codec_iface_t *)iface,
-- NULL,
-- 0,
-- ver);
--}
--
--
--vpx_dec_err_t vpx_dec_destroy(vpx_dec_ctx_t *ctx)
--{
-- return vpx_codec_destroy((vpx_codec_ctx_t *)ctx);
--}
--
--
--vpx_dec_caps_t vpx_dec_get_caps(vpx_dec_iface_t *iface)
--{
-- return vpx_codec_get_caps((vpx_codec_iface_t *)iface);
--}
--
--
--vpx_dec_err_t vpx_dec_peek_stream_info(vpx_dec_iface_t *iface,
-- const uint8_t *data,
-- unsigned int data_sz,
-- vpx_dec_stream_info_t *si)
--{
-- return vpx_codec_peek_stream_info((vpx_codec_iface_t *)iface, data, data_sz,
-- (vpx_codec_stream_info_t *)si);
--}
--
--
--vpx_dec_err_t vpx_dec_get_stream_info(vpx_dec_ctx_t *ctx,
-- vpx_dec_stream_info_t *si)
--{
-- return vpx_codec_get_stream_info((vpx_codec_ctx_t *)ctx,
-- (vpx_codec_stream_info_t *)si);
--}
--
--
--vpx_dec_err_t vpx_dec_control(vpx_dec_ctx_t *ctx,
-- int ctrl_id,
-- void *data)
--{
-- return vpx_codec_control_((vpx_codec_ctx_t *)ctx, ctrl_id, data);
--}
--
--
--vpx_dec_err_t vpx_dec_decode(vpx_dec_ctx_t *ctx,
-- uint8_t *data,
-- unsigned int data_sz,
-- void *user_priv,
-- int rel_pts)
--{
-- (void)rel_pts;
-- return vpx_codec_decode((vpx_codec_ctx_t *)ctx, data, data_sz, user_priv,
-- 0);
--}
--
--vpx_image_t *vpx_dec_get_frame(vpx_dec_ctx_t *ctx,
-- vpx_dec_iter_t *iter)
--{
-- return vpx_codec_get_frame((vpx_codec_ctx_t *)ctx, iter);
--}
--
--
--vpx_dec_err_t vpx_dec_register_put_frame_cb(vpx_dec_ctx_t *ctx,
-- vpx_dec_put_frame_cb_fn_t cb,
-- void *user_priv)
--{
-- return vpx_codec_register_put_frame_cb((vpx_codec_ctx_t *)ctx, cb,
-- user_priv);
--}
--
--
--vpx_dec_err_t vpx_dec_register_put_slice_cb(vpx_dec_ctx_t *ctx,
-- vpx_dec_put_slice_cb_fn_t cb,
-- void *user_priv)
--{
-- return vpx_codec_register_put_slice_cb((vpx_codec_ctx_t *)ctx, cb,
-- user_priv);
--}
--
--
--vpx_dec_err_t vpx_dec_xma_init_ver(vpx_dec_ctx_t *ctx,
-- vpx_dec_iface_t *iface,
-- int ver)
--{
-- return vpx_codec_dec_init_ver((vpx_codec_ctx_t *)ctx,
-- (vpx_codec_iface_t *)iface,
-- NULL,
-- VPX_CODEC_USE_XMA,
-- ver);
--}
--
--vpx_dec_err_t vpx_dec_get_mem_map(vpx_dec_ctx_t *ctx_,
-- vpx_dec_mmap_t *mmap,
-- const vpx_dec_stream_info_t *si,
-- vpx_dec_iter_t *iter)
--{
-- vpx_codec_ctx_t *ctx = (vpx_codec_ctx_t *)ctx_;
-- vpx_dec_err_t res = VPX_DEC_OK;
--
-- if (!ctx || !mmap || !si || !iter || !ctx->iface)
-- res = VPX_DEC_INVALID_PARAM;
-- else if (!(ctx->iface->caps & VPX_DEC_CAP_XMA))
-- res = VPX_DEC_ERROR;
-- else
-- {
-- if (!ctx->config.dec)
-- {
-- ctx->config.dec = malloc(sizeof(vpx_codec_dec_cfg_t));
-- ctx->config.dec->w = si->w;
-- ctx->config.dec->h = si->h;
-- }
--
-- res = ctx->iface->get_mmap(ctx, mmap, iter);
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--vpx_dec_err_t vpx_dec_set_mem_map(vpx_dec_ctx_t *ctx_,
-- vpx_dec_mmap_t *mmap,
-- unsigned int num_maps)
--{
-- vpx_codec_ctx_t *ctx = (vpx_codec_ctx_t *)ctx_;
-- vpx_dec_err_t res = VPX_DEC_MEM_ERROR;
--
-- if (!ctx || !mmap || !ctx->iface)
-- res = VPX_DEC_INVALID_PARAM;
-- else if (!(ctx->iface->caps & VPX_DEC_CAP_XMA))
-- res = VPX_DEC_ERROR;
-- else
-- {
-- void *save = (ctx->priv) ? NULL : ctx->config.dec;
-- unsigned int i;
--
-- for (i = 0; i < num_maps; i++, mmap++)
-- {
-- if (!mmap->base)
-- break;
--
-- /* Everything look ok, set the mmap in the decoder */
-- res = ctx->iface->set_mmap(ctx, mmap);
--
-- if (res)
-- break;
-- }
--
-- if (save) free(save);
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
-diff --git a/vpx_codec/src/vpx_encoder.c b/vpx_codec/src/vpx_encoder.c
-deleted file mode 100644
-index 98ad8ba..0000000
---- a/vpx_codec/src/vpx_encoder.c
-+++ /dev/null
-@@ -1,324 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\file vpx_encoder.c
-- * \brief Provides the high level interface to wrap encoder algorithms.
-- *
-- */
--#include <limits.h>
--#include <string.h>
--#include "vpx_codec/internal/vpx_codec_internal.h"
--
--#define SAVE_STATUS(ctx,var) (ctx?(ctx->err = var):var)
--
--vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx,
-- vpx_codec_iface_t *iface,
-- vpx_codec_enc_cfg_t *cfg,
-- vpx_codec_flags_t flags,
-- int ver)
--{
-- vpx_codec_err_t res;
--
-- if (ver != VPX_ENCODER_ABI_VERSION)
-- res = VPX_CODEC_ABI_MISMATCH;
-- else if (!ctx || !iface || !cfg)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (iface->abi_version != VPX_CODEC_INTERNAL_ABI_VERSION)
-- res = VPX_CODEC_ABI_MISMATCH;
-- else if (!(iface->caps & VPX_CODEC_CAP_ENCODER))
-- res = VPX_CODEC_INCAPABLE;
-- else if ((flags & VPX_CODEC_USE_XMA) && !(iface->caps & VPX_CODEC_CAP_XMA))
-- res = VPX_CODEC_INCAPABLE;
-- else if ((flags & VPX_CODEC_USE_PSNR)
-- && !(iface->caps & VPX_CODEC_CAP_PSNR))
-- res = VPX_CODEC_INCAPABLE;
-- else
-- {
-- ctx->iface = iface;
-- ctx->name = iface->name;
-- ctx->priv = NULL;
-- ctx->init_flags = flags;
-- ctx->config.enc = cfg;
-- res = ctx->iface->init(ctx);
--
-- if (res)
-- {
-- ctx->err_detail = ctx->priv ? ctx->priv->err_detail : NULL;
-- vpx_codec_destroy(ctx);
-- }
--
-- if (ctx->priv)
-- ctx->priv->iface = ctx->iface;
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--
--vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface,
-- vpx_codec_enc_cfg_t *cfg,
-- unsigned int usage)
--{
-- vpx_codec_err_t res;
-- vpx_codec_enc_cfg_map_t *map;
--
-- if (!iface || !cfg || usage > INT_MAX)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!(iface->caps & VPX_CODEC_CAP_ENCODER))
-- res = VPX_CODEC_INCAPABLE;
-- else
-- {
-- res = VPX_CODEC_INVALID_PARAM;
--
-- for (map = iface->enc.cfg_maps; map->usage >= 0; map++)
-- {
-- if (map->usage == (int)usage)
-- {
-- *cfg = map->cfg;
-- cfg->g_usage = usage;
-- res = VPX_CODEC_OK;
-- break;
-- }
-- }
-- }
--
-- return res;
--}
--
--
--#if ARCH_X86 || ARCH_X86_64
--/* On X86, disable the x87 unit's internal 80 bit precision for better
-- * consistency with the SSE unit's 64 bit precision.
-- */
--#include "vpx_ports/x86.h"
--#define FLOATING_POINT_INIT() do {\
-- unsigned short x87_orig_mode = x87_set_double_precision();
--#define FLOATING_POINT_RESTORE() \
-- x87_set_control_word(x87_orig_mode); }while(0)
--
--
--#else
--static void FLOATING_POINT_INIT() {}
--static void FLOATING_POINT_RESTORE() {}
--#endif
--
--
--vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx,
-- const vpx_image_t *img,
-- vpx_codec_pts_t pts,
-- unsigned long duration,
-- vpx_enc_frame_flags_t flags,
-- unsigned long deadline)
--{
-- vpx_codec_err_t res;
--
-- if (!ctx || (img && !duration))
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!ctx->iface || !ctx->priv)
-- res = VPX_CODEC_ERROR;
-- else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-- res = VPX_CODEC_INCAPABLE;
--
--#if CONFIG_EVAL_LIMIT
-- else if (ctx->priv->eval_counter >= 500)
-- {
-- ctx->priv->err_detail = "Evaluation limit exceeded.";
-- res = VPX_CODEC_ERROR;
-- }
--
--#endif
-- else
-- {
-- /* Execute in a normalized floating point environment, if the platform
-- * requires it.
-- */
-- FLOATING_POINT_INIT();
-- res = ctx->iface->enc.encode(ctx->priv->alg_priv, img, pts,
-- duration, flags, deadline);
-- FLOATING_POINT_RESTORE();
--
--#if CONFIG_EVAL_LIMIT
-- ctx->priv->eval_counter++;
--#endif
-- }
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx,
-- vpx_codec_iter_t *iter)
--{
-- const vpx_codec_cx_pkt_t *pkt = NULL;
--
-- if (ctx)
-- {
-- if (!iter)
-- ctx->err = VPX_CODEC_INVALID_PARAM;
-- else if (!ctx->iface || !ctx->priv)
-- ctx->err = VPX_CODEC_ERROR;
-- else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-- ctx->err = VPX_CODEC_INCAPABLE;
-- else
-- pkt = ctx->iface->enc.get_cx_data(ctx->priv->alg_priv, iter);
-- }
--
-- if (pkt && pkt->kind == VPX_CODEC_CX_FRAME_PKT)
-- {
-- /* If the application has specified a destination area for the
-- * compressed data, and the codec has not placed the data there,
-- * and it fits, copy it.
-- */
-- char *dst_buf = ctx->priv->enc.cx_data_dst_buf.buf;
--
-- if (dst_buf
-- && pkt->data.raw.buf != dst_buf
-- && pkt->data.raw.sz
-- + ctx->priv->enc.cx_data_pad_before
-- + ctx->priv->enc.cx_data_pad_after
-- <= ctx->priv->enc.cx_data_dst_buf.sz)
-- {
-- vpx_codec_cx_pkt_t *modified_pkt = &ctx->priv->enc.cx_data_pkt;
--
-- memcpy(dst_buf + ctx->priv->enc.cx_data_pad_before,
-- pkt->data.raw.buf, pkt->data.raw.sz);
-- *modified_pkt = *pkt;
-- modified_pkt->data.raw.buf = dst_buf;
-- modified_pkt->data.raw.sz += ctx->priv->enc.cx_data_pad_before
-- + ctx->priv->enc.cx_data_pad_after;
-- pkt = modified_pkt;
-- }
--
-- if (dst_buf == pkt->data.raw.buf)
-- {
-- ctx->priv->enc.cx_data_dst_buf.buf = dst_buf + pkt->data.raw.sz;
-- ctx->priv->enc.cx_data_dst_buf.sz -= pkt->data.raw.sz;
-- }
-- }
--
-- return pkt;
--}
--
--
--vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx,
-- const vpx_fixed_buf_t *buf,
-- unsigned int pad_before,
-- unsigned int pad_after)
--{
-- if (!ctx || !ctx->priv)
-- return VPX_CODEC_INVALID_PARAM;
--
-- if (buf)
-- {
-- ctx->priv->enc.cx_data_dst_buf = *buf;
-- ctx->priv->enc.cx_data_pad_before = pad_before;
-- ctx->priv->enc.cx_data_pad_after = pad_after;
-- }
-- else
-- {
-- ctx->priv->enc.cx_data_dst_buf.buf = NULL;
-- ctx->priv->enc.cx_data_dst_buf.sz = 0;
-- ctx->priv->enc.cx_data_pad_before = 0;
-- ctx->priv->enc.cx_data_pad_after = 0;
-- }
--
-- return VPX_CODEC_OK;
--}
--
--
--const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx)
--{
-- vpx_image_t *img = NULL;
--
-- if (ctx)
-- {
-- if (!ctx->iface || !ctx->priv)
-- ctx->err = VPX_CODEC_ERROR;
-- else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-- ctx->err = VPX_CODEC_INCAPABLE;
-- else if (!ctx->iface->enc.get_preview)
-- ctx->err = VPX_CODEC_INCAPABLE;
-- else
-- img = ctx->iface->enc.get_preview(ctx->priv->alg_priv);
-- }
--
-- return img;
--}
--
--
--vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx)
--{
-- vpx_fixed_buf_t *buf = NULL;
--
-- if (ctx)
-- {
-- if (!ctx->iface || !ctx->priv)
-- ctx->err = VPX_CODEC_ERROR;
-- else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-- ctx->err = VPX_CODEC_INCAPABLE;
-- else if (!ctx->iface->enc.get_glob_hdrs)
-- ctx->err = VPX_CODEC_INCAPABLE;
-- else
-- buf = ctx->iface->enc.get_glob_hdrs(ctx->priv->alg_priv);
-- }
--
-- return buf;
--}
--
--
--vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx,
-- const vpx_codec_enc_cfg_t *cfg)
--{
-- vpx_codec_err_t res;
--
-- if (!ctx || !ctx->iface || !ctx->priv || !cfg)
-- res = VPX_CODEC_INVALID_PARAM;
-- else if (!(ctx->iface->caps & VPX_CODEC_CAP_ENCODER))
-- res = VPX_CODEC_INCAPABLE;
-- else
-- res = ctx->iface->enc.cfg_set(ctx->priv->alg_priv, cfg);
--
-- return SAVE_STATUS(ctx, res);
--}
--
--
--int vpx_codec_pkt_list_add(struct vpx_codec_pkt_list *list,
-- const struct vpx_codec_cx_pkt *pkt)
--{
-- if (list->cnt < list->max)
-- {
-- list->pkts[list->cnt++] = *pkt;
-- return 0;
-- }
--
-- return 1;
--}
--
--
--const vpx_codec_cx_pkt_t *vpx_codec_pkt_list_get(struct vpx_codec_pkt_list *list,
-- vpx_codec_iter_t *iter)
--{
-- const vpx_codec_cx_pkt_t *pkt;
--
-- if (!(*iter))
-- {
-- *iter = list->pkts;
-- }
--
-- pkt = (const void *) * iter;
--
-- if (pkt - list->pkts < list->cnt)
-- *iter = pkt + 1;
-- else
-- pkt = NULL;
--
-- return pkt;
--}
-diff --git a/vpx_codec/src/vpx_image.c b/vpx_codec/src/vpx_image.c
-deleted file mode 100644
-index 8a16e58..0000000
---- a/vpx_codec/src/vpx_image.c
-+++ /dev/null
-@@ -1,261 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--#include <stdlib.h>
--#include <string.h>
--#include "vpx_codec/vpx_image.h"
--
--static vpx_image_t *img_alloc_helper(vpx_image_t *img,
-- img_fmt_t fmt,
-- unsigned int d_w,
-- unsigned int d_h,
-- unsigned int stride_align,
-- unsigned char *img_data)
--{
--
-- unsigned int h, w, s, xcs, ycs, bps;
-- int align;
--
-- /* Treat align==0 like align==1 */
-- if (!stride_align)
-- stride_align = 1;
--
-- /* Validate alignment (must be power of 2) */
-- if (stride_align & (stride_align - 1))
-- goto fail;
--
-- /* Get sample size for this format */
-- switch (fmt)
-- {
-- case IMG_FMT_RGB32:
-- case IMG_FMT_RGB32_LE:
-- case IMG_FMT_ARGB:
-- case IMG_FMT_ARGB_LE:
-- bps = 32;
-- break;
-- case IMG_FMT_RGB24:
-- case IMG_FMT_BGR24:
-- bps = 24;
-- break;
-- case IMG_FMT_RGB565:
-- case IMG_FMT_RGB565_LE:
-- case IMG_FMT_RGB555:
-- case IMG_FMT_RGB555_LE:
-- case IMG_FMT_UYVY:
-- case IMG_FMT_YUY2:
-- case IMG_FMT_YVYU:
-- bps = 16;
-- break;
-- case IMG_FMT_I420:
-- case IMG_FMT_YV12:
-- case IMG_FMT_VPXI420:
-- case IMG_FMT_VPXYV12:
-- bps = 12;
-- break;
-- default:
-- bps = 16;
-- break;
-- }
--
-- /* Get chroma shift values for this format */
-- switch (fmt)
-- {
-- case IMG_FMT_I420:
-- case IMG_FMT_YV12:
-- case IMG_FMT_VPXI420:
-- case IMG_FMT_VPXYV12:
-- xcs = 1;
-- break;
-- default:
-- xcs = 0;
-- break;
-- }
--
-- switch (fmt)
-- {
-- case IMG_FMT_I420:
-- case IMG_FMT_YV12:
-- case IMG_FMT_VPXI420:
-- case IMG_FMT_VPXYV12:
-- ycs = 1;
-- break;
-- default:
-- ycs = 0;
-- break;
-- }
--
-- /* Calculate storage sizes given the chroma subsampling */
-- align = (1 << xcs) - 1;
-- w = (d_w + align) & ~align;
-- align = (1 << ycs) - 1;
-- h = (d_h + align) & ~align;
-- s = (fmt & IMG_FMT_PLANAR) ? w : bps * w / 8;
-- s = (s + stride_align - 1) & ~(stride_align - 1);
--
-- /* Allocate the new image */
-- if (!img)
-- {
-- img = (vpx_image_t *)calloc(1, sizeof(vpx_image_t));
--
-- if (!img)
-- goto fail;
--
-- img->self_allocd = 1;
-- }
-- else
-- {
-- memset(img, 0, sizeof(vpx_image_t));
-- }
--
-- img->img_data = img_data;
--
-- if (!img_data)
-- {
-- img->img_data = malloc((fmt & IMG_FMT_PLANAR) ? h * w * bps / 8 : h * s);
-- img->img_data_owner = 1;
-- }
--
-- if (!img->img_data)
-- goto fail;
--
-- img->fmt = fmt;
-- img->w = w;
-- img->h = h;
-- img->x_chroma_shift = xcs;
-- img->y_chroma_shift = ycs;
-- img->bps = bps;
--
-- /* Calculate strides */
-- img->stride[PLANE_Y] = img->stride[PLANE_ALPHA] = s;
-- img->stride[PLANE_U] = img->stride[PLANE_V] = s >> xcs;
--
-- /* Default viewport to entire image */
-- if (!vpx_img_set_rect(img, 0, 0, d_w, d_h))
-- return img;
--
--fail:
-- vpx_img_free(img);
-- return NULL;
--}
--
--vpx_image_t *vpx_img_alloc(vpx_image_t *img,
-- img_fmt_t fmt,
-- unsigned int d_w,
-- unsigned int d_h,
-- unsigned int stride_align)
--{
-- return img_alloc_helper(img, fmt, d_w, d_h, stride_align, NULL);
--}
--
--vpx_image_t *vpx_img_wrap(vpx_image_t *img,
-- img_fmt_t fmt,
-- unsigned int d_w,
-- unsigned int d_h,
-- unsigned int stride_align,
-- unsigned char *img_data)
--{
-- return img_alloc_helper(img, fmt, d_w, d_h, stride_align, img_data);
--}
--
--int vpx_img_set_rect(vpx_image_t *img,
-- unsigned int x,
-- unsigned int y,
-- unsigned int w,
-- unsigned int h)
--{
-- unsigned char *data;
--
-- if (x + w <= img->w && y + h <= img->h)
-- {
-- img->d_w = w;
-- img->d_h = h;
--
-- /* Calculate plane pointers */
-- if (!(img->fmt & IMG_FMT_PLANAR))
-- {
-- img->planes[PLANE_PACKED] =
-- img->img_data + x * img->bps / 8 + y * img->stride[PLANE_PACKED];
-- }
-- else
-- {
-- data = img->img_data;
--
-- if (img->fmt & IMG_FMT_HAS_ALPHA)
-- {
-- img->planes[PLANE_ALPHA] =
-- data + x + y * img->stride[PLANE_ALPHA];
-- data += img->h * img->stride[PLANE_ALPHA];
-- }
--
-- img->planes[PLANE_Y] = data + x + y * img->stride[PLANE_Y];
-- data += img->h * img->stride[PLANE_Y];
--
-- if (!(img->fmt & IMG_FMT_UV_FLIP))
-- {
-- img->planes[PLANE_U] = data
-- + (x >> img->x_chroma_shift)
-- + (y >> img->y_chroma_shift) * img->stride[PLANE_U];
-- data += (img->h >> img->y_chroma_shift) * img->stride[PLANE_U];
-- img->planes[PLANE_V] = data
-- + (x >> img->x_chroma_shift)
-- + (y >> img->y_chroma_shift) * img->stride[PLANE_V];
-- }
-- else
-- {
-- img->planes[PLANE_V] = data
-- + (x >> img->x_chroma_shift)
-- + (y >> img->y_chroma_shift) * img->stride[PLANE_V];
-- data += (img->h >> img->y_chroma_shift) * img->stride[PLANE_V];
-- img->planes[PLANE_U] = data
-- + (x >> img->x_chroma_shift)
-- + (y >> img->y_chroma_shift) * img->stride[PLANE_U];
-- }
-- }
--
-- return 0;
-- }
--
-- return -1;
--}
--
--void vpx_img_flip(vpx_image_t *img)
--{
-- /* Note: In the calculation pointer adjustment calculation, we want the
-- * rhs to be promoted to a signed type. Section 6.3.1.8 of the ISO C99
-- * standard indicates that if the adjustment parameter is unsigned, the
-- * stride parameter will be promoted to unsigned, causing errors when
-- * the lhs is a larger type than the rhs.
-- */
-- img->planes[PLANE_Y] += (signed)(img->d_h - 1) * img->stride[PLANE_Y];
-- img->stride[PLANE_Y] = -img->stride[PLANE_Y];
--
-- img->planes[PLANE_U] += (signed)((img->d_h >> img->y_chroma_shift) - 1)
-- * img->stride[PLANE_U];
-- img->stride[PLANE_U] = -img->stride[PLANE_U];
--
-- img->planes[PLANE_V] += (signed)((img->d_h >> img->y_chroma_shift) - 1)
-- * img->stride[PLANE_V];
-- img->stride[PLANE_V] = -img->stride[PLANE_V];
--
-- img->planes[PLANE_ALPHA] += (signed)(img->d_h - 1) * img->stride[PLANE_ALPHA];
-- img->stride[PLANE_ALPHA] = -img->stride[PLANE_ALPHA];
--}
--
--void vpx_img_free(vpx_image_t *img)
--{
-- if (img)
-- {
-- if (img->img_data && img->img_data_owner)
-- free(img->img_data);
--
-- if (img->self_allocd)
-- free(img);
-- }
--}
-diff --git a/vpx_codec/vpx_codec.h b/vpx_codec/vpx_codec.h
-deleted file mode 100644
-index e2a79f9..0000000
---- a/vpx_codec/vpx_codec.h
-+++ /dev/null
-@@ -1,560 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\defgroup codec Common Algorithm Interface
-- * This abstraction allows applications to easily support multiple video
-- * formats with minimal code duplication. This section describes the interface
-- * common to all codecs (both encoders and decoders).
-- * @{
-- */
--
--/*!\file vpx_codec.h
-- * \brief Describes the codec algorithm interface to applications.
-- *
-- * This file describes the interface between an application and a
-- * video codec algorithm.
-- *
-- * An application instantiates a specific codec instance by using
-- * vpx_codec_init() and a pointer to the algorithm's interface structure:
-- * <pre>
-- * my_app.c:
-- * extern vpx_codec_iface_t my_codec;
-- * {
-- * vpx_codec_ctx_t algo;
-- * res = vpx_codec_init(&algo, &my_codec);
-- * }
-- * </pre>
-- *
-- * Once initialized, the instance is manged using other functions from
-- * the vpx_codec_* family.
-- */
--#ifdef __cplusplus
--extern "C" {
--#endif
--
--#ifndef VPX_CODEC_H
--#define VPX_CODEC_H
--#ifdef HAVE_CONFIG_H
--# include "vpx_config.h"
--#endif
--#if defined(HAVE_VPX_PORTS) && HAVE_VPX_PORTS
--# include "vpx_ports/vpx_integer.h"
--#else
--# include "vpx_integer.h"
--#endif
--#include "vpx_image.h"
--
-- /*!\brief Decorator indicating a function is deprecated */
--#ifndef DEPRECATED
--#if defined(__GNUC__) && __GNUC__
--#define DEPRECATED __attribute__ ((deprecated))
--#define DECLSPEC_DEPRECATED /**< \copydoc #DEPRECATED */
--#elif defined(_MSC_VER)
--#define DEPRECATED
--#define DECLSPEC_DEPRECATED __declspec(deprecated) /**< \copydoc #DEPRECATED */
--#else
--#define DEPRECATED
--#define DECLSPEC_DEPRECATED /**< \copydoc #DEPRECATED */
--#endif
--#endif
--
-- /*!\brief Decorator indicating a function is potentially unused */
--#ifdef UNUSED
--#elif __GNUC__
--#define UNUSED __attribute__ ((unused));
--#else
--#define UNUSED
--#endif
--
-- /*!\brief Current ABI version number
-- *
-- * \internal
-- * If this file is altered in any way that changes the ABI, this value
-- * must be bumped. Examples include, but are not limited to, changing
-- * types, removing or reassigning enums, adding/removing/rearranging
-- * fields to structures
-- */
--#define VPX_CODEC_ABI_VERSION (2 + VPX_IMAGE_ABI_VERSION) /**<\hideinitializer*/
--
-- /*!\brief Algorithm return codes */
-- typedef enum {
-- /*!\brief Operation completed without error */
-- VPX_CODEC_OK,
--
-- /*!\brief Unspecified error */
-- VPX_CODEC_ERROR,
--
-- /*!\brief Memory operation failed */
-- VPX_CODEC_MEM_ERROR,
--
-- /*!\brief ABI version mismatch */
-- VPX_CODEC_ABI_MISMATCH,
--
-- /*!\brief Algorithm does not have required capability */
-- VPX_CODEC_INCAPABLE,
--
-- /*!\brief The given bitstream is not supported.
-- *
-- * The bitstream was unable to be parsed at the highest level. The decoder
-- * is unable to proceed. This error \ref SHOULD be treated as fatal to the
-- * stream. */
-- VPX_CODEC_UNSUP_BITSTREAM,
--
-- /*!\brief Encoded bitstream uses an unsupported feature
-- *
-- * The decoder does not implement a feature required by the encoder. This
-- * return code should only be used for features that prevent future
-- * pictures from being properly decoded. This error \ref MAY be treated as
-- * fatal to the stream or \ref MAY be treated as fatal to the current GOP.
-- */
-- VPX_CODEC_UNSUP_FEATURE,
--
-- /*!\brief The coded data for this stream is corrupt or incomplete
-- *
-- * There was a problem decoding the current frame. This return code
-- * should only be used for failures that prevent future pictures from
-- * being properly decoded. This error \ref MAY be treated as fatal to the
-- * stream or \ref MAY be treated as fatal to the current GOP. If decoding
-- * is continued for the current GOP, artifacts may be present.
-- */
-- VPX_CODEC_CORRUPT_FRAME,
--
-- /*!\brief An application-supplied parameter is not valid.
-- *
-- */
-- VPX_CODEC_INVALID_PARAM,
--
-- /*!\brief An iterator reached the end of list.
-- *
-- */
-- VPX_CODEC_LIST_END,
--
-- }
-- vpx_codec_err_t;
--
--
-- /*! \brief Codec capabilities bitfield
-- *
-- * Each codec advertises the capabilities it supports as part of its
-- * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces
-- * or functionality, and are not required to be supported.
-- *
-- * The available flags are specified by VPX_CODEC_CAP_* defines.
-- */
-- typedef long vpx_codec_caps_t;
--#define VPX_CODEC_CAP_DECODER 0x1 /**< Is a decoder */
--#define VPX_CODEC_CAP_ENCODER 0x2 /**< Is an encoder */
--#define VPX_CODEC_CAP_XMA 0x4 /**< Supports e_xternal Memory Allocation */
--
--
-- /*! \brief Initialization-time Feature Enabling
-- *
-- * Certain codec features must be known at initialization time, to allow for
-- * proper memory allocation.
-- *
-- * The available flags are specified by VPX_CODEC_USE_* defines.
-- */
-- typedef long vpx_codec_flags_t;
--#define VPX_CODEC_USE_XMA 0x00000001 /**< Use e_xternal Memory Allocation mode */
--
--
-- /*!\brief Codec interface structure.
-- *
-- * Contains function pointers and other data private to the codec
-- * implementation. This structure is opaque to the application.
-- */
-- typedef const struct vpx_codec_iface vpx_codec_iface_t;
--
--
-- /*!\brief Codec private data structure.
-- *
-- * Contains data private to the codec implementation. This structure is opaque
-- * to the application.
-- */
-- typedef struct vpx_codec_priv vpx_codec_priv_t;
--
--
-- /*!\brief Iterator
-- *
-- * Opaque storage used for iterating over lists.
-- */
-- typedef const void *vpx_codec_iter_t;
--
--
-- /*!\brief Codec context structure
-- *
-- * All codecs \ref MUST support this context structure fully. In general,
-- * this data should be considered private to the codec algorithm, and
-- * not be manipulated or examined by the calling application. Applications
-- * may reference the 'name' member to get a printable description of the
-- * algorithm.
-- */
-- typedef struct
-- {
-- const char *name; /**< Printable interface name */
-- vpx_codec_iface_t *iface; /**< Interface pointers */
-- vpx_codec_err_t err; /**< Last returned error */
-- const char *err_detail; /**< Detailed info, if available */
-- vpx_codec_flags_t init_flags; /**< Flags passed at init time */
-- union
-- {
-- struct vpx_codec_dec_cfg *dec; /**< Decoder Configuration Pointer */
-- struct vpx_codec_enc_cfg *enc; /**< Encoder Configuration Pointer */
-- void *raw;
-- } config; /**< Configuration pointer aliasing union */
-- vpx_codec_priv_t *priv; /**< Algorithm private storage */
-- } vpx_codec_ctx_t;
--
--
-- /*
-- * Library Version Number Interface
-- *
-- * For example, see the following sample return values:
-- * vpx_codec_version() (1<<16 | 2<<8 | 3)
-- * vpx_codec_version_str() "v1.2.3-rc1-16-gec6a1ba"
-- * vpx_codec_version_extra_str() "rc1-16-gec6a1ba"
-- */
--
-- /*!\brief Return the version information (as an integer)
-- *
-- * Returns a packed encoding of the library version number. This will only include
-- * the major.minor.patch component of the version number. Note that this encoded
-- * value should be accessed through the macros provided, as the encoding may change
-- * in the future.
-- *
-- */
-- int vpx_codec_version(void);
--#define VPX_VERSION_MAJOR(v) ((v>>16)&0xff) /**< extract major from packed version */
--#define VPX_VERSION_MINOR(v) ((v>>8)&0xff) /**< extract minor from packed version */
--#define VPX_VERSION_PATCH(v) ((v>>0)&0xff) /**< extract patch from packed version */
--
-- /*!\brief Return the version major number */
--#define vpx_codec_version_major() ((vpx_codec_version()>>16)&0xff)
--
-- /*!\brief Return the version minr number */
--#define vpx_codec_version_minor() ((vpx_codec_version()>>8)&0xff)
--
-- /*!\brief Return the version patch number */
--#define vpx_codec_version_patch() ((vpx_codec_version()>>0)&0xff)
--
--
-- /*!\brief Return the version information (as a string)
-- *
-- * Returns a printable string containing the full library version number. This may
-- * contain additional text following the three digit version number, as to indicate
-- * release candidates, prerelease versions, etc.
-- *
-- */
-- const char *vpx_codec_version_str(void);
--
--
-- /*!\brief Return the version information (as a string)
-- *
-- * Returns a printable "extra string". This is the component of the string returned
-- * by vpx_codec_version_str() following the three digit version number.
-- *
-- */
-- const char *vpx_codec_version_extra_str(void);
--
--
-- /*!\brief Return the build configuration
-- *
-- * Returns a printable string containing an encoded version of the build
-- * configuration. This may be useful to vpx support.
-- *
-- */
-- const char *vpx_codec_build_config(void);
--
--
-- /*!\brief Return the name for a given interface
-- *
-- * Returns a human readable string for name of the given codec interface.
-- *
-- * \param[in] iface Interface pointer
-- *
-- */
-- const char *vpx_codec_iface_name(vpx_codec_iface_t *iface);
--
--
-- /*!\brief Convert error number to printable string
-- *
-- * Returns a human readable string for the last error returned by the
-- * algorithm. The returned error will be one line and will not contain
-- * any newline characters.
-- *
-- *
-- * \param[in] err Error number.
-- *
-- */
-- const char *vpx_codec_err_to_string(vpx_codec_err_t err);
--
--
-- /*!\brief Retrieve error synopsis for codec context
-- *
-- * Returns a human readable string for the last error returned by the
-- * algorithm. The returned error will be one line and will not contain
-- * any newline characters.
-- *
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- *
-- */
-- const char *vpx_codec_error(vpx_codec_ctx_t *ctx);
--
--
-- /*!\brief Retrieve detailed error information for codec context
-- *
-- * Returns a human readable string providing detailed information about
-- * the last error.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- *
-- * \retval NULL
-- * No detailed information is available.
-- */
-- const char *vpx_codec_error_detail(vpx_codec_ctx_t *ctx);
--
--
-- /* REQUIRED FUNCTIONS
-- *
-- * The following functions are required to be implemented for all codecs.
-- * They represent the base case functionality expected of all codecs.
-- */
--
-- /*!\brief Destroy a codec instance
-- *
-- * Destroys a codec context, freeing any associated memory buffers.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- *
-- * \retval #VPX_CODEC_OK
-- * The codec algorithm initialized.
-- * \retval #VPX_CODEC_MEM_ERROR
-- * Memory allocation failed.
-- */
-- vpx_codec_err_t vpx_codec_destroy(vpx_codec_ctx_t *ctx);
--
--
-- /*!\brief Get the capabilities of an algorithm.
-- *
-- * Retrieves the capabliities bitfield from the algorithm's interface.
-- *
-- * \param[in] iface Pointer to the alogrithm interface
-- *
-- */
-- vpx_codec_caps_t vpx_codec_get_caps(vpx_codec_iface_t *iface);
--
--
-- /*!\brief Control algorithm
-- *
-- * This function is used to exchange algorithm specific data with the codec
-- * instance. This can be used to implement features specific to a particular
-- * algorithm.
-- *
-- * This wrapper function dispatches the request to the helper function
-- * associated with the given ctrl_id. It tries to call this function
-- * transparantly, but will return #VPX_CODEC_ERROR if the request could not
-- * be dispatched.
-- *
-- * Note that this function should not be used directly. Call the
-- * #vpx_codec_control wrapper macro instead.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] ctrl_id Algorithm specific control identifier
-- *
-- * \retval #VPX_CODEC_OK
-- * The control request was processed.
-- * \retval #VPX_CODEC_ERROR
-- * The control request was not processed.
-- * \retval #VPX_CODEC_INVALID_PARAM
-- * The data was not valid.
-- */
-- vpx_codec_err_t vpx_codec_control_(vpx_codec_ctx_t *ctx,
-- int ctrl_id,
-- ...);
--#if defined(VPX_DISABLE_CTRL_TYPECHECKS) && VPX_DISABLE_CTRL_TYPECHECKS
--# define vpx_codec_control(ctx,id,data) vpx_codec_control_(ctx,id,data)
--# define VPX_CTRL_USE_TYPE(id, typ)
--# define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ)
--# define VPX_CTRL_VOID(id, typ)
--
--#else
-- /*!\brief vpx_codec_control wrapper macro
-- *
-- * This macro allows for type safe conversions across the variadic parameter
-- * to vpx_codec_control_().
-- *
-- * \internal
-- * It works by dispatching the call to the control function through a wrapper
-- * function named with the id parameter.
-- */
--# define vpx_codec_control(ctx,id,data) vpx_codec_control_##id(ctx,id,data)\
-- /**<\hideinitializer*/
--
--
-- /*!\brief vpx_codec_control type definition macro
-- *
-- * This macro allows for type safe conversions across the variadic parameter
-- * to vpx_codec_control_(). It defines the type of the argument for a given
-- * control identifier.
-- *
-- * \internal
-- * It defines a static function with
-- * the correctly typed arguments as a wrapper to the type-unsafe internal
-- * function.
-- */
--# define VPX_CTRL_USE_TYPE(id, typ) \
-- static vpx_codec_err_t \
-- vpx_codec_control_##id(vpx_codec_ctx_t*, int, typ) UNUSED;\
-- \
-- static vpx_codec_err_t \
-- vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id, typ data) {\
-- return vpx_codec_control_(ctx, ctrl_id, data);\
-- } /**<\hideinitializer*/
--
--
-- /*!\brief vpx_codec_control deprecated type definition macro
-- *
-- * Like #VPX_CTRL_USE_TYPE, but indicates that the specified control is
-- * deprecated and should not be used. Consult the documentation for your
-- * codec for more information.
-- *
-- * \internal
-- * It defines a static function with the correctly typed arguments as a
-- * wrapper to the type-unsafe internal function.
-- */
--# define VPX_CTRL_USE_TYPE_DEPRECATED(id, typ) \
-- DECLSPEC_DEPRECATED static vpx_codec_err_t \
-- vpx_codec_control_##id(vpx_codec_ctx_t*, int, typ) DEPRECATED UNUSED;\
-- \
-- DECLSPEC_DEPRECATED static vpx_codec_err_t \
-- vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id, typ data) {\
-- return vpx_codec_control_(ctx, ctrl_id, data);\
-- } /**<\hideinitializer*/
--
--
-- /*!\brief vpx_codec_control void type definition macro
-- *
-- * This macro allows for type safe conversions across the variadic parameter
-- * to vpx_codec_control_(). It indicates that a given control identifier takes
-- * no argument.
-- *
-- * \internal
-- * It defines a static function without a data argument as a wrapper to the
-- * type-unsafe internal function.
-- */
--# define VPX_CTRL_VOID(id) \
-- static vpx_codec_err_t \
-- vpx_codec_control_##id(vpx_codec_ctx_t*, int) UNUSED;\
-- \
-- static vpx_codec_err_t \
-- vpx_codec_control_##id(vpx_codec_ctx_t *ctx, int ctrl_id) {\
-- return vpx_codec_control_(ctx, ctrl_id);\
-- } /**<\hideinitializer*/
--
--
--#endif
--
--
-- /*!\defgroup cap_xma External Memory Allocation Functions
-- *
-- * The following functions are required to be implemented for all codecs
-- * that advertise the VPX_CODEC_CAP_XMA capability. Calling these functions
-- * for codecs that don't advertise this capability will result in an error
-- * code being returned, usually VPX_CODEC_INCAPABLE
-- * @{
-- */
--
--
-- /*!\brief Memory Map Entry
-- *
-- * This structure is used to contain the properties of a memory segment. It
-- * is populated by the codec in the request phase, and by the calling
-- * application once the requested allocation has been performed.
-- */
-- typedef struct vpx_codec_mmap
-- {
-- /*
-- * The following members are set by the codec when requesting a segment
-- */
-- unsigned int id; /**< identifier for the segment's contents */
-- unsigned long sz; /**< size of the segment, in bytes */
-- unsigned int align; /**< required alignment of the segment, in bytes */
-- unsigned int flags; /**< bitfield containing segment properties */
--#define VPX_CODEC_MEM_ZERO 0x1 /**< Segment must be zeroed by allocation */
--#define VPX_CODEC_MEM_WRONLY 0x2 /**< Segment need not be readable */
--#define VPX_CODEC_MEM_FAST 0x4 /**< Place in fast memory, if available */
--
-- /* The following members are to be filled in by the allocation function */
-- void *base; /**< pointer to the allocated segment */
-- void (*dtor)(struct vpx_codec_mmap *map); /**< destructor to call */
-- void *priv; /**< allocator private storage */
-- } vpx_codec_mmap_t; /**< alias for struct vpx_codec_mmap */
--
--
-- /*!\brief Iterate over the list of segments to allocate.
-- *
-- * Iterates over a list of the segments to allocate. The iterator storage
-- * should be initialized to NULL to start the iteration. Iteration is complete
-- * when this function returns VPX_CODEC_LIST_END. The amount of memory needed to
-- * allocate is dependant upon the size of the encoded stream. In cases where the
-- * stream is not available at allocation time, a fixed size must be requested.
-- * The codec will not be able to operate on streams larger than the size used at
-- * allocation time.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- * \param[out] mmap Pointer to the memory map entry to populate.
-- * \param[in,out] iter Iterator storage, initialized to NULL
-- *
-- * \retval #VPX_CODEC_OK
-- * The memory map entry was populated.
-- * \retval #VPX_CODEC_ERROR
-- * Codec does not support XMA mode.
-- * \retval #VPX_CODEC_MEM_ERROR
-- * Unable to determine segment size from stream info.
-- */
-- vpx_codec_err_t vpx_codec_get_mem_map(vpx_codec_ctx_t *ctx,
-- vpx_codec_mmap_t *mmap,
-- vpx_codec_iter_t *iter);
--
--
-- /*!\brief Identify allocated segments to codec instance
-- *
-- * Stores a list of allocated segments in the codec. Segments \ref MUST be
-- * passed in the order they are read from vpx_codec_get_mem_map(), but may be
-- * passed in groups of any size. Segments \ref MUST be set only once. The
-- * allocation function \ref MUST ensure that the vpx_codec_mmap_t::base member
-- * is non-NULL. If the segment requires cleanup handling (eg, calling free()
-- * or close()) then the vpx_codec_mmap_t::dtor member \ref MUST be populated.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- * \param[in] mmaps Pointer to the first memory map entry in the list.
-- * \param[in] num_maps Number of entries being set at this time
-- *
-- * \retval #VPX_CODEC_OK
-- * The segment was stored in the codec context.
-- * \retval #VPX_CODEC_INCAPABLE
-- * Codec does not support XMA mode.
-- * \retval #VPX_CODEC_MEM_ERROR
-- * Segment base address was not set, or segment was already stored.
--
-- */
-- vpx_codec_err_t vpx_codec_set_mem_map(vpx_codec_ctx_t *ctx,
-- vpx_codec_mmap_t *mmaps,
-- unsigned int num_maps);
--
-- /*!@} - end defgroup cap_xma*/
-- /*!@} - end defgroup codec*/
--
--
--#endif
--#ifdef __cplusplus
--}
--#endif
-diff --git a/vpx_codec/vpx_codec.mk b/vpx_codec/vpx_codec.mk
-deleted file mode 100644
-index 75fbeea..0000000
---- a/vpx_codec/vpx_codec.mk
-+++ /dev/null
-@@ -1,26 +0,0 @@
--##
--## Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
--##
--## Use of this source code is governed by a BSD-style license and patent
--## grant that can be found in the LICENSE file in the root of the source
--## tree. All contributing project authors may be found in the AUTHORS
--## file in the root of the source tree.
--##
--
--
--API_EXPORTS += exports
--
--API_SRCS-yes += internal/vpx_codec_internal.h
--API_SRCS-yes += vpx_codec.h
--API_SRCS-yes += vpx_codec.mk
--API_SRCS-yes += vpx_codec_impl_top.h
--API_SRCS-yes += vpx_codec_impl_bottom.h
--API_SRCS-yes += vpx_decoder.h
--API_SRCS-yes += vpx_decoder_compat.h
--API_SRCS-yes += vpx_encoder.h
--API_SRCS-yes += vpx_image.h
--API_SRCS-yes += src/vpx_codec.c
--API_SRCS-yes += src/vpx_decoder.c
--API_SRCS-yes += src/vpx_decoder_compat.c
--API_SRCS-yes += src/vpx_image.c
--API_SRCS-yes += src/vpx_encoder.c
-diff --git a/vpx_codec/vpx_codec_impl_bottom.h b/vpx_codec/vpx_codec_impl_bottom.h
-deleted file mode 100644
-index c52654c..0000000
---- a/vpx_codec/vpx_codec_impl_bottom.h
-+++ /dev/null
-@@ -1,18 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*
-- * This file is to be included at the bottom of the header files defining the
-- * interface to individual codecs and contains matching blocks to those defined
-- * in vpx_codec_impl_top.h
-- */
--#ifdef __cplusplus
--}
--#endif
-diff --git a/vpx_codec/vpx_codec_impl_top.h b/vpx_codec/vpx_codec_impl_top.h
-deleted file mode 100644
-index f73809a..0000000
---- a/vpx_codec/vpx_codec_impl_top.h
-+++ /dev/null
-@@ -1,18 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*
-- * This file is to be included at the top of the header files defining the
-- * interface to individual codecs and contains various workarounds common
-- * to all codec implementations.
-- */
--#ifdef __cplusplus
--extern "C" {
--#endif
-diff --git a/vpx_codec/vpx_decoder.h b/vpx_codec/vpx_decoder.h
-deleted file mode 100644
-index 5e4968d..0000000
---- a/vpx_codec/vpx_decoder.h
-+++ /dev/null
-@@ -1,316 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\defgroup decoder Decoder Algorithm Interface
-- * \ingroup codec
-- * This abstraction allows applications using this decoder to easily support
-- * multiple video formats with minimal code duplication. This section describes
-- * the interface common to all decoders.
-- * @{
-- */
--
--/*!\file vpx_decoder.h
-- * \brief Describes the decoder algorithm interface to applications.
-- *
-- * This file describes the interface between an application and a
-- * video decoder algorithm.
-- *
-- */
--#ifdef __cplusplus
--extern "C" {
--#endif
--
--#ifndef VPX_DECODER_H
--#define VPX_DECODER_H
--#include "vpx_codec.h"
--
-- /*!\brief Current ABI version number
-- *
-- * \internal
-- * If this file is altered in any way that changes the ABI, this value
-- * must be bumped. Examples include, but are not limited to, changing
-- * types, removing or reassigning enums, adding/removing/rearranging
-- * fields to structures
-- */
--#define VPX_DECODER_ABI_VERSION (2 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/
--
-- /*! \brief Decoder capabilities bitfield
-- *
-- * Each decoder advertises the capabilities it supports as part of its
-- * ::vpx_codec_iface_t interface structure. Capabilities are extra interfaces
-- * or functionality, and are not required to be supported by a decoder.
-- *
-- * The available flags are specifiedby VPX_CODEC_CAP_* defines.
-- */
--#define VPX_CODEC_CAP_PUT_SLICE 0x10000 /**< Will issue put_slice callbacks */
--#define VPX_CODEC_CAP_PUT_FRAME 0x20000 /**< Will issue put_frame callbacks */
--#define VPX_CODEC_CAP_POSTPROC 0x40000 /**< Can postprocess decoded frame */
--
-- /*! \brief Initialization-time Feature Enabling
-- *
-- * Certain codec features must be known at initialization time, to allow for
-- * proper memory allocation.
-- *
-- * The available flags are specified by VPX_CODEC_USE_* defines.
-- */
--#define VPX_CODEC_USE_POSTPROC 0x10000 /**< Postprocess decoded frame */
--
-- /*!\brief Stream properties
-- *
-- * This structure is used to query or set properties of the decoded
-- * stream. Algorithms may extend this structure with data specific
-- * to their bitstream by setting the sz member appropriately.
-- */
-- typedef struct
-- {
-- unsigned int sz; /**< Size of this structure */
-- unsigned int w; /**< Width (or 0 for unknown/default) */
-- unsigned int h; /**< Height (or 0 for unknown/default) */
-- unsigned int is_kf; /**< Current frame is a keyframe */
-- } vpx_codec_stream_info_t;
--
-- /* REQUIRED FUNCTIONS
-- *
-- * The following functions are required to be implemented for all decoders.
-- * They represent the base case functionality expected of all decoders.
-- */
--
--
-- /*!\brief Initialization Configurations
-- *
-- * This structure is used to pass init time configuration options to the
-- * decoder.
-- */
-- typedef struct vpx_codec_dec_cfg
-- {
-- unsigned int threads; /**< Maximum number of threads to use, default 1 */
-- unsigned int w; /**< Width */
-- unsigned int h; /**< Height */
-- } vpx_codec_dec_cfg_t; /**< alias for struct vpx_codec_dec_cfg */
--
--
-- /*!\brief Initialize a decoder instance
-- *
-- * Initializes a decoder context using the given interface. Applications
-- * should call the vpx_codec_dec_init convenience macro instead of this
-- * function directly, to ensure that the ABI version number parameter
-- * is properly initialized.
-- *
-- * In XMA mode (activated by setting VPX_CODEC_USE_XMA in the flags
-- * parameter), the storage pointed to by the cfg parameter must be
-- * kept readable and stable until all memory maps have been set.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- * \param[in] iface Pointer to the alogrithm interface to use.
-- * \param[in] cfg Configuration to use, if known. May be NULL.
-- * \param[in] flags Bitfield of VPX_CODEC_USE_* flags
-- * \param[in] ver ABI version number. Must be set to
-- * VPX_DECODER_ABI_VERSION
-- * \retval #VPX_CODEC_OK
-- * The decoder algorithm initialized.
-- * \retval #VPX_CODEC_MEM_ERROR
-- * Memory allocation failed.
-- */
-- vpx_codec_err_t vpx_codec_dec_init_ver(vpx_codec_ctx_t *ctx,
-- vpx_codec_iface_t *iface,
-- vpx_codec_dec_cfg_t *cfg,
-- vpx_codec_flags_t flags,
-- int ver);
--
-- /*!\brief Convenience macro for vpx_codec_dec_init_ver()
-- *
-- * Ensures the ABI version parameter is properly set.
-- */
--#define vpx_codec_dec_init(ctx, iface, cfg, flags) \
-- vpx_codec_dec_init_ver(ctx, iface, cfg, flags, VPX_DECODER_ABI_VERSION)
--
--
-- /*!\brief Parse stream info from a buffer
-- *
-- * Performs high level parsing of the bitstream. Construction of a decoder
-- * context is not necessary. Can be used to determine if the bitstream is
-- * of the proper format, and to extract information from the stream.
-- *
-- * \param[in] iface Pointer to the alogrithm interface
-- * \param[in] data Pointer to a block of data to parse
-- * \param[in] data_sz Size of the data buffer
-- * \param[in,out] si Pointer to stream info to update. The size member
-- * \ref MUST be properly initialized, but \ref MAY be
-- * clobbered by the algorithm. This parameter \ref MAY
-- * be NULL.
-- *
-- * \retval #VPX_CODEC_OK
-- * Bitstream is parsable and stream information updated
-- */
-- vpx_codec_err_t vpx_codec_peek_stream_info(vpx_codec_iface_t *iface,
-- const uint8_t *data,
-- unsigned int data_sz,
-- vpx_codec_stream_info_t *si);
--
--
-- /*!\brief Return information about the current stream.
-- *
-- * Returns information about the stream that has been parsed during decoding.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in,out] si Pointer to stream info to update. The size member
-- * \ref MUST be properly initialized, but \ref MAY be
-- * clobbered by the algorithm. This parameter \ref MAY
-- * be NULL.
-- *
-- * \retval #VPX_CODEC_OK
-- * Bitstream is parsable and stream information updated
-- */
-- vpx_codec_err_t vpx_codec_get_stream_info(vpx_codec_ctx_t *ctx,
-- vpx_codec_stream_info_t *si);
--
--
-- /*!\brief Decode data
-- *
-- * Processes a buffer of coded data. If the processing results in a new
-- * decoded frame becoming available, PUT_SLICE and PUT_FRAME events may be
-- * generated, as appropriate. Encoded data \ref MUST be passed in DTS (decode
-- * time stamp) order. Frames produced will always be in PTS (presentation
-- * time stamp) order.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] data Pointer to this block of new coded data. If
-- * NULL, a VPX_CODEC_CB_PUT_FRAME event is posted
-- * for the previously decoded frame.
-- * \param[in] data_sz Size of the coded data, in bytes.
-- * \param[in] user_priv Application specific data to associate with
-- * this frame.
-- * \param[in] deadline Soft deadline the decoder should attempt to meet,
-- * in us. Set to zero for unlimited.
-- *
-- * \return Returns #VPX_CODEC_OK if the coded data was processed completely
-- * and future pictures can be decoded without error. Otherwise,
-- * see the descriptions of the other error codes in ::vpx_codec_err_t
-- * for recoverability capabilities.
-- */
-- vpx_codec_err_t vpx_codec_decode(vpx_codec_ctx_t *ctx,
-- const uint8_t *data,
-- unsigned int data_sz,
-- void *user_priv,
-- long deadline);
--
--
-- /*!\brief Decoded frames iterator
-- *
-- * Iterates over a list of the frames available for display. The iterator
-- * storage should be initialized to NULL to start the iteration. Iteration is
-- * complete when this function returns NULL.
-- *
-- * The list of available frames becomes valid upon completion of the
-- * vpx_codec_decode call, and remains valid until the next call to vpx_codec_decode.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in,out] iter Iterator storage, initialized to NULL
-- *
-- * \return Returns a pointer to an image, if one is ready for display. Frames
-- * produced will always be in PTS (presentation time stamp) order.
-- */
-- vpx_image_t *vpx_codec_get_frame(vpx_codec_ctx_t *ctx,
-- vpx_codec_iter_t *iter);
--
--
-- /*!\defgroup cap_put_frame Frame-Based Decoding Functions
-- *
-- * The following functions are required to be implemented for all decoders
-- * that advertise the VPX_CODEC_CAP_PUT_FRAME capability. Calling these functions
-- * for codecs that don't advertise this capability will result in an error
-- * code being returned, usually VPX_CODEC_ERROR
-- * @{
-- */
--
-- /*!\brief put frame callback prototype
-- *
-- * This callback is invoked by the decoder to notify the application of
-- * the availability of decoded image data.
-- */
-- typedef void (*vpx_codec_put_frame_cb_fn_t)(void *user_priv,
-- const vpx_image_t *img);
--
--
-- /*!\brief Register for notification of frame completion.
-- *
-- * Registers a given function to be called when a decoded frame is
-- * available.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] cb Pointer to the callback function
-- * \param[in] user_priv User's private data
-- *
-- * \retval #VPX_CODEC_OK
-- * Callback successfully registered.
-- * \retval #VPX_CODEC_ERROR
-- * Decoder context not initialized, or algorithm not capable of
-- * posting slice completion.
-- */
-- vpx_codec_err_t vpx_codec_register_put_frame_cb(vpx_codec_ctx_t *ctx,
-- vpx_codec_put_frame_cb_fn_t cb,
-- void *user_priv);
--
--
-- /*!@} - end defgroup cap_put_frame */
--
-- /*!\defgroup cap_put_slice Slice-Based Decoding Functions
-- *
-- * The following functions are required to be implemented for all decoders
-- * that advertise the VPX_CODEC_CAP_PUT_SLICE capability. Calling these functions
-- * for codecs that don't advertise this capability will result in an error
-- * code being returned, usually VPX_CODEC_ERROR
-- * @{
-- */
--
-- /*!\brief put slice callback prototype
-- *
-- * This callback is invoked by the decoder to notify the application of
-- * the availability of partially decoded image data. The
-- */
-- typedef void (*vpx_codec_put_slice_cb_fn_t)(void *user_priv,
-- const vpx_image_t *img,
-- const vpx_image_rect_t *valid,
-- const vpx_image_rect_t *update);
--
--
-- /*!\brief Register for notification of slice completion.
-- *
-- * Registers a given function to be called when a decoded slice is
-- * available.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] cb Pointer to the callback function
-- * \param[in] user_priv User's private data
-- *
-- * \retval #VPX_CODEC_OK
-- * Callback successfully registered.
-- * \retval #VPX_CODEC_ERROR
-- * Decoder context not initialized, or algorithm not capable of
-- * posting slice completion.
-- */
-- vpx_codec_err_t vpx_codec_register_put_slice_cb(vpx_codec_ctx_t *ctx,
-- vpx_codec_put_slice_cb_fn_t cb,
-- void *user_priv);
--
--
-- /*!@} - end defgroup cap_put_slice*/
--
-- /*!@} - end defgroup decoder*/
--
--#endif
--
--#ifdef __cplusplus
--}
--#endif
--
--#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
--#include "vpx_decoder_compat.h"
--#endif
-diff --git a/vpx_codec/vpx_decoder_compat.h b/vpx_codec/vpx_decoder_compat.h
-deleted file mode 100644
-index 25bb5eb..0000000
---- a/vpx_codec/vpx_decoder_compat.h
-+++ /dev/null
-@@ -1,586 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\defgroup decoder Common Decoder Algorithm Interface
-- * This abstraction allows applications using this decoder to easily support
-- * multiple video formats with minimal code duplication. This section describes
-- * the interface common to all codecs.
-- * @{
-- */
--
--/*!\file vpx_decoder_compat.h
-- * \brief Provides a compatibility layer between version 1 and 2 of this API.
-- *
-- * This interface has been deprecated. Only existing code should make use
-- * of this interface, and therefore, it is only thinly documented. Existing
-- * code should be ported to the vpx_codec_* API.
-- */
--#ifdef __cplusplus
--extern "C" {
--#endif
--
--#ifndef VPX_DECODER_COMPAT_H
--#define VPX_DECODER_COMPAT_H
--
-- /*!\brief Decoder algorithm return codes */
-- typedef enum {
-- /*!\brief Operation completed without error */
-- VPX_DEC_OK = VPX_CODEC_OK,
--
-- /*!\brief Unspecified error */
-- VPX_DEC_ERROR = VPX_CODEC_ERROR,
--
-- /*!\brief Memory operation failed */
-- VPX_DEC_MEM_ERROR = VPX_CODEC_MEM_ERROR,
--
-- /*!\brief ABI version mismatch */
-- VPX_DEC_ABI_MISMATCH = VPX_CODEC_ABI_MISMATCH,
--
-- /*!\brief The given bitstream is not supported.
-- *
-- * The bitstream was unable to be parsed at the highest level. The decoder
-- * is unable to proceed. This error \ref SHOULD be treated as fatal to the
-- * stream. */
-- VPX_DEC_UNSUP_BITSTREAM = VPX_CODEC_UNSUP_BITSTREAM,
--
-- /*!\brief Encoded bitstream uses an unsupported feature
-- *
-- * The decoder does not implement a feature required by the encoder. This
-- * return code should only be used for features that prevent future
-- * pictures from being properly decoded. This error \ref MAY be treated as
-- * fatal to the stream or \ref MAY be treated as fatal to the current GOP.
-- */
-- VPX_DEC_UNSUP_FEATURE = VPX_CODEC_UNSUP_FEATURE,
--
-- /*!\brief The coded data for this stream is corrupt or incomplete
-- *
-- * There was a problem decoding the current frame. This return code
-- * should only be used for failures that prevent future pictures from
-- * being properly decoded. This error \ref MAY be treated as fatal to the
-- * stream or \ref MAY be treated as fatal to the current GOP. If decoding
-- * is continued for the current GOP, artifacts may be present.
-- */
-- VPX_DEC_CORRUPT_FRAME = VPX_CODEC_CORRUPT_FRAME,
--
-- /*!\brief An application-supplied parameter is not valid.
-- *
-- */
-- VPX_DEC_INVALID_PARAM = VPX_CODEC_INVALID_PARAM,
--
-- /*!\brief An iterator reached the end of list.
-- *
-- */
-- VPX_DEC_LIST_END = VPX_CODEC_LIST_END,
--
-- }
-- vpx_dec_err_t;
--
-- /*! \brief Decoder capabilities bitfield
-- *
-- * Each decoder advertises the capabilities it supports as part of its
-- * ::vpx_dec_iface_t interface structure. Capabilities are extra interfaces
-- * or functionality, and are not required to be supported by a decoder.
-- *
-- * The available flags are specifiedby VPX_DEC_CAP_* defines.
-- */
-- typedef int vpx_dec_caps_t;
--#define VPX_DEC_CAP_PUT_SLICE 0x0001 /**< Will issue put_slice callbacks */
--#define VPX_DEC_CAP_PUT_FRAME 0x0002 /**< Will issue put_frame callbacks */
--#define VPX_DEC_CAP_XMA 0x0004 /**< Supports e_xternal Memory Allocation */
--
-- /*!\brief Stream properties
-- *
-- * This structure is used to query or set properties of the decoded
-- * stream. Algorithms may extend this structure with data specific
-- * to their bitstream by setting the sz member appropriately.
-- */
--#if 1
-- typedef vpx_codec_stream_info_t vpx_dec_stream_info_t;
--#else
-- typedef struct
-- {
-- unsigned int sz; /**< Size of this structure */
-- unsigned int w; /**< Width (or 0 for unknown/default) */
-- unsigned int h; /**< Height (or 0 for unknown/default) */
-- unsigned int is_kf; /**< Current frame is a keyframe */
-- } vpx_dec_stream_info_t;
--#endif
--
--
-- /*!\brief Decoder interface structure.
-- *
-- * Contains function pointers and other data private to the decoder
-- * implementation. This structure is opaque to the application.
-- */
-- typedef const struct vpx_codec_iface vpx_dec_iface_t;
-- typedef struct vpx_codec_priv vpx_dec_priv_t;
--
-- /*!\brief Iterator
-- *
-- * Opaque storage used for iterating over lists.
-- */
-- typedef vpx_codec_iter_t vpx_dec_iter_t;
--
-- /*!\brief Decoder context structure
-- *
-- * All decoders \ref MUST support this context structure fully. In general,
-- * this data should be considered private to the decoder algorithm, and
-- * not be manipulated or examined by the calling application. Applications
-- * may reference the 'name' member to get a printable description of the
-- * algorithm.
-- */
--#if 1
-- typedef vpx_codec_ctx_t vpx_dec_ctx_t;
--#else
-- typedef struct
-- {
-- const char *name; /**< Printable interface name */
-- vpx_dec_iface_t *iface; /**< Interface pointers */
-- vpx_dec_err_t err; /**< Last returned error */
-- vpx_dec_priv_t *priv; /**< Algorithm private storage */
-- } vpx_dec_ctx_t;
--#endif
--
--
-- /*!\brief Return the build configuration
-- *
-- * Returns a printable string containing an encoded version of the build
-- * configuration. This may be useful to vpx support.
-- *
-- */
-- const char *vpx_dec_build_config(void) DEPRECATED;
--
-- /*!\brief Return the name for a given interface
-- *
-- * Returns a human readable string for name of the given decoder interface.
-- *
-- * \param[in] iface Interface pointer
-- *
-- */
-- const char *vpx_dec_iface_name(vpx_dec_iface_t *iface) DEPRECATED;
--
--
-- /*!\brief Convert error number to printable string
-- *
-- * Returns a human readable string for the last error returned by the
-- * algorithm. The returned error will be one line and will not contain
-- * any newline characters.
-- *
-- *
-- * \param[in] err Error number.
-- *
-- */
-- const char *vpx_dec_err_to_string(vpx_dec_err_t err) DEPRECATED;
--
--
-- /*!\brief Retrieve error synopsis for decoder context
-- *
-- * Returns a human readable string for the last error returned by the
-- * algorithm. The returned error will be one line and will not contain
-- * any newline characters.
-- *
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- *
-- */
-- const char *vpx_dec_error(vpx_dec_ctx_t *ctx) DEPRECATED;
--
--
-- /*!\brief Retrieve detailed error information for decoder context
-- *
-- * Returns a human readable string providing detailed information about
-- * the last error.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- *
-- * \retval NULL
-- * No detailed information is available.
-- */
-- const char *vpx_dec_error_detail(vpx_dec_ctx_t *ctx) DEPRECATED;
--
--
-- /* REQUIRED FUNCTIONS
-- *
-- * The following functions are required to be implemented for all decoders.
-- * They represent the base case functionality expected of all decoders.
-- */
--
--
-- /*!\brief Initialize a decoder instance
-- *
-- * Initializes a decoder context using the given interface. Applications
-- * should call the vpx_dec_init convenience macro instead of this
-- * function directly, to ensure that the ABI version number parameter
-- * is properly initialized.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- * \param[in] iface Pointer to the alogrithm interface to use.
-- * \param[in] ver ABI version number. Must be set to
-- * VPX_DECODER_ABI_VERSION
-- * \retval #VPX_DEC_OK
-- * The decoder algorithm initialized.
-- * \retval #VPX_DEC_MEM_ERROR
-- * Memory allocation failed.
-- */
-- vpx_dec_err_t vpx_dec_init_ver(vpx_dec_ctx_t *ctx,
-- vpx_dec_iface_t *iface,
-- int ver) DEPRECATED;
--#define vpx_dec_init(ctx, iface) \
-- vpx_dec_init_ver(ctx, iface, VPX_DECODER_ABI_VERSION)
--
--
-- /*!\brief Destroy a decoder instance
-- *
-- * Destroys a decoder context, freeing any associated memory buffers.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- *
-- * \retval #VPX_DEC_OK
-- * The decoder algorithm initialized.
-- * \retval #VPX_DEC_MEM_ERROR
-- * Memory allocation failed.
-- */
-- vpx_dec_err_t vpx_dec_destroy(vpx_dec_ctx_t *ctx) DEPRECATED;
--
--
-- /*!\brief Get the capabilities of an algorithm.
-- *
-- * Retrieves the capabliities bitfield from the algorithm's interface.
-- *
-- * \param[in] iface Pointer to the alogrithm interface
-- *
-- */
-- vpx_dec_caps_t vpx_dec_get_caps(vpx_dec_iface_t *iface) DEPRECATED;
--
--
-- /*!\brief Parse stream info from a buffer
-- *
-- * Performs high level parsing of the bitstream. Construction of a decoder
-- * context is not necessary. Can be used to determine if the bitstream is
-- * of the proper format, and to extract information from the stream.
-- *
-- * \param[in] iface Pointer to the alogrithm interface
-- * \param[in] data Pointer to a block of data to parse
-- * \param[in] data_sz Size of the data buffer
-- * \param[in,out] si Pointer to stream info to update. The size member
-- * \ref MUST be properly initialized, but \ref MAY be
-- * clobbered by the algorithm. This parameter \ref MAY
-- * be NULL.
-- *
-- * \retval #VPX_DEC_OK
-- * Bitstream is parsable and stream information updated
-- */
-- vpx_dec_err_t vpx_dec_peek_stream_info(vpx_dec_iface_t *iface,
-- const uint8_t *data,
-- unsigned int data_sz,
-- vpx_dec_stream_info_t *si) DEPRECATED;
--
--
-- /*!\brief Return information about the current stream.
-- *
-- * Returns information about the stream that has been parsed during decoding.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in,out] si Pointer to stream info to update. The size member
-- * \ref MUST be properly initialized, but \ref MAY be
-- * clobbered by the algorithm. This parameter \ref MAY
-- * be NULL.
-- *
-- * \retval #VPX_DEC_OK
-- * Bitstream is parsable and stream information updated
-- */
-- vpx_dec_err_t vpx_dec_get_stream_info(vpx_dec_ctx_t *ctx,
-- vpx_dec_stream_info_t *si) DEPRECATED;
--
--
-- /*!\brief Control algorithm
-- *
-- * This function is used to exchange algorithm specific data with the decoder
-- * instance. This can be used to implement features specific to a particular
-- * algorithm.
-- *
-- * This wrapper function dispatches the request to the helper function
-- * associated with the given ctrl_id. It tries to call this function
-- * transparantly, but will return #VPX_DEC_ERROR if the request could not
-- * be dispatched.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] ctrl_id Algorithm specific control identifier
-- * \param[in,out] data Data to exchange with algorithm instance.
-- *
-- * \retval #VPX_DEC_OK
-- * The control request was processed.
-- * \retval #VPX_DEC_ERROR
-- * The control request was not processed.
-- * \retval #VPX_DEC_INVALID_PARAM
-- * The data was not valid.
-- */
-- vpx_dec_err_t vpx_dec_control(vpx_dec_ctx_t *ctx,
-- int ctrl_id,
-- void *data) DEPRECATED;
--
-- /*!\brief Decode data
-- *
-- * Processes a buffer of coded data. If the processing results in a new
-- * decoded frame becoming available, #VPX_DEC_CB_PUT_SLICE and
-- * #VPX_DEC_CB_PUT_FRAME events may be generated, as appropriate. Encoded data
-- * \ref MUST be passed in DTS (decode time stamp) order. Frames produced will
-- * always be in PTS (presentation time stamp) order.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] data Pointer to this block of new coded data. If
-- * NULL, a VPX_DEC_CB_PUT_FRAME event is posted
-- * for the previously decoded frame.
-- * \param[in] data_sz Size of the coded data, in bytes.
-- * \param[in] user_priv Application specific data to associate with
-- * this frame.
-- * \param[in] rel_pts PTS relative to the previous frame, in us. If
-- * unknown or unavailable, set to zero.
-- *
-- * \return Returns #VPX_DEC_OK if the coded data was processed completely
-- * and future pictures can be decoded without error. Otherwise,
-- * see the descriptions of the other error codes in ::vpx_dec_err_t
-- * for recoverability capabilities.
-- */
-- vpx_dec_err_t vpx_dec_decode(vpx_dec_ctx_t *ctx,
-- uint8_t *data,
-- unsigned int data_sz,
-- void *user_priv,
-- int rel_pts) DEPRECATED;
--
--
-- /*!\brief Decoded frames iterator
-- *
-- * Iterates over a list of the frames available for display. The iterator
-- * storage should be initialized to NULL to start the iteration. Iteration is
-- * complete when this function returns NULL.
-- *
-- * The list of available frames becomes valid upon completion of the
-- * vpx_dec_decode call, and remains valid until the next call to vpx_dec_decode.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in out] iter Iterator storage, initialized to NULL
-- *
-- * \return Returns a pointer to an image, if one is ready for display. Frames
-- * produced will always be in PTS (presentation time stamp) order.
-- */
-- vpx_image_t *vpx_dec_get_frame(vpx_dec_ctx_t *ctx,
-- vpx_dec_iter_t *iter) DEPRECATED;
--
--
-- /*!\defgroup cap_put_frame Frame-Based Decoding Functions
-- *
-- * The following functions are required to be implemented for all decoders
-- * that advertise the VPX_DEC_CAP_PUT_FRAME capability. Calling these functions
-- * for codecs that don't advertise this capability will result in an error
-- * code being returned, usually VPX_DEC_ERROR
-- * @{
-- */
--
-- /*!\brief put frame callback prototype
-- *
-- * This callback is invoked by the decoder to notify the application of
-- * the availability of decoded image data.
-- */
-- typedef void (*vpx_dec_put_frame_cb_fn_t)(void *user_priv,
-- const vpx_image_t *img);
--
--
-- /*!\brief Register for notification of frame completion.
-- *
-- * Registers a given function to be called when a decoded frame is
-- * available.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] cb Pointer to the callback function
-- * \param[in] user_priv User's private data
-- *
-- * \retval #VPX_DEC_OK
-- * Callback successfully registered.
-- * \retval #VPX_DEC_ERROR
-- * Decoder context not initialized, or algorithm not capable of
-- * posting slice completion.
-- */
-- vpx_dec_err_t vpx_dec_register_put_frame_cb(vpx_dec_ctx_t *ctx,
-- vpx_dec_put_frame_cb_fn_t cb,
-- void *user_priv) DEPRECATED;
--
--
-- /*!@} - end defgroup cap_put_frame */
--
-- /*!\defgroup cap_put_slice Slice-Based Decoding Functions
-- *
-- * The following functions are required to be implemented for all decoders
-- * that advertise the VPX_DEC_CAP_PUT_SLICE capability. Calling these functions
-- * for codecs that don't advertise this capability will result in an error
-- * code being returned, usually VPX_DEC_ERROR
-- * @{
-- */
--
-- /*!\brief put slice callback prototype
-- *
-- * This callback is invoked by the decoder to notify the application of
-- * the availability of partially decoded image data. The
-- */
-- typedef void (*vpx_dec_put_slice_cb_fn_t)(void *user_priv,
-- const vpx_image_t *img,
-- const vpx_image_rect_t *valid,
-- const vpx_image_rect_t *update);
--
--
-- /*!\brief Register for notification of slice completion.
-- *
-- * Registers a given function to be called when a decoded slice is
-- * available.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] cb Pointer to the callback function
-- * \param[in] user_priv User's private data
-- *
-- * \retval #VPX_DEC_OK
-- * Callback successfully registered.
-- * \retval #VPX_DEC_ERROR
-- * Decoder context not initialized, or algorithm not capable of
-- * posting slice completion.
-- */
-- vpx_dec_err_t vpx_dec_register_put_slice_cb(vpx_dec_ctx_t *ctx,
-- vpx_dec_put_slice_cb_fn_t cb,
-- void *user_priv) DEPRECATED;
--
--
-- /*!@} - end defgroup cap_put_slice*/
--
-- /*!\defgroup cap_xma External Memory Allocation Functions
-- *
-- * The following functions are required to be implemented for all decoders
-- * that advertise the VPX_DEC_CAP_XMA capability. Calling these functions
-- * for codecs that don't advertise this capability will result in an error
-- * code being returned, usually VPX_DEC_ERROR
-- * @{
-- */
--
-- /*!\brief Memory Map Entry
-- *
-- * This structure is used to contain the properties of a memory segment. It
-- * is populated by the decoder in the request phase, and by the calling
-- * application once the requested allocation has been performed.
-- */
--#if 1
--#define VPX_DEC_MEM_ZERO 0x1 /**< Segment must be zeroed by allocation */
--#define VPX_DEC_MEM_WRONLY 0x2 /**< Segment need not be readable */
--#define VPX_DEC_MEM_FAST 0x4 /**< Place in fast memory, if available */
-- typedef struct vpx_codec_mmap vpx_dec_mmap_t;
--#else
-- typedef struct vpx_dec_mmap
-- {
-- /*
-- * The following members are set by the codec when requesting a segment
-- */
-- unsigned int id; /**< identifier for the segment's contents */
-- unsigned long sz; /**< size of the segment, in bytes */
-- unsigned int align; /**< required alignment of the segment, in bytes */
-- unsigned int flags; /**< bitfield containing segment properties */
--#define VPX_DEC_MEM_ZERO 0x1 /**< Segment must be zeroed by allocation */
--#define VPX_DEC_MEM_WRONLY 0x2 /**< Segment need not be readable */
--#define VPX_DEC_MEM_FAST 0x4 /**< Place in fast memory, if available */
--
-- /* The following members are to be filled in by the allocation function */
-- void *base; /**< pointer to the allocated segment */
-- void (*dtor)(struct vpx_dec_mmap *map); /**< destructor to call */
-- void *priv; /**< allocator private storage */
-- } vpx_dec_mmap_t;
--#endif
--
-- /*!\brief Initialize a decoder instance in external allocation mode
-- *
-- * Initializes a decoder context using the given interface. Applications
-- * should call the vpx_dec_xma_init convenience macro instead of this
-- * function directly, to ensure that the ABI version number parameter
-- * is properly initialized.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- * \param[in] iface Pointer to the alogrithm interface to use.
-- * \param[in] ver ABI version number. Must be set to
-- * VPX_DECODER_ABI_VERSION
-- * \retval #VPX_DEC_OK
-- * The decoder algorithm initialized.
-- * \retval #VPX_DEC_ERROR
-- * Decoder does not support XMA mode.
-- */
-- vpx_dec_err_t vpx_dec_xma_init_ver(vpx_dec_ctx_t *ctx,
-- vpx_dec_iface_t *iface,
-- int ver) DEPRECATED;
--#define vpx_dec_xma_init(ctx, iface) \
-- vpx_dec_xma_init_ver(ctx, iface, VPX_DECODER_ABI_VERSION)
--
--
-- /*!\brief Iterate over the list of segments to allocate.
-- *
-- * Iterates over a list of the segments to allocate. The iterator storage
-- * should be initialized to NULL to start the iteration. Iteration is complete
-- * when this function returns VPX_DEC_LIST_END. The amount of memory needed to
-- * allocate is dependant upon the size of the encoded stream. This means that
-- * the stream info structure must be known at allocation time. It can be
-- * populated with the vpx_dec_peek_stream_info() function. In cases where the
-- * stream to be decoded is not available at allocation time, a fixed size must
-- * be requested. The decoder will not be able to decode streams larger than
-- * the size used at allocation time.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- * \param[out] mmap Pointer to the memory map entry to populate.
-- * \param[in] si Pointer to the stream info.
-- * \param[in out] iter Iterator storage, initialized to NULL
-- *
-- * \retval #VPX_DEC_OK
-- * The memory map entry was populated.
-- * \retval #VPX_DEC_ERROR
-- * Decoder does not support XMA mode.
-- * \retval #VPX_DEC_MEM_ERROR
-- * Unable to determine segment size from stream info.
-- */
-- vpx_dec_err_t vpx_dec_get_mem_map(vpx_dec_ctx_t *ctx,
-- vpx_dec_mmap_t *mmap,
-- const vpx_dec_stream_info_t *si,
-- vpx_dec_iter_t *iter) DEPRECATED;
--
--
-- /*!\brief Identify allocated segments to decoder instance
-- *
-- * Stores a list of allocated segments in the decoder. Segments \ref MUST be
-- * passed in the order they are read from vpx_dec_get_mem_map(), but may be
-- * passed in groups of any size. Segments \ref MUST be set only once. The
-- * allocation function \ref MUST ensure that the vpx_dec_mmap_t::base member
-- * is non-NULL. If the segment requires cleanup handling (eg, calling free()
-- * or close()) then the vpx_dec_mmap_t::dtor member \ref MUST be populated.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- * \param[in] mmaps Pointer to the first memory map entry in the list.
-- * \param[in] num_maps Number of entries being set at this time
-- *
-- * \retval #VPX_DEC_OK
-- * The segment was stored in the decoder context.
-- * \retval #VPX_DEC_ERROR
-- * Decoder does not support XMA mode.
-- * \retval #VPX_DEC_MEM_ERROR
-- * Segment base address was not set, or segment was already stored.
--
-- */
-- vpx_dec_err_t vpx_dec_set_mem_map(vpx_dec_ctx_t *ctx,
-- vpx_dec_mmap_t *mmaps,
-- unsigned int num_maps) DEPRECATED;
--
-- /*!@} - end defgroup cap_xma*/
-- /*!@} - end defgroup decoder*/
--
--
--#endif
--#ifdef __cplusplus
--}
--#endif
-diff --git a/vpx_codec/vpx_encoder.h b/vpx_codec/vpx_encoder.h
-deleted file mode 100644
-index 67393be..0000000
---- a/vpx_codec/vpx_encoder.h
-+++ /dev/null
-@@ -1,792 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\defgroup encoder Encoder Algorithm Interface
-- * \ingroup codec
-- * This abstraction allows applications using this encoder to easily support
-- * multiple video formats with minimal code duplication. This section describes
-- * the interface common to all encoders.
-- * @{
-- */
--
--/*!\file vpx_encoder.h
-- * \brief Describes the encoder algorithm interface to applications.
-- *
-- * This file describes the interface between an application and a
-- * video encoder algorithm.
-- *
-- */
--#ifdef __cplusplus
--extern "C" {
--#endif
--
--#ifndef VPX_ENCODER_H
--#define VPX_ENCODER_H
--#include "vpx_codec.h"
--
--
-- /*!\brief Current ABI version number
-- *
-- * \internal
-- * If this file is altered in any way that changes the ABI, this value
-- * must be bumped. Examples include, but are not limited to, changing
-- * types, removing or reassigning enums, adding/removing/rearranging
-- * fields to structures
-- */
--#define VPX_ENCODER_ABI_VERSION (2 + VPX_CODEC_ABI_VERSION) /**<\hideinitializer*/
--
--
-- /*! \brief Encoder capabilities bitfield
-- *
-- * Each encoder advertises the capabilities it supports as part of its
-- * ::vpx_codec_iface_t interface structure. Capabilities are extra
-- * interfaces or functionality, and are not required to be supported
-- * by an encoder.
-- *
-- * The available flags are specifiedby VPX_CODEC_CAP_* defines.
-- */
--#define VPX_CODEC_CAP_PSNR 0x10000 /**< Can issue PSNR packets */
--
--
-- /*! \brief Initialization-time Feature Enabling
-- *
-- * Certain codec features must be known at initialization time, to allow
-- * for proper memory allocation.
-- *
-- * The available flags are specified by VPX_CODEC_USE_* defines.
-- */
--#define VPX_CODEC_USE_PSNR 0x10000 /**< Calculate PSNR on each frame */
--
--
-- /*!\brief Generic fixed size buffer structure
-- *
-- * This structure is able to hold a reference to any fixed size buffer.
-- */
-- typedef struct vpx_fixed_buf
-- {
-- void *buf; /**< Pointer to the data */
-- size_t sz; /**< Length of the buffer, in chars */
-- } vpx_fixed_buf_t; /**< alias for struct vpx_fixed_buf */
--
--
-- /*!\brief Time Stamp Type
-- *
-- * An integer, which when multiplied by the stream's time base, provides
-- * the absolute time of a sample.
-- */
-- typedef int64_t vpx_codec_pts_t;
--
--
-- /*!\brief Compressed Frame Flags
-- *
-- * This type represents a bitfield containing information about a compressed
-- * frame that may be useful to an application. The most significant 16 bits
-- * can be used by an algorithm to provide additional detail, for example to
-- * support frame types that are codec specific (MPEG-1 D-frames for example)
-- */
-- typedef uint32_t vpx_codec_frame_flags_t;
--#define VPX_FRAME_IS_KEY 0x1 /**< frame is the start of a GOP */
--#define VPX_FRAME_IS_DROPPABLE 0x2 /**< frame can be dropped without affecting
-- the stream (no future frame depends on
-- this one) */
--#define VPX_FRAME_IS_INVISIBLE 0x4 /**< frame should be decoded but will not
-- be shown */
--
--
-- /*!\brief Encoder output packet variants
-- *
-- * This enumeration lists the different kinds of data packets that can be
-- * returned by calls to vpx_codec_get_cx_data(). Algorithms \ref MAY
-- * extend this list to provide additional functionality.
-- */
-- enum vpx_codec_cx_pkt_kind
-- {
-- VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */
-- VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */
-- VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */
-- VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */
-- };
--
--
-- /*!\brief Encoder output packet
-- *
-- * This structure contains the different kinds of output data the encoder
-- * may produce while compressing a frame.
-- */
-- typedef struct vpx_codec_cx_pkt
-- {
-- enum vpx_codec_cx_pkt_kind kind; /**< packet variant */
-- union
-- {
-- struct
-- {
-- void *buf; /**< compressed data buffer */
-- size_t sz; /**< length of compressed data */
-- vpx_codec_pts_t pts; /**< time stamp to show frame
-- (in timebase units) */
-- unsigned long duration; /**< duration to show frame
-- (in timebase units) */
-- vpx_codec_frame_flags_t flags; /**< flags for this frame */
-- } frame; /**< data for compressed frame packet */
-- struct vpx_fixed_buf twopass_stats; /**< data for two-pass packet */
-- struct vpx_psnr_pkt
-- {
-- unsigned int samples[4]; /**< Number of samples, total/y/u/v */
-- uint64_t sse[4]; /**< sum squared error, total/y/u/v */
-- double psnr[4]; /**< PSNR, total/y/u/v */
-- } psnr; /**< data for PSNR packet */
-- struct vpx_fixed_buf raw; /**< data for arbitrary packets */
--
-- /* This packet size is fixed to allow codecs to extend this
-- * interface without having to manage storage for raw packets,
-- * ie if it's smaller than 128 bytes, you can store in the
-- * packet list directly.
-- */
-- char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)]; /**< fixed sz */
-- } data; /**< packet data */
-- } vpx_codec_cx_pkt_t; /**< alias for struct vpx_codec_cx_pkt */
--
--
-- /*!\brief Rational Number
-- *
-- * This structure holds a fractional value.
-- */
-- typedef struct vpx_rational
-- {
-- int num; /**< fraction numerator */
-- int den; /**< fraction denominator */
-- } vpx_rational_t; /**< alias for struct vpx_rational */
--
--
-- /*!\brief Multi-pass Encoding Pass */
-- enum vpx_enc_pass
-- {
-- VPX_RC_ONE_PASS, /**< Single pass mode */
-- VPX_RC_FIRST_PASS, /**< First pass of multi-pass mode */
-- VPX_RC_LAST_PASS, /**< Final pass of multi-pass mode */
-- };
--
--
-- /*!\brief Rate control mode */
-- enum vpx_rc_mode
-- {
-- VPX_VBR, /**< Variable Bit Rate (VBR) mode */
-- VPX_CBR /**< Constant Bit Rate (CBR) mode */
-- };
--
--
-- /*!\brief Keyframe placement mode.
-- *
-- * This enumeration determines whether keyframes are placed automatically by
-- * the encoder or whether this behavior is disabled. Older releases of this
-- * SDK were implemented such that VPX_KF_FIXED meant keyframes were disabled.
-- * This name is confusing for this behavior, so the new symbols to be used
-- * are VPX_KF_AUTO and VPX_KF_DISABLED.
-- */
-- enum vpx_kf_mode
-- {
-- VPX_KF_FIXED, /**< deprecated, implies VPX_KF_DISABLED */
-- VPX_KF_AUTO, /**< Encoder determines optimal placement automatically */
-- VPX_KF_DISABLED = 0 /**< Encoder does not place keyframes. */
-- };
--
--
-- /*!\brief Encoded Frame Flags
-- *
-- * This type indicates a bitfield to be passed to vpx_codec_encode(), defining
-- * per-frame boolean values. By convention, bits common to all codecs will be
-- * named VPX_EFLAG_*, and bits specific to an algorithm will be named
-- * /algo/_eflag_*. The lower order 16 bits are reserved for common use.
-- */
-- typedef long vpx_enc_frame_flags_t;
--#define VPX_EFLAG_FORCE_KF (1<<0) /**< Force this frame to be a keyframe */
--
--
-- /*!\brief Encoder configuration structure
-- *
-- * This structure contains the encoder settings that have common representations
-- * across all codecs. This doesn't imply that all codecs support all features,
-- * however.
-- */
-- typedef struct vpx_codec_enc_cfg
-- {
-- /*
-- * generic settings (g)
-- */
--
-- /*!\brief Algorithm specific "usage" value
-- *
-- * Algorithms may define multiple values for usage, which may convey the
-- * intent of how the application intends to use the stream. If this value
-- * is non-zero, consult the documentation for the codec to determine its
-- * meaning.
-- */
-- unsigned int g_usage;
--
--
-- /*!\brief Maximum number of threads to use
-- *
-- * For multi-threaded implementations, use no more than this number of
-- * threads. The codec may use fewer threads than allowed. The value
-- * 0 is equivalent to the value 1.
-- */
-- unsigned int g_threads;
--
--
-- /*!\brief Bitstream profile to use
-- *
-- * Some codecs support a notion of multiple bitstream profiles. Typically
-- * this maps to a set of features that are turned on or off. Often the
-- * profile to use is determined by the features of the intended decoder.
-- * Consult the documentation for the codec to determine the valid values
-- * for this parameter, or set to zero for a sane default.
-- */
-- unsigned int g_profile; /**< profile of bitstream to use */
--
--
--
-- /*!\brief Width of the frame
-- *
-- * This value identifies the presentation resolution of the frame,
-- * in pixels. Note that the frames passed as input to the encoder must
-- * have this resolution. Frames will be presented by the decoder in this
-- * resolution, independent of any spatial resampling the encoder may do.
-- */
-- unsigned int g_w;
--
--
-- /*!\brief Height of the frame
-- *
-- * This value identifies the presentation resolution of the frame,
-- * in pixels. Note that the frames passed as input to the encoder must
-- * have this resolution. Frames will be presented by the decoder in this
-- * resolution, independent of any spatial resampling the encoder may do.
-- */
-- unsigned int g_h;
--
--
-- /*!\brief Stream timebase units
-- *
-- * Indicates the smallest interval of time, in seconds, used by the stream.
-- * For fixed frame rate material, or variable frame rate material where
-- * frames are timed at a multiple of a given clock (ex: video capture),
-- * the \ref RECOMMENDED method is to set the timebase to the reciprocal
-- * of the frame rate (ex: 1001/30000 for 29.970 Hz NTSC). This allows the
-- * pts to correspond to the frame number, which can be handy. For
-- * re-encoding video from containers with absolute time timestamps, the
-- * \ref RECOMMENDED method is to set the timebase to that of the parent
-- * container or multimedia framework (ex: 1/1000 for ms, as in FLV).
-- */
-- struct vpx_rational g_timebase;
--
--
-- /*!\brief Enable error resilient mode.
-- *
-- * Error resilient mode indicates to the encoder that it should take
-- * measures appropriate for streaming over lossy or noisy links, if
-- * possible. Set to 1 to enable this feature, 0 to disable it.
-- */
-- unsigned int g_error_resilient;
--
--
-- /*!\brief Multi-pass Encoding Mode
-- *
-- * This value should be set to the current phase for multi-pass encoding.
-- * For single pass, set to #VPX_RC_ONE_PASS.
-- */
-- enum vpx_enc_pass g_pass;
--
--
-- /*!\brief Allow lagged encoding
-- *
-- * If set, this value allows the encoder to consume a number of input
-- * frames before producing output frames. This allows the encoder to
-- * base decisions for the current frame on future frames. This does
-- * increase the latency of the encoding pipeline, so it is not appropriate
-- * in all situations (ex: realtime encoding).
-- *
-- * Note that this is a maximum value -- the encoder may produce frames
-- * sooner than the given limit. Set this value to 0 to disable this
-- * feature.
-- */
-- unsigned int g_lag_in_frames;
--
--
-- /*
-- * rate control settings (rc)
-- */
--
-- /*!\brief Temporal resampling configuration, if supported by the codec.
-- *
-- * Temporal resampling allows the codec to "drop" frames as a strategy to
-- * meet its target data rate. This can cause temporal discontinuities in
-- * the encoded video, which may appear as stuttering during playback. This
-- * trade-off is often acceptable, but for many applications is not. It can
-- * be disabled in these cases.
-- *
-- * Note that not all codecs support this feature. All vpx VPx codecs do.
-- * For other codecs, consult the documentation for that algorithm.
-- *
-- * This threshold is described as a percentage of the target data buffer.
-- * When the data buffer falls below this percentage of fullness, a
-- * dropped frame is indicated. Set the threshold to zero (0) to disable
-- * this feature.
-- */
-- unsigned int rc_dropframe_thresh;
--
--
-- /*!\brief Enable/disable spatial resampling, if supported by the codec.
-- *
-- * Spatial resampling allows the codec to compress a lower resolution
-- * version of the frame, which is then upscaled by the encoder to the
-- * correct presentation resolution. This increases visual quality at
-- * low data rates, at the expense of CPU time on the encoder/decoder.
-- */
-- unsigned int rc_resize_allowed;
--
--
-- /*!\brief Spatial resampling up watermark.
-- *
-- * This threshold is described as a percentage of the target data buffer.
-- * When the data buffer rises above this percentage of fullness, the
-- * encoder will step up to a higher resolution version of the frame.
-- */
-- unsigned int rc_resize_up_thresh;
--
--
-- /*!\brief Spatial resampling down watermark.
-- *
-- * This threshold is described as a percentage of the target data buffer.
-- * When the data buffer falls below this percentage of fullness, the
-- * encoder will step down to a lower resolution version of the frame.
-- */
-- unsigned int rc_resize_down_thresh;
--
--
-- /*!\brief Rate control algorithm to use.
-- *
-- * Indicates whether the end usage of this stream is to be streamed over
-- * a bandwidth constrained link, indicating that Constant Bit Rate (CBR)
-- * mode should be used, or whether it will be played back on a high
-- * bandwidth link, as from a local disk, where higher variations in
-- * bitrate are acceptable.
-- */
-- enum vpx_rc_mode rc_end_usage;
--
--
-- /*!\brief Two-pass stats buffer.
-- *
-- * A buffer containing all of the stats packets produced in the first
-- * pass, concatenated.
-- */
-- struct vpx_fixed_buf rc_twopass_stats_in;
--
--
-- /*!\brief Target data rate
-- *
-- * Target bandwidth to use for this stream, in kilobits per second.
-- */
-- unsigned int rc_target_bitrate;
--
--
-- /*
-- * quantizer settings
-- */
--
--
-- /*!\brief Minimum (Best Quality) Quantizer
-- *
-- * The quantizer is the most direct control over the quality of the
-- * encoded image. The range of valid values for the quantizer is codec
-- * specific. Consult the documentation for the codec to determine the
-- * values to use. To determine the range programmatically, call
-- * vpx_codec_enc_config_default() with a usage value of 0.
-- */
-- unsigned int rc_min_quantizer;
--
--
-- /*!\brief Maximum (Worst Quality) Quantizer
-- *
-- * The quantizer is the most direct control over the quality of the
-- * encoded image. The range of valid values for the quantizer is codec
-- * specific. Consult the documentation for the codec to determine the
-- * values to use. To determine the range programmatically, call
-- * vpx_codec_enc_config_default() with a usage value of 0.
-- */
-- unsigned int rc_max_quantizer;
--
--
-- /*
-- * bitrate tolerance
-- */
--
--
-- /*!\brief Rate control undershoot tolerance
-- *
-- * This value, expressed as a percentage of the target bitrate, describes
-- * the target bitrate for easier frames, allowing bits to be saved for
-- * harder frames. Set to zero to use the codec default.
-- */
-- unsigned int rc_undershoot_pct;
--
--
-- /*!\brief Rate control overshoot tolerance
-- *
-- * This value, expressed as a percentage of the target bitrate, describes
-- * the maximum allowed bitrate for a given frame. Set to zero to use the
-- * codec default.
-- */
-- unsigned int rc_overshoot_pct;
--
--
-- /*
-- * decoder buffer model parameters
-- */
--
--
-- /*!\brief Decoder Buffer Size
-- *
-- * This value indicates the amount of data that may be buffered by the
-- * decoding application. Note that this value is expressed in units of
-- * time (milliseconds). For example, a value of 5000 indicates that the
-- * client will buffer (at least) 5000ms worth of encoded data. Use the
-- * target bitrate (#rc_target_bitrate) to convert to bits/bytes, if
-- * necessary.
-- */
-- unsigned int rc_buf_sz;
--
--
-- /*!\brief Decoder Buffer Initial Size
-- *
-- * This value indicates the amount of data that will be buffered by the
-- * decoding application prior to beginning playback. This value is
-- * expressed in units of time (milliseconds). Use the target bitrate
-- * (#rc_target_bitrate) to convert to bits/bytes, if necessary.
-- */
-- unsigned int rc_buf_initial_sz;
--
--
-- /*!\brief Decoder Buffer Optimal Size
-- *
-- * This value indicates the amount of data that the encoder should try
-- * to maintain in the decoder's buffer. This value is expressed in units
-- * of time (milliseconds). Use the target bitrate (#rc_target_bitrate)
-- * to convert to bits/bytes, if necessary.
-- */
-- unsigned int rc_buf_optimal_sz;
--
--
-- /*
-- * 2 pass rate control parameters
-- */
--
--
-- /*!\brief Two-pass mode CBR/VBR bias
-- *
-- * Bias, expressed on a scale of 0 to 100, for determining target size
-- * for the current frame. The value 0 indicates the optimal CBR mode
-- * value should be used. The value 100 indicates the optimal VBR mode
-- * value should be used. Values in between indicate which way the
-- * encoder should "lean."
-- */
-- unsigned int rc_2pass_vbr_bias_pct; /**< RC mode bias between CBR and VBR(0-100: 0->CBR, 100->VBR) */
--
--
-- /*!\brief Two-pass mode per-GOP minimum bitrate
-- *
-- * This value, expressed as a percentage of the target bitrate, indicates
-- * the minimum bitrate to be used for a single GOP (aka "section")
-- */
-- unsigned int rc_2pass_vbr_minsection_pct;
--
--
-- /*!\brief Two-pass mode per-GOP maximum bitrate
-- *
-- * This value, expressed as a percentage of the target bitrate, indicates
-- * the maximum bitrate to be used for a single GOP (aka "section")
-- */
-- unsigned int rc_2pass_vbr_maxsection_pct;
--
--
-- /*
-- * keyframing settings (kf)
-- */
--
-- /*!\brief Keyframe placement mode
-- *
-- * This value indicates whether the encoder should place keyframes at a
-- * fixed interval, or determine the optimal placement automatically
-- * (as governed by the #kf_min_dist and #kf_max_dist parameters)
-- */
-- enum vpx_kf_mode kf_mode;
--
--
-- /*!\brief Keyframe minimum interval
-- *
-- * This value, expressed as a number of frames, prevents the encoder from
-- * placing a keyframe nearer than kf_min_dist to the previous keyframe. At
-- * least kf_min_dist frames non-keyframes will be coded before the next
-- * keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval.
-- */
-- unsigned int kf_min_dist;
--
--
-- /*!\brief Keyframe maximum interval
-- *
-- * This value, expressed as a number of frames, forces the encoder to code
-- * a keyframe if one has not been coded in the last kf_max_dist frames.
-- * A value of 0 implies all frames will be keyframes. Set kf_min_dist
-- * equal to kf_max_dist for a fixed interval.
-- */
-- unsigned int kf_max_dist;
--
-- } vpx_codec_enc_cfg_t; /**< alias for struct vpx_codec_enc_cfg */
--
--
-- /*!\brief Initialize an encoder instance
-- *
-- * Initializes a encoder context using the given interface. Applications
-- * should call the vpx_codec_enc_init convenience macro instead of this
-- * function directly, to ensure that the ABI version number parameter
-- * is properly initialized.
-- *
-- * In XMA mode (activated by setting VPX_CODEC_USE_XMA in the flags
-- * parameter), the storage pointed to by the cfg parameter must be
-- * kept readable and stable until all memory maps have been set.
-- *
-- * \param[in] ctx Pointer to this instance's context.
-- * \param[in] iface Pointer to the algorithm interface to use.
-- * \param[in] cfg Configuration to use, if known. May be NULL.
-- * \param[in] flags Bitfield of VPX_CODEC_USE_* flags
-- * \param[in] ver ABI version number. Must be set to
-- * VPX_ENCODER_ABI_VERSION
-- * \retval #VPX_CODEC_OK
-- * The decoder algorithm initialized.
-- * \retval #VPX_CODEC_MEM_ERROR
-- * Memory allocation failed.
-- */
-- vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx,
-- vpx_codec_iface_t *iface,
-- vpx_codec_enc_cfg_t *cfg,
-- vpx_codec_flags_t flags,
-- int ver);
--
--
-- /*!\brief Convenience macro for vpx_codec_enc_init_ver()
-- *
-- * Ensures the ABI version parameter is properly set.
-- */
--#define vpx_codec_enc_init(ctx, iface, cfg, flags) \
-- vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION)
--
--
-- /*!\brief Get a default configuration
-- *
-- * Initializes a encoder configuration structure with default values. Supports
-- * the notion of "usages" so that an algorithm may offer different default
-- * settings depending on the user's intended goal. This function \ref SHOULD
-- * be called by all applications to initialize the configuration structure
-- * before specializing the configuration with application specific values.
-- *
-- * \param[in] iface Pointer to the algorithm interface to use.
-- * \param[out] cfg Configuration buffer to populate
-- * \param[in] usage End usage. Set to 0 or use codec specific values.
-- *
-- * \retval #VPX_CODEC_OK
-- * The configuration was populated.
-- * \retval #VPX_CODEC_INCAPABLE
-- * Interface is not an encoder interface.
-- * \retval #VPX_CODEC_INVALID_PARAM
-- * A parameter was NULL, or the usage value was not recognized.
-- */
-- vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface,
-- vpx_codec_enc_cfg_t *cfg,
-- unsigned int usage);
--
--
-- /*!\brief Set or change configuration
-- *
-- * Reconfigures an encoder instance according to the given configuration.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] cfg Configuration buffer to use
-- *
-- * \retval #VPX_CODEC_OK
-- * The configuration was populated.
-- * \retval #VPX_CODEC_INCAPABLE
-- * Interface is not an encoder interface.
-- * \retval #VPX_CODEC_INVALID_PARAM
-- * A parameter was NULL, or the usage value was not recognized.
-- */
-- vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx,
-- const vpx_codec_enc_cfg_t *cfg);
--
--
-- /*!\brief Get global stream headers
-- *
-- * Retrieves a stream level global header packet, if supported by the codec.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- *
-- * \retval NULL
-- * Encoder does not support global header
-- * \retval Non-NULL
-- * Pointer to buffer containing global header packet
-- */
-- vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx);
--
--
--#define VPX_DL_REALTIME (1) /**< deadline parameter analogous to
-- * VPx REALTIME mode. */
--#define VPX_DL_GOOD_QUALITY (1000000) /**< deadline parameter analogous to
-- * VPx GOOD QUALITY mode. */
--#define VPX_DL_BEST_QUALITY (0) /**< deadline parameter analogous to
-- * VPx BEST QUALITY mode. */
-- /*!\brief Encode a frame
-- *
-- * Encodes a video frame at the given "presentation time." The presentation
-- * time stamp (PTS) \ref MUST be strictly increasing.
-- *
-- * The encoder supports the notion of a soft real-time deadline. Given a
-- * non-zero value to the deadline parameter, the encoder will make a "best
-- * effort" guarantee to return before the given time slice expires. It is
-- * implicit that limiting the available time to encode will degrade the
-- * output quality. The encoder can be given an unlimited time to produce the
-- * best possible frame by specifying a deadline of '0'. This deadline
-- * supercedes the VPx notion of "best quality, good quality, realtime".
-- * Applications that wish to map these former settings to the new deadline
-- * based system can use the symbols #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY,
-- * and #VPX_DL_BEST_QUALITY.
-- *
-- * When the last frame has been passed to the encoder, this function should
-- * continue to be called, with the img parameter set to NULL. This will
-- * signal the end-of-stream condition to the encoder and allow it to encode
-- * any held buffers. Encoding is complete when vpx_codec_encode() is called
-- * and vpx_codec_get_cx_data() returns no data.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] img Image data to encode, NULL to flush.
-- * \param[in] pts Presentation time stamp, in timebase units.
-- * \param[in] duration Duration to show frame, in timebase units.
-- * \param[in] flags Flags to use for encoding this frame.
-- * \param[in] deadline Time to spend encoding, in microseconds. (0=infinite)
-- *
-- * \retval #VPX_CODEC_OK
-- * The configuration was populated.
-- * \retval #VPX_CODEC_INCAPABLE
-- * Interface is not an encoder interface.
-- * \retval #VPX_CODEC_INVALID_PARAM
-- * A parameter was NULL, the image format is unsupported, etc.
-- */
-- vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx,
-- const vpx_image_t *img,
-- vpx_codec_pts_t pts,
-- unsigned long duration,
-- vpx_enc_frame_flags_t flags,
-- unsigned long deadline);
--
--
-- /*!\brief Set compressed data output buffer
-- *
-- * Sets the buffer that the codec should output the compressed data
-- * into. This call effectively sets the buffer pointer returned in the
-- * next VPX_CODEC_CX_FRAME_PKT packet. Subsequent packets will be
-- * appended into this buffer. The buffer is preserved across frames,
-- * so applications must periodically call this function after flushing
-- * the accumulated compressed data to disk or to the network to reset
-- * the pointer to the buffer's head.
-- *
-- * `pad_before` bytes will be skipped before writing the compressed
-- * data, and `pad_after` bytes will be appended to the packet. The size
-- * of the packet will be the sum of the size of the actual compressed
-- * data, pad_before, and pad_after. The padding bytes will be preserved
-- * (not overwritten).
-- *
-- * Note that calling this function does not guarantee that the returned
-- * compressed data will be placed into the specified buffer. In the
-- * event that the encoded data will not fit into the buffer provided,
-- * the returned packet \ref MAY point to an internal buffer, as it would
-- * if this call were never used. In this event, the output packet will
-- * NOT have any padding, and the application must free space and copy it
-- * to the proper place. This is of particular note in configurations
-- * that may output multiple packets for a single encoded frame (e.g., lagged
-- * encoding) or if the application does not reset the buffer periodically.
-- *
-- * Applications may restore the default behavior of the codec providing
-- * the compressed data buffer by calling this function with a NULL
-- * buffer.
-- *
-- * Applications \ref MUSTNOT call this function during iteration of
-- * vpx_codec_get_cx_data().
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in] buf Buffer to store compressed data into
-- * \param[in] pad_before Bytes to skip before writing compressed data
-- * \param[in] pad_after Bytes to skip after writing compressed data
-- *
-- * \retval #VPX_CODEC_OK
-- * The buffer was set successfully.
-- * \retval #VPX_CODEC_INVALID_PARAM
-- * A parameter was NULL, the image format is unsupported, etc.
-- */
-- vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx,
-- const vpx_fixed_buf_t *buf,
-- unsigned int pad_before,
-- unsigned int pad_after);
--
--
-- /*!\brief Encoded data iterator
-- *
-- * Iterates over a list of data packets to be passed from the encoder to the
-- * application. The different kinds of packets available are enumerated in
-- * #vpx_codec_cx_pkt_kind.
-- *
-- * #VPX_CODEC_CX_FRAME_PKT packets should be passed to the application's
-- * muxer. Multiple compressed frames may be in the list.
-- * #VPX_CODEC_STATS_PKT packets should be appended to a global buffer.
-- *
-- * The application \ref MUST silently ignore any packet kinds that it does
-- * not recognize or support.
-- *
-- * The data buffers returned from this function are only guaranteed to be
-- * valid until the application makes another call to any vpx_codec_* function.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- * \param[in,out] iter Iterator storage, initialized to NULL
-- *
-- * \return Returns a pointer to an output data packet (compressed frame data,
-- * two-pass statistics, etc.) or NULL to signal end-of-list.
-- *
-- */
-- const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx,
-- vpx_codec_iter_t *iter);
--
--
-- /*!\brief Get Preview Frame
-- *
-- * Returns an image that can be used as a preview. Shows the image as it would
-- * exist at the decompressor. The application \ref MUST NOT write into this
-- * image buffer.
-- *
-- * \param[in] ctx Pointer to this instance's context
-- *
-- * \return Returns a pointer to a preview image, or NULL if no image is
-- * available.
-- *
-- */
-- const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx);
--
--
-- /*!@} - end defgroup encoder*/
--
--#endif
--#ifdef __cplusplus
--}
--#endif
-diff --git a/vpx_codec/vpx_image.h b/vpx_codec/vpx_image.h
-deleted file mode 100644
-index a8a9416..0000000
---- a/vpx_codec/vpx_image.h
-+++ /dev/null
-@@ -1,201 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--/*!\file vpx_image.h
-- * \brief Describes the vpx image descriptor and associated operations
-- *
-- */
--#ifdef __cplusplus
--extern "C" {
--#endif
--
--#ifndef VPX_IMAGE_H
--#define VPX_IMAGE_H
--
-- /*!\brief Current ABI version number
-- *
-- * \internal
-- * If this file is altered in any way that changes the ABI, this value
-- * must be bumped. Examples include, but are not limited to, changing
-- * types, removing or reassigning enums, adding/removing/rearranging
-- * fields to structures
-- */
--#define VPX_IMAGE_ABI_VERSION (1) /**<\hideinitializer*/
--
--
--#define IMG_FMT_PLANAR 0x100 /**< Image is a planar format */
--#define IMG_FMT_UV_FLIP 0x200 /**< V plane precedes U plane in memory */
--#define IMG_FMT_HAS_ALPHA 0x400 /**< Image has an alpha channel componnent */
--
--
-- /*!\brief List of supported image formats */
-- typedef enum img_fmt {
-- IMG_FMT_NONE,
-- IMG_FMT_RGB24, /**< 24 bit per pixel packed RGB */
-- IMG_FMT_RGB32, /**< 32 bit per pixel packed 0RGB */
-- IMG_FMT_RGB565, /**< 16 bit per pixel, 565 */
-- IMG_FMT_RGB555, /**< 16 bit per pixel, 555 */
-- IMG_FMT_UYVY, /**< UYVY packed YUV */
-- IMG_FMT_YUY2, /**< YUYV packed YUV */
-- IMG_FMT_YVYU, /**< YVYU packed YUV */
-- IMG_FMT_BGR24, /**< 24 bit per pixel packed BGR */
-- IMG_FMT_RGB32_LE, /**< 32 bit packed BGR0 */
-- IMG_FMT_ARGB, /**< 32 bit packed ARGB, alpha=255 */
-- IMG_FMT_ARGB_LE, /**< 32 bit packed BGRA, alpha=255 */
-- IMG_FMT_RGB565_LE, /**< 16 bit per pixel, gggbbbbb rrrrrggg */
-- IMG_FMT_RGB555_LE, /**< 16 bit per pixel, gggbbbbb 0rrrrrgg */
-- IMG_FMT_YV12 = IMG_FMT_PLANAR | IMG_FMT_UV_FLIP | 1, /**< planar YVU */
-- IMG_FMT_I420 = IMG_FMT_PLANAR | 2,
-- IMG_FMT_VPXYV12 = IMG_FMT_PLANAR | IMG_FMT_UV_FLIP | 3, /** < planar 4:2:0 format with vpx color space */
-- IMG_FMT_VPXI420 = IMG_FMT_PLANAR | 4, /** < planar 4:2:0 format with vpx color space */
-- }
-- img_fmt_t; /**< alias for enum img_fmt */
--
--
-- /**\brief Image Descriptor */
-- typedef struct
-- {
-- img_fmt_t fmt; /**< Image Format */
--
-- /* Image storage dimensions */
-- unsigned int w; /**< Stored image width */
-- unsigned int h; /**< Stored image height */
--
-- /* Image display dimensions */
-- unsigned int d_w; /**< Displayed image width */
-- unsigned int d_h; /**< Displayed image height */
--
-- /* Chroma subsampling info */
-- unsigned int x_chroma_shift; /**< subsampling order, X */
-- unsigned int y_chroma_shift; /**< subsampling order, Y */
--
-- /* Image data pointers. */
--#define PLANE_PACKED 0 /**< To be used for all packed formats */
--#define PLANE_Y 0 /**< Y (Luminance) plane */
--#define PLANE_U 1 /**< U (Chroma) plane */
--#define PLANE_V 2 /**< V (Chroma) plane */
--#define PLANE_ALPHA 3 /**< A (Transparancy) plane */
-- unsigned char *planes[4]; /**< pointer to the top left pixel for each plane */
-- int stride[4]; /**< stride between rows for each plane */
--
-- int bps; /**< bits per sample (for packed formats) */
--
-- /* The following member may be set by the application to associate data
-- * with this image.
-- */
-- void *user_priv; /**< may be set by the application to associate data
-- * with this image. */
--
-- /* The following members should be treated as private. */
-- unsigned char *img_data; /**< private */
-- int img_data_owner; /**< private */
-- int self_allocd; /**< private */
-- } vpx_image_t; /**< alias for struct vpx_image */
--
-- /**\brief Representation of a rectangle on a surface */
-- typedef struct vpx_image_rect
-- {
-- unsigned int x; /**< leftmost column */
-- unsigned int y; /**< topmost row */
-- unsigned int w; /**< width */
-- unsigned int h; /**< height */
-- } vpx_image_rect_t; /**< alias for struct vpx_image_rect */
--
-- /*!\brief Open a descriptor, allocating storage for the underlying image
-- *
-- * Returns a descriptor for storing an image of the given format. The
-- * storage for the descriptor is allocated on the heap.
-- *
-- * \param[in] img Pointer to storage for descriptor. If this parameter
-- * is NULL, the storage for the descriptor will be
-- * allocated on the heap.
-- * \param[in] fmt Format for the image
-- * \param[in] d_w Width of the image
-- * \param[in] d_h Height of the image
-- * \param[in] align Alignment, in bytes, of each row in the image.
-- *
-- * \return Returns a pointer to the initialized image descriptor. If the img
-- * parameter is non-null, the value of the img parameter will be
-- * returned.
-- */
-- vpx_image_t *vpx_img_alloc(vpx_image_t *img,
-- img_fmt_t fmt,
-- unsigned int d_w,
-- unsigned int d_h,
-- unsigned int align);
--
-- /*!\brief Open a descriptor, using existing storage for the underlying image
-- *
-- * Returns a descriptor for storing an image of the given format. The
-- * storage for descriptor has been allocated elsewhere, and a descriptor is
-- * desired to "wrap" that storage.
-- *
-- * \param[in] img Pointer to storage for descriptor. If this parameter
-- * is NULL, the storage for the descriptor will be
-- * allocated on the heap.
-- * \param[in] fmt Format for the image
-- * \param[in] d_w Width of the image
-- * \param[in] d_h Height of the image
-- * \param[in] align Alignment, in bytes, of each row in the image.
-- * \param[in] img_data Storage to use for the image
-- *
-- * \return Returns a pointer to the initialized image descriptor. If the img
-- * parameter is non-null, the value of the img parameter will be
-- * returned.
-- */
-- vpx_image_t *vpx_img_wrap(vpx_image_t *img,
-- img_fmt_t fmt,
-- unsigned int d_w,
-- unsigned int d_h,
-- unsigned int align,
-- unsigned char *img_data);
--
--
-- /*!\brief Set the rectangle identifying the displayed portion of the image
-- *
-- * Updates the displayed rectangle (aka viewport) on the image surface to
-- * match the specified coordinates and size.
-- *
-- * \param[in] img Image descriptor
-- * \param[in] x leftmost column
-- * \param[in] y topmost row
-- * \param[in] w width
-- * \param[in] h height
-- *
-- * \return 0 if the requested rectangle is valid, nonzero otherwise.
-- */
-- int vpx_img_set_rect(vpx_image_t *img,
-- unsigned int x,
-- unsigned int y,
-- unsigned int w,
-- unsigned int h);
--
--
-- /*!\brief Flip the image vertically (top for bottom)
-- *
-- * Adjusts the image descriptor's pointers and strides to make the image
-- * be referenced upside-down.
-- *
-- * \param[in] img Image descriptor
-- */
-- void vpx_img_flip(vpx_image_t *img);
--
-- /*!\brief Close an image descriptor
-- *
-- * Frees all allocated storage associated with an image descriptor.
-- *
-- * \param[in] img Image descriptor
-- */
-- void vpx_img_free(vpx_image_t *img);
--
--#endif
--#ifdef __cplusplus
--}
--#endif
-diff --git a/vpx_mem/include/nds/vpx_mem_nds.h b/vpx_mem/include/nds/vpx_mem_nds.h
-index c332403..361c29b 100644
---- a/vpx_mem/include/nds/vpx_mem_nds.h
-+++ b/vpx_mem/include/nds/vpx_mem_nds.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/include/vpx_mem_intrnl.h b/vpx_mem/include/vpx_mem_intrnl.h
-index 3b68d86..4605b34 100644
---- a/vpx_mem/include/vpx_mem_intrnl.h
-+++ b/vpx_mem/include/vpx_mem_intrnl.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/include/vpx_mem_tracker.h b/vpx_mem/include/vpx_mem_tracker.h
-index ab85d19..49f783e 100644
---- a/vpx_mem/include/vpx_mem_tracker.h
-+++ b/vpx_mem/include/vpx_mem_tracker.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/intel_linux/vpx_mem.c b/vpx_mem/intel_linux/vpx_mem.c
-index 002e407..7bce794 100644
---- a/vpx_mem/intel_linux/vpx_mem.c
-+++ b/vpx_mem/intel_linux/vpx_mem.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/intel_linux/vpx_mem_tracker.c b/vpx_mem/intel_linux/vpx_mem_tracker.c
-index fa023e3..fcbebc9 100644
---- a/vpx_mem/intel_linux/vpx_mem_tracker.c
-+++ b/vpx_mem/intel_linux/vpx_mem_tracker.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/hmm_alloc.c b/vpx_mem/memory_manager/hmm_alloc.c
-index 9abd81e..3f10097 100644
---- a/vpx_mem/memory_manager/hmm_alloc.c
-+++ b/vpx_mem/memory_manager/hmm_alloc.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/hmm_base.c b/vpx_mem/memory_manager/hmm_base.c
-index 0cacc3f..fbc36de 100644
---- a/vpx_mem/memory_manager/hmm_base.c
-+++ b/vpx_mem/memory_manager/hmm_base.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/hmm_dflt_abort.c b/vpx_mem/memory_manager/hmm_dflt_abort.c
-index dc59f55..71b41d9 100644
---- a/vpx_mem/memory_manager/hmm_dflt_abort.c
-+++ b/vpx_mem/memory_manager/hmm_dflt_abort.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/hmm_grow.c b/vpx_mem/memory_manager/hmm_grow.c
-index 79d75a7..a979c7a 100644
---- a/vpx_mem/memory_manager/hmm_grow.c
-+++ b/vpx_mem/memory_manager/hmm_grow.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/hmm_largest.c b/vpx_mem/memory_manager/hmm_largest.c
-index 5ebe398..82a6a36 100644
---- a/vpx_mem/memory_manager/hmm_largest.c
-+++ b/vpx_mem/memory_manager/hmm_largest.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/hmm_resize.c b/vpx_mem/memory_manager/hmm_resize.c
-index 6e3f2f0..cb93bb1 100644
---- a/vpx_mem/memory_manager/hmm_resize.c
-+++ b/vpx_mem/memory_manager/hmm_resize.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/hmm_shrink.c b/vpx_mem/memory_manager/hmm_shrink.c
-index 5ef9b23..d845136 100644
---- a/vpx_mem/memory_manager/hmm_shrink.c
-+++ b/vpx_mem/memory_manager/hmm_shrink.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/hmm_true.c b/vpx_mem/memory_manager/hmm_true.c
-index 41103c8..586fc22 100644
---- a/vpx_mem/memory_manager/hmm_true.c
-+++ b/vpx_mem/memory_manager/hmm_true.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/include/cavl_if.h b/vpx_mem/memory_manager/include/cavl_if.h
-index e2733ef..da1b148 100644
---- a/vpx_mem/memory_manager/include/cavl_if.h
-+++ b/vpx_mem/memory_manager/include/cavl_if.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/include/cavl_impl.h b/vpx_mem/memory_manager/include/cavl_impl.h
-index 267bc73..e67cc8a 100644
---- a/vpx_mem/memory_manager/include/cavl_impl.h
-+++ b/vpx_mem/memory_manager/include/cavl_impl.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/include/heapmm.h b/vpx_mem/memory_manager/include/heapmm.h
-index 933e30d..4e46c41 100644
---- a/vpx_mem/memory_manager/include/heapmm.h
-+++ b/vpx_mem/memory_manager/include/heapmm.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/include/hmm_cnfg.h b/vpx_mem/memory_manager/include/hmm_cnfg.h
-index 86e4e9f..715163c 100644
---- a/vpx_mem/memory_manager/include/hmm_cnfg.h
-+++ b/vpx_mem/memory_manager/include/hmm_cnfg.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/memory_manager/include/hmm_intrnl.h b/vpx_mem/memory_manager/include/hmm_intrnl.h
-index 6e2be08..1dddb8a 100644
---- a/vpx_mem/memory_manager/include/hmm_intrnl.h
-+++ b/vpx_mem/memory_manager/include/hmm_intrnl.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/nds/vpx_mem_nds.c b/vpx_mem/nds/vpx_mem_nds.c
-index f2a3043..88d474a 100644
---- a/vpx_mem/nds/vpx_mem_nds.c
-+++ b/vpx_mem/nds/vpx_mem_nds.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/ti_c6x/vpx_mem_ti_6cx.c b/vpx_mem/ti_c6x/vpx_mem_ti_6cx.c
-index 6501855..c2a1c28 100644
---- a/vpx_mem/ti_c6x/vpx_mem_ti_6cx.c
-+++ b/vpx_mem/ti_c6x/vpx_mem_ti_6cx.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/vpx_mem.c b/vpx_mem/vpx_mem.c
-index f6b1a35..ba92024 100644
---- a/vpx_mem/vpx_mem.c
-+++ b/vpx_mem/vpx_mem.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/vpx_mem.h b/vpx_mem/vpx_mem.h
-index 6ccb9be..a1239c1 100644
---- a/vpx_mem/vpx_mem.h
-+++ b/vpx_mem/vpx_mem.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_mem/vpx_mem_tracker.c b/vpx_mem/vpx_mem_tracker.c
-index 4427e27..92152a6 100644
---- a/vpx_mem/vpx_mem_tracker.c
-+++ b/vpx_mem/vpx_mem_tracker.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_ports/config.h b/vpx_ports/config.h
-index da38137..9d32393 100644
---- a/vpx_ports/config.h
-+++ b/vpx_ports/config.h
-@@ -1,19 +1,10 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
--
--
--/* This file uses some preprocessor magic to expand the value of HAVE_CONFIG_H,
-- * as defined by the build system, so that different projects can use the file
-- * name for config.h that suits them.
-- */
--#define QUOTE_(x) #x
--#define QUOTE(x) QUOTE_(x)
--#include QUOTE(HAVE_CONFIG_H)
--#undef QUOTE
--#undef QUOTE_
-+#include "vpx_config.h"
-diff --git a/vpx_ports/emms.asm b/vpx_ports/emms.asm
-index 03e3499..096176d 100644
---- a/vpx_ports/emms.asm
-+++ b/vpx_ports/emms.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vpx_ports/mem.h b/vpx_ports/mem.h
-index 10942f1..ade2e30 100644
---- a/vpx_ports/mem.h
-+++ b/vpx_ports/mem.h
-@@ -1,17 +1,18 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
- #ifndef VPX_PORTS_MEM_H
- #define VPX_PORTS_MEM_H
- #include "vpx_config.h"
--#include "vpx_integer.h"
-+#include "vpx/vpx_integer.h"
-
- #if defined(__GNUC__) && __GNUC__
- #define DECLARE_ALIGNED(n,typ,val) typ val __attribute__ ((aligned (n)))
-diff --git a/vpx_ports/mem_ops.h b/vpx_ports/mem_ops.h
-index 869d583..109c270 100644
---- a/vpx_ports/mem_ops.h
-+++ b/vpx_ports/mem_ops.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_ports/mem_ops_aligned.h b/vpx_ports/mem_ops_aligned.h
-index 1d0db2c..7c4d95e 100644
---- a/vpx_ports/mem_ops_aligned.h
-+++ b/vpx_ports/mem_ops_aligned.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_ports/vpx_integer.h b/vpx_ports/vpx_integer.h
-deleted file mode 100644
-index d3f7ddd..0000000
---- a/vpx_ports/vpx_integer.h
-+++ /dev/null
-@@ -1,52 +0,0 @@
--/*
-- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-- */
--
--
--#ifndef VPX_INTEGER_H
--#define VPX_INTEGER_H
--
--/* get ptrdiff_t, size_t, wchar_t, NULL */
--#include <stddef.h>
--
--#if defined(HAVE_STDINT_H) && HAVE_STDINT_H
--#if defined(__cplusplus) && !defined(__STDC_FORMAT_MACROS)
--#define __STDC_FORMAT_MACROS
--#endif
--#include <stdint.h>
--#include <inttypes.h>
--#else
--typedef signed char int8_t;
--typedef signed short int16_t;
--typedef signed int int32_t;
--
--typedef unsigned char uint8_t;
--typedef unsigned short uint16_t;
--typedef unsigned int uint32_t;
--
--#if defined(_MSC_VER)
--typedef signed __int64 int64_t;
--typedef unsigned __int64 uint64_t;
--#define PRId64 "I64d"
--#endif
--
--#ifdef HAVE_ARMV6
--typedef unsigned int int_fast16_t;
--#else
--typedef signed short int_fast16_t;
--#endif
--typedef signed char int_fast8_t;
--typedef unsigned char uint_fast8_t;
--
--#ifndef _UINTPTR_T_DEFINED
--typedef unsigned int uintptr_t;
--#endif
--
--#endif
--
--#endif
-diff --git a/vpx_ports/vpx_timer.h b/vpx_ports/vpx_timer.h
-index 5c04538..11fee84 100644
---- a/vpx_ports/vpx_timer.h
-+++ b/vpx_ports/vpx_timer.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_ports/vpxtypes.h b/vpx_ports/vpxtypes.h
-index 86525b7..b9c8b8c 100644
---- a/vpx_ports/vpxtypes.h
-+++ b/vpx_ports/vpxtypes.h
-@@ -1,19 +1,18 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
- #ifndef __VPXTYPES_H__
- #define __VPXTYPES_H__
-
--#ifdef HAVE_CONFIG_H
--#include HAVE_CONFIG_H
--#endif
-+#include "vpx_ports/config.h"
-
- //#include <sys/types.h>
- #ifdef _MSC_VER
-diff --git a/vpx_ports/x86.h b/vpx_ports/x86.h
-index 935d037..8c23abd 100644
---- a/vpx_ports/x86.h
-+++ b/vpx_ports/x86.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_ports/x86_abi_support.asm b/vpx_ports/x86_abi_support.asm
-index db8208f..a1622e6 100644
---- a/vpx_ports/x86_abi_support.asm
-+++ b/vpx_ports/x86_abi_support.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-@@ -198,22 +199,38 @@
- push r9
- %endif
- %if %1 > 6
-- mov rax,[rbp+16]
-- push rax
-- %endif
-- %if %1 > 7
-- mov rax,[rbp+24]
-- push rax
-- %endif
-- %if %1 > 8
-- mov rax,[rbp+32]
-+ %assign i %1-6
-+ %assign off 16
-+ %rep i
-+ mov rax,[rbp+off]
- push rax
-+ %assign off off+8
-+ %endrep
- %endif
- %endm
- %endif
- %define UNSHADOW_ARGS mov rsp, rbp
- %endif
-
-+; must keep XMM6:XMM15 (libvpx uses XMM6 and XMM7) on Win64 ABI
-+; rsp register has to be aligned
-+%ifidn __OUTPUT_FORMAT__,x64
-+%macro SAVE_XMM 0
-+ sub rsp, 32
-+ movdqa XMMWORD PTR [rsp], xmm6
-+ movdqa XMMWORD PTR [rsp+16], xmm7
-+%endmacro
-+%macro RESTORE_XMM 0
-+ movdqa xmm6, XMMWORD PTR [rsp]
-+ movdqa xmm7, XMMWORD PTR [rsp+16]
-+ add rsp, 32
-+%endmacro
-+%else
-+%macro SAVE_XMM 0
-+%endmacro
-+%macro RESTORE_XMM 0
-+%endmacro
-+%endif
-
- ; Name of the rodata section
- ;
-@@ -229,3 +246,14 @@ fake_got:
- %else
- %define SECTION_RODATA section .rodata
- %endif
-+
-+
-+; Tell GNU ld that we don't require an executable stack.
-+%ifidn __OUTPUT_FORMAT__,elf32
-+section .note.GNU-stack noalloc noexec nowrite progbits
-+section .text
-+%elifidn __OUTPUT_FORMAT__,elf64
-+section .note.GNU-stack noalloc noexec nowrite progbits
-+section .text
-+%endif
-+
-diff --git a/vpx_scale/arm/armv4/gen_scalers_armv4.asm b/vpx_scale/arm/armv4/gen_scalers_armv4.asm
-index 1c904ed..e317fe9 100644
---- a/vpx_scale/arm/armv4/gen_scalers_armv4.asm
-+++ b/vpx_scale/arm/armv4/gen_scalers_armv4.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vpx_scale/arm/nds/yv12extend.c b/vpx_scale/arm/nds/yv12extend.c
-index 56959cb..9ec3466 100644
---- a/vpx_scale/arm/nds/yv12extend.c
-+++ b/vpx_scale/arm/nds/yv12extend.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/arm/neon/vp8_vpxyv12_copyframe_func_neon.asm b/vpx_scale/arm/neon/vp8_vpxyv12_copyframe_func_neon.asm
-index 26384c4..64e7bfe 100644
---- a/vpx_scale/arm/neon/vp8_vpxyv12_copyframe_func_neon.asm
-+++ b/vpx_scale/arm/neon/vp8_vpxyv12_copyframe_func_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vpx_scale/arm/neon/vp8_vpxyv12_copyframeyonly_neon.asm b/vpx_scale/arm/neon/vp8_vpxyv12_copyframeyonly_neon.asm
-index a50ae60..f79de3c 100644
---- a/vpx_scale/arm/neon/vp8_vpxyv12_copyframeyonly_neon.asm
-+++ b/vpx_scale/arm/neon/vp8_vpxyv12_copyframeyonly_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vpx_scale/arm/neon/vp8_vpxyv12_copysrcframe_func_neon.asm b/vpx_scale/arm/neon/vp8_vpxyv12_copysrcframe_func_neon.asm
-index c8923d5..2e24e24 100644
---- a/vpx_scale/arm/neon/vp8_vpxyv12_copysrcframe_func_neon.asm
-+++ b/vpx_scale/arm/neon/vp8_vpxyv12_copysrcframe_func_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vpx_scale/arm/neon/vp8_vpxyv12_extendframeborders_neon.asm b/vpx_scale/arm/neon/vp8_vpxyv12_extendframeborders_neon.asm
-index 8c9ce19..418578f 100644
---- a/vpx_scale/arm/neon/vp8_vpxyv12_extendframeborders_neon.asm
-+++ b/vpx_scale/arm/neon/vp8_vpxyv12_extendframeborders_neon.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vpx_scale/arm/scalesystemdependant.c b/vpx_scale/arm/scalesystemdependant.c
-index 3c355be..67954b2 100644
---- a/vpx_scale/arm/scalesystemdependant.c
-+++ b/vpx_scale/arm/scalesystemdependant.c
-@@ -1,18 +1,17 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-+#include "vpx_ports/config.h"
- #include "vpx_scale/vpxscale.h"
-
--#ifdef HAVE_CONFIG_H
--#include "vpx_config.h"
--#endif
-
- void (*vp8_yv12_extend_frame_borders_ptr)(YV12_BUFFER_CONFIG *ybf);
- extern void vp8_yv12_extend_frame_borders(YV12_BUFFER_CONFIG *ybf);
-diff --git a/vpx_scale/arm/yv12extend_arm.c b/vpx_scale/arm/yv12extend_arm.c
-index 7c3f7cd..5069030 100644
---- a/vpx_scale/arm/yv12extend_arm.c
-+++ b/vpx_scale/arm/yv12extend_arm.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/blackfin/yv12config.c b/vpx_scale/blackfin/yv12config.c
-index 7cb083f..950a5d2 100644
---- a/vpx_scale/blackfin/yv12config.c
-+++ b/vpx_scale/blackfin/yv12config.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/blackfin/yv12extend.c b/vpx_scale/blackfin/yv12extend.c
-index d5be495..80504ef 100644
---- a/vpx_scale/blackfin/yv12extend.c
-+++ b/vpx_scale/blackfin/yv12extend.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/dm642/bicubic_scaler_c64.c b/vpx_scale/dm642/bicubic_scaler_c64.c
-index 9bd3797..e026be5 100644
---- a/vpx_scale/dm642/bicubic_scaler_c64.c
-+++ b/vpx_scale/dm642/bicubic_scaler_c64.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/dm642/gen_scalers_c64.c b/vpx_scale/dm642/gen_scalers_c64.c
-index 2126a75..34f95f7 100644
---- a/vpx_scale/dm642/gen_scalers_c64.c
-+++ b/vpx_scale/dm642/gen_scalers_c64.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/dm642/yv12extend.c b/vpx_scale/dm642/yv12extend.c
-index ca25a5f..2557a3a 100644
---- a/vpx_scale/dm642/yv12extend.c
-+++ b/vpx_scale/dm642/yv12extend.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/generic/bicubic_scaler.c b/vpx_scale/generic/bicubic_scaler.c
-index e3c2b4a..48f9096 100644
---- a/vpx_scale/generic/bicubic_scaler.c
-+++ b/vpx_scale/generic/bicubic_scaler.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/generic/gen_scalers.c b/vpx_scale/generic/gen_scalers.c
-index a5e545f..ff841f3 100644
---- a/vpx_scale/generic/gen_scalers.c
-+++ b/vpx_scale/generic/gen_scalers.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-@@ -936,12 +937,13 @@ void vp8cx_vertical_band_2_1_scale_c(unsigned char *source, unsigned int src_pit
-
- void vp8cx_vertical_band_2_1_scale_i_c(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width)
- {
-- unsigned int i;
-+ int i;
- int temp;
-+ int width = dest_width;
-
- (void) dest_pitch;
-
-- for (i = 0; i < dest_width; i++)
-+ for (i = 0; i < width; i++)
- {
- temp = 8;
- temp += source[i-(int)src_pitch] * 3;
-diff --git a/vpx_scale/generic/scalesystemdependant.c b/vpx_scale/generic/scalesystemdependant.c
-index 28f5c72..7a24a26 100644
---- a/vpx_scale/generic/scalesystemdependant.c
-+++ b/vpx_scale/generic/scalesystemdependant.c
-@@ -1,18 +1,17 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-+#include "vpx_ports/config.h"
- #include "vpx_scale/vpxscale.h"
-
--#ifdef HAVE_CONFIG_H
--#include "vpx_config.h"
--#endif
-
- void (*vp8_yv12_extend_frame_borders_ptr)(YV12_BUFFER_CONFIG *ybf);
- extern void vp8_yv12_extend_frame_borders(YV12_BUFFER_CONFIG *ybf);
-diff --git a/vpx_scale/generic/vpxscale.c b/vpx_scale/generic/vpxscale.c
-index 206cd55..8f8cfb5 100644
---- a/vpx_scale/generic/vpxscale.c
-+++ b/vpx_scale/generic/vpxscale.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/generic/yv12config.c b/vpx_scale/generic/yv12config.c
-index 04617be..008130b 100644
---- a/vpx_scale/generic/yv12config.c
-+++ b/vpx_scale/generic/yv12config.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/generic/yv12extend.c b/vpx_scale/generic/yv12extend.c
-index 4906625..907fa68 100644
---- a/vpx_scale/generic/yv12extend.c
-+++ b/vpx_scale/generic/yv12extend.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/include/arm/vpxscale_nofp.h b/vpx_scale/include/arm/vpxscale_nofp.h
-index d6181d2..39e3742 100644
---- a/vpx_scale/include/arm/vpxscale_nofp.h
-+++ b/vpx_scale/include/arm/vpxscale_nofp.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/include/generic/vpxscale_arbitrary.h b/vpx_scale/include/generic/vpxscale_arbitrary.h
-index 2b50f24..68b8fc0 100644
---- a/vpx_scale/include/generic/vpxscale_arbitrary.h
-+++ b/vpx_scale/include/generic/vpxscale_arbitrary.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/include/generic/vpxscale_depricated.h b/vpx_scale/include/generic/vpxscale_depricated.h
-index 015eed0..dbe7786 100644
---- a/vpx_scale/include/generic/vpxscale_depricated.h
-+++ b/vpx_scale/include/generic/vpxscale_depricated.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/include/generic/vpxscale_nofp.h b/vpx_scale/include/generic/vpxscale_nofp.h
-index c4d5f4c..97ea60e 100644
---- a/vpx_scale/include/generic/vpxscale_nofp.h
-+++ b/vpx_scale/include/generic/vpxscale_nofp.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/include/leapster/vpxscale.h b/vpx_scale/include/leapster/vpxscale.h
-index f70029c..a40f2eb 100644
---- a/vpx_scale/include/leapster/vpxscale.h
-+++ b/vpx_scale/include/leapster/vpxscale.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/include/symbian/vpxscale_nofp.h b/vpx_scale/include/symbian/vpxscale_nofp.h
-index d6181d2..39e3742 100644
---- a/vpx_scale/include/symbian/vpxscale_nofp.h
-+++ b/vpx_scale/include/symbian/vpxscale_nofp.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/include/vpxscale_nofp.h b/vpx_scale/include/vpxscale_nofp.h
-index f6482f9..f39a1c6 100644
---- a/vpx_scale/include/vpxscale_nofp.h
-+++ b/vpx_scale/include/vpxscale_nofp.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/intel_linux/scaleopt.c b/vpx_scale/intel_linux/scaleopt.c
-index 6555600..1bdb488 100644
---- a/vpx_scale/intel_linux/scaleopt.c
-+++ b/vpx_scale/intel_linux/scaleopt.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/intel_linux/scalesystemdependant.c b/vpx_scale/intel_linux/scalesystemdependant.c
-index 9ed48bf..82b90c9 100644
---- a/vpx_scale/intel_linux/scalesystemdependant.c
-+++ b/vpx_scale/intel_linux/scalesystemdependant.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/leapster/doptsystemdependant_lf.c b/vpx_scale/leapster/doptsystemdependant_lf.c
-index ca13167..f4ccb16 100644
---- a/vpx_scale/leapster/doptsystemdependant_lf.c
-+++ b/vpx_scale/leapster/doptsystemdependant_lf.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/leapster/gen_scalers_lf.c b/vpx_scale/leapster/gen_scalers_lf.c
-index 1b9c7c7..f9a11fe 100644
---- a/vpx_scale/leapster/gen_scalers_lf.c
-+++ b/vpx_scale/leapster/gen_scalers_lf.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/leapster/vpxscale_lf.c b/vpx_scale/leapster/vpxscale_lf.c
-index 5f05e5d..deabd98 100644
---- a/vpx_scale/leapster/vpxscale_lf.c
-+++ b/vpx_scale/leapster/vpxscale_lf.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/leapster/yv12extend.c b/vpx_scale/leapster/yv12extend.c
-index 480d971..5a89c31 100644
---- a/vpx_scale/leapster/yv12extend.c
-+++ b/vpx_scale/leapster/yv12extend.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/scale_mode.h b/vpx_scale/scale_mode.h
-index 2a9ab76..41aefa2 100644
---- a/vpx_scale/scale_mode.h
-+++ b/vpx_scale/scale_mode.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/symbian/gen_scalers_armv4.asm b/vpx_scale/symbian/gen_scalers_armv4.asm
-index 1c904ed..e317fe9 100644
---- a/vpx_scale/symbian/gen_scalers_armv4.asm
-+++ b/vpx_scale/symbian/gen_scalers_armv4.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vpx_scale/symbian/scalesystemdependant.c b/vpx_scale/symbian/scalesystemdependant.c
-index a2acc3e..75ef26d 100644
---- a/vpx_scale/symbian/scalesystemdependant.c
-+++ b/vpx_scale/symbian/scalesystemdependant.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/vpxscale.h b/vpx_scale/vpxscale.h
-index 9a86b75..f3057fe 100644
---- a/vpx_scale/vpxscale.h
-+++ b/vpx_scale/vpxscale.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/wce/gen_scalers_armv4.asm b/vpx_scale/wce/gen_scalers_armv4.asm
-index 1c904ed..e317fe9 100644
---- a/vpx_scale/wce/gen_scalers_armv4.asm
-+++ b/vpx_scale/wce/gen_scalers_armv4.asm
-@@ -1,10 +1,11 @@
- ;
- ; Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- ;
--; Use of this source code is governed by a BSD-style license and patent
--; grant that can be found in the LICENSE file in the root of the source
--; tree. All contributing project authors may be found in the AUTHORS
--; file in the root of the source tree.
-+; Use of this source code is governed by a BSD-style license
-+; that can be found in the LICENSE file in the root of the source
-+; tree. An additional intellectual property rights grant can be found
-+; in the file PATENTS. All contributing project authors may
-+; be found in the AUTHORS file in the root of the source tree.
- ;
-
-
-diff --git a/vpx_scale/wce/scalesystemdependant.c b/vpx_scale/wce/scalesystemdependant.c
-index a5a6a52..1d62eb5 100644
---- a/vpx_scale/wce/scalesystemdependant.c
-+++ b/vpx_scale/wce/scalesystemdependant.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/win32/scaleopt.c b/vpx_scale/win32/scaleopt.c
-index da0533e..59d49e6 100644
---- a/vpx_scale/win32/scaleopt.c
-+++ b/vpx_scale/win32/scaleopt.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/win32/scalesystemdependant.c b/vpx_scale/win32/scalesystemdependant.c
-index 9ed48bf..82b90c9 100644
---- a/vpx_scale/win32/scalesystemdependant.c
-+++ b/vpx_scale/win32/scalesystemdependant.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/x86_64/scaleopt.c b/vpx_scale/x86_64/scaleopt.c
-index 3d2d5f2..de4c478 100644
---- a/vpx_scale/x86_64/scaleopt.c
-+++ b/vpx_scale/x86_64/scaleopt.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/x86_64/scalesystemdependant.c b/vpx_scale/x86_64/scalesystemdependant.c
-index 43f05a6..0324449 100644
---- a/vpx_scale/x86_64/scalesystemdependant.c
-+++ b/vpx_scale/x86_64/scalesystemdependant.c
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/yv12config.h b/vpx_scale/yv12config.h
-index a8d0ce4..f01bd78 100644
---- a/vpx_scale/yv12config.h
-+++ b/vpx_scale/yv12config.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/vpx_scale/yv12extend.h b/vpx_scale/yv12extend.h
-index 9968fea..b310ef5 100644
---- a/vpx_scale/yv12extend.h
-+++ b/vpx_scale/yv12extend.h
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/wince_wmain_adapter.cpp b/wince_wmain_adapter.cpp
-index db2119c..48d3ab3 100644
---- a/wince_wmain_adapter.cpp
-+++ b/wince_wmain_adapter.cpp
-@@ -1,10 +1,11 @@
- /*
- * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
- *
-- * Use of this source code is governed by a BSD-style license and patent
-- * grant that can be found in the LICENSE file in the root of the source
-- * tree. All contributing project authors may be found in the AUTHORS
-- * file in the root of the source tree.
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
- */
-
-
-diff --git a/y4minput.c b/y4minput.c
-new file mode 100644
-index 0000000..895226d
---- /dev/null
-+++ b/y4minput.c
-@@ -0,0 +1,881 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ *
-+ * Based on code from the OggTheora software codec source code,
-+ * Copyright (C) 2002-2010 The Xiph.Org Foundation and contributors.
-+ */
-+#include <stdlib.h>
-+#include <string.h>
-+#include "y4minput.h"
-+
-+static int y4m_parse_tags(y4m_input *_y4m,char *_tags){
-+ int got_w;
-+ int got_h;
-+ int got_fps;
-+ int got_interlace;
-+ int got_par;
-+ int got_chroma;
-+ char *p;
-+ char *q;
-+ got_w=got_h=got_fps=got_interlace=got_par=got_chroma=0;
-+ for(p=_tags;;p=q){
-+ /*Skip any leading spaces.*/
-+ while(*p==' ')p++;
-+ /*If that's all we have, stop.*/
-+ if(p[0]=='\0')break;
-+ /*Find the end of this tag.*/
-+ for(q=p+1;*q!='\0'&&*q!=' ';q++);
-+ /*Process the tag.*/
-+ switch(p[0]){
-+ case 'W':{
-+ if(sscanf(p+1,"%d",&_y4m->pic_w)!=1)return -1;
-+ got_w=1;
-+ }break;
-+ case 'H':{
-+ if(sscanf(p+1,"%d",&_y4m->pic_h)!=1)return -1;
-+ got_h=1;
-+ }break;
-+ case 'F':{
-+ if(sscanf(p+1,"%d:%d",&_y4m->fps_n,&_y4m->fps_d)!=2){
-+ return -1;
-+ }
-+ got_fps=1;
-+ }break;
-+ case 'I':{
-+ _y4m->interlace=p[1];
-+ got_interlace=1;
-+ }break;
-+ case 'A':{
-+ if(sscanf(p+1,"%d:%d",&_y4m->par_n,&_y4m->par_d)!=2){
-+ return -1;
-+ }
-+ got_par=1;
-+ }break;
-+ case 'C':{
-+ if(q-p>16)return -1;
-+ memcpy(_y4m->chroma_type,p+1,q-p-1);
-+ _y4m->chroma_type[q-p-1]='\0';
-+ got_chroma=1;
-+ }break;
-+ /*Ignore unknown tags.*/
-+ }
-+ }
-+ if(!got_w||!got_h||!got_fps)return -1;
-+ if(!got_interlace)_y4m->interlace='?';
-+ if(!got_par)_y4m->par_n=_y4m->par_d=0;
-+ /*Chroma-type is not specified in older files, e.g., those generated by
-+ mplayer.*/
-+ if(!got_chroma)strcpy(_y4m->chroma_type,"420");
-+ return 0;
-+}
-+
-+
-+
-+/*All anti-aliasing filters in the following conversion functions are based on
-+ one of two window functions:
-+ The 6-tap Lanczos window (for down-sampling and shifts):
-+ sinc(\pi*t)*sinc(\pi*t/3), |t|<3 (sinc(t)==sin(t)/t)
-+ 0, |t|>=3
-+ The 4-tap Mitchell window (for up-sampling):
-+ 7|t|^3-12|t|^2+16/3, |t|<1
-+ -(7/3)|x|^3+12|x|^2-20|x|+32/3, |t|<2
-+ 0, |t|>=2
-+ The number of taps is intentionally kept small to reduce computational
-+ overhead and limit ringing.
-+
-+ The taps from these filters are scaled so that their sum is 1, and the result
-+ is scaled by 128 and rounded to integers to create a filter whose
-+ intermediate values fit inside 16 bits.
-+ Coefficients are rounded in such a way as to ensure their sum is still 128,
-+ which is usually equivalent to normal rounding.
-+
-+ Conversions which require both horizontal and vertical filtering could
-+ have these steps pipelined, for less memory consumption and better cache
-+ performance, but we do them separately for simplicity.*/
-+
-+#define OC_MINI(_a,_b) ((_a)>(_b)?(_b):(_a))
-+#define OC_MAXI(_a,_b) ((_a)<(_b)?(_b):(_a))
-+#define OC_CLAMPI(_a,_b,_c) (OC_MAXI(_a,OC_MINI(_b,_c)))
-+
-+/*420jpeg chroma samples are sited like:
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ 420mpeg2 chroma samples are sited like:
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ BR | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ BR | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ We use a resampling filter to shift the site locations one quarter pixel (at
-+ the chroma plane's resolution) to the right.
-+ The 4:2:2 modes look exactly the same, except there are twice as many chroma
-+ lines, and they are vertically co-sited with the luma samples in both the
-+ mpeg2 and jpeg cases (thus requiring no vertical resampling).*/
-+static void y4m_42xmpeg2_42xjpeg_helper(unsigned char *_dst,
-+ const unsigned char *_src,int _c_w,int _c_h){
-+ int pli;
-+ int y;
-+ int x;
-+ for(y=0;y<_c_h;y++){
-+ /*Filter: [4 -17 114 35 -9 1]/128, derived from a 6-tap Lanczos
-+ window.*/
-+ for(x=0;x<OC_MINI(_c_w,2);x++){
-+ _dst[x]=(unsigned char)OC_CLAMPI(0,(4*_src[0]-17*_src[OC_MAXI(x-1,0)]+
-+ 114*_src[x]+35*_src[OC_MINI(x+1,_c_w-1)]-9*_src[OC_MINI(x+2,_c_w-1)]+
-+ _src[OC_MINI(x+3,_c_w-1)]+64)>>7,255);
-+ }
-+ for(;x<_c_w-3;x++){
-+ _dst[x]=(unsigned char)OC_CLAMPI(0,(4*_src[x-2]-17*_src[x-1]+
-+ 114*_src[x]+35*_src[x+1]-9*_src[x+2]+_src[x+3]+64)>>7,255);
-+ }
-+ for(;x<_c_w;x++){
-+ _dst[x]=(unsigned char)OC_CLAMPI(0,(4*_src[x-2]-17*_src[x-1]+
-+ 114*_src[x]+35*_src[OC_MINI(x+1,_c_w-1)]-9*_src[OC_MINI(x+2,_c_w-1)]+
-+ _src[_c_w-1]+64)>>7,255);
-+ }
-+ _dst+=_c_w;
-+ _src+=_c_w;
-+ }
-+}
-+
-+/*Handles both 422 and 420mpeg2 to 422jpeg and 420jpeg, respectively.*/
-+static void y4m_convert_42xmpeg2_42xjpeg(y4m_input *_y4m,unsigned char *_dst,
-+ unsigned char *_aux){
-+ int c_w;
-+ int c_h;
-+ int c_sz;
-+ int pli;
-+ int y;
-+ int x;
-+ /*Skip past the luma data.*/
-+ _dst+=_y4m->pic_w*_y4m->pic_h;
-+ /*Compute the size of each chroma plane.*/
-+ c_w=(_y4m->pic_w+_y4m->dst_c_dec_h-1)/_y4m->dst_c_dec_h;
-+ c_h=(_y4m->pic_h+_y4m->dst_c_dec_v-1)/_y4m->dst_c_dec_v;
-+ c_sz=c_w*c_h;
-+ for(pli=1;pli<3;pli++){
-+ y4m_42xmpeg2_42xjpeg_helper(_dst,_aux,c_w,c_h);
-+ _dst+=c_sz;
-+ _aux+=c_sz;
-+ }
-+}
-+
-+/*This format is only used for interlaced content, but is included for
-+ completeness.
-+
-+ 420jpeg chroma samples are sited like:
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ 420paldv chroma samples are sited like:
-+ YR------Y-------YR------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YB------Y-------YB------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YR------Y-------YR------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YB------Y-------YB------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ We use a resampling filter to shift the site locations one quarter pixel (at
-+ the chroma plane's resolution) to the right.
-+ Then we use another filter to move the C_r location down one quarter pixel,
-+ and the C_b location up one quarter pixel.*/
-+static void y4m_convert_42xpaldv_42xjpeg(y4m_input *_y4m,unsigned char *_dst,
-+ unsigned char *_aux){
-+ unsigned char *tmp;
-+ int c_w;
-+ int c_h;
-+ int c_sz;
-+ int pli;
-+ int y;
-+ int x;
-+ /*Skip past the luma data.*/
-+ _dst+=_y4m->pic_w*_y4m->pic_h;
-+ /*Compute the size of each chroma plane.*/
-+ c_w=(_y4m->pic_w+1)/2;
-+ c_h=(_y4m->pic_h+_y4m->dst_c_dec_h-1)/_y4m->dst_c_dec_h;
-+ c_sz=c_w*c_h;
-+ tmp=_aux+2*c_sz;
-+ for(pli=1;pli<3;pli++){
-+ /*First do the horizontal re-sampling.
-+ This is the same as the mpeg2 case, except that after the horizontal
-+ case, we need to apply a second vertical filter.*/
-+ y4m_42xmpeg2_42xjpeg_helper(tmp,_aux,c_w,c_h);
-+ _aux+=c_sz;
-+ switch(pli){
-+ case 1:{
-+ /*Slide C_b up a quarter-pel.
-+ This is the same filter used above, but in the other order.*/
-+ for(x=0;x<c_w;x++){
-+ for(y=0;y<OC_MINI(c_h,3);y++){
-+ _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,(tmp[0]
-+ -9*tmp[OC_MAXI(y-2,0)*c_w]+35*tmp[OC_MAXI(y-1,0)*c_w]
-+ +114*tmp[y*c_w]-17*tmp[OC_MINI(y+1,c_h-1)*c_w]
-+ +4*tmp[OC_MINI(y+2,c_h-1)*c_w]+64)>>7,255);
-+ }
-+ for(;y<c_h-2;y++){
-+ _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,(tmp[(y-3)*c_w]
-+ -9*tmp[(y-2)*c_w]+35*tmp[(y-1)*c_w]+114*tmp[y*c_w]
-+ -17*tmp[(y+1)*c_w]+4*tmp[(y+2)*c_w]+64)>>7,255);
-+ }
-+ for(;y<c_h;y++){
-+ _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,(tmp[(y-3)*c_w]
-+ -9*tmp[(y-2)*c_w]+35*tmp[(y-1)*c_w]+114*tmp[y*c_w]
-+ -17*tmp[OC_MINI(y+1,c_h-1)*c_w]+4*tmp[(c_h-1)*c_w]+64)>>7,255);
-+ }
-+ _dst++;
-+ tmp++;
-+ }
-+ _dst+=c_sz-c_w;
-+ tmp-=c_w;
-+ }break;
-+ case 2:{
-+ /*Slide C_r down a quarter-pel.
-+ This is the same as the horizontal filter.*/
-+ for(x=0;x<c_w;x++){
-+ for(y=0;y<OC_MINI(c_h,2);y++){
-+ _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,(4*tmp[0]
-+ -17*tmp[OC_MAXI(y-1,0)*c_w]+114*tmp[y*c_w]
-+ +35*tmp[OC_MINI(y+1,c_h-1)*c_w]-9*tmp[OC_MINI(y+2,c_h-1)*c_w]
-+ +tmp[OC_MINI(y+3,c_h-1)*c_w]+64)>>7,255);
-+ }
-+ for(;y<c_h-3;y++){
-+ _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,(4*tmp[(y-2)*c_w]
-+ -17*tmp[(y-1)*c_w]+114*tmp[y*c_w]+35*tmp[(y+1)*c_w]
-+ -9*tmp[(y+2)*c_w]+tmp[(y+3)*c_w]+64)>>7,255);
-+ }
-+ for(;y<c_h;y++){
-+ _dst[y*c_w]=(unsigned char)OC_CLAMPI(0,(4*tmp[(y-2)*c_w]
-+ -17*tmp[(y-1)*c_w]+114*tmp[y*c_w]+35*tmp[OC_MINI(y+1,c_h-1)*c_w]
-+ -9*tmp[OC_MINI(y+2,c_h-1)*c_w]+tmp[(c_h-1)*c_w]+64)>>7,255);
-+ }
-+ _dst++;
-+ tmp++;
-+ }
-+ }break;
-+ }
-+ /*For actual interlaced material, this would have to be done separately on
-+ each field, and the shift amounts would be different.
-+ C_r moves down 1/8, C_b up 3/8 in the top field, and C_r moves down 3/8,
-+ C_b up 1/8 in the bottom field.
-+ The corresponding filters would be:
-+ Down 1/8 (reverse order for up): [3 -11 125 15 -4 0]/128
-+ Down 3/8 (reverse order for up): [4 -19 98 56 -13 2]/128*/
-+ }
-+}
-+
-+/*Perform vertical filtering to reduce a single plane from 4:2:2 to 4:2:0.
-+ This is used as a helper by several converation routines.*/
-+static void y4m_422jpeg_420jpeg_helper(unsigned char *_dst,
-+ const unsigned char *_src,int _c_w,int _c_h){
-+ int y;
-+ int x;
-+ /*Filter: [3 -17 78 78 -17 3]/128, derived from a 6-tap Lanczos window.*/
-+ for(x=0;x<_c_w;x++){
-+ for(y=0;y<OC_MINI(_c_h,2);y+=2){
-+ _dst[(y>>1)*_c_w]=OC_CLAMPI(0,(64*_src[0]
-+ +78*_src[OC_MINI(1,_c_h-1)*_c_w]
-+ -17*_src[OC_MINI(2,_c_h-1)*_c_w]
-+ +3*_src[OC_MINI(3,_c_h-1)*_c_w]+64)>>7,255);
-+ }
-+ for(;y<_c_h-3;y+=2){
-+ _dst[(y>>1)*_c_w]=OC_CLAMPI(0,(3*(_src[(y-2)*_c_w]+_src[(y+3)*_c_w])
-+ -17*(_src[(y-1)*_c_w]+_src[(y+2)*_c_w])
-+ +78*(_src[y*_c_w]+_src[(y+1)*_c_w])+64)>>7,255);
-+ }
-+ for(;y<_c_h;y+=2){
-+ _dst[(y>>1)*_c_w]=OC_CLAMPI(0,(3*(_src[(y-2)*_c_w]
-+ +_src[(_c_h-1)*_c_w])-17*(_src[(y-1)*_c_w]
-+ +_src[OC_MINI(y+2,_c_h-1)*_c_w])
-+ +78*(_src[y*_c_w]+_src[OC_MINI(y+1,_c_h-1)*_c_w])+64)>>7,255);
-+ }
-+ _src++;
-+ _dst++;
-+ }
-+}
-+
-+/*420jpeg chroma samples are sited like:
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ 422jpeg chroma samples are sited like:
-+ Y---BR--Y-------Y---BR--Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y---BR--Y-------Y---BR--Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y---BR--Y-------Y---BR--Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y---BR--Y-------Y---BR--Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ We use a resampling filter to decimate the chroma planes by two in the
-+ vertical direction.*/
-+static void y4m_convert_422jpeg_420jpeg(y4m_input *_y4m,unsigned char *_dst,
-+ unsigned char *_aux){
-+ int c_w;
-+ int c_h;
-+ int c_sz;
-+ int dst_c_w;
-+ int dst_c_h;
-+ int dst_c_sz;
-+ int tmp_sz;
-+ int pic_sz;
-+ int pli;
-+ /*Skip past the luma data.*/
-+ _dst+=_y4m->pic_w*_y4m->pic_h;
-+ /*Compute the size of each chroma plane.*/
-+ c_w=(_y4m->pic_w+_y4m->src_c_dec_h-1)/_y4m->src_c_dec_h;
-+ c_h=_y4m->pic_h;
-+ dst_c_w=(_y4m->pic_w+_y4m->dst_c_dec_h-1)/_y4m->dst_c_dec_h;
-+ dst_c_h=(_y4m->pic_h+_y4m->dst_c_dec_v-1)/_y4m->dst_c_dec_v;
-+ c_sz=c_w*c_h;
-+ dst_c_sz=dst_c_w*dst_c_h;
-+ for(pli=1;pli<3;pli++){
-+ y4m_422jpeg_420jpeg_helper(_dst,_aux,c_w,c_h);
-+ _aux+=c_sz;
-+ _dst+=dst_c_sz;
-+ }
-+}
-+
-+/*420jpeg chroma samples are sited like:
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ 422 chroma samples are sited like:
-+ YBR-----Y-------YBR-----Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YBR-----Y-------YBR-----Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YBR-----Y-------YBR-----Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YBR-----Y-------YBR-----Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ We use a resampling filter to shift the original site locations one quarter
-+ pixel (at the original chroma resolution) to the right.
-+ Then we use a second resampling filter to decimate the chroma planes by two
-+ in the vertical direction.*/
-+static void y4m_convert_422_420jpeg(y4m_input *_y4m,unsigned char *_dst,
-+ unsigned char *_aux){
-+ unsigned char *tmp;
-+ int c_w;
-+ int c_h;
-+ int c_sz;
-+ int dst_c_w;
-+ int dst_c_h;
-+ int dst_c_sz;
-+ int pli;
-+ int y;
-+ int x;
-+ /*Skip past the luma data.*/
-+ _dst+=_y4m->pic_w*_y4m->pic_h;
-+ /*Compute the size of each chroma plane.*/
-+ c_w=(_y4m->pic_w+_y4m->src_c_dec_h-1)/_y4m->src_c_dec_h;
-+ c_h=_y4m->pic_h;
-+ dst_c_h=(_y4m->pic_h+_y4m->dst_c_dec_v-1)/_y4m->dst_c_dec_v;
-+ c_sz=c_w*c_h;
-+ dst_c_sz=c_w*dst_c_h;
-+ tmp=_aux+2*c_sz;
-+ for(pli=1;pli<3;pli++){
-+ /*In reality, the horizontal and vertical steps could be pipelined, for
-+ less memory consumption and better cache performance, but we do them
-+ separately for simplicity.*/
-+ /*First do horizontal filtering (convert to 422jpeg)*/
-+ y4m_42xmpeg2_42xjpeg_helper(tmp,_aux,c_w,c_h);
-+ /*Now do the vertical filtering.*/
-+ y4m_422jpeg_420jpeg_helper(_dst,tmp,c_w,c_h);
-+ _aux+=c_sz;
-+ _dst+=dst_c_sz;
-+ }
-+}
-+
-+/*420jpeg chroma samples are sited like:
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | BR | | BR |
-+ | | | |
-+ Y-------Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ 411 chroma samples are sited like:
-+ YBR-----Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YBR-----Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YBR-----Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+ YBR-----Y-------Y-------Y-------
-+ | | | |
-+ | | | |
-+ | | | |
-+
-+ We use a filter to resample at site locations one eighth pixel (at the source
-+ chroma plane's horizontal resolution) and five eighths of a pixel to the
-+ right.
-+ Then we use another filter to decimate the planes by 2 in the vertical
-+ direction.*/
-+static void y4m_convert_411_420jpeg(y4m_input *_y4m,unsigned char *_dst,
-+ unsigned char *_aux){
-+ unsigned char *tmp;
-+ int c_w;
-+ int c_h;
-+ int c_sz;
-+ int dst_c_w;
-+ int dst_c_h;
-+ int dst_c_sz;
-+ int tmp_sz;
-+ int pli;
-+ int y;
-+ int x;
-+ /*Skip past the luma data.*/
-+ _dst+=_y4m->pic_w*_y4m->pic_h;
-+ /*Compute the size of each chroma plane.*/
-+ c_w=(_y4m->pic_w+_y4m->src_c_dec_h-1)/_y4m->src_c_dec_h;
-+ c_h=_y4m->pic_h;
-+ dst_c_w=(_y4m->pic_w+_y4m->dst_c_dec_h-1)/_y4m->dst_c_dec_h;
-+ dst_c_h=(_y4m->pic_h+_y4m->dst_c_dec_v-1)/_y4m->dst_c_dec_v;
-+ c_sz=c_w*c_h;
-+ dst_c_sz=dst_c_w*dst_c_h;
-+ tmp_sz=dst_c_w*c_h;
-+ tmp=_aux+2*c_sz;
-+ for(pli=1;pli<3;pli++){
-+ /*In reality, the horizontal and vertical steps could be pipelined, for
-+ less memory consumption and better cache performance, but we do them
-+ separately for simplicity.*/
-+ /*First do horizontal filtering (convert to 422jpeg)*/
-+ for(y=0;y<c_h;y++){
-+ /*Filters: [1 110 18 -1]/128 and [-3 50 86 -5]/128, both derived from a
-+ 4-tap Mitchell window.*/
-+ for(x=0;x<OC_MINI(c_w,1);x++){
-+ tmp[x<<1]=(unsigned char)OC_CLAMPI(0,(111*_aux[0]
-+ +18*_aux[OC_MINI(1,c_w-1)]-_aux[OC_MINI(2,c_w-1)]+64)>>7,255);
-+ tmp[x<<1|1]=(unsigned char)OC_CLAMPI(0,(47*_aux[0]
-+ +86*_aux[OC_MINI(1,c_w-1)]-5*_aux[OC_MINI(2,c_w-1)]+64)>>7,255);
-+ }
-+ for(;x<c_w-2;x++){
-+ tmp[x<<1]=(unsigned char)OC_CLAMPI(0,(_aux[x-1]+110*_aux[x]
-+ +18*_aux[x+1]-_aux[x+2]+64)>>7,255);
-+ tmp[x<<1|1]=(unsigned char)OC_CLAMPI(0,(-3*_aux[x-1]+50*_aux[x]
-+ +86*_aux[x+1]-5*_aux[x+2]+64)>>7,255);
-+ }
-+ for(;x<c_w;x++){
-+ tmp[x<<1]=(unsigned char)OC_CLAMPI(0,(_aux[x-1]+110*_aux[x]
-+ +18*_aux[OC_MINI(x+1,c_w-1)]-_aux[c_w-1]+64)>>7,255);
-+ if((x<<1|1)<dst_c_w){
-+ tmp[x<<1|1]=(unsigned char)OC_CLAMPI(0,(-3*_aux[x-1]+50*_aux[x]
-+ +86*_aux[OC_MINI(x+1,c_w-1)]-5*_aux[c_w-1]+64)>>7,255);
-+ }
-+ }
-+ tmp+=dst_c_w;
-+ _aux+=c_w;
-+ }
-+ tmp-=tmp_sz;
-+ /*Now do the vertical filtering.*/
-+ y4m_422jpeg_420jpeg_helper(_dst,tmp,dst_c_w,c_h);
-+ _dst+=dst_c_sz;
-+ }
-+}
-+
-+/*Convert 444 to 420jpeg.*/
-+static void y4m_convert_444_420jpeg(y4m_input *_y4m,unsigned char *_dst,
-+ unsigned char *_aux){
-+ unsigned char *tmp;
-+ int c_w;
-+ int c_h;
-+ int c_sz;
-+ int dst_c_w;
-+ int dst_c_h;
-+ int dst_c_sz;
-+ int tmp_sz;
-+ int pli;
-+ int y;
-+ int x;
-+ /*Skip past the luma data.*/
-+ _dst+=_y4m->pic_w*_y4m->pic_h;
-+ /*Compute the size of each chroma plane.*/
-+ c_w=(_y4m->pic_w+_y4m->src_c_dec_h-1)/_y4m->src_c_dec_h;
-+ c_h=_y4m->pic_h;
-+ dst_c_w=(_y4m->pic_w+_y4m->dst_c_dec_h-1)/_y4m->dst_c_dec_h;
-+ dst_c_h=(_y4m->pic_h+_y4m->dst_c_dec_v-1)/_y4m->dst_c_dec_v;
-+ c_sz=c_w*c_h;
-+ dst_c_sz=dst_c_w*dst_c_h;
-+ tmp_sz=dst_c_w*c_h;
-+ tmp=_aux+2*c_sz;
-+ for(pli=1;pli<3;pli++){
-+ /*Filter: [3 -17 78 78 -17 3]/128, derived from a 6-tap Lanczos window.*/
-+ for(y=0;y<c_h;y++){
-+ for(x=0;x<OC_MINI(c_w,2);x+=2){
-+ tmp[x>>1]=OC_CLAMPI(0,(64*_aux[0]+78*_aux[OC_MINI(1,c_w-1)]
-+ -17*_aux[OC_MINI(2,c_w-1)]
-+ +3*_aux[OC_MINI(3,c_w-1)]+64)>>7,255);
-+ }
-+ for(;x<c_w-3;x+=2){
-+ tmp[x>>1]=OC_CLAMPI(0,(3*(_aux[x-2]+_aux[x+3])
-+ -17*(_aux[x-1]+_aux[x+2])+78*(_aux[x]+_aux[x+1])+64)>>7,255);
-+ }
-+ for(;x<c_w;x+=2){
-+ tmp[x>>1]=OC_CLAMPI(0,(3*(_aux[x-2]+_aux[c_w-1])-
-+ 17*(_aux[x-1]+_aux[OC_MINI(x+2,c_w-1)])+
-+ 78*(_aux[x]+_aux[OC_MINI(x+1,c_w-1)])+64)>>7,255);
-+ }
-+ tmp+=dst_c_w;
-+ _aux+=c_w;
-+ }
-+ tmp-=tmp_sz;
-+ /*Now do the vertical filtering.*/
-+ y4m_422jpeg_420jpeg_helper(_dst,tmp,dst_c_w,c_h);
-+ _dst+=dst_c_sz;
-+ }
-+}
-+
-+/*The image is padded with empty chroma components at 4:2:0.*/
-+static void y4m_convert_mono_420jpeg(y4m_input *_y4m,unsigned char *_dst,
-+ unsigned char *_aux){
-+ int c_sz;
-+ _dst+=_y4m->pic_w*_y4m->pic_h;
-+ c_sz=((_y4m->pic_w+_y4m->dst_c_dec_h-1)/_y4m->dst_c_dec_h)*
-+ ((_y4m->pic_h+_y4m->dst_c_dec_v-1)/_y4m->dst_c_dec_v);
-+ memset(_dst,128,c_sz*2);
-+}
-+
-+/*No conversion function needed.*/
-+static void y4m_convert_null(y4m_input *_y4m,unsigned char *_dst,
-+ unsigned char *_aux){
-+}
-+
-+int y4m_input_open(y4m_input *_y4m,FILE *_fin,char *_skip,int _nskip){
-+ char buffer[80];
-+ int ret;
-+ int i;
-+ /*Read until newline, or 80 cols, whichever happens first.*/
-+ for(i=0;i<79;i++){
-+ if(_nskip>0){
-+ buffer[i]=*_skip++;
-+ _nskip--;
-+ }
-+ else{
-+ ret=fread(buffer+i,1,1,_fin);
-+ if(ret<1)return -1;
-+ }
-+ if(buffer[i]=='\n')break;
-+ }
-+ /*We skipped too much header data.*/
-+ if(_nskip>0)return -1;
-+ if(i==79){
-+ fprintf(stderr,"Error parsing header; not a YUV2MPEG2 file?\n");
-+ return -1;
-+ }
-+ buffer[i]='\0';
-+ if(memcmp(buffer,"YUV4MPEG",8)){
-+ fprintf(stderr,"Incomplete magic for YUV4MPEG file.\n");
-+ return -1;
-+ }
-+ if(buffer[8]!='2'){
-+ fprintf(stderr,"Incorrect YUV input file version; YUV4MPEG2 required.\n");
-+ }
-+ ret=y4m_parse_tags(_y4m,buffer+5);
-+ if(ret<0){
-+ fprintf(stderr,"Error parsing YUV4MPEG2 header.\n");
-+ return ret;
-+ }
-+ if(_y4m->interlace=='?'){
-+ fprintf(stderr,"Warning: Input video interlacing format unknown; "
-+ "assuming progressive scan.\n");
-+ }
-+ else if(_y4m->interlace!='p'){
-+ fprintf(stderr,"Input video is interlaced; "
-+ "Only progressive scan handled.\n");
-+ return -1;
-+ }
-+ if(strcmp(_y4m->chroma_type,"420")==0||
-+ strcmp(_y4m->chroma_type,"420jpeg")==0){
-+ _y4m->src_c_dec_h=_y4m->dst_c_dec_h=_y4m->src_c_dec_v=_y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h
-+ +2*((_y4m->pic_w+1)/2)*((_y4m->pic_h+1)/2);
-+ /*Natively supported: no conversion required.*/
-+ _y4m->aux_buf_sz=_y4m->aux_buf_read_sz=0;
-+ _y4m->convert=y4m_convert_null;
-+ }
-+ else if(strcmp(_y4m->chroma_type,"420mpeg2")==0){
-+ _y4m->src_c_dec_h=_y4m->dst_c_dec_h=_y4m->src_c_dec_v=_y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h;
-+ /*Chroma filter required: read into the aux buf first.*/
-+ _y4m->aux_buf_sz=_y4m->aux_buf_read_sz=
-+ 2*((_y4m->pic_w+1)/2)*((_y4m->pic_h+1)/2);
-+ _y4m->convert=y4m_convert_42xmpeg2_42xjpeg;
-+ }
-+ else if(strcmp(_y4m->chroma_type,"420paldv")==0){
-+ _y4m->src_c_dec_h=_y4m->dst_c_dec_h=_y4m->src_c_dec_v=_y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h;
-+ /*Chroma filter required: read into the aux buf first.
-+ We need to make two filter passes, so we need some extra space in the
-+ aux buffer.*/
-+ _y4m->aux_buf_sz=3*((_y4m->pic_w+1)/2)*((_y4m->pic_h+1)/2);
-+ _y4m->aux_buf_read_sz=2*((_y4m->pic_w+1)/2)*((_y4m->pic_h+1)/2);
-+ _y4m->convert=y4m_convert_42xpaldv_42xjpeg;
-+ }
-+ else if(strcmp(_y4m->chroma_type,"422jpeg")==0){
-+ _y4m->src_c_dec_h=_y4m->dst_c_dec_h=2;
-+ _y4m->src_c_dec_v=1;
-+ _y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h;
-+ /*Chroma filter required: read into the aux buf first.*/
-+ _y4m->aux_buf_sz=_y4m->aux_buf_read_sz=2*((_y4m->pic_w+1)/2)*_y4m->pic_h;
-+ _y4m->convert=y4m_convert_422jpeg_420jpeg;
-+ }
-+ else if(strcmp(_y4m->chroma_type,"422")==0){
-+ _y4m->src_c_dec_h=_y4m->dst_c_dec_h=2;
-+ _y4m->src_c_dec_v=1;
-+ _y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h;
-+ /*Chroma filter required: read into the aux buf first.
-+ We need to make two filter passes, so we need some extra space in the
-+ aux buffer.*/
-+ _y4m->aux_buf_read_sz=2*((_y4m->pic_w+1)/2)*_y4m->pic_h;
-+ _y4m->aux_buf_sz=_y4m->aux_buf_read_sz+((_y4m->pic_w+1)/2)*_y4m->pic_h;
-+ _y4m->convert=y4m_convert_422_420jpeg;
-+ }
-+ else if(strcmp(_y4m->chroma_type,"411")==0){
-+ _y4m->src_c_dec_h=4;
-+ _y4m->dst_c_dec_h=2;
-+ _y4m->src_c_dec_v=1;
-+ _y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h;
-+ /*Chroma filter required: read into the aux buf first.
-+ We need to make two filter passes, so we need some extra space in the
-+ aux buffer.*/
-+ _y4m->aux_buf_read_sz=2*((_y4m->pic_w+3)/4)*_y4m->pic_h;
-+ _y4m->aux_buf_sz=_y4m->aux_buf_read_sz+((_y4m->pic_w+1)/2)*_y4m->pic_h;
-+ _y4m->convert=y4m_convert_411_420jpeg;
-+ }
-+ else if(strcmp(_y4m->chroma_type,"444")==0){
-+ _y4m->src_c_dec_h=1;
-+ _y4m->dst_c_dec_h=2;
-+ _y4m->src_c_dec_v=1;
-+ _y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h;
-+ /*Chroma filter required: read into the aux buf first.
-+ We need to make two filter passes, so we need some extra space in the
-+ aux buffer.*/
-+ _y4m->aux_buf_read_sz=2*_y4m->pic_w*_y4m->pic_h;
-+ _y4m->aux_buf_sz=_y4m->aux_buf_read_sz+((_y4m->pic_w+1)/2)*_y4m->pic_h;
-+ _y4m->convert=y4m_convert_444_420jpeg;
-+ }
-+ else if(strcmp(_y4m->chroma_type,"444alpha")==0){
-+ _y4m->src_c_dec_h=1;
-+ _y4m->dst_c_dec_h=2;
-+ _y4m->src_c_dec_v=1;
-+ _y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h;
-+ /*Chroma filter required: read into the aux buf first.
-+ We need to make two filter passes, so we need some extra space in the
-+ aux buffer.
-+ The extra plane also gets read into the aux buf.
-+ It will be discarded.*/
-+ _y4m->aux_buf_sz=_y4m->aux_buf_read_sz=3*_y4m->pic_w*_y4m->pic_h;
-+ _y4m->convert=y4m_convert_444_420jpeg;
-+ }
-+ else if(strcmp(_y4m->chroma_type,"mono")==0){
-+ _y4m->src_c_dec_h=_y4m->src_c_dec_v=0;
-+ _y4m->dst_c_dec_h=_y4m->dst_c_dec_v=2;
-+ _y4m->dst_buf_read_sz=_y4m->pic_w*_y4m->pic_h;
-+ /*No extra space required, but we need to clear the chroma planes.*/
-+ _y4m->aux_buf_sz=_y4m->aux_buf_read_sz=0;
-+ _y4m->convert=y4m_convert_mono_420jpeg;
-+ }
-+ else{
-+ fprintf(stderr,"Unknown chroma sampling type: %s\n",_y4m->chroma_type);
-+ return -1;
-+ }
-+ /*The size of the final frame buffers is always computed from the
-+ destination chroma decimation type.*/
-+ _y4m->dst_buf_sz=_y4m->pic_w*_y4m->pic_h
-+ +2*((_y4m->pic_w+_y4m->dst_c_dec_h-1)/_y4m->dst_c_dec_h)*
-+ ((_y4m->pic_h+_y4m->dst_c_dec_v-1)/_y4m->dst_c_dec_v);
-+ _y4m->dst_buf=(unsigned char *)malloc(_y4m->dst_buf_sz);
-+ _y4m->aux_buf=(unsigned char *)malloc(_y4m->aux_buf_sz);
-+ return 0;
-+}
-+
-+void y4m_input_close(y4m_input *_y4m){
-+ free(_y4m->dst_buf);
-+ free(_y4m->aux_buf);
-+}
-+
-+int y4m_input_fetch_frame(y4m_input *_y4m,FILE *_fin,vpx_image_t *_img){
-+ char frame[6];
-+ int pic_sz;
-+ int frame_c_w;
-+ int frame_c_h;
-+ int c_w;
-+ int c_h;
-+ int c_sz;
-+ int ret;
-+ /*Read and skip the frame header.*/
-+ ret=fread(frame,1,6,_fin);
-+ if(ret<6)return 0;
-+ if(memcmp(frame,"FRAME",5)){
-+ fprintf(stderr,"Loss of framing in Y4M input data\n");
-+ return -1;
-+ }
-+ if(frame[5]!='\n'){
-+ char c;
-+ int j;
-+ for(j=0;j<79&&fread(&c,1,1,_fin)&&c!='\n';j++);
-+ if(j==79){
-+ fprintf(stderr,"Error parsing Y4M frame header\n");
-+ return -1;
-+ }
-+ }
-+ /*Read the frame data that needs no conversion.*/
-+ if(fread(_y4m->dst_buf,1,_y4m->dst_buf_read_sz,_fin)!=_y4m->dst_buf_read_sz){
-+ fprintf(stderr,"Error reading Y4M frame data.\n");
-+ return -1;
-+ }
-+ /*Read the frame data that does need conversion.*/
-+ if(fread(_y4m->aux_buf,1,_y4m->aux_buf_read_sz,_fin)!=_y4m->aux_buf_read_sz){
-+ fprintf(stderr,"Error reading Y4M frame data.\n");
-+ return -1;
-+ }
-+ /*Now convert the just read frame.*/
-+ (*_y4m->convert)(_y4m,_y4m->dst_buf,_y4m->aux_buf);
-+ /*Fill in the frame buffer pointers.
-+ We don't use vpx_img_wrap() because it forces padding for odd picture
-+ sizes, which would require a separate fread call for every row.*/
-+ memset(_img,0,sizeof(*_img));
-+ /*Y4M has the planes in Y'CbCr order, which libvpx calls Y, U, and V.*/
-+ _img->fmt=IMG_FMT_I420;
-+ _img->w=_img->d_w=_y4m->pic_w;
-+ _img->h=_img->d_h=_y4m->pic_h;
-+ /*This is hard-coded to 4:2:0 for now, as that's all VP8 supports.*/
-+ _img->x_chroma_shift=1;
-+ _img->y_chroma_shift=1;
-+ _img->bps=12;
-+ /*Set up the buffer pointers.*/
-+ pic_sz=_y4m->pic_w*_y4m->pic_h;
-+ c_w=(_y4m->pic_w+_y4m->dst_c_dec_h-1)/_y4m->dst_c_dec_h;
-+ c_h=(_y4m->pic_h+_y4m->dst_c_dec_v-1)/_y4m->dst_c_dec_v;
-+ c_sz=c_w*c_h;
-+ _img->stride[PLANE_Y]=_y4m->pic_w;
-+ _img->stride[PLANE_U]=_img->stride[PLANE_V]=c_w;
-+ _img->planes[PLANE_Y]=_y4m->dst_buf;
-+ _img->planes[PLANE_U]=_y4m->dst_buf+pic_sz;
-+ _img->planes[PLANE_V]=_y4m->dst_buf+pic_sz+c_sz;
-+ return 0;
-+}
-diff --git a/y4minput.h b/y4minput.h
-new file mode 100644
-index 0000000..e3f9304
---- /dev/null
-+++ b/y4minput.h
-@@ -0,0 +1,60 @@
-+/*
-+ * Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
-+ *
-+ * Use of this source code is governed by a BSD-style license
-+ * that can be found in the LICENSE file in the root of the source
-+ * tree. An additional intellectual property rights grant can be found
-+ * in the file PATENTS. All contributing project authors may
-+ * be found in the AUTHORS file in the root of the source tree.
-+ *
-+ * Based on code from the OggTheora software codec source code,
-+ * Copyright (C) 2002-2010 The Xiph.Org Foundation and contributors.
-+ */
-+#if !defined(_y4minput_H)
-+# define _y4minput_H (1)
-+# include <stdio.h>
-+# include "vpx/vpx_image.h"
-+
-+
-+
-+typedef struct y4m_input y4m_input;
-+
-+
-+
-+/*The function used to perform chroma conversion.*/
-+typedef void (*y4m_convert_func)(y4m_input *_y4m,
-+ unsigned char *_dst,unsigned char *_src);
-+
-+
-+
-+struct y4m_input{
-+ int pic_w;
-+ int pic_h;
-+ int fps_n;
-+ int fps_d;
-+ int par_n;
-+ int par_d;
-+ char interlace;
-+ int src_c_dec_h;
-+ int src_c_dec_v;
-+ int dst_c_dec_h;
-+ int dst_c_dec_v;
-+ char chroma_type[16];
-+ /*The size of each converted frame buffer.*/
-+ size_t dst_buf_sz;
-+ /*The amount to read directly into the converted frame buffer.*/
-+ size_t dst_buf_read_sz;
-+ /*The size of the auxilliary buffer.*/
-+ size_t aux_buf_sz;
-+ /*The amount to read into the auxilliary buffer.*/
-+ size_t aux_buf_read_sz;
-+ y4m_convert_func convert;
-+ unsigned char *dst_buf;
-+ unsigned char *aux_buf;
-+};
-+
-+int y4m_input_open(y4m_input *_y4m,FILE *_fin,char *_skip,int _nskip);
-+void y4m_input_close(y4m_input *_y4m);
-+int y4m_input_fetch_frame(y4m_input *_y4m,FILE *_fin,vpx_image_t *img);
-+
-+#endif