shithub: openh264

Download patch

ref: 1834cb3aca34a001a1854ce223c6c3f1ade57c21
parent: 0e38e5c4e74723b7b8c4eabd0e93c09ddf7eaa35
parent: 9bf4b592834d46704090c7ca2b323feb0d684281
author: volvet <[email protected]>
date: Fri Jan 10 04:06:27 EST 2014

Merge branch 'master' of https://github.com/cisco/openh264 into core_number_detect_fix

--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,5 @@
 language: cpp
 compiler:
-  - gcc
   - clang
 branches:
   except:
@@ -9,5 +8,7 @@
  - sudo apt-get update -qq
  - sudo apt-get install -qq nasm g++-4.6-multilib gcc-multilib libc6-dev-i386 lib32z1-dev
 install: make gtest-bootstrap
-script: make && make test && make clean && make ENABLE64BIT=Yes && make test && make clean && make BUILDTYPE=Release && make test && make BUILDTYPE=Release clean && make ENABLE64BIT=Yes BUILDTYPE=Release && make test
+# libssl is not multiarch so we are building 64bit
+# and then installing the 32bit version
+script: make -B ENABLE64BIT=Yes && make test && make -B ENABLE64BIT=Yes BUILDTYPE=Release && make test && sudo apt-get install -qq libssl-dev:i386 && make -B && make test && make -B BUILDTYPE=Release && make test
 
--- a/Makefile
+++ b/Makefile
@@ -5,6 +5,7 @@
 ROOTDIR=$(PWD)
 
 
+
 ifeq (,$(wildcard ./gtest))
 HAVE_GTEST=No
 else
@@ -20,6 +21,11 @@
 USE_ASM = No
 endif
 
+ifeq ($(USE_ASAN), Yes)
+CFLAGS += -fsanitize=address
+LDFLAGS += -fsanitize=address
+endif
+
 ifeq ($(ENABLE64BIT), Yes)
 CFLAGS += -m64
 LDFLAGS += -m64
@@ -70,8 +76,8 @@
 H264ENC_LDFLAGS = -L. -lencoder -lprocessing -lcommon
 H264ENC_DEPS = $(LIBPREFIX)encoder.$(LIBSUFFIX) $(LIBPREFIX)processing.$(LIBSUFFIX) $(LIBPREFIX)common.$(LIBSUFFIX)
 
-CODEC_UNITTEST_LDFLAGS = -L. -lgtest -ldecoder -lcommon
-CODEC_UNITTEST_DEPS = $(LIBPREFIX)gtest.$(LIBSUFFIX) $(LIBPREFIX)decoder.$(LIBSUFFIX) $(LIBPREFIX)common.$(LIBSUFFIX)
+CODEC_UNITTEST_LDFLAGS = -L. -lgtest -ldecoder -lcrypto -lencoder -lprocessing -lcommon
+CODEC_UNITTEST_DEPS = $(LIBPREFIX)gtest.$(LIBSUFFIX) $(LIBPREFIX)decoder.$(LIBSUFFIX) $(LIBPREFIX)encoder.$(LIBSUFFIX) $(LIBPREFIX)processing.$(LIBSUFFIX) $(LIBPREFIX)common.$(LIBSUFFIX)
 
 .PHONY: test
 
@@ -84,7 +90,7 @@
 gtest-bootstrap:
 	svn co https://googletest.googlecode.com/svn/trunk/ gtest
 
-test:
+test: codec_unittest
 	./codec_unittest
 
 include codec/common/targets.mk
--- a/build/platform-darwin.mk
+++ b/build/platform-darwin.mk
@@ -1,6 +1,6 @@
 
 ASM = nasm
-CFLAGS += -Werror -fPIC
+CFLAGS += -Wno-deprecated-declarations -Werror -fPIC 
 LDFLAGS += -lpthread
 ASMFLAGS += --prefix _ -DNOPREFIX
 ifeq ($(ENABLE64BIT), Yes)
--- a/codec/common/targets.mk
+++ b/codec/common/targets.mk
@@ -1,58 +1,31 @@
 COMMON_PREFIX=COMMON
 COMMON_SRCDIR=codec/common
 COMMON_CPP_SRCS=\
-	$(COMMON_SRCDIR)/./logging.cpp\
-	$(COMMON_SRCDIR)/./deblocking_common.cpp\
 	$(COMMON_SRCDIR)/./cpu.cpp\
+	$(COMMON_SRCDIR)/./deblocking_common.cpp\
+	$(COMMON_SRCDIR)/./logging.cpp\
 
 COMMON_OBJS += $(COMMON_CPP_SRCS:.cpp=.o)
 ifeq ($(USE_ASM), Yes)
 COMMON_ASM_SRCS=\
-	$(COMMON_SRCDIR)/./deblock.asm\
-	$(COMMON_SRCDIR)/./vaa.asm\
 	$(COMMON_SRCDIR)/./asm_inc.asm\
-	$(COMMON_SRCDIR)/./mc_luma.asm\
 	$(COMMON_SRCDIR)/./cpuid.asm\
-	$(COMMON_SRCDIR)/./mc_chroma.asm\
-	$(COMMON_SRCDIR)/./mb_copy.asm\
+	$(COMMON_SRCDIR)/./deblock.asm\
 	$(COMMON_SRCDIR)/./expand_picture.asm\
+	$(COMMON_SRCDIR)/./mb_copy.asm\
+	$(COMMON_SRCDIR)/./mc_chroma.asm\
+	$(COMMON_SRCDIR)/./mc_luma.asm\
+	$(COMMON_SRCDIR)/./vaa.asm\
 
 COMMON_OBJS += $(COMMON_ASM_SRCS:.asm=.o)
 endif
 
 OBJS += $(COMMON_OBJS)
-$(COMMON_SRCDIR)/./logging.o: $(COMMON_SRCDIR)/./logging.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(COMMON_CFLAGS) $(COMMON_INCLUDES) -c -o $(COMMON_SRCDIR)/./logging.o $(COMMON_SRCDIR)/./logging.cpp
+$(COMMON_SRCDIR)/%.o: $(COMMON_SRCDIR)/%.cpp
+	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(COMMON_CFLAGS) $(COMMON_INCLUDES) -c -o $@ $<
 
-$(COMMON_SRCDIR)/./deblocking_common.o: $(COMMON_SRCDIR)/./deblocking_common.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(COMMON_CFLAGS) $(COMMON_INCLUDES) -c -o $(COMMON_SRCDIR)/./deblocking_common.o $(COMMON_SRCDIR)/./deblocking_common.cpp
-
-$(COMMON_SRCDIR)/./cpu.o: $(COMMON_SRCDIR)/./cpu.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(COMMON_CFLAGS) $(COMMON_INCLUDES) -c -o $(COMMON_SRCDIR)/./cpu.o $(COMMON_SRCDIR)/./cpu.cpp
-
-$(COMMON_SRCDIR)/./deblock.o: $(COMMON_SRCDIR)/./deblock.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $(COMMON_SRCDIR)/./deblock.o $(COMMON_SRCDIR)/./deblock.asm
-
-$(COMMON_SRCDIR)/./vaa.o: $(COMMON_SRCDIR)/./vaa.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $(COMMON_SRCDIR)/./vaa.o $(COMMON_SRCDIR)/./vaa.asm
-
-$(COMMON_SRCDIR)/./asm_inc.o: $(COMMON_SRCDIR)/./asm_inc.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $(COMMON_SRCDIR)/./asm_inc.o $(COMMON_SRCDIR)/./asm_inc.asm
-
-$(COMMON_SRCDIR)/./mc_luma.o: $(COMMON_SRCDIR)/./mc_luma.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $(COMMON_SRCDIR)/./mc_luma.o $(COMMON_SRCDIR)/./mc_luma.asm
-
-$(COMMON_SRCDIR)/./cpuid.o: $(COMMON_SRCDIR)/./cpuid.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $(COMMON_SRCDIR)/./cpuid.o $(COMMON_SRCDIR)/./cpuid.asm
-
-$(COMMON_SRCDIR)/./mc_chroma.o: $(COMMON_SRCDIR)/./mc_chroma.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $(COMMON_SRCDIR)/./mc_chroma.o $(COMMON_SRCDIR)/./mc_chroma.asm
-
-$(COMMON_SRCDIR)/./mb_copy.o: $(COMMON_SRCDIR)/./mb_copy.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $(COMMON_SRCDIR)/./mb_copy.o $(COMMON_SRCDIR)/./mb_copy.asm
-
-$(COMMON_SRCDIR)/./expand_picture.o: $(COMMON_SRCDIR)/./expand_picture.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $(COMMON_SRCDIR)/./expand_picture.o $(COMMON_SRCDIR)/./expand_picture.asm
+$(COMMON_SRCDIR)/%.o: $(COMMON_SRCDIR)/%.asm
+	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(COMMON_ASMFLAGS) $(COMMON_ASM_INCLUDES) -o $@ $<
 
 $(LIBPREFIX)common.$(LIBSUFFIX): $(COMMON_OBJS)
 	rm -f $(LIBPREFIX)common.$(LIBSUFFIX)
--- a/codec/console/dec/targets.mk
+++ b/codec/console/dec/targets.mk
@@ -1,9 +1,9 @@
 H264DEC_PREFIX=H264DEC
 H264DEC_SRCDIR=codec/console/dec
 H264DEC_CPP_SRCS=\
-	$(H264DEC_SRCDIR)/./src/read_config.cpp\
-	$(H264DEC_SRCDIR)/./src/h264dec.cpp\
 	$(H264DEC_SRCDIR)/./src/d3d9_utils.cpp\
