diff --git a/libmkv/EbmlIDs.h b/libmkv/EbmlIDs.h index 4920bf9baed91bfc3203266c5fe64c2175d85bac..44d438583adbd2421e0f00226d9182cb61116a0b 100644 --- a/libmkv/EbmlIDs.h +++ b/libmkv/EbmlIDs.h @@ -67,10 +67,10 @@ enum mkv { BlockGroup = 0xA0, Block = 0xA1, /* BlockVirtual = 0xA2, */ -/* BlockAdditions = 0x75A1, */ -/* BlockMore = 0xA6, */ -/* BlockAddID = 0xEE, */ -/* BlockAdditional = 0xA5, */ + BlockAdditions = 0x75A1, + BlockMore = 0xA6, + BlockAddID = 0xEE, + BlockAdditional = 0xA5, BlockDuration = 0x9B, /* ReferencePriority = 0xFA, */ ReferenceBlock = 0xFB, @@ -100,7 +100,7 @@ enum mkv { DefaultDuration = 0x23E383, /* TrackTimecodeScale = 0x23314F, */ /* TrackOffset = 0x537F, */ -/* MaxBlockAdditionID = 0x55EE, */ + MaxBlockAdditionID = 0x55EE, Name = 0x536E, Language = 0x22B59C, CodecID = 0x86, @@ -120,6 +120,7 @@ enum mkv { Video = 0xE0, FlagInterlaced = 0x9A, StereoMode = 0x53B8, + AlphaMode = 0x53C0, PixelWidth = 0xB0, PixelHeight = 0xBA, PixelCropBottom = 0x54AA, diff --git a/vp8/common/generic/systemdependent.c b/vp8/common/generic/systemdependent.c index 2de019d706c353cc62a8a643ea4d367cf85c6686..d84df334810d6ea217057476f516a567d9faa092 100644 --- a/vp8/common/generic/systemdependent.c +++ b/vp8/common/generic/systemdependent.c @@ -82,6 +82,7 @@ static int get_cpu_count() } #endif +void vp8_clear_system_state_c() {}; void vp8_machine_specific_config(VP8_COMMON *ctx) { diff --git a/vp8/common/rtcd_defs.sh b/vp8/common/rtcd_defs.sh index ee892ded267048fc11bdd5bc2cdfa85f7c36107f..9ebf389d8c66ff95ed172cefb1da1b9539a08394 100644 --- a/vp8/common/rtcd_defs.sh +++ b/vp8/common/rtcd_defs.sh @@ -18,6 +18,13 @@ EOF } forward_decls vp8_common_forward_decls +# +# system state +# +prototype void vp8_clear_system_state "" +specialize vp8_clear_system_state mmx +vp8_clear_system_state_mmx=vpx_reset_mmx_state + # # Dequant # diff --git a/vp8/common/systemdependent.h b/vp8/common/systemdependent.h index f99c4bb2af5f72340ca45898cd1fa67bc44c4427..e6b0456f75bc88413981cef0096ac149d3f8f99a 100644 --- a/vp8/common/systemdependent.h +++ b/vp8/common/systemdependent.h @@ -10,12 +10,6 @@ #include "vpx_config.h" -#if ARCH_X86 || ARCH_X86_64 -void vpx_reset_mmx_state(void); -#define vp8_clear_system_state() vpx_reset_mmx_state() -#else -#define vp8_clear_system_state() -#endif struct VP8Common; void vp8_machine_specific_config(struct VP8Common *); diff --git a/vp9/common/x86/vp9_loopfilter_intrin_mmx.c b/vp9/common/x86/vp9_loopfilter_intrin_mmx.c new file mode 100644 index 0000000000000000000000000000000000000000..2be9e31796b9b361b6fb74538fb805717662c57c --- /dev/null +++ b/vp9/common/x86/vp9_loopfilter_intrin_mmx.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2010 The WebM 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 "vp9/common/vp9_loopfilter.h" + +prototype_loopfilter(vp9_loop_filter_vertical_edge_mmx); +prototype_loopfilter(vp9_loop_filter_horizontal_edge_mmx); + +/* Horizontal MB filtering */ +void vp9_loop_filter_mbh_mmx(unsigned char *y_ptr, + unsigned char *u_ptr, unsigned char *v_ptr, + int y_stride, int uv_stride, + struct loop_filter_info *lfi) { +} + +/* Vertical MB Filtering */ +void vp9_loop_filter_mbv_mmx(unsigned char *y_ptr, + unsigned char *u_ptr, unsigned char *v_ptr, + int y_stride, int uv_stride, + struct loop_filter_info *lfi) { +} + +/* Horizontal B Filtering */ +void vp9_loop_filter_bh_mmx(unsigned char *y_ptr, + unsigned char *u_ptr, unsigned char *v_ptr, + int y_stride, int uv_stride, + struct loop_filter_info *lfi) { + +} + +void vp9_loop_filter_bhs_mmx(unsigned char *y_ptr, int y_stride, + const unsigned char *blimit) { + vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 4 * y_stride, + y_stride, blimit); + vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 8 * y_stride, + y_stride, blimit); + vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 12 * y_stride, + y_stride, blimit); +} + +/* Vertical B Filtering */ +void vp9_loop_filter_bv_mmx(unsigned char *y_ptr, + unsigned char *u_ptr, unsigned char *v_ptr, + int y_stride, int uv_stride, + struct loop_filter_info *lfi) { + vp9_loop_filter_vertical_edge_mmx(y_ptr + 4, y_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 2); + vp9_loop_filter_vertical_edge_mmx(y_ptr + 8, y_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 2); + vp9_loop_filter_vertical_edge_mmx(y_ptr + 12, y_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 2); + + if (u_ptr) + vp9_loop_filter_vertical_edge_mmx(u_ptr + 4, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 1); + + if (v_ptr) + vp9_loop_filter_vertical_edge_mmx(v_ptr + 4, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 1); +} + +void vp9_loop_filter_bvs_mmx(unsigned char *y_ptr, int y_stride, + const unsigned char *blimit) { + vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 4, y_stride, blimit); + vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 8, y_stride, blimit); + vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 12, y_stride, blimit); +} diff --git a/vp9/common/x86/vp9_loopfilter_x86.c b/vp9/common/x86/vp9_loopfilter_intrin_sse2.c similarity index 94% rename from vp9/common/x86/vp9_loopfilter_x86.c rename to vp9/common/x86/vp9_loopfilter_intrin_sse2.c index c8487547b5b984ea1c590b634016890daa7ec9a0..08447a62de101406f18fe615bdde1e430417b400 100644 --- a/vp9/common/x86/vp9_loopfilter_x86.c +++ b/vp9/common/x86/vp9_loopfilter_intrin_sse2.c @@ -8,84 +8,16 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include <emmintrin.h> // SSE2 -#include "vpx_config.h" +#include <emmintrin.h> /* SSE2 */ #include "vp9/common/vp9_loopfilter.h" #include "vpx_ports/emmintrin_compat.h" -prototype_loopfilter(vp9_loop_filter_vertical_edge_mmx); -prototype_loopfilter(vp9_loop_filter_horizontal_edge_mmx); - prototype_loopfilter(vp9_loop_filter_vertical_edge_sse2); prototype_loopfilter(vp9_loop_filter_horizontal_edge_sse2); extern loop_filter_uvfunction vp9_loop_filter_horizontal_edge_uv_sse2; extern loop_filter_uvfunction vp9_loop_filter_vertical_edge_uv_sse2; -#if HAVE_MMX -/* Horizontal MB filtering */ -void vp9_loop_filter_mbh_mmx(unsigned char *y_ptr, - unsigned char *u_ptr, unsigned char *v_ptr, - int y_stride, int uv_stride, - struct loop_filter_info *lfi) { -} - -/* Vertical MB Filtering */ -void vp9_loop_filter_mbv_mmx(unsigned char *y_ptr, - unsigned char *u_ptr, unsigned char *v_ptr, - int y_stride, int uv_stride, - struct loop_filter_info *lfi) { -} - -/* Horizontal B Filtering */ -void vp9_loop_filter_bh_mmx(unsigned char *y_ptr, - unsigned char *u_ptr, unsigned char *v_ptr, - int y_stride, int uv_stride, - struct loop_filter_info *lfi) { - -} - -void vp9_loop_filter_bhs_mmx(unsigned char *y_ptr, int y_stride, - const unsigned char *blimit) { - vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 4 * y_stride, - y_stride, blimit); - vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 8 * y_stride, - y_stride, blimit); - vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 12 * y_stride, - y_stride, blimit); -} - -/* Vertical B Filtering */ -void vp9_loop_filter_bv_mmx(unsigned char *y_ptr, - unsigned char *u_ptr, unsigned char *v_ptr, - int y_stride, int uv_stride, - struct loop_filter_info *lfi) { - vp9_loop_filter_vertical_edge_mmx(y_ptr + 4, y_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 2); - vp9_loop_filter_vertical_edge_mmx(y_ptr + 8, y_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 2); - vp9_loop_filter_vertical_edge_mmx(y_ptr + 12, y_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 2); - - if (u_ptr) - vp9_loop_filter_vertical_edge_mmx(u_ptr + 4, uv_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 1); - - if (v_ptr) - vp9_loop_filter_vertical_edge_mmx(v_ptr + 4, uv_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 1); -} - -void vp9_loop_filter_bvs_mmx(unsigned char *y_ptr, int y_stride, - const unsigned char *blimit) { - vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 4, y_stride, blimit); - vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 8, y_stride, blimit); - vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 12, y_stride, blimit); -} -#endif - -#if HAVE_SSE2 - void vp9_mb_lpf_horizontal_edge_w_sse2(unsigned char *s, int p, const unsigned char *_blimit, @@ -1217,5 +1149,3 @@ void vp9_loop_filter_bvs_sse2(unsigned char *y_ptr, int y_stride, vp9_loop_filter_simple_vertical_edge_sse2(y_ptr + 8, y_stride, blimit); vp9_loop_filter_simple_vertical_edge_sse2(y_ptr + 12, y_stride, blimit); } - -#endif diff --git a/vp9/common/x86/vp9_sadmxn_x86.c b/vp9/common/x86/vp9_sadmxn_sse2.c similarity index 96% rename from vp9/common/x86/vp9_sadmxn_x86.c rename to vp9/common/x86/vp9_sadmxn_sse2.c index 3072d6df89d1095b1e6b7d677f2c622be3479415..ed873a5bab79f288c2b5b967ba3cd23c8a8ba24b 100644 --- a/vp9/common/x86/vp9_sadmxn_x86.c +++ b/vp9/common/x86/vp9_sadmxn_sse2.c @@ -8,13 +8,10 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include <emmintrin.h> // SSE2 -#include "./vpx_config.h" -#include "./vp9_rtcd.h" +#include <emmintrin.h> /* SSE2 */ #include "vpx/vpx_integer.h" #include "vpx_ports/emmintrin_compat.h" -#if HAVE_SSE2 unsigned int vp9_sad16x3_sse2( const unsigned char *src_ptr, int src_stride, @@ -96,5 +93,3 @@ unsigned int vp9_sad3x16_sse2( sad = _mm_add_epi16(sad, _mm_srli_si128(sad, 8)); return _mm_cvtsi128_si32(sad); } - -#endif diff --git a/vp9/vp9_common.mk b/vp9/vp9_common.mk index ea86317115c1bc8f20144440ee75e34b50228148..5e1ff62f7b7d2a6e2ad223a3be3c380fada1ce38 100644 --- a/vp9/vp9_common.mk +++ b/vp9/vp9_common.mk @@ -86,7 +86,8 @@ VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_idct_x86.h VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_x86.h VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_postproc_x86.h VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_asm_stubs.c -VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_x86.c +VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_intrin_mmx.c +VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_intrin_sse2.c VP9_COMMON_SRCS-$(CONFIG_POSTPROC) += common/vp9_postproc.h VP9_COMMON_SRCS-$(CONFIG_POSTPROC) += common/vp9_postproc.c VP9_COMMON_SRCS-$(HAVE_MMX) += common/x86/vp9_iwalsh_mmx.asm @@ -112,14 +113,14 @@ VP9_COMMON_SRCS-$(HAVE_SSE3) += common/x86/vp9_mask_sse3.asm endif VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_idct_x86.c -VP9_COMMON_SRCS-$(HAVE_SSE2) += common/x86/vp9_sadmxn_x86.c +VP9_COMMON_SRCS-$(HAVE_SSE2) += common/x86/vp9_sadmxn_sse2.c ifeq ($(HAVE_SSE2),yes) vp9/common/x86/vp9_idct_x86.c.o: CFLAGS += -msse2 -vp9/common/x86/vp9_loopfilter_x86.c.o: CFLAGS += -msse2 -vp9/common/x86/vp9_sadmxn_x86.c.o: CFLAGS += -msse2 +vp9/common/x86/vp9_loopfilter_intrin_sse2.c.o: CFLAGS += -msse2 +vp9/common/x86/vp9_sadmxn_sse2.c.o: CFLAGS += -msse2 vp9/common/x86/vp9_idct_x86.c.d: CFLAGS += -msse2 -vp9/common/x86/vp9_loopfilter_x86.c.d: CFLAGS += -msse2 -vp9/common/x86/vp9_sadmxn_x86.c.d: CFLAGS += -msse2 +vp9/common/x86/vp9_loopfilter_intrin_sse2.c.d: CFLAGS += -msse2 +vp9/common/x86/vp9_sadmxn_sse2.c.d: CFLAGS += -msse2 endif $(eval $(call asm_offsets_template,\