1233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan; Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan; that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan; tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan; in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan; be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan EXPORT |vp8cx_pack_tokens_into_partitions_armv5| 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan IMPORT |vp8_validate_buffer_arm| 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan INCLUDE vp8_asm_enc_offsets.asm 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan ARM 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan REQUIRE8 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan PRESERVE8 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan AREA |.text|, CODE, READONLY 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; macro for validating write buffer position 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; needs vp8_writer in r0 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; start shall not be in r1 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan MACRO 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan VALIDATE_POS $start, $pos 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan push {r0-r3, r12, lr} ; rest of regs are preserved by subroutine call 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r2, [r0, #vp8_writer_buffer_end] 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r3, [r0, #vp8_writer_error] 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r1, $pos 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r0, $start 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan bl vp8_validate_buffer_arm 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan pop {r0-r3, r12, lr} 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan MEND 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan; r0 VP8_COMP *cpi 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan; r1 unsigned char *cx_data 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan; r2 const unsigned char *cx_data_end 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan; r3 int num_part 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan; s0 vp8_coef_encodings 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan; s1 vp8_extra_bits, 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan; s2 const vp8_tree_index * 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan|vp8cx_pack_tokens_into_partitions_armv5| PROC 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan push {r4-r12, lr} 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub sp, sp, #40 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; Compute address of cpi->common.mb_rows 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, _VP8_COMP_common_ 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r6, _VP8_COMMON_MBrows_ 52233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r4, r0, r4 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan 54233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r5, [r4, r6] ; load up mb_rows 55233d2500723e5594f3e7c70896ffeeef32b9c950ywan 56233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r5, [sp, #36] ; save mb_rows 57233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r1, [sp, #24] ; save ptr = cx_data 58233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r3, [sp, #20] ; save num_part 59233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r2, [sp, #8] ; save cx_data_end 60233d2500723e5594f3e7c70896ffeeef32b9c950ywan 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, _VP8_COMP_tplist_ 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r4, r0, r4 63233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r7, [r4, #0] ; dereference cpi->tp_list 64233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r7, [sp, #32] ; store start of cpi->tp_list 65233d2500723e5594f3e7c70896ffeeef32b9c950ywan 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r11, _VP8_COMP_bc_ ; load up vp8_writer out of cpi 67233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r0, r0, r11 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r11, #0 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r11, [sp, #28] ; i 71233d2500723e5594f3e7c70896ffeeef32b9c950ywan 72233d2500723e5594f3e7c70896ffeeef32b9c950ywannumparts_loop 73233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r2, _vp8_writer_sz_ ; load up sizeof(vp8_writer) 74233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r0, r2 ; bc[i + 1] 75233d2500723e5594f3e7c70896ffeeef32b9c950ywan 76233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [sp, #24] ; ptr 77233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r5, [sp, #36] ; move mb_rows to the counting section 78233d2500723e5594f3e7c70896ffeeef32b9c950ywan subs r5, r5, r11 ; move start point with each partition 79233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; mb_rows starts at i 80233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r5, [sp, #12] 81233d2500723e5594f3e7c70896ffeeef32b9c950ywan 82233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; Reset all of the VP8 Writer data for each partition that 83233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; is processed. 84233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; start_encode 85233d2500723e5594f3e7c70896ffeeef32b9c950ywan 86233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r3, [sp, #8] 87233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r3, [r0, #vp8_writer_buffer_end] 88233d2500723e5594f3e7c70896ffeeef32b9c950ywan 89233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r2, #0 ; vp8_writer_lowvalue 90233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r5, #255 ; vp8_writer_range 91233d2500723e5594f3e7c70896ffeeef32b9c950ywan mvn r3, #23 ; vp8_writer_count 92233d2500723e5594f3e7c70896ffeeef32b9c950ywan 93233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r2, [r0, #vp8_writer_pos] 94233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r10, [r0, #vp8_writer_buffer] 95233d2500723e5594f3e7c70896ffeeef32b9c950ywan 96233d2500723e5594f3e7c70896ffeeef32b9c950ywan ble end_partition ; if (mb_rows <= 0) end partition 97233d2500723e5594f3e7c70896ffeeef32b9c950ywan 98233d2500723e5594f3e7c70896ffeeef32b9c950ywanmb_row_loop 99233d2500723e5594f3e7c70896ffeeef32b9c950ywan 100233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r1, [r7, #tokenlist_start] 101233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r9, [r7, #tokenlist_stop] 102233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r9, [sp, #0] ; save stop for later comparison 103233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r7, [sp, #16] ; tokenlist address for next time 104233d2500723e5594f3e7c70896ffeeef32b9c950ywan 105233d2500723e5594f3e7c70896ffeeef32b9c950ywan b check_p_lt_stop 106233d2500723e5594f3e7c70896ffeeef32b9c950ywan 107233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; actual work gets done here! 108233d2500723e5594f3e7c70896ffeeef32b9c950ywan 109233d2500723e5594f3e7c70896ffeeef32b9c950ywanwhile_p_lt_stop 110233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r6, [r1, #tokenextra_token] ; t 111233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [sp, #80] ; vp8_coef_encodings 112233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov lr, #0 113233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r4, r4, r6, lsl #3 ; a = vp8_coef_encodings + t 114233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r9, [r1, #tokenextra_context_tree] ; pp 115233d2500723e5594f3e7c70896ffeeef32b9c950ywan 116233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r7, [r1, #tokenextra_skip_eob_node] 117233d2500723e5594f3e7c70896ffeeef32b9c950ywan 118233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r6, [r4, #vp8_token_value] ; v 119233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r8, [r4, #vp8_token_len] ; n 120233d2500723e5594f3e7c70896ffeeef32b9c950ywan 121233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; vp8 specific skip_eob_node 122233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r7, #0 123233d2500723e5594f3e7c70896ffeeef32b9c950ywan movne lr, #2 ; i = 2 124233d2500723e5594f3e7c70896ffeeef32b9c950ywan subne r8, r8, #1 ; --n 125233d2500723e5594f3e7c70896ffeeef32b9c950ywan 126233d2500723e5594f3e7c70896ffeeef32b9c950ywan rsb r4, r8, #32 ; 32-n 127233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [sp, #88] ; vp8_coef_tree 128233d2500723e5594f3e7c70896ffeeef32b9c950ywan 129233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; v is kept in r12 during the token pack loop 130233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r12, r6, r4 ; r12 = v << 32 - n 131233d2500723e5594f3e7c70896ffeeef32b9c950ywan 132233d2500723e5594f3e7c70896ffeeef32b9c950ywan; loop start 133233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_loop 134233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r4, [r9, lr, asr #1] ; pp [i>>1] 135233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r7, r5, #1 ; range-1 136233d2500723e5594f3e7c70896ffeeef32b9c950ywan 137233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; Decisions are made based on the bit value shifted 138233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; off of v, so set a flag here based on this. 139233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; This value is refered to as "bb" 140233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsls r12, r12, #1 ; bb = v >> n 141233d2500723e5594f3e7c70896ffeeef32b9c950ywan mul r6, r4, r7 ; ((range-1) * pp[i>>1])) 142233d2500723e5594f3e7c70896ffeeef32b9c950ywan 143233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; bb can only be 0 or 1. So only execute this statement 144233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; if bb == 1, otherwise it will act like i + 0 145233d2500723e5594f3e7c70896ffeeef32b9c950ywan addcs lr, lr, #1 ; i + bb 146233d2500723e5594f3e7c70896ffeeef32b9c950ywan 147233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r7, #1 148233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrsb lr, [r10, lr] ; i = vp8_coef_tree[i+bb] 149233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r4, r7, r6, lsr #8 ; 1 + (((range-1) * pp[i>>1]) >> 8) 150233d2500723e5594f3e7c70896ffeeef32b9c950ywan 151233d2500723e5594f3e7c70896ffeeef32b9c950ywan addcs r2, r2, r4 ; if (bb) lowvalue += split 152233d2500723e5594f3e7c70896ffeeef32b9c950ywan subcs r4, r5, r4 ; if (bb) range = range-split 153233d2500723e5594f3e7c70896ffeeef32b9c950ywan 154233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; Counting the leading zeros is used to normalize range. 155233d2500723e5594f3e7c70896ffeeef32b9c950ywan clz r6, r4 156233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r6, r6, #24 ; shift 157233d2500723e5594f3e7c70896ffeeef32b9c950ywan 158233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; Flag is set on the sum of count. This flag is used later 159233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; to determine if count >= 0 160233d2500723e5594f3e7c70896ffeeef32b9c950ywan adds r3, r3, r6 ; count += shift 161233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r5, r4, r6 ; range <<= shift 162233d2500723e5594f3e7c70896ffeeef32b9c950ywan bmi token_count_lt_zero ; if(count >= 0) 163233d2500723e5594f3e7c70896ffeeef32b9c950ywan 164233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r6, r6, r3 ; offset = shift - count 165233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r6, #1 ; offset-1 166233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsls r4, r2, r4 ; if((lowvalue<<(offset-1)) & 0x80000000 ) 167233d2500723e5594f3e7c70896ffeeef32b9c950ywan bpl token_high_bit_not_set 168233d2500723e5594f3e7c70896ffeeef32b9c950ywan 169233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] ; x 170233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r4, #1 ; x = w->pos-1 171233d2500723e5594f3e7c70896ffeeef32b9c950ywan b token_zero_while_start 172233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_zero_while_loop 173233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r10, #0 174233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r10, [r7, r4] ; w->buffer[x] =(unsigned char)0 175233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r4, #1 ; x-- 176233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_zero_while_start 177233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r4, #0 178233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrge r7, [r0, #vp8_writer_buffer] 179233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r11, [r7, r4] 180233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmpge r11, #0xff 181233d2500723e5594f3e7c70896ffeeef32b9c950ywan beq token_zero_while_loop 182233d2500723e5594f3e7c70896ffeeef32b9c950ywan 183233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r7, [r0, #vp8_writer_buffer] 184233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r10, [r7, r4] ; w->buffer[x] 185233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r10, r10, #1 186233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r10, [r7, r4] ; w->buffer[x] + 1 187233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_high_bit_not_set 188233d2500723e5594f3e7c70896ffeeef32b9c950ywan rsb r4, r6, #24 ; 24-offset 189233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [r0, #vp8_writer_buffer] 190233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsr r7, r2, r4 ; lowvalue >> (24-offset) 191233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] ; w->pos 192233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r2, r2, r6 ; lowvalue <<= offset 193233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r6, r3 ; shift = count 194233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r11, r4, #1 ; w->pos++ 195233d2500723e5594f3e7c70896ffeeef32b9c950ywan bic r2, r2, #0xff000000 ; lowvalue &= 0xffffff 196233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r11, [r0, #vp8_writer_pos] 197233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r3, r3, #8 ; count -= 8 198233d2500723e5594f3e7c70896ffeeef32b9c950ywan 199233d2500723e5594f3e7c70896ffeeef32b9c950ywan VALIDATE_POS r10, r11 ; validate_buffer at pos 200233d2500723e5594f3e7c70896ffeeef32b9c950ywan 201233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r7, [r10, r4] ; w->buffer[w->pos++] 202233d2500723e5594f3e7c70896ffeeef32b9c950ywan 203233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; r10 is used earlier in the loop, but r10 is used as 204233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; temp variable here. So after r10 is used, reload 205233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; vp8_coef_tree_dcd into r10 206233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [sp, #88] ; vp8_coef_tree 207233d2500723e5594f3e7c70896ffeeef32b9c950ywan 208233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_count_lt_zero 209233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r2, r2, r6 ; lowvalue <<= shift 210233d2500723e5594f3e7c70896ffeeef32b9c950ywan 211233d2500723e5594f3e7c70896ffeeef32b9c950ywan subs r8, r8, #1 ; --n 212233d2500723e5594f3e7c70896ffeeef32b9c950ywan bne token_loop 213233d2500723e5594f3e7c70896ffeeef32b9c950ywan 214233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r6, [r1, #tokenextra_token] ; t 215233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r7, [sp, #84] ; vp8_extra_bits 216233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; Add t * sizeof (vp8_extra_bit_struct) to get the desired 217233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; element. Here vp8_extra_bit_struct == 16 218233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r12, r7, r6, lsl #4 ; b = vp8_extra_bits + t 219233d2500723e5594f3e7c70896ffeeef32b9c950ywan 220233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r12, #vp8_extra_bit_struct_base_val] 221233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r4, #0 222233d2500723e5594f3e7c70896ffeeef32b9c950ywan beq skip_extra_bits 223233d2500723e5594f3e7c70896ffeeef32b9c950ywan 224233d2500723e5594f3e7c70896ffeeef32b9c950ywan; if( b->base_val) 225233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r8, [r12, #vp8_extra_bit_struct_len] ; L 226233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrsh lr, [r1, #tokenextra_extra] ; e = p->Extra 227233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r8, #0 ; if( L) 228233d2500723e5594f3e7c70896ffeeef32b9c950ywan beq no_extra_bits 229233d2500723e5594f3e7c70896ffeeef32b9c950ywan 230233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r9, [r12, #vp8_extra_bit_struct_prob] 231233d2500723e5594f3e7c70896ffeeef32b9c950ywan asr r7, lr, #1 ; v=e>>1 232233d2500723e5594f3e7c70896ffeeef32b9c950ywan 233233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [r12, #vp8_extra_bit_struct_tree] 234233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r10, [sp, #4] ; b->tree 235233d2500723e5594f3e7c70896ffeeef32b9c950ywan 236233d2500723e5594f3e7c70896ffeeef32b9c950ywan rsb r4, r8, #32 237233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r12, r7, r4 238233d2500723e5594f3e7c70896ffeeef32b9c950ywan 239233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov lr, #0 ; i = 0 240233d2500723e5594f3e7c70896ffeeef32b9c950ywan 241233d2500723e5594f3e7c70896ffeeef32b9c950ywanextra_bits_loop 242233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r4, [r9, lr, asr #1] ; pp[i>>1] 243233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r7, r5, #1 ; range-1 244233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsls r12, r12, #1 ; v >> n 245233d2500723e5594f3e7c70896ffeeef32b9c950ywan mul r6, r4, r7 ; (range-1) * pp[i>>1] 246233d2500723e5594f3e7c70896ffeeef32b9c950ywan addcs lr, lr, #1 ; i + bb 247233d2500723e5594f3e7c70896ffeeef32b9c950ywan 248233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r7, #1 249233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrsb lr, [r10, lr] ; i = b->tree[i+bb] 250233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r4, r7, r6, lsr #8 ; split = 1 + (((range-1) * pp[i>>1]) >> 8) 251233d2500723e5594f3e7c70896ffeeef32b9c950ywan 252233d2500723e5594f3e7c70896ffeeef32b9c950ywan addcs r2, r2, r4 ; if (bb) lowvalue += split 253233d2500723e5594f3e7c70896ffeeef32b9c950ywan subcs r4, r5, r4 ; if (bb) range = range-split 254233d2500723e5594f3e7c70896ffeeef32b9c950ywan 255233d2500723e5594f3e7c70896ffeeef32b9c950ywan clz r6, r4 256233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r6, r6, #24 257233d2500723e5594f3e7c70896ffeeef32b9c950ywan 258233d2500723e5594f3e7c70896ffeeef32b9c950ywan adds r3, r3, r6 ; count += shift 259233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r5, r4, r6 ; range <<= shift 260233d2500723e5594f3e7c70896ffeeef32b9c950ywan bmi extra_count_lt_zero ; if(count >= 0) 261233d2500723e5594f3e7c70896ffeeef32b9c950ywan 262233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r6, r6, r3 ; offset= shift - count 263233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r6, #1 ; offset-1 264233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsls r4, r2, r4 ; if((lowvalue<<(offset-1)) & 0x80000000 ) 265233d2500723e5594f3e7c70896ffeeef32b9c950ywan bpl extra_high_bit_not_set 266233d2500723e5594f3e7c70896ffeeef32b9c950ywan 267233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] ; x 268233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r4, #1 ; x = w->pos - 1 269233d2500723e5594f3e7c70896ffeeef32b9c950ywan b extra_zero_while_start 270233d2500723e5594f3e7c70896ffeeef32b9c950ywanextra_zero_while_loop 271233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r10, #0 272233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r10, [r7, r4] ; w->buffer[x] =(unsigned char)0 273233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r4, #1 ; x-- 274233d2500723e5594f3e7c70896ffeeef32b9c950ywanextra_zero_while_start 275233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r4, #0 276233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrge r7, [r0, #vp8_writer_buffer] 277233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r11, [r7, r4] 278233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmpge r11, #0xff 279233d2500723e5594f3e7c70896ffeeef32b9c950ywan beq extra_zero_while_loop 280233d2500723e5594f3e7c70896ffeeef32b9c950ywan 281233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r7, [r0, #vp8_writer_buffer] 282233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r10, [r7, r4] 283233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r10, r10, #1 284233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r10, [r7, r4] 285233d2500723e5594f3e7c70896ffeeef32b9c950ywanextra_high_bit_not_set 286233d2500723e5594f3e7c70896ffeeef32b9c950ywan rsb r4, r6, #24 ; 24-offset 287233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [r0, #vp8_writer_buffer] 288233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsr r7, r2, r4 ; lowvalue >> (24-offset) 289233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] 290233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r2, r2, r6 ; lowvalue <<= offset 291233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r6, r3 ; shift = count 292233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r11, r4, #1 ; w->pos++ 293233d2500723e5594f3e7c70896ffeeef32b9c950ywan bic r2, r2, #0xff000000 ; lowvalue &= 0xffffff 294233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r11, [r0, #vp8_writer_pos] 295233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r3, r3, #8 ; count -= 8 296233d2500723e5594f3e7c70896ffeeef32b9c950ywan 297233d2500723e5594f3e7c70896ffeeef32b9c950ywan VALIDATE_POS r10, r11 ; validate_buffer at pos 298233d2500723e5594f3e7c70896ffeeef32b9c950ywan 299233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r7, [r10, r4] ; w->buffer[w->pos++]=(lowvalue >> (24-offset)) 300233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [sp, #4] ; b->tree 301233d2500723e5594f3e7c70896ffeeef32b9c950ywanextra_count_lt_zero 302233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r2, r2, r6 303233d2500723e5594f3e7c70896ffeeef32b9c950ywan 304233d2500723e5594f3e7c70896ffeeef32b9c950ywan subs r8, r8, #1 ; --n 305233d2500723e5594f3e7c70896ffeeef32b9c950ywan bne extra_bits_loop ; while (n) 306233d2500723e5594f3e7c70896ffeeef32b9c950ywan 307233d2500723e5594f3e7c70896ffeeef32b9c950ywanno_extra_bits 308233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr lr, [r1, #4] ; e = p->Extra 309233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r4, r5, #1 ; range + 1 310233d2500723e5594f3e7c70896ffeeef32b9c950ywan tst lr, #1 311233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsr r4, r4, #1 ; split = (range + 1) >> 1 312233d2500723e5594f3e7c70896ffeeef32b9c950ywan addne r2, r2, r4 ; lowvalue += split 313233d2500723e5594f3e7c70896ffeeef32b9c950ywan subne r4, r5, r4 ; range = range-split 314233d2500723e5594f3e7c70896ffeeef32b9c950ywan tst r2, #0x80000000 ; lowvalue & 0x80000000 315233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r5, r4, #1 ; range <<= 1 316233d2500723e5594f3e7c70896ffeeef32b9c950ywan beq end_high_bit_not_set 317233d2500723e5594f3e7c70896ffeeef32b9c950ywan 318233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] 319233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r7, #0 320233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r4, #1 321233d2500723e5594f3e7c70896ffeeef32b9c950ywan b end_zero_while_start 322233d2500723e5594f3e7c70896ffeeef32b9c950ywanend_zero_while_loop 323233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r7, [r6, r4] 324233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r4, #1 ; x-- 325233d2500723e5594f3e7c70896ffeeef32b9c950ywanend_zero_while_start 326233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r4, #0 327233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrge r6, [r0, #vp8_writer_buffer] 328233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r12, [r6, r4] 329233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmpge r12, #0xff 330233d2500723e5594f3e7c70896ffeeef32b9c950ywan beq end_zero_while_loop 331233d2500723e5594f3e7c70896ffeeef32b9c950ywan 332233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r6, [r0, #vp8_writer_buffer] 333233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r7, [r6, r4] 334233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r7, r7, #1 335233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r7, [r6, r4] 336233d2500723e5594f3e7c70896ffeeef32b9c950ywanend_high_bit_not_set 337233d2500723e5594f3e7c70896ffeeef32b9c950ywan adds r3, r3, #1 ; ++count 338233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r2, r2, #1 ; lowvalue <<= 1 339233d2500723e5594f3e7c70896ffeeef32b9c950ywan bne end_count_zero 340233d2500723e5594f3e7c70896ffeeef32b9c950ywan 341233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] 342233d2500723e5594f3e7c70896ffeeef32b9c950ywan mvn r3, #7 ; count = -8 343233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r7, [r0, #vp8_writer_buffer] 344233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsr r6, r2, #24 ; lowvalue >> 24 345233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r12, r4, #1 ; w->pos++ 346233d2500723e5594f3e7c70896ffeeef32b9c950ywan bic r2, r2, #0xff000000 ; lowvalue &= 0xffffff 347233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r12, [r0, #vp8_writer_pos] 348233d2500723e5594f3e7c70896ffeeef32b9c950ywan 349233d2500723e5594f3e7c70896ffeeef32b9c950ywan VALIDATE_POS r7, r12 ; validate_buffer at pos 350233d2500723e5594f3e7c70896ffeeef32b9c950ywan 351233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r6, [r7, r4] 352233d2500723e5594f3e7c70896ffeeef32b9c950ywanend_count_zero 353233d2500723e5594f3e7c70896ffeeef32b9c950ywanskip_extra_bits 354233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r1, r1, #TOKENEXTRA_SZ ; ++p 355233d2500723e5594f3e7c70896ffeeef32b9c950ywancheck_p_lt_stop 356233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [sp, #0] ; stop 357233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r1, r4 ; while( p < stop) 358233d2500723e5594f3e7c70896ffeeef32b9c950ywan bcc while_p_lt_stop 359233d2500723e5594f3e7c70896ffeeef32b9c950ywan 360233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [sp, #20] ; num_parts 361233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r1, #TOKENLIST_SZ 362233d2500723e5594f3e7c70896ffeeef32b9c950ywan mul r1, r10, r1 363233d2500723e5594f3e7c70896ffeeef32b9c950ywan 364233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r6, [sp, #12] ; mb_rows 365233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r7, [sp, #16] ; tokenlist address 366233d2500723e5594f3e7c70896ffeeef32b9c950ywan subs r6, r6, r10 367233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r7, r7, r1 ; next element in the array 368233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r6, [sp, #12] 369233d2500723e5594f3e7c70896ffeeef32b9c950ywan bgt mb_row_loop 370233d2500723e5594f3e7c70896ffeeef32b9c950ywan 371233d2500723e5594f3e7c70896ffeeef32b9c950ywanend_partition 372233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r12, #32 373233d2500723e5594f3e7c70896ffeeef32b9c950ywan 374233d2500723e5594f3e7c70896ffeeef32b9c950ywanstop_encode_loop 375233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r7, r5, #1 ; range-1 376233d2500723e5594f3e7c70896ffeeef32b9c950ywan 377233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r4, r7, lsl #7 ; ((range-1) * 128) 378233d2500723e5594f3e7c70896ffeeef32b9c950ywan 379233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r7, #1 380233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r4, r7, r4, lsr #8 ; 1 + (((range-1) * 128) >> 8) 381233d2500723e5594f3e7c70896ffeeef32b9c950ywan 382233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; Counting the leading zeros is used to normalize range. 383233d2500723e5594f3e7c70896ffeeef32b9c950ywan clz r6, r4 384233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r6, r6, #24 ; shift 385233d2500723e5594f3e7c70896ffeeef32b9c950ywan 386233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; Flag is set on the sum of count. This flag is used later 387233d2500723e5594f3e7c70896ffeeef32b9c950ywan ; to determine if count >= 0 388233d2500723e5594f3e7c70896ffeeef32b9c950ywan adds r3, r3, r6 ; count += shift 389233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r5, r4, r6 ; range <<= shift 390233d2500723e5594f3e7c70896ffeeef32b9c950ywan bmi token_count_lt_zero_se ; if(count >= 0) 391233d2500723e5594f3e7c70896ffeeef32b9c950ywan 392233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r6, r6, r3 ; offset = shift - count 393233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r6, #1 ; offset-1 394233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsls r4, r2, r4 ; if((lowvalue<<(offset-1)) & 0x80000000 ) 395233d2500723e5594f3e7c70896ffeeef32b9c950ywan bpl token_high_bit_not_set_se 396233d2500723e5594f3e7c70896ffeeef32b9c950ywan 397233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] ; x 398233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r4, #1 ; x = w->pos-1 399233d2500723e5594f3e7c70896ffeeef32b9c950ywan b token_zero_while_start_se 400233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_zero_while_loop_se 401233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r10, #0 402233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r10, [r7, r4] ; w->buffer[x] =(unsigned char)0 403233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r4, r4, #1 ; x-- 404233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_zero_while_start_se 405233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r4, #0 406233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrge r7, [r0, #vp8_writer_buffer] 407233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r11, [r7, r4] 408233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmpge r11, #0xff 409233d2500723e5594f3e7c70896ffeeef32b9c950ywan beq token_zero_while_loop_se 410233d2500723e5594f3e7c70896ffeeef32b9c950ywan 411233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r7, [r0, #vp8_writer_buffer] 412233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldrb r10, [r7, r4] ; w->buffer[x] 413233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r10, r10, #1 414233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r10, [r7, r4] ; w->buffer[x] + 1 415233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_high_bit_not_set_se 416233d2500723e5594f3e7c70896ffeeef32b9c950ywan rsb r4, r6, #24 ; 24-offset 417233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [r0, #vp8_writer_buffer] 418233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsr r7, r2, r4 ; lowvalue >> (24-offset) 419233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] ; w->pos 420233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r2, r2, r6 ; lowvalue <<= offset 421233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r6, r3 ; shift = count 422233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r11, r4, #1 ; w->pos++ 423233d2500723e5594f3e7c70896ffeeef32b9c950ywan bic r2, r2, #0xff000000 ; lowvalue &= 0xffffff 424233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r11, [r0, #vp8_writer_pos] 425233d2500723e5594f3e7c70896ffeeef32b9c950ywan sub r3, r3, #8 ; count -= 8 426233d2500723e5594f3e7c70896ffeeef32b9c950ywan 427233d2500723e5594f3e7c70896ffeeef32b9c950ywan VALIDATE_POS r10, r11 ; validate_buffer at pos 428233d2500723e5594f3e7c70896ffeeef32b9c950ywan 429233d2500723e5594f3e7c70896ffeeef32b9c950ywan strb r7, [r10, r4] ; w->buffer[w->pos++] 430233d2500723e5594f3e7c70896ffeeef32b9c950ywan 431233d2500723e5594f3e7c70896ffeeef32b9c950ywantoken_count_lt_zero_se 432233d2500723e5594f3e7c70896ffeeef32b9c950ywan lsl r2, r2, r6 ; lowvalue <<= shift 433233d2500723e5594f3e7c70896ffeeef32b9c950ywan 434233d2500723e5594f3e7c70896ffeeef32b9c950ywan subs r12, r12, #1 435233d2500723e5594f3e7c70896ffeeef32b9c950ywan bne stop_encode_loop 436233d2500723e5594f3e7c70896ffeeef32b9c950ywan 437233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r4, [r0, #vp8_writer_pos] ; w->pos 438233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r12, [sp, #24] ; ptr 439233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r12, r12, r4 ; ptr += w->pos 440233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r12, [sp, #24] 441233d2500723e5594f3e7c70896ffeeef32b9c950ywan 442233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r11, [sp, #28] ; i 443233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r10, [sp, #20] ; num_parts 444233d2500723e5594f3e7c70896ffeeef32b9c950ywan 445233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r11, r11, #1 ; i++ 446233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r11, [sp, #28] 447233d2500723e5594f3e7c70896ffeeef32b9c950ywan 448233d2500723e5594f3e7c70896ffeeef32b9c950ywan ldr r7, [sp, #32] ; cpi->tp_list[i] 449233d2500723e5594f3e7c70896ffeeef32b9c950ywan mov r1, #TOKENLIST_SZ 450233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r7, r7, r1 ; next element in cpi->tp_list 451233d2500723e5594f3e7c70896ffeeef32b9c950ywan str r7, [sp, #32] ; cpi->tp_list[i+1] 452233d2500723e5594f3e7c70896ffeeef32b9c950ywan 453233d2500723e5594f3e7c70896ffeeef32b9c950ywan cmp r10, r11 454233d2500723e5594f3e7c70896ffeeef32b9c950ywan bgt numparts_loop 455233d2500723e5594f3e7c70896ffeeef32b9c950ywan 456233d2500723e5594f3e7c70896ffeeef32b9c950ywan add sp, sp, #40 457233d2500723e5594f3e7c70896ffeeef32b9c950ywan pop {r4-r12, pc} 458233d2500723e5594f3e7c70896ffeeef32b9c950ywan ENDP 459233d2500723e5594f3e7c70896ffeeef32b9c950ywan 460233d2500723e5594f3e7c70896ffeeef32b9c950ywan_VP8_COMP_common_ 461233d2500723e5594f3e7c70896ffeeef32b9c950ywan DCD vp8_comp_common 462233d2500723e5594f3e7c70896ffeeef32b9c950ywan_VP8_COMMON_MBrows_ 463233d2500723e5594f3e7c70896ffeeef32b9c950ywan DCD vp8_common_mb_rows 464233d2500723e5594f3e7c70896ffeeef32b9c950ywan_VP8_COMP_tplist_ 465233d2500723e5594f3e7c70896ffeeef32b9c950ywan DCD vp8_comp_tplist 466233d2500723e5594f3e7c70896ffeeef32b9c950ywan_VP8_COMP_bc_ 467233d2500723e5594f3e7c70896ffeeef32b9c950ywan DCD vp8_comp_bc 468233d2500723e5594f3e7c70896ffeeef32b9c950ywan_vp8_writer_sz_ 469233d2500723e5594f3e7c70896ffeeef32b9c950ywan DCD vp8_writer_sz 470233d2500723e5594f3e7c70896ffeeef32b9c950ywan 471233d2500723e5594f3e7c70896ffeeef32b9c950ywan END 472