+	$(H264DEC_SRCDIR)/./src/h264dec.cpp\
+	$(H264DEC_SRCDIR)/./src/read_config.cpp\
 
 H264DEC_OBJS += $(H264DEC_CPP_SRCS:.cpp=.o)
 ifeq ($(USE_ASM), Yes)
@@ -13,16 +13,13 @@
 endif
 
 OBJS += $(H264DEC_OBJS)
-$(H264DEC_SRCDIR)/./src/read_config.o: $(H264DEC_SRCDIR)/./src/read_config.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(H264DEC_CFLAGS) $(H264DEC_INCLUDES) -c -o $(H264DEC_SRCDIR)/./src/read_config.o $(H264DEC_SRCDIR)/./src/read_config.cpp
+$(H264DEC_SRCDIR)/%.o: $(H264DEC_SRCDIR)/%.cpp
+	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(H264DEC_CFLAGS) $(H264DEC_INCLUDES) -c -o $@ $<
 
-$(H264DEC_SRCDIR)/./src/h264dec.o: $(H264DEC_SRCDIR)/./src/h264dec.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(H264DEC_CFLAGS) $(H264DEC_INCLUDES) -c -o $(H264DEC_SRCDIR)/./src/h264dec.o $(H264DEC_SRCDIR)/./src/h264dec.cpp
+$(H264DEC_SRCDIR)/%.o: $(H264DEC_SRCDIR)/%.asm
+	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(H264DEC_ASMFLAGS) $(H264DEC_ASM_INCLUDES) -o $@ $<
 
-$(H264DEC_SRCDIR)/./src/d3d9_utils.o: $(H264DEC_SRCDIR)/./src/d3d9_utils.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(H264DEC_CFLAGS) $(H264DEC_INCLUDES) -c -o $(H264DEC_SRCDIR)/./src/d3d9_utils.o $(H264DEC_SRCDIR)/./src/d3d9_utils.cpp
-
-h264dec: $(H264DEC_OBJS) $(LIBS) $(H264DEC_LIBS)
+h264dec: $(H264DEC_OBJS) $(LIBS) $(H264DEC_LIBS) $(H264DEC_DEPS)
 	$(CXX) -o $@  $(H264DEC_OBJS) $(H264DEC_LDFLAGS) $(H264DEC_LIBS) $(LDFLAGS) $(LIBS)
 
 binaries: h264dec
--- a/codec/decoder/targets.mk
+++ b/codec/decoder/targets.mk
@@ -1,114 +1,45 @@
 DECODER_PREFIX=DECODER
 DECODER_SRCDIR=codec/decoder
 DECODER_CPP_SRCS=\
-	$(DECODER_SRCDIR)/./core/src/mc.cpp\
-	$(DECODER_SRCDIR)/./core/src/get_intra_predictor.cpp\
-	$(DECODER_SRCDIR)/./core/src/deblocking.cpp\
 	$(DECODER_SRCDIR)/./core/src/au_parser.cpp\
+	$(DECODER_SRCDIR)/./core/src/bit_stream.cpp\
+	$(DECODER_SRCDIR)/./core/src/deblocking.cpp\
+	$(DECODER_SRCDIR)/./core/src/decode_mb_aux.cpp\
 	$(DECODER_SRCDIR)/./core/src/decode_slice.cpp\
-	$(DECODER_SRCDIR)/./core/src/pic_queue.cpp\
-	$(DECODER_SRCDIR)/./core/src/utils.cpp\
 	$(DECODER_SRCDIR)/./core/src/decoder.cpp\
-	$(DECODER_SRCDIR)/./core/src/fmo.cpp\
-	$(DECODER_SRCDIR)/./core/src/mv_pred.cpp\
-	$(DECODER_SRCDIR)/./core/src/memmgr_nal_unit.cpp\
 	$(DECODER_SRCDIR)/./core/src/decoder_core.cpp\
-	$(DECODER_SRCDIR)/./core/src/parse_mb_syn_cavlc.cpp\
 	$(DECODER_SRCDIR)/./core/src/decoder_data_tables.cpp\
-	$(DECODER_SRCDIR)/./core/src/mem_align.cpp\
-	$(DECODER_SRCDIR)/./core/src/bit_stream.cpp\
+	$(DECODER_SRCDIR)/./core/src/expand_pic.cpp\
+	$(DECODER_SRCDIR)/./core/src/fmo.cpp\
+	$(DECODER_SRCDIR)/./core/src/get_intra_predictor.cpp\
 	$(DECODER_SRCDIR)/./core/src/manage_dec_ref.cpp\
+	$(DECODER_SRCDIR)/./core/src/mc.cpp\
+	$(DECODER_SRCDIR)/./core/src/mem_align.cpp\
+	$(DECODER_SRCDIR)/./core/src/memmgr_nal_unit.cpp\
+	$(DECODER_SRCDIR)/./core/src/mv_pred.cpp\
+	$(DECODER_SRCDIR)/./core/src/parse_mb_syn_cavlc.cpp\
+	$(DECODER_SRCDIR)/./core/src/pic_queue.cpp\
 	$(DECODER_SRCDIR)/./core/src/rec_mb.cpp\
-	$(DECODER_SRCDIR)/./core/src/expand_pic.cpp\
-	$(DECODER_SRCDIR)/./core/src/decode_mb_aux.cpp\
-	$(DECODER_SRCDIR)/./plus/src/welsDecoderExt.cpp\
+	$(DECODER_SRCDIR)/./core/src/utils.cpp\
 	$(DECODER_SRCDIR)/./plus/src/welsCodecTrace.cpp\
+	$(DECODER_SRCDIR)/./plus/src/welsDecoderExt.cpp\
 
 DECODER_OBJS += $(DECODER_CPP_SRCS:.cpp=.o)
 ifeq ($(USE_ASM), Yes)
 DECODER_ASM_SRCS=\
+	$(DECODER_SRCDIR)/./core/asm/block_add.asm\
 	$(DECODER_SRCDIR)/./core/asm/dct.asm\
 	$(DECODER_SRCDIR)/./core/asm/intra_pred.asm\
-	$(DECODER_SRCDIR)/./core/asm/block_add.asm\
 
 DECODER_OBJS += $(DECODER_ASM_SRCS:.asm=.o)
 endif
 
 OBJS += $(DECODER_OBJS)
-$(DECODER_SRCDIR)/./core/src/mc.o: $(DECODER_SRCDIR)/./core/src/mc.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/mc.o $(DECODER_SRCDIR)/./core/src/mc.cpp
+$(DECODER_SRCDIR)/%.o: $(DECODER_SRCDIR)/%.cpp
+	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $@ $<
 
