remove unused dboolhuff code
we were holding on to this "just in case." purge it instead Change-Id: I77a367b36d0821d731019f2566ecfffdae1d4b8a
This commit is contained in:
Родитель
350ffe8dae
Коммит
bb9c95ea53
|
@ -45,15 +45,6 @@ DEFINE(yv12_buffer_config_border, offsetof(YV12_BUFFER_CONFIG, bor
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CONFIG_VP8_DECODER
|
#if CONFIG_VP8_DECODER
|
||||||
DEFINE(mb_diff, offsetof(MACROBLOCKD, diff));
|
|
||||||
DEFINE(mb_predictor, offsetof(MACROBLOCKD, predictor));
|
|
||||||
DEFINE(mb_dst_y_stride, offsetof(MACROBLOCKD, dst.y_stride));
|
|
||||||
DEFINE(mb_dst_y_buffer, offsetof(MACROBLOCKD, dst.y_buffer));
|
|
||||||
DEFINE(mb_dst_u_buffer, offsetof(MACROBLOCKD, dst.u_buffer));
|
|
||||||
DEFINE(mb_dst_v_buffer, offsetof(MACROBLOCKD, dst.v_buffer));
|
|
||||||
DEFINE(mb_up_available, offsetof(MACROBLOCKD, up_available));
|
|
||||||
DEFINE(mb_left_available, offsetof(MACROBLOCKD, left_available));
|
|
||||||
|
|
||||||
DEFINE(detok_scan, offsetof(DETOK, scan));
|
DEFINE(detok_scan, offsetof(DETOK, scan));
|
||||||
DEFINE(detok_ptr_block2leftabove, offsetof(DETOK, ptr_block2leftabove));
|
DEFINE(detok_ptr_block2leftabove, offsetof(DETOK, ptr_block2leftabove));
|
||||||
DEFINE(detok_coef_tree_ptr, offsetof(DETOK, vp8_coef_tree_ptr));
|
DEFINE(detok_coef_tree_ptr, offsetof(DETOK, vp8_coef_tree_ptr));
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include "blockd.h"
|
#include "blockd.h"
|
||||||
#include "pragmas.h"
|
#include "pragmas.h"
|
||||||
#include "postproc.h"
|
#include "postproc.h"
|
||||||
#include "dboolhuff.h"
|
|
||||||
#include "dequantize.h"
|
#include "dequantize.h"
|
||||||
#include "onyxd_int.h"
|
#include "onyxd_int.h"
|
||||||
|
|
||||||
|
@ -35,12 +34,6 @@ void vp8_arch_arm_decode_init(VP8D_COMP *pbi)
|
||||||
pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_v6;
|
pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_v6;
|
||||||
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_v6;
|
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_v6;
|
||||||
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_v6;
|
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_v6;
|
||||||
#if 0 /*For use with RTCD, when implemented*/
|
|
||||||
pbi->dboolhuff.start = vp8dx_start_decode_c;
|
|
||||||
pbi->dboolhuff.fill = vp8dx_bool_decoder_fill_c;
|
|
||||||
pbi->dboolhuff.debool = vp8dx_decode_bool_c;
|
|
||||||
pbi->dboolhuff.devalue = vp8dx_decode_value_c;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -54,12 +47,6 @@ void vp8_arch_arm_decode_init(VP8D_COMP *pbi)
|
||||||
pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_neon;
|
pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_neon;
|
||||||
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_neon;
|
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_neon;
|
||||||
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_neon;
|
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_neon;
|
||||||
#if 0 /*For use with RTCD, when implemented*/
|
|
||||||
pbi->dboolhuff.start = vp8dx_start_decode_c;
|
|
||||||
pbi->dboolhuff.fill = vp8dx_bool_decoder_fill_c;
|
|
||||||
pbi->dboolhuff.debool = vp8dx_decode_bool_c;
|
|
||||||
pbi->dboolhuff.devalue = vp8dx_decode_value_c;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,163 +0,0 @@
|
||||||
;
|
|
||||||
; 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.
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
EXPORT |vp8_decode_value_v6|
|
|
||||||
EXPORT |vp8dx_start_decode_v6|
|
|
||||||
EXPORT |vp8dx_stop_decode_v6|
|
|
||||||
EXPORT |vp8dx_decode_bool_v6|
|
|
||||||
|
|
||||||
ARM
|
|
||||||
REQUIRE8
|
|
||||||
PRESERVE8
|
|
||||||
|
|
||||||
INCLUDE vpx_asm_offsets.asm
|
|
||||||
|
|
||||||
br RN r0
|
|
||||||
prob RN r1
|
|
||||||
bits RN r1
|
|
||||||
AREA |.text|, CODE, READONLY ; name this block of code
|
|
||||||
|
|
||||||
; int z = 0;
|
|
||||||
; int bit;
|
|
||||||
; for ( bit=bits-1; bit>=0; bit-- )
|
|
||||||
; {
|
|
||||||
; z |= (vp8dx_decode_bool(br, 0x80)<<bit);
|
|
||||||
; }
|
|
||||||
; return z;
|
|
||||||
|
|
||||||
;int vp8_decode_value_v6 ( BOOL_DECODER *br, int bits )
|
|
||||||
|vp8_decode_value_v6| PROC
|
|
||||||
stmdb sp!, {r4 - r6, lr}
|
|
||||||
mov r4, br
|
|
||||||
mov r5, bits
|
|
||||||
mov r6, #0
|
|
||||||
|
|
||||||
subs r5, r5, #1
|
|
||||||
bmi decode_value_exit
|
|
||||||
|
|
||||||
decode_value_loop
|
|
||||||
mov prob, #0x80
|
|
||||||
mov br, r4
|
|
||||||
bl vp8dx_decode_bool_v6_internal ; needed for conversion to s file
|
|
||||||
orr r6, r6, r0, lsl r5
|
|
||||||
subs r5, r5, #1
|
|
||||||
bpl decode_value_loop
|
|
||||||
|
|
||||||
decode_value_exit
|
|
||||||
mov r0, r6
|
|
||||||
ldmia sp!, {r4 - r6, pc}
|
|
||||||
ENDP ; |vp8_decode_value_v6|
|
|
||||||
|
|
||||||
|
|
||||||
;void vp8dx_start_decode_v6 ( BOOL_DECODER *br, unsigned char *source )
|
|
||||||
|vp8dx_start_decode_v6| PROC
|
|
||||||
stmdb sp!, {r4 - r5, lr}
|
|
||||||
mov r2, #0
|
|
||||||
mov r3, #255
|
|
||||||
|
|
||||||
str r2, [br, #bool_decoder_lowvalue]
|
|
||||||
str r3, [br, #bool_decoder_range]
|
|
||||||
str r1, [br, #bool_decoder_buffer]
|
|
||||||
|
|
||||||
mov r3, #8
|
|
||||||
mov r2, #4
|
|
||||||
str r3, [br, #bool_decoder_count]
|
|
||||||
str r2, [br, #bool_decoder_pos]
|
|
||||||
|
|
||||||
ldrb r2, [r1, #3]
|
|
||||||
ldrb r3, [r1, #2]
|
|
||||||
ldrb r4, [r1, #1]
|
|
||||||
ldrb r5, [r1]
|
|
||||||
|
|
||||||
orr r1, r2, r3, lsl #8
|
|
||||||
orr r1, r1, r4, lsl #16
|
|
||||||
orr r1, r1, r5, lsl #24
|
|
||||||
|
|
||||||
str r1, [br, #bool_decoder_value]
|
|
||||||
|
|
||||||
ldmia sp!, {r4 - r5, pc}
|
|
||||||
ENDP ; |vp8dx_start_decode_v6|
|
|
||||||
|
|
||||||
|
|
||||||
;void vp8dx_stop_decode_v6 ( BOOL_DECODER *bc );
|
|
||||||
|vp8dx_stop_decode_v6| PROC
|
|
||||||
mov pc, lr
|
|
||||||
ENDP ; |vp8dx_stop_decode_v6|
|
|
||||||
|
|
||||||
|
|
||||||
; bigsplit RN r1
|
|
||||||
; buffer_v RN r1
|
|
||||||
; count_v RN r4
|
|
||||||
; range_v RN r2
|
|
||||||
; value_v RN r3
|
|
||||||
; pos_v RN r5
|
|
||||||
; split RN r6
|
|
||||||
; bit RN lr
|
|
||||||
;int vp8dx_decode_bool_v6 ( BOOL_DECODER *br, int probability )
|
|
||||||
|vp8dx_decode_bool_v6| PROC
|
|
||||||
vp8dx_decode_bool_v6_internal
|
|
||||||
stmdb sp!, {r4 - r6, lr}
|
|
||||||
|
|
||||||
ldr r2, [br, #bool_decoder_range]
|
|
||||||
ldr r3, [br, #bool_decoder_value]
|
|
||||||
|
|
||||||
mov r6, r2, lsl #8
|
|
||||||
sub r6, r6, #256 ; split = 1 + (((range-1) * probability) >> 8)
|
|
||||||
mov r12, #1
|
|
||||||
smlawb r6, r6, prob, r12
|
|
||||||
|
|
||||||
mov lr, #0
|
|
||||||
subs r5, r3, r6, lsl #24
|
|
||||||
|
|
||||||
;cmp r3, r1
|
|
||||||
movhs lr, #1
|
|
||||||
movhs r3, r5
|
|
||||||
subhs r2, r2, r6
|
|
||||||
movlo r2, r6
|
|
||||||
|
|
||||||
cmp r2, #0x80
|
|
||||||
blt range_less_0x80
|
|
||||||
;strd r2, r3, [br, #bool_decoder_range]
|
|
||||||
str r2, [br, #bool_decoder_range]
|
|
||||||
str r3, [br, #bool_decoder_value]
|
|
||||||
mov r0, lr
|
|
||||||
ldmia sp!, {r4 - r6, pc}
|
|
||||||
|
|
||||||
range_less_0x80
|
|
||||||
ldr r5, [br, #bool_decoder_pos]
|
|
||||||
ldr r1, [br, #bool_decoder_buffer]
|
|
||||||
ldr r4, [br, #bool_decoder_count]
|
|
||||||
add r1, r1, r5
|
|
||||||
|
|
||||||
clz r12, r2
|
|
||||||
sub r12, r12, #24
|
|
||||||
subs r4, r4, r12
|
|
||||||
ldrleb r6, [r1], #1
|
|
||||||
mov r2, r2, lsl r12
|
|
||||||
mov r3, r3, lsl r12
|
|
||||||
addle r4, r4, #8
|
|
||||||
rsble r12, r4, #8
|
|
||||||
addle r5, r5, #1
|
|
||||||
orrle r3, r3, r6, lsl r12
|
|
||||||
|
|
||||||
;strd r2, r3, [br, #bool_decoder_range]
|
|
||||||
;strd r4, r5, [br, #bool_decoder_count]
|
|
||||||
str r2, [br, #bool_decoder_range]
|
|
||||||
str r3, [br, #bool_decoder_value]
|
|
||||||
str r4, [br, #bool_decoder_count]
|
|
||||||
str r5, [br, #bool_decoder_pos]
|
|
||||||
|
|
||||||
mov r0, lr
|
|
||||||
|
|
||||||
ldmia sp!, {r4 - r6, pc}
|
|
||||||
ENDP ; |vp8dx_decode_bool_v6|
|
|
||||||
|
|
||||||
END
|
|
|
@ -1,43 +0,0 @@
|
||||||
#ifndef DBOOLHUFF_ARM_H
|
|
||||||
#define DBOOLHUFF_ARM_H
|
|
||||||
|
|
||||||
/* JLK
|
|
||||||
* There are currently no arm-optimized versions of
|
|
||||||
* these functions. As they are implemented, they
|
|
||||||
* can be uncommented below and added to
|
|
||||||
* arm/dsystemdependent.c
|
|
||||||
*
|
|
||||||
* The existing asm code is likely so different as
|
|
||||||
* to be useless. However, its been left (for now)
|
|
||||||
* for reference.
|
|
||||||
*/
|
|
||||||
#if 0
|
|
||||||
#if HAVE_ARMV6
|
|
||||||
#undef vp8_dbool_start
|
|
||||||
#define vp8_dbool_start vp8dx_start_decode_v6
|
|
||||||
|
|
||||||
#undef vp8_dbool_fill
|
|
||||||
#define vp8_dbool_fill vp8_bool_decoder_fill_v6
|
|
||||||
|
|
||||||
#undef vp8_dbool_debool
|
|
||||||
#define vp8_dbool_debool vp8_decode_bool_v6
|
|
||||||
|
|
||||||
#undef vp8_dbool_devalue
|
|
||||||
#define vp8_dbool_devalue vp8_decode_value_v6
|
|
||||||
#endif /* HAVE_ARMV6 */
|
|
||||||
|
|
||||||
#if HAVE_ARMV7
|
|
||||||
#undef vp8_dbool_start
|
|
||||||
#define vp8_dbool_start vp8dx_start_decode_neon
|
|
||||||
|
|
||||||
#undef vp8_dbool_fill
|
|
||||||
#define vp8_dbool_fill vp8_bool_decoder_fill_neon
|
|
||||||
|
|
||||||
#undef vp8_dbool_debool
|
|
||||||
#define vp8_dbool_debool vp8_decode_bool_neon
|
|
||||||
|
|
||||||
#undef vp8_dbool_devalue
|
|
||||||
#define vp8_dbool_devalue vp8_decode_value_neon
|
|
||||||
#endif /* HAVE_ARMV7 */
|
|
||||||
#endif
|
|
||||||
#endif /* DBOOLHUFF_ARM_H */
|
|
|
@ -1,160 +0,0 @@
|
||||||
;
|
|
||||||
; 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.
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
EXPORT |vp8_decode_value_neon|
|
|
||||||
EXPORT |vp8dx_start_decode_neon|
|
|
||||||
EXPORT |vp8dx_stop_decode_neon|
|
|
||||||
EXPORT |vp8dx_decode_bool_neon|
|
|
||||||
|
|
||||||
ARM
|
|
||||||
REQUIRE8
|
|
||||||
PRESERVE8
|
|
||||||
|
|
||||||
INCLUDE vpx_asm_offsets.asm
|
|
||||||
|
|
||||||
AREA |.text|, CODE, READONLY ; name this block of code
|
|
||||||
|
|
||||||
; int z = 0;
|
|
||||||
; int bit;
|
|
||||||
; for ( bit=bits-1; bit>=0; bit-- )
|
|
||||||
; {
|
|
||||||
; z |= (vp8dx_decode_bool(br, 0x80)<<bit);
|
|
||||||
; }
|
|
||||||
; return z;
|
|
||||||
|
|
||||||
;int vp8_decode_value_neon ( BOOL_DECODER *br, int bits )
|
|
||||||
|vp8_decode_value_neon| PROC
|
|
||||||
stmdb sp!, {r4 - r6, lr}
|
|
||||||
mov r4, r0
|
|
||||||
mov r5, r1
|
|
||||||
mov r6, #0
|
|
||||||
|
|
||||||
subs r5, r5, #1
|
|
||||||
bmi decode_value_exit
|
|
||||||
|
|
||||||
decode_value_loop
|
|
||||||
mov r1, #0x80
|
|
||||||
mov r0, r4
|
|
||||||
bl vp8dx_decode_bool_neon_internal ; needed for conversion to s file
|
|
||||||
orr r6, r6, r0, lsl r5
|
|
||||||
subs r5, r5, #1
|
|
||||||
bpl decode_value_loop
|
|
||||||
|
|
||||||
decode_value_exit
|
|
||||||
mov r0, r6
|
|
||||||
ldmia sp!, {r4 - r6, pc}
|
|
||||||
ENDP ; |vp8_decode_value_neon|
|
|
||||||
|
|
||||||
|
|
||||||
;void vp8dx_start_decode_neon ( BOOL_DECODER *br, unsigned char *source )
|
|
||||||
|vp8dx_start_decode_neon| PROC
|
|
||||||
stmdb sp!, {r4 - r5, lr}
|
|
||||||
mov r2, #0
|
|
||||||
mov r3, #255
|
|
||||||
|
|
||||||
str r2, [r0, #bool_decoder_lowvalue]
|
|
||||||
str r3, [r0, #bool_decoder_range]
|
|
||||||
str r1, [r0, #bool_decoder_buffer]
|
|
||||||
|
|
||||||
mov r3, #8
|
|
||||||
mov r2, #4
|
|
||||||
str r3, [r0, #bool_decoder_count]
|
|
||||||
str r2, [r0, #bool_decoder_pos]
|
|
||||||
|
|
||||||
ldrb r2, [r1, #3]
|
|
||||||
ldrb r3, [r1, #2]
|
|
||||||
ldrb r4, [r1, #1]
|
|
||||||
ldrb r5, [r1]
|
|
||||||
|
|
||||||
orr r1, r2, r3, lsl #8
|
|
||||||
orr r1, r1, r4, lsl #16
|
|
||||||
orr r1, r1, r5, lsl #24
|
|
||||||
|
|
||||||
str r1, [r0, #bool_decoder_value]
|
|
||||||
|
|
||||||
ldmia sp!, {r4 - r5, pc}
|
|
||||||
ENDP ; |vp8dx_start_decode_neon|
|
|
||||||
|
|
||||||
|
|
||||||
;void vp8dx_stop_decode_neon ( BOOL_DECODER *bc );
|
|
||||||
|vp8dx_stop_decode_neon| PROC
|
|
||||||
mov pc, lr
|
|
||||||
ENDP ; |vp8dx_stop_decode_neon|
|
|
||||||
|
|
||||||
|
|
||||||
; bigsplit RN r1
|
|
||||||
; buffer_v RN r1
|
|
||||||
; count_v RN r4
|
|
||||||
; range_v RN r2
|
|
||||||
; value_v RN r3
|
|
||||||
; pos_v RN r5
|
|
||||||
; split RN r6
|
|
||||||
; bit RN lr
|
|
||||||
;int vp8dx_decode_bool_neon ( BOOL_DECODER *br, int probability )
|
|
||||||
|vp8dx_decode_bool_neon| PROC
|
|
||||||
vp8dx_decode_bool_neon_internal
|
|
||||||
;LDRD and STRD doubleword data transfers must be eight-byte aligned. Use ALIGN 8
|
|
||||||
;before memory allocation
|
|
||||||
stmdb sp!, {r4 - r5, lr}
|
|
||||||
|
|
||||||
ldr r2, [r0, #bool_decoder_range] ;load range (r2), value(r3)
|
|
||||||
ldr r3, [r0, #bool_decoder_value]
|
|
||||||
;ldrd r2, r3, [r0, #bool_decoder_range] ;ldrd costs 2 cycles
|
|
||||||
;
|
|
||||||
|
|
||||||
mov r4, r2, lsl #8
|
|
||||||
sub r4, r4, #256
|
|
||||||
mov r12, #1
|
|
||||||
|
|
||||||
smlawb r4, r4, r1, r12 ;split = 1 + (((range-1) * probability) >> 8)
|
|
||||||
|
|
||||||
mov lr, r0
|
|
||||||
mov r0, #0 ;bit = 0
|
|
||||||
;
|
|
||||||
subs r5, r3, r4, lsl #24
|
|
||||||
|
|
||||||
subhs r2, r2, r4 ;range = br->range-split
|
|
||||||
movlo r2, r4 ;range = split
|
|
||||||
movhs r0, #1 ;bit = 1
|
|
||||||
movhs r3, r5 ;value = value-bigsplit
|
|
||||||
|
|
||||||
cmp r2, #0x80
|
|
||||||
blt range_less_0x80
|
|
||||||
strd r2, r3, [lr, #bool_decoder_range] ;store result
|
|
||||||
|
|
||||||
ldmia sp!, {r4 - r5, pc}
|
|
||||||
|
|
||||||
range_less_0x80
|
|
||||||
|
|
||||||
ldrd r4, r5, [lr, #bool_decoder_count] ;load count, pos, buffer
|
|
||||||
ldr r1, [lr, #bool_decoder_buffer]
|
|
||||||
|
|
||||||
clz r12, r2
|
|
||||||
add r1, r1, r5
|
|
||||||
|
|
||||||
sub r12, r12, #24
|
|
||||||
subs r4, r4, r12 ;count -= shift
|
|
||||||
mov r2, r2, lsl r12 ;range <<= shift
|
|
||||||
mov r3, r3, lsl r12 ;value <<= shift
|
|
||||||
addle r4, r4, #8 ;count += 8
|
|
||||||
ldrleb r12, [r1], #1 ;br->buffer[br->pos]
|
|
||||||
|
|
||||||
rsble r1, r4, #8 ;-count
|
|
||||||
addle r5, r5, #1 ;br->pos++
|
|
||||||
orrle r3, r3, r12, lsl r1 ;value |= (br->buffer[br->pos]) << (-count)
|
|
||||||
|
|
||||||
strd r2, r3, [lr, #bool_decoder_range] ;store result
|
|
||||||
strd r4, r5, [lr, #bool_decoder_count]
|
|
||||||
|
|
||||||
ldmia sp!, {r4 - r5, pc}
|
|
||||||
ENDP ; |vp8dx_decode_bool_neon|
|
|
||||||
|
|
||||||
END
|
|
|
@ -26,8 +26,9 @@ DECLARE_ALIGNED(16, const unsigned char, vp8dx_bitreader_norm[256]) =
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
int vp8dx_start_decode_c(BOOL_DECODER *br, const unsigned char *source,
|
int vp8dx_start_decode(BOOL_DECODER *br,
|
||||||
unsigned int source_sz)
|
const unsigned char *source,
|
||||||
|
unsigned int source_sz)
|
||||||
{
|
{
|
||||||
br->user_buffer_end = source+source_sz;
|
br->user_buffer_end = source+source_sz;
|
||||||
br->user_buffer = source;
|
br->user_buffer = source;
|
||||||
|
@ -39,13 +40,13 @@ int vp8dx_start_decode_c(BOOL_DECODER *br, const unsigned char *source,
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
/* Populate the buffer */
|
/* Populate the buffer */
|
||||||
vp8dx_bool_decoder_fill_c(br);
|
vp8dx_bool_decoder_fill(br);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void vp8dx_bool_decoder_fill_c(BOOL_DECODER *br)
|
void vp8dx_bool_decoder_fill(BOOL_DECODER *br)
|
||||||
{
|
{
|
||||||
const unsigned char *bufptr;
|
const unsigned char *bufptr;
|
||||||
const unsigned char *bufend;
|
const unsigned char *bufend;
|
||||||
|
@ -62,69 +63,3 @@ void vp8dx_bool_decoder_fill_c(BOOL_DECODER *br)
|
||||||
br->value = value;
|
br->value = value;
|
||||||
br->count = count;
|
br->count = count;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Until optimized versions of these functions are available, we
|
|
||||||
* keep the implementation in the header to allow inlining.
|
|
||||||
*
|
|
||||||
* The RTCD-style invocations are still in place so this can
|
|
||||||
* be switched by just uncommenting these functions here and
|
|
||||||
* the DBOOLHUFF_INVOKE calls in the header.
|
|
||||||
*/
|
|
||||||
int vp8dx_decode_bool_c(BOOL_DECODER *br, int probability)
|
|
||||||
{
|
|
||||||
unsigned int bit=0;
|
|
||||||
VP8_BD_VALUE value;
|
|
||||||
unsigned int split;
|
|
||||||
VP8_BD_VALUE bigsplit;
|
|
||||||
int count;
|
|
||||||
unsigned int range;
|
|
||||||
|
|
||||||
value = br->value;
|
|
||||||
count = br->count;
|
|
||||||
range = br->range;
|
|
||||||
|
|
||||||
split = 1 + (((range-1) * probability) >> 8);
|
|
||||||
bigsplit = (VP8_BD_VALUE)split << (VP8_BD_VALUE_SIZE - 8);
|
|
||||||
|
|
||||||
range = split;
|
|
||||||
if(value >= bigsplit)
|
|
||||||
{
|
|
||||||
range = br->range-split;
|
|
||||||
value = value-bigsplit;
|
|
||||||
bit = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*if(range>=0x80)
|
|
||||||
{
|
|
||||||
br->value = value;
|
|
||||||
br->range = range;
|
|
||||||
return bit;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
{
|
|
||||||
register unsigned int shift = vp8dx_bitreader_norm[range];
|
|
||||||
range <<= shift;
|
|
||||||
value <<= shift;
|
|
||||||
count -= shift;
|
|
||||||
}
|
|
||||||
br->value = value;
|
|
||||||
br->count = count;
|
|
||||||
br->range = range;
|
|
||||||
if (count < 0)
|
|
||||||
vp8dx_bool_decoder_fill_c(br);
|
|
||||||
return bit;
|
|
||||||
}
|
|
||||||
|
|
||||||
int vp8dx_decode_value_c(BOOL_DECODER *br, int bits)
|
|
||||||
{
|
|
||||||
int z = 0;
|
|
||||||
int bit;
|
|
||||||
for ( bit=bits-1; bit>=0; bit-- )
|
|
||||||
{
|
|
||||||
z |= (vp8dx_decode_bool(br, 0x80)<<bit);
|
|
||||||
}
|
|
||||||
return z;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -25,10 +25,6 @@ typedef size_t VP8_BD_VALUE;
|
||||||
Even relatively modest values like 100 would work fine.*/
|
Even relatively modest values like 100 would work fine.*/
|
||||||
# define VP8_LOTS_OF_BITS (0x40000000)
|
# define VP8_LOTS_OF_BITS (0x40000000)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct vp8_dboolhuff_rtcd_vtable;
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
const unsigned char *user_buffer_end;
|
const unsigned char *user_buffer_end;
|
||||||
|
@ -36,82 +32,15 @@ typedef struct
|
||||||
VP8_BD_VALUE value;
|
VP8_BD_VALUE value;
|
||||||
int count;
|
int count;
|
||||||
unsigned int range;
|
unsigned int range;
|
||||||
#if CONFIG_RUNTIME_CPU_DETECT
|
|
||||||
struct vp8_dboolhuff_rtcd_vtable *rtcd;
|
|
||||||
#endif
|
|
||||||
} BOOL_DECODER;
|
} BOOL_DECODER;
|
||||||
|
|
||||||
#define prototype_dbool_start(sym) int sym(BOOL_DECODER *br, \
|
|
||||||
const unsigned char *source, unsigned int source_sz)
|
|
||||||
#define prototype_dbool_fill(sym) void sym(BOOL_DECODER *br)
|
|
||||||
#define prototype_dbool_debool(sym) int sym(BOOL_DECODER *br, int probability)
|
|
||||||
#define prototype_dbool_devalue(sym) int sym(BOOL_DECODER *br, int bits)
|
|
||||||
|
|
||||||
#if ARCH_ARM
|
|
||||||
#include "arm/dboolhuff_arm.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef vp8_dbool_start
|
|
||||||
#define vp8_dbool_start vp8dx_start_decode_c
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef vp8_dbool_fill
|
|
||||||
#define vp8_dbool_fill vp8dx_bool_decoder_fill_c
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef vp8_dbool_debool
|
|
||||||
#define vp8_dbool_debool vp8dx_decode_bool_c
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef vp8_dbool_devalue
|
|
||||||
#define vp8_dbool_devalue vp8dx_decode_value_c
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern prototype_dbool_start(vp8_dbool_start);
|
|
||||||
extern prototype_dbool_fill(vp8_dbool_fill);
|
|
||||||
extern prototype_dbool_debool(vp8_dbool_debool);
|
|
||||||
extern prototype_dbool_devalue(vp8_dbool_devalue);
|
|
||||||
|
|
||||||
typedef prototype_dbool_start((*vp8_dbool_start_fn_t));
|
|
||||||
typedef prototype_dbool_fill((*vp8_dbool_fill_fn_t));
|
|
||||||
typedef prototype_dbool_debool((*vp8_dbool_debool_fn_t));
|
|
||||||
typedef prototype_dbool_devalue((*vp8_dbool_devalue_fn_t));
|
|
||||||
|
|
||||||
typedef struct vp8_dboolhuff_rtcd_vtable {
|
|
||||||
vp8_dbool_start_fn_t start;
|
|
||||||
vp8_dbool_fill_fn_t fill;
|
|
||||||
vp8_dbool_debool_fn_t debool;
|
|
||||||
vp8_dbool_devalue_fn_t devalue;
|
|
||||||
} vp8_dboolhuff_rtcd_vtable_t;
|
|
||||||
|
|
||||||
/* There are no processor-specific versions of these
|
|
||||||
* functions right now. Disable RTCD to avoid using
|
|
||||||
* function pointers which gives a speed boost
|
|
||||||
*/
|
|
||||||
/*#ifdef ENABLE_RUNTIME_CPU_DETECT
|
|
||||||
#define DBOOLHUFF_INVOKE(ctx,fn) (ctx)->fn
|
|
||||||
#define IF_RTCD(x) (x)
|
|
||||||
#else*/
|
|
||||||
#define DBOOLHUFF_INVOKE(ctx,fn) vp8_dbool_##fn
|
|
||||||
#define IF_RTCD(x) NULL
|
|
||||||
/*#endif*/
|
|
||||||
|
|
||||||
DECLARE_ALIGNED(16, extern const unsigned char, vp8dx_bitreader_norm[256]);
|
DECLARE_ALIGNED(16, extern const unsigned char, vp8dx_bitreader_norm[256]);
|
||||||
|
|
||||||
/* wrapper functions to hide RTCD. static means inline means hopefully no
|
int vp8dx_start_decode(BOOL_DECODER *br,
|
||||||
* penalty
|
const unsigned char *source,
|
||||||
*/
|
unsigned int source_sz);
|
||||||
static int vp8dx_start_decode(BOOL_DECODER *br,
|
|
||||||
struct vp8_dboolhuff_rtcd_vtable *rtcd,
|
void vp8dx_bool_decoder_fill(BOOL_DECODER *br);
|
||||||
const unsigned char *source, unsigned int source_sz) {
|
|
||||||
#if CONFIG_RUNTIME_CPU_DETECT
|
|
||||||
br->rtcd = rtcd;
|
|
||||||
#endif
|
|
||||||
return DBOOLHUFF_INVOKE(rtcd, start)(br, source, source_sz);
|
|
||||||
}
|
|
||||||
static void vp8dx_bool_decoder_fill(BOOL_DECODER *br) {
|
|
||||||
DBOOLHUFF_INVOKE(br->rtcd, fill)(br);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*The refill loop is used in several places, so define it in a macro to make
|
/*The refill loop is used in several places, so define it in a macro to make
|
||||||
sure they're all consistent.
|
sure they're all consistent.
|
||||||
|
@ -138,12 +67,6 @@ static void vp8dx_bool_decoder_fill(BOOL_DECODER *br) {
|
||||||
|
|
||||||
|
|
||||||
static int vp8dx_decode_bool(BOOL_DECODER *br, int probability) {
|
static int vp8dx_decode_bool(BOOL_DECODER *br, int probability) {
|
||||||
/*
|
|
||||||
* Until optimized versions of this function are available, we
|
|
||||||
* keep the implementation in the header to allow inlining.
|
|
||||||
*
|
|
||||||
*return DBOOLHUFF_INVOKE(br->rtcd, debool)(br, probability);
|
|
||||||
*/
|
|
||||||
unsigned int bit = 0;
|
unsigned int bit = 0;
|
||||||
VP8_BD_VALUE value;
|
VP8_BD_VALUE value;
|
||||||
unsigned int split;
|
unsigned int split;
|
||||||
|
@ -167,13 +90,6 @@ static int vp8dx_decode_bool(BOOL_DECODER *br, int probability) {
|
||||||
bit = 1;
|
bit = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if(range>=0x80)
|
|
||||||
{
|
|
||||||
br->value = value;
|
|
||||||
br->range = range;
|
|
||||||
return bit
|
|
||||||
}*/
|
|
||||||
|
|
||||||
{
|
{
|
||||||
register unsigned int shift = vp8dx_bitreader_norm[range];
|
register unsigned int shift = vp8dx_bitreader_norm[range];
|
||||||
range <<= shift;
|
range <<= shift;
|
||||||
|
@ -190,12 +106,6 @@ static int vp8dx_decode_bool(BOOL_DECODER *br, int probability) {
|
||||||
|
|
||||||
static int vp8_decode_value(BOOL_DECODER *br, int bits)
|
static int vp8_decode_value(BOOL_DECODER *br, int bits)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* Until optimized versions of this function are available, we
|
|
||||||
* keep the implementation in the header to allow inlining.
|
|
||||||
*
|
|
||||||
*return DBOOLHUFF_INVOKE(br->rtcd, devalue)(br, bits);
|
|
||||||
*/
|
|
||||||
int z = 0;
|
int z = 0;
|
||||||
int bit;
|
int bit;
|
||||||
|
|
||||||
|
|
|
@ -475,8 +475,7 @@ static void setup_token_decoder(VP8D_COMP *pbi,
|
||||||
"Truncated packet or corrupt partition "
|
"Truncated packet or corrupt partition "
|
||||||
"%d length", i + 1);
|
"%d length", i + 1);
|
||||||
|
|
||||||
if (vp8dx_start_decode(bool_decoder, IF_RTCD(&pbi->dboolhuff),
|
if (vp8dx_start_decode(bool_decoder, partition, partition_size))
|
||||||
partition, partition_size))
|
|
||||||
vpx_internal_error(&pc->error, VPX_CODEC_MEM_ERROR,
|
vpx_internal_error(&pc->error, VPX_CODEC_MEM_ERROR,
|
||||||
"Failed to allocate bool decoder %d", i + 1);
|
"Failed to allocate bool decoder %d", i + 1);
|
||||||
|
|
||||||
|
@ -651,8 +650,7 @@ int vp8_decode_frame(VP8D_COMP *pbi)
|
||||||
|
|
||||||
init_frame(pbi);
|
init_frame(pbi);
|
||||||
|
|
||||||
if (vp8dx_start_decode(bc, IF_RTCD(&pbi->dboolhuff),
|
if (vp8dx_start_decode(bc, data, data_end - data))
|
||||||
data, data_end - data))
|
|
||||||
vpx_internal_error(&pc->error, VPX_CODEC_MEM_ERROR,
|
vpx_internal_error(&pc->error, VPX_CODEC_MEM_ERROR,
|
||||||
"Failed to allocate bool decoder 0");
|
"Failed to allocate bool decoder 0");
|
||||||
if (pc->frame_type == KEY_FRAME) {
|
if (pc->frame_type == KEY_FRAME) {
|
||||||
|
|
|
@ -27,12 +27,6 @@ void vp8_dmachine_specific_config(VP8D_COMP *pbi)
|
||||||
pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_c;
|
pbi->dequant.dc_idct_add_y_block = vp8_dequant_dc_idct_add_y_block_c;
|
||||||
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_c;
|
pbi->dequant.idct_add_y_block = vp8_dequant_idct_add_y_block_c;
|
||||||
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_c;
|
pbi->dequant.idct_add_uv_block = vp8_dequant_idct_add_uv_block_c;
|
||||||
pbi->dboolhuff.start = vp8dx_start_decode_c;
|
|
||||||
pbi->dboolhuff.fill = vp8dx_bool_decoder_fill_c;
|
|
||||||
#if 0 /*For use with RTCD, when implemented*/
|
|
||||||
pbi->dboolhuff.debool = vp8dx_decode_bool_c;
|
|
||||||
pbi->dboolhuff.devalue = vp8dx_decode_value_c;
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ARCH_X86 || ARCH_X86_64
|
#if ARCH_X86 || ARCH_X86_64
|
||||||
|
|
|
@ -125,7 +125,6 @@ typedef struct VP8Decompressor
|
||||||
|
|
||||||
#if CONFIG_RUNTIME_CPU_DETECT
|
#if CONFIG_RUNTIME_CPU_DETECT
|
||||||
vp8_dequant_rtcd_vtable_t dequant;
|
vp8_dequant_rtcd_vtable_t dequant;
|
||||||
struct vp8_dboolhuff_rtcd_vtable dboolhuff;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче