X-Git-Url: http://git.maemo.org/git/?p=mardrone;a=blobdiff_plain;f=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FVLIB%2FPlatform%2Farm9%2FUVLC%2Fuvlc_mb_layer_p5p.S;fp=mardrone%2FARDrone_SDK_Version_1_8_20110726%2FARDroneLib%2FVLIB%2FPlatform%2Farm9%2FUVLC%2Fuvlc_mb_layer_p5p.S;h=b4cfcd8d5321d80d87196cbd01485e83c289415c;hp=0000000000000000000000000000000000000000;hb=9ec9bc13b75d30bc45535c54a652934debfcea92;hpb=ae0a3c2dc0898400aca0dd6b439c5db8044db7b2 diff --git a/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VLIB/Platform/arm9/UVLC/uvlc_mb_layer_p5p.S b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VLIB/Platform/arm9/UVLC/uvlc_mb_layer_p5p.S new file mode 100644 index 0000000..b4cfcd8 --- /dev/null +++ b/mardrone/ARDrone_SDK_Version_1_8_20110726/ARDroneLib/VLIB/Platform/arm9/UVLC/uvlc_mb_layer_p5p.S @@ -0,0 +1,146 @@ +#include "../video_utils_p5p.h" + +#ifdef HAS_UVLC_WRITE_BLOCK + +#ifdef _ECOS +#include "config-tcm.h" + + .section ".text.itcm","ax" +#endif // ! _ECOS + + + .global uvlc_write_block + .type uvlc_write_block, %function + +/* This code is an inline version of uvlc_write_block using video_zztable_t81 + +void uvlc_write_block( video_stream_t* const stream, int16_t* data, int32_t num_coeff ) */ + +#define zz(num1, num2) \ +video_zztable_t81_next_##num1: ;\ + cmp r1, #0 ;\ + addeq r2, r2, #1; \ + ldreqsh r1, [r4, #2*num2]; \ + beq video_zztable_t81_next_##num2; \ + sub r3, r3, #1; \ + bl uvlc_encode; \ + cmp r3, #0; \ + ldrgtsh r1, [r4, #2*num2]; \ + ldmleia sp!, {r4, pc}; \ + mov r2, #0; + +uvlc_write_block: + stmdb sp!, {r4, lr} + + mov r4, r1 + ldrsh r1, [r1, #0] + sub r3, r2, #1 + mov r2, #10 + bl video_write_data + cmp r3, #0 + ldrgtsh r1, [r4, #2] + mov r2, #0 + ldmleia sp!, {r4, pc} + + zz(1, 8) + zz(8, 16) + zz(16, 9) + zz(9, 2) + zz(2, 3) + zz(3, 10) + zz(10, 17) + zz(17, 24) + zz(24, 32) + zz(32, 25) + zz(25, 18) + zz(18, 11) + zz(11, 4) + zz(4, 5) + zz(5, 12) + zz(12, 19) + zz(19, 26) + zz(26, 33) + zz(33, 40) + zz(40, 48) + zz(48, 41) + zz(41, 34) + zz(34, 27) + zz(27, 20) + zz(20, 13) + zz(13, 6) + zz(6, 7) + zz(7, 14) + zz(14, 21) + zz(21, 28) + zz(28, 35) + zz(35, 42) + zz(42, 49) + zz(49, 56) + zz(56, 57) + zz(57, 50) + zz(50, 43) + zz(43, 36) + zz(36, 29) + zz(29, 22) + zz(22, 15) + zz(15, 23) + zz(23, 30) + zz(30, 37) + zz(37, 44) + zz(44, 51) + zz(51, 58) + zz(58, 59) + zz(59, 52) + zz(52, 45) + zz(45, 38) + zz(38, 31) + zz(31, 39) + zz(39, 46) + zz(46, 53) + zz(53, 60) + zz(60, 61) + zz(61, 54) + zz(54, 47) + zz(47, 55) + zz(55, 62) + zz(62, 63) + + +video_zztable_t81_next_63: + mov r3, #0 + ldmia sp!, {r4, lr} + b uvlc_encode + +/* This code is an optimized version of uvlc_write_block using video_zztable_t81 + +void uvlc_write_block( video_stream_t* const stream, int16_t* data, int32_t num_coeff ) */ +/* +uvlc_write_block: + stmdb sp!, {r4, r5, r6, lr} + + mov r4, r1 + ldrsh r1, [r1, #0] + sub r3, r2, #1 + mov r2, #8 + bl video_write_data + mov r2, #0 + cmp r3, #0 + ldmleia sp!, {r4, r5, r6, pc} + ldr r5, =video_zztable_t81 + +video_zztable_t81_next_1: + ldr r6, [r5, #4]! + mov r6, r6, lsl #1 + ldrsh r1, [r4, r6] + cmp r1, #0 + addeq r2, r2, #1 + beq video_zztable_t81_next_1 + sub r3, r3, #1 + bl uvlc_encode + cmp r3, #0 + ldmleia sp!, {r4, r5, r6, pc} + mov r2, #0 + b video_zztable_t81_next_1 +*/ + +#endif // HAS_UVLC_WRITE_BLOCK