-$(DECODER_SRCDIR)/./core/src/get_intra_predictor.o: $(DECODER_SRCDIR)/./core/src/get_intra_predictor.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/get_intra_predictor.o $(DECODER_SRCDIR)/./core/src/get_intra_predictor.cpp
-
-$(DECODER_SRCDIR)/./core/src/deblocking.o: $(DECODER_SRCDIR)/./core/src/deblocking.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/deblocking.o $(DECODER_SRCDIR)/./core/src/deblocking.cpp
-
-$(DECODER_SRCDIR)/./core/src/au_parser.o: $(DECODER_SRCDIR)/./core/src/au_parser.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/au_parser.o $(DECODER_SRCDIR)/./core/src/au_parser.cpp
-
-$(DECODER_SRCDIR)/./core/src/decode_slice.o: $(DECODER_SRCDIR)/./core/src/decode_slice.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/decode_slice.o $(DECODER_SRCDIR)/./core/src/decode_slice.cpp
-
-$(DECODER_SRCDIR)/./core/src/pic_queue.o: $(DECODER_SRCDIR)/./core/src/pic_queue.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/pic_queue.o $(DECODER_SRCDIR)/./core/src/pic_queue.cpp
-
-$(DECODER_SRCDIR)/./core/src/utils.o: $(DECODER_SRCDIR)/./core/src/utils.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/utils.o $(DECODER_SRCDIR)/./core/src/utils.cpp
-
-$(DECODER_SRCDIR)/./core/src/decoder.o: $(DECODER_SRCDIR)/./core/src/decoder.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/decoder.o $(DECODER_SRCDIR)/./core/src/decoder.cpp
-
-$(DECODER_SRCDIR)/./core/src/fmo.o: $(DECODER_SRCDIR)/./core/src/fmo.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/fmo.o $(DECODER_SRCDIR)/./core/src/fmo.cpp
-
-$(DECODER_SRCDIR)/./core/src/mv_pred.o: $(DECODER_SRCDIR)/./core/src/mv_pred.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/mv_pred.o $(DECODER_SRCDIR)/./core/src/mv_pred.cpp
-
-$(DECODER_SRCDIR)/./core/src/memmgr_nal_unit.o: $(DECODER_SRCDIR)/./core/src/memmgr_nal_unit.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/memmgr_nal_unit.o $(DECODER_SRCDIR)/./core/src/memmgr_nal_unit.cpp
-
-$(DECODER_SRCDIR)/./core/src/decoder_core.o: $(DECODER_SRCDIR)/./core/src/decoder_core.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/decoder_core.o $(DECODER_SRCDIR)/./core/src/decoder_core.cpp
-
-$(DECODER_SRCDIR)/./core/src/parse_mb_syn_cavlc.o: $(DECODER_SRCDIR)/./core/src/parse_mb_syn_cavlc.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/parse_mb_syn_cavlc.o $(DECODER_SRCDIR)/./core/src/parse_mb_syn_cavlc.cpp
-
-$(DECODER_SRCDIR)/./core/src/decoder_data_tables.o: $(DECODER_SRCDIR)/./core/src/decoder_data_tables.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/decoder_data_tables.o $(DECODER_SRCDIR)/./core/src/decoder_data_tables.cpp
-
-$(DECODER_SRCDIR)/./core/src/mem_align.o: $(DECODER_SRCDIR)/./core/src/mem_align.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/mem_align.o $(DECODER_SRCDIR)/./core/src/mem_align.cpp
-
-$(DECODER_SRCDIR)/./core/src/bit_stream.o: $(DECODER_SRCDIR)/./core/src/bit_stream.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/bit_stream.o $(DECODER_SRCDIR)/./core/src/bit_stream.cpp
-
-$(DECODER_SRCDIR)/./core/src/manage_dec_ref.o: $(DECODER_SRCDIR)/./core/src/manage_dec_ref.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/manage_dec_ref.o $(DECODER_SRCDIR)/./core/src/manage_dec_ref.cpp
-
-$(DECODER_SRCDIR)/./core/src/rec_mb.o: $(DECODER_SRCDIR)/./core/src/rec_mb.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/rec_mb.o $(DECODER_SRCDIR)/./core/src/rec_mb.cpp
-
-$(DECODER_SRCDIR)/./core/src/expand_pic.o: $(DECODER_SRCDIR)/./core/src/expand_pic.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/expand_pic.o $(DECODER_SRCDIR)/./core/src/expand_pic.cpp
-
-$(DECODER_SRCDIR)/./core/src/decode_mb_aux.o: $(DECODER_SRCDIR)/./core/src/decode_mb_aux.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./core/src/decode_mb_aux.o $(DECODER_SRCDIR)/./core/src/decode_mb_aux.cpp
-
-$(DECODER_SRCDIR)/./plus/src/welsDecoderExt.o: $(DECODER_SRCDIR)/./plus/src/welsDecoderExt.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./plus/src/welsDecoderExt.o $(DECODER_SRCDIR)/./plus/src/welsDecoderExt.cpp
-
-$(DECODER_SRCDIR)/./plus/src/welsCodecTrace.o: $(DECODER_SRCDIR)/./plus/src/welsCodecTrace.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(DECODER_CFLAGS) $(DECODER_INCLUDES) -c -o $(DECODER_SRCDIR)/./plus/src/welsCodecTrace.o $(DECODER_SRCDIR)/./plus/src/welsCodecTrace.cpp
-
-$(DECODER_SRCDIR)/./core/asm/dct.o: $(DECODER_SRCDIR)/./core/asm/dct.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(DECODER_ASMFLAGS) $(DECODER_ASM_INCLUDES) -o $(DECODER_SRCDIR)/./core/asm/dct.o $(DECODER_SRCDIR)/./core/asm/dct.asm
-
-$(DECODER_SRCDIR)/./core/asm/intra_pred.o: $(DECODER_SRCDIR)/./core/asm/intra_pred.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(DECODER_ASMFLAGS) $(DECODER_ASM_INCLUDES) -o $(DECODER_SRCDIR)/./core/asm/intra_pred.o $(DECODER_SRCDIR)/./core/asm/intra_pred.asm
-
-$(DECODER_SRCDIR)/./core/asm/block_add.o: $(DECODER_SRCDIR)/./core/asm/block_add.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(DECODER_ASMFLAGS) $(DECODER_ASM_INCLUDES) -o $(DECODER_SRCDIR)/./core/asm/block_add.o $(DECODER_SRCDIR)/./core/asm/block_add.asm
+$(DECODER_SRCDIR)/%.o: $(DECODER_SRCDIR)/%.asm
+	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(DECODER_ASMFLAGS) $(DECODER_ASM_INCLUDES) -o $@ $<
 
 $(LIBPREFIX)decoder.$(LIBSUFFIX): $(DECODER_OBJS)
 	rm -f $(LIBPREFIX)decoder.$(LIBSUFFIX)
--- a/codec/encoder/targets.mk
+++ b/codec/encoder/targets.mk
@@ -1,170 +1,59 @@
 ENCODER_PREFIX=ENCODER
 ENCODER_SRCDIR=codec/encoder
 ENCODER_CPP_SRCS=\
-	$(ENCODER_SRCDIR)/./core/src/mc.cpp\
-	$(ENCODER_SRCDIR)/./core/src/slice_multi_threading.cpp\
-	$(ENCODER_SRCDIR)/./core/src/wels_preprocess.cpp\
-	$(ENCODER_SRCDIR)/./core/src/ratectl.cpp\
-	$(ENCODER_SRCDIR)/./core/src/get_intra_predictor.cpp\
-	$(ENCODER_SRCDIR)/./core/src/encoder_ext.cpp\
-	$(ENCODER_SRCDIR)/./core/src/ref_list_mgr_svc.cpp\
+	$(ENCODER_SRCDIR)/./core/src/au_set.cpp\
 	$(ENCODER_SRCDIR)/./core/src/deblocking.cpp\
-	$(ENCODER_SRCDIR)/./core/src/picture_handle.cpp\
+	$(ENCODER_SRCDIR)/./core/src/decode_mb_aux.cpp\
+	$(ENCODER_SRCDIR)/./core/src/encode_mb_aux.cpp\
 	$(ENCODER_SRCDIR)/./core/src/encoder.cpp\
 	$(ENCODER_SRCDIR)/./core/src/encoder_data_tables.cpp\
-	$(ENCODER_SRCDIR)/./core/src/property.cpp\
-	$(ENCODER_SRCDIR)/./core/src/svc_set_mb_syn_cavlc.cpp\
-	$(ENCODER_SRCDIR)/./core/src/encode_mb_aux.cpp\
+	$(ENCODER_SRCDIR)/./core/src/encoder_ext.cpp\
+	$(ENCODER_SRCDIR)/./core/src/expand_pic.cpp\
+	$(ENCODER_SRCDIR)/./core/src/get_intra_predictor.cpp\
+	$(ENCODER_SRCDIR)/./core/src/mc.cpp\
+	$(ENCODER_SRCDIR)/./core/src/md.cpp\
 	$(ENCODER_SRCDIR)/./core/src/memory_align.cpp\
-	$(ENCODER_SRCDIR)/./core/src/set_mb_syn_cavlc.cpp\
-	$(ENCODER_SRCDIR)/./core/src/utils.cpp\
 	$(ENCODER_SRCDIR)/./core/src/mv_pred.cpp\
-	$(ENCODER_SRCDIR)/./core/src/svc_encode_slice.cpp\
-	$(ENCODER_SRCDIR)/./core/src/au_set.cpp\
-	$(ENCODER_SRCDIR)/./core/src/svc_base_layer_md.cpp\
-	$(ENCODER_SRCDIR)/./core/src/svc_encode_mb.cpp\
-	$(ENCODER_SRCDIR)/./core/src/svc_motion_estimate.cpp\
-	$(ENCODER_SRCDIR)/./core/src/md.cpp\
+	$(ENCODER_SRCDIR)/./core/src/nal_encap.cpp\
+	$(ENCODER_SRCDIR)/./core/src/picture_handle.cpp\
+	$(ENCODER_SRCDIR)/./core/src/property.cpp\
+	$(ENCODER_SRCDIR)/./core/src/ratectl.cpp\
+	$(ENCODER_SRCDIR)/./core/src/ref_list_mgr_svc.cpp\
 	$(ENCODER_SRCDIR)/./core/src/sample.cpp\
+	$(ENCODER_SRCDIR)/./core/src/set_mb_syn_cavlc.cpp\
+	$(ENCODER_SRCDIR)/./core/src/slice_multi_threading.cpp\
+	$(ENCODER_SRCDIR)/./core/src/svc_base_layer_md.cpp\
 	$(ENCODER_SRCDIR)/./core/src/svc_enc_slice_segment.cpp\
+	$(ENCODER_SRCDIR)/./core/src/svc_encode_mb.cpp\
+	$(ENCODER_SRCDIR)/./core/src/svc_encode_slice.cpp\
 	$(ENCODER_SRCDIR)/./core/src/svc_mode_decision.cpp\
-	$(ENCODER_SRCDIR)/./core/src/nal_encap.cpp\
-	$(ENCODER_SRCDIR)/./core/src/expand_pic.cpp\
-	$(ENCODER_SRCDIR)/./core/src/decode_mb_aux.cpp\
-	$(ENCODER_SRCDIR)/./plus/src/welsEncoderExt.cpp\
+	$(ENCODER_SRCDIR)/./core/src/svc_motion_estimate.cpp\
+	$(ENCODER_SRCDIR)/./core/src/svc_set_mb_syn_cavlc.cpp\
+	$(ENCODER_SRCDIR)/./core/src/utils.cpp\
+	$(ENCODER_SRCDIR)/./core/src/wels_preprocess.cpp\
 	$(ENCODER_SRCDIR)/./plus/src/welsCodecTrace.cpp\
+	$(ENCODER_SRCDIR)/./plus/src/welsEncoderExt.cpp\
 
 ENCODER_OBJS += $(ENCODER_CPP_SRCS:.cpp=.o)
 ifeq ($(USE_ASM), Yes)
 ENCODER_ASM_SRCS=\
-	$(ENCODER_SRCDIR)/./core/asm/quant.asm\
-	$(ENCODER_SRCDIR)/./core/asm/score.asm\
 	$(ENCODER_SRCDIR)/./core/asm/coeff.asm\
 	$(ENCODER_SRCDIR)/./core/asm/dct.asm\
-	$(ENCODER_SRCDIR)/./core/asm/satd_sad.asm\
-	$(ENCODER_SRCDIR)/./core/asm/memzero.asm\
 	$(ENCODER_SRCDIR)/./core/asm/intra_pred.asm\
+	$(ENCODER_SRCDIR)/./core/asm/memzero.asm\
+	$(ENCODER_SRCDIR)/./core/asm/quant.asm\
+	$(ENCODER_SRCDIR)/./core/asm/satd_sad.asm\
+	$(ENCODER_SRCDIR)/./core/asm/score.asm\
 
 ENCODER_OBJS += $(ENCODER_ASM_SRCS:.asm=.o)
 endif
 
 OBJS += $(ENCODER_OBJS)
-$(ENCODER_SRCDIR)/./core/src/mc.o: $(ENCODER_SRCDIR)/./core/src/mc.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/mc.o $(ENCODER_SRCDIR)/./core/src/mc.cpp
+$(ENCODER_SRCDIR)/%.o: $(ENCODER_SRCDIR)/%.cpp
+	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $@ $<
 
-$(ENCODER_SRCDIR)/./core/src/slice_multi_threading.o: $(ENCODER_SRCDIR)/./core/src/slice_multi_threading.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/slice_multi_threading.o $(ENCODER_SRCDIR)/./core/src/slice_multi_threading.cpp
-
-$(ENCODER_SRCDIR)/./core/src/wels_preprocess.o: $(ENCODER_SRCDIR)/./core/src/wels_preprocess.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/wels_preprocess.o $(ENCODER_SRCDIR)/./core/src/wels_preprocess.cpp
-
-$(ENCODER_SRCDIR)/./core/src/ratectl.o: $(ENCODER_SRCDIR)/./core/src/ratectl.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/ratectl.o $(ENCODER_SRCDIR)/./core/src/ratectl.cpp
-
-$(ENCODER_SRCDIR)/./core/src/get_intra_predictor.o: $(ENCODER_SRCDIR)/./core/src/get_intra_predictor.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/get_intra_predictor.o $(ENCODER_SRCDIR)/./core/src/get_intra_predictor.cpp
-
-$(ENCODER_SRCDIR)/./core/src/encoder_ext.o: $(ENCODER_SRCDIR)/./core/src/encoder_ext.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/encoder_ext.o $(ENCODER_SRCDIR)/./core/src/encoder_ext.cpp
-
-$(ENCODER_SRCDIR)/./core/src/ref_list_mgr_svc.o: $(ENCODER_SRCDIR)/./core/src/ref_list_mgr_svc.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/ref_list_mgr_svc.o $(ENCODER_SRCDIR)/./core/src/ref_list_mgr_svc.cpp
-
-$(ENCODER_SRCDIR)/./core/src/deblocking.o: $(ENCODER_SRCDIR)/./core/src/deblocking.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/deblocking.o $(ENCODER_SRCDIR)/./core/src/deblocking.cpp
-
-$(ENCODER_SRCDIR)/./core/src/picture_handle.o: $(ENCODER_SRCDIR)/./core/src/picture_handle.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/picture_handle.o $(ENCODER_SRCDIR)/./core/src/picture_handle.cpp
-
-$(ENCODER_SRCDIR)/./core/src/encoder.o: $(ENCODER_SRCDIR)/./core/src/encoder.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/encoder.o $(ENCODER_SRCDIR)/./core/src/encoder.cpp
-
-$(ENCODER_SRCDIR)/./core/src/encoder_data_tables.o: $(ENCODER_SRCDIR)/./core/src/encoder_data_tables.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/encoder_data_tables.o $(ENCODER_SRCDIR)/./core/src/encoder_data_tables.cpp
-
-$(ENCODER_SRCDIR)/./core/src/property.o: $(ENCODER_SRCDIR)/./core/src/property.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/property.o $(ENCODER_SRCDIR)/./core/src/property.cpp
-
-$(ENCODER_SRCDIR)/./core/src/svc_set_mb_syn_cavlc.o: $(ENCODER_SRCDIR)/./core/src/svc_set_mb_syn_cavlc.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/svc_set_mb_syn_cavlc.o $(ENCODER_SRCDIR)/./core/src/svc_set_mb_syn_cavlc.cpp
-
-$(ENCODER_SRCDIR)/./core/src/encode_mb_aux.o: $(ENCODER_SRCDIR)/./core/src/encode_mb_aux.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/encode_mb_aux.o $(ENCODER_SRCDIR)/./core/src/encode_mb_aux.cpp
-
-$(ENCODER_SRCDIR)/./core/src/memory_align.o: $(ENCODER_SRCDIR)/./core/src/memory_align.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/memory_align.o $(ENCODER_SRCDIR)/./core/src/memory_align.cpp
-
-$(ENCODER_SRCDIR)/./core/src/set_mb_syn_cavlc.o: $(ENCODER_SRCDIR)/./core/src/set_mb_syn_cavlc.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/set_mb_syn_cavlc.o $(ENCODER_SRCDIR)/./core/src/set_mb_syn_cavlc.cpp
-
-$(ENCODER_SRCDIR)/./core/src/utils.o: $(ENCODER_SRCDIR)/./core/src/utils.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/utils.o $(ENCODER_SRCDIR)/./core/src/utils.cpp
-
-$(ENCODER_SRCDIR)/./core/src/mv_pred.o: $(ENCODER_SRCDIR)/./core/src/mv_pred.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/mv_pred.o $(ENCODER_SRCDIR)/./core/src/mv_pred.cpp
-
-$(ENCODER_SRCDIR)/./core/src/svc_encode_slice.o: $(ENCODER_SRCDIR)/./core/src/svc_encode_slice.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/svc_encode_slice.o $(ENCODER_SRCDIR)/./core/src/svc_encode_slice.cpp
-
-$(ENCODER_SRCDIR)/./core/src/au_set.o: $(ENCODER_SRCDIR)/./core/src/au_set.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/au_set.o $(ENCODER_SRCDIR)/./core/src/au_set.cpp
-
-$(ENCODER_SRCDIR)/./core/src/svc_base_layer_md.o: $(ENCODER_SRCDIR)/./core/src/svc_base_layer_md.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/svc_base_layer_md.o $(ENCODER_SRCDIR)/./core/src/svc_base_layer_md.cpp
-
-$(ENCODER_SRCDIR)/./core/src/svc_encode_mb.o: $(ENCODER_SRCDIR)/./core/src/svc_encode_mb.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/svc_encode_mb.o $(ENCODER_SRCDIR)/./core/src/svc_encode_mb.cpp
-
-$(ENCODER_SRCDIR)/./core/src/svc_motion_estimate.o: $(ENCODER_SRCDIR)/./core/src/svc_motion_estimate.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/svc_motion_estimate.o $(ENCODER_SRCDIR)/./core/src/svc_motion_estimate.cpp
-
-$(ENCODER_SRCDIR)/./core/src/md.o: $(ENCODER_SRCDIR)/./core/src/md.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/md.o $(ENCODER_SRCDIR)/./core/src/md.cpp
-
-$(ENCODER_SRCDIR)/./core/src/sample.o: $(ENCODER_SRCDIR)/./core/src/sample.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/sample.o $(ENCODER_SRCDIR)/./core/src/sample.cpp
-
-$(ENCODER_SRCDIR)/./core/src/svc_enc_slice_segment.o: $(ENCODER_SRCDIR)/./core/src/svc_enc_slice_segment.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/svc_enc_slice_segment.o $(ENCODER_SRCDIR)/./core/src/svc_enc_slice_segment.cpp
-
-$(ENCODER_SRCDIR)/./core/src/svc_mode_decision.o: $(ENCODER_SRCDIR)/./core/src/svc_mode_decision.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/svc_mode_decision.o $(ENCODER_SRCDIR)/./core/src/svc_mode_decision.cpp
-
-$(ENCODER_SRCDIR)/./core/src/nal_encap.o: $(ENCODER_SRCDIR)/./core/src/nal_encap.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/nal_encap.o $(ENCODER_SRCDIR)/./core/src/nal_encap.cpp
-
-$(ENCODER_SRCDIR)/./core/src/expand_pic.o: $(ENCODER_SRCDIR)/./core/src/expand_pic.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/expand_pic.o $(ENCODER_SRCDIR)/./core/src/expand_pic.cpp
-
-$(ENCODER_SRCDIR)/./core/src/decode_mb_aux.o: $(ENCODER_SRCDIR)/./core/src/decode_mb_aux.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./core/src/decode_mb_aux.o $(ENCODER_SRCDIR)/./core/src/decode_mb_aux.cpp
-
-$(ENCODER_SRCDIR)/./plus/src/welsEncoderExt.o: $(ENCODER_SRCDIR)/./plus/src/welsEncoderExt.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./plus/src/welsEncoderExt.o $(ENCODER_SRCDIR)/./plus/src/welsEncoderExt.cpp
-
-$(ENCODER_SRCDIR)/./plus/src/welsCodecTrace.o: $(ENCODER_SRCDIR)/./plus/src/welsCodecTrace.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(ENCODER_CFLAGS) $(ENCODER_INCLUDES) -c -o $(ENCODER_SRCDIR)/./plus/src/welsCodecTrace.o $(ENCODER_SRCDIR)/./plus/src/welsCodecTrace.cpp
-
-$(ENCODER_SRCDIR)/./core/asm/quant.o: $(ENCODER_SRCDIR)/./core/asm/quant.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(ENCODER_ASMFLAGS) $(ENCODER_ASM_INCLUDES) -o $(ENCODER_SRCDIR)/./core/asm/quant.o $(ENCODER_SRCDIR)/./core/asm/quant.asm
-
-$(ENCODER_SRCDIR)/./core/asm/score.o: $(ENCODER_SRCDIR)/./core/asm/score.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(ENCODER_ASMFLAGS) $(ENCODER_ASM_INCLUDES) -o $(ENCODER_SRCDIR)/./core/asm/score.o $(ENCODER_SRCDIR)/./core/asm/score.asm
-
-$(ENCODER_SRCDIR)/./core/asm/coeff.o: $(ENCODER_SRCDIR)/./core/asm/coeff.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(ENCODER_ASMFLAGS) $(ENCODER_ASM_INCLUDES) -o $(ENCODER_SRCDIR)/./core/asm/coeff.o $(ENCODER_SRCDIR)/./core/asm/coeff.asm
-
-$(ENCODER_SRCDIR)/./core/asm/dct.o: $(ENCODER_SRCDIR)/./core/asm/dct.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(ENCODER_ASMFLAGS) $(ENCODER_ASM_INCLUDES) -o $(ENCODER_SRCDIR)/./core/asm/dct.o $(ENCODER_SRCDIR)/./core/asm/dct.asm
-
-$(ENCODER_SRCDIR)/./core/asm/satd_sad.o: $(ENCODER_SRCDIR)/./core/asm/satd_sad.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(ENCODER_ASMFLAGS) $(ENCODER_ASM_INCLUDES) -o $(ENCODER_SRCDIR)/./core/asm/satd_sad.o $(ENCODER_SRCDIR)/./core/asm/satd_sad.asm
-
-$(ENCODER_SRCDIR)/./core/asm/memzero.o: $(ENCODER_SRCDIR)/./core/asm/memzero.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(ENCODER_ASMFLAGS) $(ENCODER_ASM_INCLUDES) -o $(ENCODER_SRCDIR)/./core/asm/memzero.o $(ENCODER_SRCDIR)/./core/asm/memzero.asm
-
-$(ENCODER_SRCDIR)/./core/asm/intra_pred.o: $(ENCODER_SRCDIR)/./core/asm/intra_pred.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(ENCODER_ASMFLAGS) $(ENCODER_ASM_INCLUDES) -o $(ENCODER_SRCDIR)/./core/asm/intra_pred.o $(ENCODER_SRCDIR)/./core/asm/intra_pred.asm
+$(ENCODER_SRCDIR)/%.o: $(ENCODER_SRCDIR)/%.asm
+	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(ENCODER_ASMFLAGS) $(ENCODER_ASM_INCLUDES) -o $@ $<
 
 $(LIBPREFIX)encoder.$(LIBSUFFIX): $(ENCODER_OBJS)
 	rm -f $(LIBPREFIX)encoder.$(LIBSUFFIX)
--- a/codec/processing/targets.mk
+++ b/codec/processing/targets.mk
@@ -1,110 +1,44 @@
 PROCESSING_PREFIX=PROCESSING
 PROCESSING_SRCDIR=codec/processing
 PROCESSING_CPP_SRCS=\
-	$(PROCESSING_SRCDIR)/./src/imagerotate/imagerotate.cpp\
-	$(PROCESSING_SRCDIR)/./src/imagerotate/imagerotatefuncs.cpp\
-	$(PROCESSING_SRCDIR)/./src/vaacalc/vaacalcfuncs.cpp\
-	$(PROCESSING_SRCDIR)/./src/vaacalc/vaacalculation.cpp\
-	$(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetection.cpp\
-	$(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetectionCommon.cpp\
-	$(PROCESSING_SRCDIR)/./src/common/WelsFrameWorkEx.cpp\
-	$(PROCESSING_SRCDIR)/./src/common/util.cpp\
-	$(PROCESSING_SRCDIR)/./src/common/memory.cpp\
-	$(PROCESSING_SRCDIR)/./src/common/WelsFrameWork.cpp\
+	$(PROCESSING_SRCDIR)/./src/adaptivequantization/AdaptiveQuantization.cpp\
+	$(PROCESSING_SRCDIR)/./src/backgounddetection/BackgroundDetection.cpp\
 	$(PROCESSING_SRCDIR)/./src/common/cpu.cpp\
+	$(PROCESSING_SRCDIR)/./src/common/memory.cpp\
 	$(PROCESSING_SRCDIR)/./src/common/thread.cpp\
+	$(PROCESSING_SRCDIR)/./src/common/util.cpp\
+	$(PROCESSING_SRCDIR)/./src/common/WelsFrameWork.cpp\
+	$(PROCESSING_SRCDIR)/./src/common/WelsFrameWorkEx.cpp\
 	$(PROCESSING_SRCDIR)/./src/complexityanalysis/ComplexityAnalysis.cpp\
-	$(PROCESSING_SRCDIR)/./src/denoise/denoise_filter.cpp\
 	$(PROCESSING_SRCDIR)/./src/denoise/denoise.cpp\
-	$(PROCESSING_SRCDIR)/./src/adaptivequantization/AdaptiveQuantization.cpp\
+	$(PROCESSING_SRCDIR)/./src/denoise/denoise_filter.cpp\
 	$(PROCESSING_SRCDIR)/./src/downsample/downsample.cpp\
 	$(PROCESSING_SRCDIR)/./src/downsample/downsamplefuncs.cpp\
-	$(PROCESSING_SRCDIR)/./src/backgounddetection/BackgroundDetection.cpp\
+	$(PROCESSING_SRCDIR)/./src/imagerotate/imagerotate.cpp\
+	$(PROCESSING_SRCDIR)/./src/imagerotate/imagerotatefuncs.cpp\
+	$(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetection.cpp\
+	$(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetectionCommon.cpp\
+	$(PROCESSING_SRCDIR)/./src/vaacalc/vaacalcfuncs.cpp\
+	$(PROCESSING_SRCDIR)/./src/vaacalc/vaacalculation.cpp\
 
 PROCESSING_OBJS += $(PROCESSING_CPP_SRCS:.cpp=.o)
 ifeq ($(USE_ASM), Yes)
 PROCESSING_ASM_SRCS=\
-	$(PROCESSING_SRCDIR)/./src/asm/sad.asm\
-	$(PROCESSING_SRCDIR)/./src/asm/vaa.asm\
 	$(PROCESSING_SRCDIR)/./src/asm/denoisefilter.asm\
-	$(PROCESSING_SRCDIR)/./src/asm/intra_pred.asm\
 	$(PROCESSING_SRCDIR)/./src/asm/downsample_bilinear.asm\
+	$(PROCESSING_SRCDIR)/./src/asm/intra_pred.asm\
+	$(PROCESSING_SRCDIR)/./src/asm/sad.asm\
+	$(PROCESSING_SRCDIR)/./src/asm/vaa.asm\
 
 PROCESSING_OBJS += $(PROCESSING_ASM_SRCS:.asm=.o)
 endif
 
 OBJS += $(PROCESSING_OBJS)
-$(PROCESSING_SRCDIR)/./src/imagerotate/imagerotate.o: $(PROCESSING_SRCDIR)/./src/imagerotate/imagerotate.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/imagerotate/imagerotate.o $(PROCESSING_SRCDIR)/./src/imagerotate/imagerotate.cpp
+$(PROCESSING_SRCDIR)/%.o: $(PROCESSING_SRCDIR)/%.cpp
+	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $@ $<
 
-$(PROCESSING_SRCDIR)/./src/imagerotate/imagerotatefuncs.o: $(PROCESSING_SRCDIR)/./src/imagerotate/imagerotatefuncs.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/imagerotate/imagerotatefuncs.o $(PROCESSING_SRCDIR)/./src/imagerotate/imagerotatefuncs.cpp
-
-$(PROCESSING_SRCDIR)/./src/vaacalc/vaacalcfuncs.o: $(PROCESSING_SRCDIR)/./src/vaacalc/vaacalcfuncs.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/vaacalc/vaacalcfuncs.o $(PROCESSING_SRCDIR)/./src/vaacalc/vaacalcfuncs.cpp
-
-$(PROCESSING_SRCDIR)/./src/vaacalc/vaacalculation.o: $(PROCESSING_SRCDIR)/./src/vaacalc/vaacalculation.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/vaacalc/vaacalculation.o $(PROCESSING_SRCDIR)/./src/vaacalc/vaacalculation.cpp
-
-$(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetection.o: $(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetection.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetection.o $(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetection.cpp
-
-$(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetectionCommon.o: $(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetectionCommon.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetectionCommon.o $(PROCESSING_SRCDIR)/./src/scenechangedetection/SceneChangeDetectionCommon.cpp
-
-$(PROCESSING_SRCDIR)/./src/common/WelsFrameWorkEx.o: $(PROCESSING_SRCDIR)/./src/common/WelsFrameWorkEx.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/common/WelsFrameWorkEx.o $(PROCESSING_SRCDIR)/./src/common/WelsFrameWorkEx.cpp
-
-$(PROCESSING_SRCDIR)/./src/common/util.o: $(PROCESSING_SRCDIR)/./src/common/util.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/common/util.o $(PROCESSING_SRCDIR)/./src/common/util.cpp
-
-$(PROCESSING_SRCDIR)/./src/common/memory.o: $(PROCESSING_SRCDIR)/./src/common/memory.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/common/memory.o $(PROCESSING_SRCDIR)/./src/common/memory.cpp
-
-$(PROCESSING_SRCDIR)/./src/common/WelsFrameWork.o: $(PROCESSING_SRCDIR)/./src/common/WelsFrameWork.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/common/WelsFrameWork.o $(PROCESSING_SRCDIR)/./src/common/WelsFrameWork.cpp
-
-$(PROCESSING_SRCDIR)/./src/common/cpu.o: $(PROCESSING_SRCDIR)/./src/common/cpu.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/common/cpu.o $(PROCESSING_SRCDIR)/./src/common/cpu.cpp
-
-$(PROCESSING_SRCDIR)/./src/common/thread.o: $(PROCESSING_SRCDIR)/./src/common/thread.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/common/thread.o $(PROCESSING_SRCDIR)/./src/common/thread.cpp
-
-$(PROCESSING_SRCDIR)/./src/complexityanalysis/ComplexityAnalysis.o: $(PROCESSING_SRCDIR)/./src/complexityanalysis/ComplexityAnalysis.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/complexityanalysis/ComplexityAnalysis.o $(PROCESSING_SRCDIR)/./src/complexityanalysis/ComplexityAnalysis.cpp
-
-$(PROCESSING_SRCDIR)/./src/denoise/denoise_filter.o: $(PROCESSING_SRCDIR)/./src/denoise/denoise_filter.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/denoise/denoise_filter.o $(PROCESSING_SRCDIR)/./src/denoise/denoise_filter.cpp
-
-$(PROCESSING_SRCDIR)/./src/denoise/denoise.o: $(PROCESSING_SRCDIR)/./src/denoise/denoise.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/denoise/denoise.o $(PROCESSING_SRCDIR)/./src/denoise/denoise.cpp
-
-$(PROCESSING_SRCDIR)/./src/adaptivequantization/AdaptiveQuantization.o: $(PROCESSING_SRCDIR)/./src/adaptivequantization/AdaptiveQuantization.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/adaptivequantization/AdaptiveQuantization.o $(PROCESSING_SRCDIR)/./src/adaptivequantization/AdaptiveQuantization.cpp
-
-$(PROCESSING_SRCDIR)/./src/downsample/downsample.o: $(PROCESSING_SRCDIR)/./src/downsample/downsample.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/downsample/downsample.o $(PROCESSING_SRCDIR)/./src/downsample/downsample.cpp
-
-$(PROCESSING_SRCDIR)/./src/downsample/downsamplefuncs.o: $(PROCESSING_SRCDIR)/./src/downsample/downsamplefuncs.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/downsample/downsamplefuncs.o $(PROCESSING_SRCDIR)/./src/downsample/downsamplefuncs.cpp
-
-$(PROCESSING_SRCDIR)/./src/backgounddetection/BackgroundDetection.o: $(PROCESSING_SRCDIR)/./src/backgounddetection/BackgroundDetection.cpp
-	$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PROCESSING_CFLAGS) $(PROCESSING_INCLUDES) -c -o $(PROCESSING_SRCDIR)/./src/backgounddetection/BackgroundDetection.o $(PROCESSING_SRCDIR)/./src/backgounddetection/BackgroundDetection.cpp
-
-$(PROCESSING_SRCDIR)/./src/asm/sad.o: $(PROCESSING_SRCDIR)/./src/asm/sad.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(PROCESSING_ASMFLAGS) $(PROCESSING_ASM_INCLUDES) -o $(PROCESSING_SRCDIR)/./src/asm/sad.o $(PROCESSING_SRCDIR)/./src/asm/sad.asm
-
-$(PROCESSING_SRCDIR)/./src/asm/vaa.o: $(PROCESSING_SRCDIR)/./src/asm/vaa.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(PROCESSING_ASMFLAGS) $(PROCESSING_ASM_INCLUDES) -o $(PROCESSING_SRCDIR)/./src/asm/vaa.o $(PROCESSING_SRCDIR)/./src/asm/vaa.asm
-
-$(PROCESSING_SRCDIR)/./src/asm/denoisefilter.o: $(PROCESSING_SRCDIR)/./src/asm/denoisefilter.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(PROCESSING_ASMFLAGS) $(PROCESSING_ASM_INCLUDES) -o $(PROCESSING_SRCDIR)/./src/asm/denoisefilter.o $(PROCESSING_SRCDIR)/./src/asm/denoisefilter.asm
-
-$(PROCESSING_SRCDIR)/./src/asm/intra_pred.o: $(PROCESSING_SRCDIR)/./src/asm/intra_pred.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(PROCESSING_ASMFLAGS) $(PROCESSING_ASM_INCLUDES) -o $(PROCESSING_SRCDIR)/./src/asm/intra_pred.o $(PROCESSING_SRCDIR)/./src/asm/intra_pred.asm
-
-$(PROCESSING_SRCDIR)/./src/asm/downsample_bilinear.o: $(PROCESSING_SRCDIR)/./src/asm/downsample_bilinear.asm
-	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(PROCESSING_ASMFLAGS) $(PROCESSING_ASM_INCLUDES) -o $(PROCESSING_SRCDIR)/./src/asm/downsample_bilinear.o $(PROCESSING_SRCDIR)/./src/asm/downsample_bilinear.asm
+$(PROCESSING_SRCDIR)/%.o: $(PROCESSING_SRCDIR)/%.asm
+	$(ASM) $(ASMFLAGS) $(ASM_INCLUDES) $(PROCESSING_ASMFLAGS) $(PROCESSING_ASM_INCLUDES) -o $@ $<
 
 $(LIBPREFIX)processing.$(LIBSUFFIX): $(PROCESSING_OBJS)
 	rm -f $(LIBPREFIX)processing.$(LIBSUFFIX)
--- /dev/null
+++ b/res/CiscoVT2people_160x96_6fps.yuv
@@ -1,0 +1,1 @@
+��������������������v]TQOOSVWTOLOIMRXUPc�����������������������������������������������������������������������������������������������������������������������鮮������������������a`QNPVYVSPLJLLFLOROL]����������������������������������������������������������������������������������������������������������������������鯯�����������������ahYRNTZTQSJJGGGIEHKHKM[���������������������������������������������������������������������������������������������������������������������鯯�����������������Vd[UX]WNQPMLIGGFIHKHKNO���������������������������������������������������������������������������������������������������������������������魭����������������jSb_^debdbc`b\PRJPQQQNQQk��������������������������������������������������������������������������������������������������������������������뭭����������������]S\Yc�������~ld\^jl_WONTQ�������������������������������������������������������������������������{edr���������������������������������������뮮����������������WPYU����ķ���������taSCPL|�����������������������������������������������������������������}z}�yj^VSNTWfo�����������������������������������뺴����������������STW]����������������p\KHJd��������������������������������������������������������������pb`^UQWRRRVYYSNWblp�����������������������������������ɺ����������������QT]m����Ȼ�����������o\BGZ������������������������������������������������������������ybLQ]L?BGMPUWWYVQQ]nf]��������������������������������빶����������������PZdz����Ȼ�����������wuEGZ�����������������������������������������������������������pTINYWD?HJJMRWWVSUalqjUP{�������������������������������벱����������������Tcp������ı�����������{TGY����������������������������������������������������������hQKKRUM@HWKBGPTSXUTcgnhRFRy������������������������������뭮����������������ajy������ǹ�����������xWHQ���������������������������������������������������������hRMBN_\F?NWO@DLSTUX^abSMRKEO������������������������������뫫����������������wq{���緜xz�����������|YEO��������������������������������������������������������rTOBDOXWICEQPJB>HV[^cgePBFHHLc�����������������������������몪�����������������r���仙��vp����h\bq��YGT�������������������������������������������������������|WZFEEFOZSGFSNHMPDMU^ki^PB?AAFO�����������������������������몪�����������������v������׸�����vgdg_i|�fKq�������������������������������������������������������d^OEFD>L[XKKQSSIVRKZ_ZTSJD>;>AGX����������������������������몪����������������ļ������ۭ�����rq����}�xH�������������������������������������������������������r_[RNB:AOX[PTSZZVPcbKiYGFC>>;>AGIv���������������������������먨�����������������Ϯ����͉EVn�٤�s�������^������������������������������������������������������xd`ZUNA@DHM[^knpsi^goUOUE==;>==>AHR���������������������������맧�����������������������翓���佖xePUi���ng�����������������������������������������������������gg__^LBMJHTh~����}wodXTKB<=><=<;DGOm��������������������������먨������������������������ģ����ơ�}������g�����������������������������������������������������teY]cWDOROTe��������m_XLL@;;==;>>ADJW��������������������������먨�����������������������׽�����ʤ��������q�����������������������������������������������������daZ\_TNYYVby�������t_^LLF??==;>A>DJT��������������������������륦�����������������������Կ�����̡�������y������������������������������������������������������k_YY[MTVQbg����ɿ��zsaZTLM>>==;;C@CEMt�������������������������륦������������������������ȼ����Ъ�������������������������������������������������������������wfZ\VQJTONav�����ǻ��ki]XPQG;<<>><?CELa�������������������������뢤�����������������������κ�������������������������������������������������������������������oa^WSGJNKRi�������¶�s`]ZTLJ;<<==;>@FMR�������������������������롤�����������������|������ѷ��i��cY������������������������������������������������������������i][TODGDHYw������ο���hZ]XUI:99==;><<GK�������������������������뤢��������������}}���������ƺ��|x�����������������������������������������������������������{b[ZQJ@CBLg��������ĵ���c][VQB6:9?;;::BK|������������������������뤢��������������||zys��������ɽ���������������������������������������������������������������x
\ No newline at end of file
--- /dev/null
+++ b/res/CiscoVT2people_320x192_12fps.yuv
@@ -1,0 +1,1 @@
+�����������������������������������������s^XSTTPQMMOPRTVZWTQROMNQNJFJQURY[XSOVj������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������豱��������������������������������������j``[SRPPQMNRSTUVSTTUNJHIOMJIIMPPUWVRNKMTx����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������议�������������������������������������y[^h`TNMPONRVXWVTQRRRPLJMMKKJFGKOORSRKLJLY{���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������譭�������������������������������������`gbaVTLJPOPTZ[YVUUSOMLHFHJKKLECFMJOQPPQNJJT|�������������������������������������Ļ�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������谰������������������������������������yVbc\QQPMKMV[YXVTRXSMIJHGFHEEHIHECIJKMIIHIIMS������������������������������������ļ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������议������������������������������������]VmkaURQQOQY[WQPONQOJFKIHFHFFHHHFEEGHIEGKNNNEP�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������误�����������������������������������yR[ff^SSUVVY][SLMNONNKIGGECGFFGFFGHEFHIDHKNLPMKx����������������������������������Ŀ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������议�����������������������������������\QV^c`XUWY[^`ZRNORSQPPOPOMMGEEGDEHJHJLMHIIHMMQP`������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������譭����������������������������������YNWdfc[U^Zdc`YX]ZWY\YXZXWUSLFOKHGHJKJLPMMLKPRQOM������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������뭭����������������������������������vWPU\bb\^fhjp]jlkmlkmifgljdaWTWTIOUXUVTRTSPONRRPSt�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������뭭����������������������������������hUSRX^^X`bu�|kz~�����{z{ukf^^WXOYabef`WZVROLQTRUS�����������������������������������������������������������������������������������������������������������������������������������������������������wy����������������������������������������������������������������������������������뭭����������������������������������_TTPZ]YRUt����������������sjik_aamsopqi[XTNJJOUUQJu������������������������������������������������������������������������������������������������������������������������������������������������vjVKOJJTbru~����������������������������������������������������������������������������묭����������������������������������[RMQV[\Qc������ƿ������������}�|��|z}�rpcXQPK?RPOK`�������������������������������������������������������������������������������������������������������������������������������������������~unc\USQODGNV[^hqx��������
\ No newline at end of file
binary files /dev/null b/res/test_vd_1d.264 differ
binary files /dev/null b/res/test_vd_rc.264 differ
--- /dev/null
+++ b/test/decoder_test.cpp
@@ -1,0 +1,194 @@
+#include <gtest/gtest.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <limits.h>
+#include <fstream>
+#include <openssl/sha.h>
+
+#include "codec_def.h"
+#include "codec_app_def.h"
+#include "codec_api.h"
+
+#include "utils/BufferedData.h"
+#include "utils/HashFunctions.h"
+
+static void UpdateHashFromPlane(SHA_CTX* ctx, const uint8_t* plane,
+    int width, int height, int stride) {
+  for (int i = 0; i < height; i++) {
+    SHA1_Update(ctx, plane, width);
+    plane += stride;
+  }
+}
+
+/**
+ * @return frame size (>= 0), or -1 for memory allocation error.
+ */
+static int ReadFrame(std::ifstream* file, BufferedData* buf) {
+  // start code of a frame is {0, 0, 0, 1}
+  int zeroCount = 0;
+  char b;
+
+  for (;;) {
+    file->read(&b, 1);
+    if (file->gcount() != 1) {
+      break;
+    }
+    if (!buf->Push(b)) {
+      return -1;
+    }
+
+    if (buf->Length() <= 4) {
+      continue;
+    }
+
+    if (zeroCount < 3) {
+      zeroCount = b != 0 ? 0 : zeroCount + 1;
+    } else {
+      if (b == 1) {
+        if (file->seekg(-4, file->cur).good()) {
+          return buf->Length() - 4;
+        } else {
+          // seeking fails
+          return -1;
+        }
+      } else if (b == 0) {
+        zeroCount = 3;
+      } else {
+        zeroCount = 0;
+      }
+    }
+  }
+  return buf->Length();
+}
+
+/**
+ * @return true if a frame is decoded successfully, otherwise false.
+ */
+static bool DecodeAndProcess(ISVCDecoder* decoder, const uint8_t* src,
+    int sliceSize, SHA_CTX* ctx) {
+  void* data[3];
+  SBufferInfo bufInfo;
+  memset(data, 0, sizeof(data));
+  memset(&bufInfo, 0, sizeof(SBufferInfo));
+
+  DECODING_STATE rv = decoder->DecodeFrame(src, sliceSize, data, &bufInfo);
+  if (rv != dsErrorFree) {
+    return false;
+  }
+
+  if (bufInfo.iBufferStatus == 1) {
+    // y plane
+    UpdateHashFromPlane(ctx, static_cast<uint8_t*>(data[0]),
+        bufInfo.UsrData.sSystemBuffer.iWidth,
+        bufInfo.UsrData.sSystemBuffer.iHeight,
+        bufInfo.UsrData.sSystemBuffer.iStride[0]);
+    // u plane
+    UpdateHashFromPlane(ctx, static_cast<uint8_t*>(data[1]),
+        bufInfo.UsrData.sSystemBuffer.iWidth / 2,
+        bufInfo.UsrData.sSystemBuffer.iHeight / 2,
+        bufInfo.UsrData.sSystemBuffer.iStride[1]);
+    // v plane
+    UpdateHashFromPlane(ctx, static_cast<uint8_t*>(data[2]),
+        bufInfo.UsrData.sSystemBuffer.iWidth / 2,
+        bufInfo.UsrData.sSystemBuffer.iHeight / 2,
+        bufInfo.UsrData.sSystemBuffer.iStride[1]);
+  }
+  return true;
+}
+
+static void CompareFileToHash(ISVCDecoder* decoder,
+    const char* fileName, const char* hashStr) {
+  std::ifstream file(fileName, std::ios::in | std::ios::binary);
+  ASSERT_TRUE(file.is_open());
+
+  unsigned char digest[SHA_DIGEST_LENGTH];
+  SHA_CTX ctx;
+  SHA1_Init(&ctx);
+
+  BufferedData buf;
+  int sliceSize;
+
+  while ((sliceSize = ReadFrame(&file, &buf)) > 0) {
+    if (DecodeAndProcess(decoder, buf.data(), sliceSize, &ctx)) {
+      buf.Clear();
+    } else {
+      SHA1_Final(digest, &ctx);
+      FAIL() << "unable to decode frame";
+    }
+  }
+
+  if (sliceSize < 0) {
+    SHA1_Final(digest, &ctx);
+    FAIL() << "unable to allocate memory";
+  }
+
+  int32_t iEndOfStreamFlag = 1;
+  decoder->SetOption(DECODER_OPTION_END_OF_STREAM, &iEndOfStreamFlag);
+
+  // Get pending last frame
+  if (!DecodeAndProcess(decoder, NULL, 0, &ctx)) {
+    SHA1_Final(digest, &ctx);
+    FAIL() << "unable to decode last frame";
+  }
+
+  SHA1_Final(digest, &ctx);
+  ASSERT_TRUE(CompareHash(digest, hashStr));
+}
+
+class DecoderInitTest : public ::testing::Test {
+ public:
+  DecoderInitTest() : decoder_(NULL) {}
+
+  virtual void SetUp() {
+    long rv = CreateDecoder(&decoder_);
+    ASSERT_EQ(0, rv);
+    ASSERT_TRUE(decoder_ != NULL);
+
+    SDecodingParam decParam;
+    memset(&decParam, 0, sizeof(SDecodingParam));
+    decParam.iOutputColorFormat  = videoFormatI420;
+    decParam.uiTargetDqLayer = UCHAR_MAX;
+    decParam.uiEcActiveFlag  = 1;
+    decParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT;
+
+    rv = decoder_->Initialize(&decParam, INIT_TYPE_PARAMETER_BASED);
+    ASSERT_EQ(0, rv);
+  }
+
+  virtual void TearDown() {
+    if (decoder_ != NULL) {
+      decoder_->Uninitialize();
+      DestroyDecoder(decoder_);
+    }
+  }
+
+ protected:
+  ISVCDecoder* decoder_;
+};
+
+
+TEST_F(DecoderInitTest, JustInit) {
+}
+
+struct FileParam {
+  const char* fileName;
+  const char* hashStr;
+};
+
+class DecoderOutputTest : public DecoderInitTest,
+    public ::testing::WithParamInterface<FileParam> {
+};
+
+TEST_P(DecoderOutputTest, CompareOutput) {
+  FileParam p = GetParam();
+  CompareFileToHash(decoder_, p.fileName, p.hashStr);
+}
+
+static const FileParam kFileParamArray[] = {
+  {"res/test_vd_1d.264", "5827d2338b79ff82cd091c707823e466197281d3"},
+  {"res/test_vd_rc.264", "eea02e97bfec89d0418593a8abaaf55d02eaa1ca"}
+};
+
+INSTANTIATE_TEST_CASE_P(DecodeFile, DecoderOutputTest,
+    ::testing::ValuesIn(kFileParamArray));
--- /dev/null
+++ b/test/encoder_test.cpp
@@ -1,0 +1,150 @@
+#include <gtest/gtest.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stdint.h>
+#include <limits.h>
+#include <fstream>
+
+#include "codec_def.h"
+#include "codec_app_def.h"
+#include "codec_api.h"
+
+#include "utils/BufferedData.h"
+#include "utils/HashFunctions.h"
+
+static int InitWithParam(ISVCEncoder* encoder, int width,
+    int height, float frameRate) {
+  SVCEncodingParam param;
+  memset (&param, 0, sizeof(SVCEncodingParam));
+
+  param.sSpatialLayers[0].iVideoWidth  = width;
+  param.sSpatialLayers[0].iVideoHeight = height;
+  param.sSpatialLayers[0].fFrameRate = frameRate;
+  param.sSpatialLayers[0].iQualityLayerNum = 1;
+  param.sSpatialLayers[0].iSpatialBitrate = 600000;
+
+  SSliceConfig* sliceCfg = &param.sSpatialLayers[0].sSliceCfg;
+  sliceCfg->sSliceArgument.uiSliceNum = 1;
+  sliceCfg->sSliceArgument.uiSliceSizeConstraint = 1500;
+  sliceCfg->sSliceArgument.uiSliceMbNum[0] = 960;
+
+  param.fFrameRate = param.sSpatialLayers[0].fFrameRate;
+  param.iPicWidth = param.sSpatialLayers[0].iVideoWidth;
+  param.iPicHeight = param.sSpatialLayers[0].iVideoHeight;
+  param.iTargetBitrate = 5000000;
+  param.iTemporalLayerNum = 3;
+  param.iSpatialLayerNum = 1;
+  param.bEnableBackgroundDetection = true;
+  param.bEnableLongTermReference = true;
+  param.iLtrMarkPeriod = 30;
+  param.iInputCsp = videoFormatI420;
+  param.bEnableSpsPpsIdAddition = true;
+
+  return encoder->Initialize(&param, INIT_TYPE_PARAMETER_BASED);
+}
+
+static void UpdateHashFromFrame(const SFrameBSInfo& info, SHA_CTX* ctx) {
+  for (int i = 0; i < info.iLayerNum; ++i) {
+    const SLayerBSInfo& layerInfo = info.sLayerInfo[i];
+    int layerSize = 0;
+    for (int j = 0; j < layerInfo.iNalCount; ++j) {
+      layerSize += layerInfo.iNalLengthInByte[j];
+    }
+    SHA1_Update(ctx, layerInfo.pBsBuf, layerSize);
+  }
+}
+
+static void CompareFileToHash(ISVCEncoder* encoder,
+    const char* fileName, const char* hashStr,
+    int width, int height, float frameRate) {
+  std::ifstream file(fileName, std::ios::in | std::ios::binary);
+  ASSERT_TRUE(file.is_open());
+
+  int rv = InitWithParam(encoder, width, height, frameRate);
+  ASSERT_TRUE(rv == cmResultSuccess);
+
+  // I420: 1(Y) + 1/4(U) + 1/4(V)
+  int frameSize = width * height * 3 / 2;
+
+  BufferedData buf;
+  buf.SetLength(frameSize);
+  ASSERT_TRUE(buf.Length() == frameSize);
+  char* data = reinterpret_cast<char*>(buf.data());
+
+  SFrameBSInfo info;
+  memset(&info, 0, sizeof(SFrameBSInfo));
+
+  unsigned char digest[SHA_DIGEST_LENGTH];
+  SHA_CTX ctx;
+  SHA1_Init(&ctx);
+
+  while (file.read(data, frameSize), file.gcount() == frameSize) {
+    rv = encoder->EncodeFrame(buf.data(), &info);
+    if (rv == videoFrameTypeInvalid) {
+      SHA1_Final(digest, &ctx);
+      FAIL() << "unable to encode frame";
+    }
+    if (rv != videoFrameTypeSkip) {
+      UpdateHashFromFrame(info, &ctx);
+    }
+  }
+
+  SHA1_Final(digest, &ctx);
+  ASSERT_TRUE(CompareHash(digest, hashStr));
+}
+
+class EncoderBaseTest : public ::testing::Test {
+ public:
+  EncoderBaseTest() : encoder_(NULL) {}
+
+  virtual void SetUp() {
+    int rv = CreateSVCEncoder(&encoder_);
+    ASSERT_EQ(0, rv);
+    ASSERT_TRUE(encoder_ != NULL);
+  }
+
+  virtual void TearDown() {
+    if (encoder_) {
+      encoder_->Uninitialize();
+      DestroySVCEncoder(encoder_);
+    }
+  }
+
+ protected:
+  ISVCEncoder* encoder_;
+};
+
+TEST_F(EncoderBaseTest, JustInit) {
+}
+
+struct EncodeFileParam {
+  const char* fileName;
+  const char* hashStr;
+  int width;
+  int height;
+  float frameRate;
+};
+
+class EncoderOutputTest : public EncoderBaseTest ,
+    public ::testing::WithParamInterface<EncodeFileParam> {
+};
+
+
+TEST_P(EncoderOutputTest, CompareOutput) {
+  EncodeFileParam p = GetParam();
+  CompareFileToHash(encoder_, p.fileName, p.hashStr, p.width, p.height, p.frameRate);
+}
+
+static const EncodeFileParam kFileParamArray[] = {
+  {
+      "res/CiscoVT2people_320x192_12fps.yuv",
+      "4df5751a59eb02153e086ade9b3ecfcb8845c30b", 320, 192, 12.0f
+  },
+  {
+      "res/CiscoVT2people_160x96_6fps.yuv",
+      "6eb53b6bfdb95dfca0575bd3efe81aa58163951c", 160, 96, 6.0f
+  },
+};
+
+INSTANTIATE_TEST_CASE_P(EncodeFile, EncoderOutputTest,
+    ::testing::ValuesIn(kFileParamArray));
--- a/test/simple_test.cpp
+++ b/test/simple_test.cpp
@@ -1,38 +1,4 @@
 #include <gtest/gtest.h>
-#if defined (WIN32)
-#include <windows.h>
-#include <tchar.h>
-#else
-#include <string.h>
-#endif
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#include "codec_def.h"
-#include "codec_app_def.h"
-#include "codec_api.h"
-
-class CodecTest : public ::testing::Test {
- public:
-  CodecTest() : decoder_ (NULL) {}
-
-  ~CodecTest() {
-    if (decoder_) DestroyDecoder (decoder_);
-  }
-
-  void SetUp() {
-    long rv = CreateDecoder (&decoder_);
-    ASSERT_EQ (0, rv);
-    ASSERT_TRUE (decoder_);
-  }
-
- protected:
-  ISVCDecoder* decoder_;
-};
-
-TEST_F (CodecTest, JustInit) {
-}
 
 int main (int argc, char** argv) {
   testing::InitGoogleTest (&argc, argv);
--- a/test/targets.mk
+++ b/test/targets.mk
@@ -1,6 +1,8 @@
 CODEC_UNITTEST_PREFIX=CODEC_UNITTEST
 CODEC_UNITTEST_SRCDIR=test
 CODEC_UNITTEST_CPP_SRCS=\
+	$(CODEC_UNITTEST_SRCDIR)/./decoder_test.cpp\
+	$(CODEC_UNITTEST_SRCDIR)/./encoder_test.cpp\
 	$(CODEC_UNITTEST_SRCDIR)/./simple_test.cpp\
 
 CODEC_UNITTEST_OBJS += $(CODEC_UNITTEST_CPP_SRCS:.cpp=.o)
--- /dev/null
+++ b/test/utils/BufferedData.h
@@ -1,0 +1,63 @@
+#ifndef __BUFFEREDDATA_H__
+#define __BUFFEREDDATA_H__
+
+#include <stddef.h>
+#include <stdlib.h>
+
+class BufferedData {
+ public:
+  BufferedData() : data_(NULL), capacity_(0), length_(0) {}
+
+  ~BufferedData() {
+    free(data_);
+  }
+
+  bool Push(uint8_t c) {
+    if (!EnsureCapacity(length_ + 1)) {
+      return false;
+    }
+    data_[length_++] = c;
+    return true;
+  }
+
+  void Clear() {
+    length_ = 0;
+  }
+
+  void SetLength(size_t newLen) {
+    if (EnsureCapacity(newLen)) {
+      length_ = newLen;
+    }
+  }
+
+  size_t Length() const {
+    return length_;
+  }
+
+  uint8_t* data() {
+    return data_;
+  }
+
+ private:
+  bool EnsureCapacity(size_t capacity) {
+    if (capacity > capacity_) {
+      size_t newsize = capacity * 2;
+
+      uint8_t* data = static_cast<uint8_t*>(realloc(data_, newsize));
+
+      if (!data)
+        return false;
+
+      data_ = data;
+      capacity_ = newsize;
+      return true;
+    }
+    return true;
+  }
+
+  uint8_t* data_;
+  size_t capacity_;
+  size_t length_;
+};
+
+#endif //__BUFFEREDDATA_H__
--- /dev/null
+++ b/test/utils/HashFunctions.h
@@ -1,0 +1,15 @@
+#ifndef __HASHFUNCTIONS_H__
+#define __HASHFUNCTIONS_H__
+
+#include <openssl/sha.h>
+
+static bool CompareHash(const unsigned char* digest, const char* hashStr) {
+  char hashStrCmp[SHA_DIGEST_LENGTH * 2 + 1];
+  for (int i = 0; i < SHA_DIGEST_LENGTH; ++i) {
+    sprintf(&hashStrCmp[i*2], "%.2x", digest[i]);
+  }
+  hashStrCmp[SHA_DIGEST_LENGTH * 2] = '\0';
+  return strncmp(hashStr, hashStrCmp, SHA_DIGEST_LENGTH * 2) == 0;
+}
+
+#endif //__HASHFUNCTIONS_H__