diff options
Diffstat (limited to 'media/libstagefright/codecs/on2/h264dec/omxdl/arm11/api/armCOMM_BitDec_s.h')
-rw-r--r-- | media/libstagefright/codecs/on2/h264dec/omxdl/arm11/api/armCOMM_BitDec_s.h | 670 |
1 files changed, 0 insertions, 670 deletions
diff --git a/media/libstagefright/codecs/on2/h264dec/omxdl/arm11/api/armCOMM_BitDec_s.h b/media/libstagefright/codecs/on2/h264dec/omxdl/arm11/api/armCOMM_BitDec_s.h deleted file mode 100644 index abb98fc..0000000 --- a/media/libstagefright/codecs/on2/h264dec/omxdl/arm11/api/armCOMM_BitDec_s.h +++ /dev/null @@ -1,670 +0,0 @@ -;// -;// -;// File Name: armCOMM_BitDec_s.h -;// OpenMAX DL: v1.0.2 -;// Revision: 9641 -;// Date: Thursday, February 7, 2008 -;// -;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. -;// -;// -;// -;// OpenMAX optimized bitstream decode module -;// -;// You must include armCOMM_s.h before including this file -;// -;// This module provides macros to perform assembly optimized fixed and -;// variable length decoding from a read-only bitstream. The variable -;// length decode modules take as input a pointer to a table of 16-bit -;// entries of the following format. -;// -;// VLD Table Entry format -;// -;// 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 -;// +------------------------------------------------+ -;// | Len | Symbol | 1 | -;// +------------------------------------------------+ -;// | Offset | 0 | -;// +------------------------------------------------+ -;// -;// If the table entry is a leaf entry then bit 0 set: -;// Len = Number of bits overread (0 to 7) -;// Symbol = Symbol payload (unsigned 12 bits) -;// -;// If the table entry is an internal node then bit 0 is clear: -;// Offset = Number of (16-bit) half words from the table -;// start to the next table node -;// -;// The table is accessed by successive lookup up on the -;// next Step bits of the input bitstream until a leaf node -;// is obtained. The Step sizes are supplied to the VLD macro. -;// -;// USAGE: -;// -;// To use any of the macros in this package, first call: -;// -;// M_BD_INIT ppBitStream, pBitOffset, pBitStream, RBitBuffer, RBitCount, Tmp -;// -;// This caches the current bitstream position and next available -;// bits in registers pBitStream, RBitBuffer, RBitCount. These registers -;// are reserved for use by the bitstream decode package until you -;// call M_BD_FINI. -;// -;// Next call the following macro(s) as many times as you need: -;// -;// M_BD_LOOK8 - Look ahead constant 1<=N<=8 bits into the bitstream -;// M_BD_LOOK16 - Look ahead constant 1<=N<=16 bits into the bitstream -;// M_BD_READ8 - Read constant 1<=N<=8 bits from the bitstream -;// M_BD_READ16 - Read constant 1<=N<=16 bits from the bitstream -;// M_BD_VREAD8 - Read variable 1<=N<=8 bits from the bitstream -;// M_BD_VREAD16 - Read variable 1<=N<=16 bits from the bitstream -;// M_BD_VLD - Perform variable length decode using lookup table -;// -;// Finally call the macro: -;// -;// M_BD_FINI ppBitStream, pBitOffset -;// -;// This writes the bitstream state back to memory. -;// -;// The three bitstream cache register names are assigned to the following global -;// variables: -;// - - GBLS pBitStream ;// Register name for pBitStream - GBLS BitBuffer ;// Register name for BitBuffer - GBLS BitCount ;// Register name for BitCount - -;// -;// These register variables must have a certain defined state on entry to every bitstream -;// macro (except M_BD_INIT) and on exit from every bitstream macro (except M_BD_FINI). -;// The state may depend on implementation. -;// -;// For the default (ARM11) implementation the following hold: -;// pBitStream - points to the first byte not held in the BitBuffer -;// BitBuffer - is a cache of (4 bytes) 32 bits, bit 31 the first bit -;// BitCount - is offset (from the top bit) to the next unused bitstream bit -;// 0<=BitCount<=15 (so BitBuffer holds at least 17 unused bits) -;// -;// - - ;// Bitstream Decode initialise - ;// - ;// Initialises the bitstream decode global registers from - ;// bitstream pointers. This macro is split into 3 parts to enable - ;// scheduling. - ;// - ;// Input Registers: - ;// - ;// $ppBitStream - pointer to pointer to the next bitstream byte - ;// $pBitOffset - pointer to the number of bits used in the current byte (0..7) - ;// $RBitStream - register to use for pBitStream (can be $ppBitStream) - ;// $RBitBuffer - register to use for BitBuffer - ;// $RBitCount - register to use for BitCount (can be $pBitOffset) - ;// - ;// Output Registers: - ;// - ;// $T1,$T2,$T3 - registers that must be preserved between calls to - ;// M_BD_INIT1 and M_BD_INIT2 - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_INIT0 $ppBitStream, $pBitOffset, $RBitStream, $RBitBuffer, $RBitCount - -pBitStream SETS "$RBitStream" -BitBuffer SETS "$RBitBuffer" -BitCount SETS "$RBitCount" - - ;// load inputs - LDR $pBitStream, [$ppBitStream] - LDR $BitCount, [$pBitOffset] - MEND - - MACRO - M_BD_INIT1 $T1, $T2, $T3 - LDRB $T2, [$pBitStream, #2] - LDRB $T1, [$pBitStream, #1] - LDRB $BitBuffer, [$pBitStream], #3 - ADD $BitCount, $BitCount, #8 - MEND - - MACRO - M_BD_INIT2 $T1, $T2, $T3 - ORR $T2, $T2, $T1, LSL #8 - ORR $BitBuffer, $T2, $BitBuffer, LSL #16 - MEND - - ;// - ;// Look ahead fixed 1<=N<=8 bits without consuming any bits - ;// The next bits will be placed at bit 31..24 of destination register - ;// - ;// Input Registers: - ;// - ;// $N - number of bits to look - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - the next N bits of the bitstream - ;// $T1 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_LOOK8 $Symbol, $N - ASSERT ($N>=1):LAND:($N<=8) - MOV $Symbol, $BitBuffer, LSL $BitCount - MEND - - ;// - ;// Look ahead fixed 1<=N<=16 bits without consuming any bits - ;// The next bits will be placed at bit 31..16 of destination register - ;// - ;// Input Registers: - ;// - ;// $N - number of bits to look - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - the next N bits of the bitstream - ;// $T1 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_LOOK16 $Symbol, $N, $T1 - ASSERT ($N >= 1):LAND:($N <= 16) - MOV $Symbol, $BitBuffer, LSL $BitCount - MEND - - ;// - ;// Skips fixed 1<=N<=8 bits from the bitstream, advancing the bitstream pointer - ;// - ;// Input Registers: - ;// - ;// $N - number of bits - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $T1 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_SKIP8 $N, $T1 - ASSERT ($N>=1):LAND:($N<=8) - SUBS $BitCount, $BitCount, #(8-$N) - LDRCSB $T1, [$pBitStream], #1 - ADDCC $BitCount, $BitCount, #8 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - MEND - - - ;// - ;// Read fixed 1<=N<=8 bits from the bitstream, advancing the bitstream pointer - ;// - ;// Input Registers: - ;// - ;// $N - number of bits to read - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - the next N bits of the bitstream - ;// $T1 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_READ8 $Symbol, $N, $T1 - ASSERT ($N>=1):LAND:($N<=8) - MOVS $Symbol, $BitBuffer, LSL $BitCount - SUBS $BitCount, $BitCount, #(8-$N) - LDRCSB $T1, [$pBitStream], #1 - ADDCC $BitCount, $BitCount, #8 - MOV $Symbol, $Symbol, LSR #(32-$N) - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - MEND - - ;// - ;// Read fixed 1<=N<=16 bits from the bitstream, advancing the bitstream pointer - ;// - ;// Input Registers: - ;// - ;// $N - number of bits to read - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - the next N bits of the bitstream - ;// $T1 - corrupted temp/scratch register - ;// $T2 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_READ16 $Symbol, $N, $T1, $T2 - ASSERT ($N>=1):LAND:($N<=16) - ASSERT $Symbol<>$T1 - IF ($N<=8) - M_BD_READ8 $Symbol, $N, $T1 - ELSE - ;// N>8 so we will be able to refill at least one byte - LDRB $T1, [$pBitStream], #1 - MOVS $Symbol, $BitBuffer, LSL $BitCount - ORR $BitBuffer, $T1, $BitBuffer, LSL #8 - SUBS $BitCount, $BitCount, #(16-$N) - LDRCSB $T1, [$pBitStream], #1 - MOV $Symbol, $Symbol, LSR #(32-$N) - ADDCC $BitCount, $BitCount, #8 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - ENDIF - MEND - - ;// - ;// Skip variable 1<=N<=8 bits from the bitstream, advancing the bitstream pointer. - ;// - ;// Input Registers: - ;// - ;// $N - number of bits. 1<=N<=8 - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $T1 - corrupted temp/scratch register - ;// $T2 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_VSKIP8 $N, $T1 - ADD $BitCount, $BitCount, $N - SUBS $BitCount, $BitCount, #8 - LDRCSB $T1, [$pBitStream], #1 - ADDCC $BitCount, $BitCount, #8 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - MEND - - ;// - ;// Skip variable 1<=N<=16 bits from the bitstream, advancing the bitstream pointer. - ;// - ;// Input Registers: - ;// - ;// $N - number of bits. 1<=N<=16 - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $T1 - corrupted temp/scratch register - ;// $T2 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_VSKIP16 $N, $T1, $T2 - ADD $BitCount, $BitCount, $N - SUBS $BitCount, $BitCount, #8 - LDRCSB $T1, [$pBitStream], #1 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - SUBCSS $BitCount, $BitCount, #8 - LDRCSB $T1, [$pBitStream], #1 - ADDCC $BitCount, $BitCount, #8 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - MEND - - ;// - ;// Read variable 1<=N<=8 bits from the bitstream, advancing the bitstream pointer. - ;// - ;// Input Registers: - ;// - ;// $N - number of bits to read. 1<=N<=8 - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - the next N bits of the bitstream - ;// $T1 - corrupted temp/scratch register - ;// $T2 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_VREAD8 $Symbol, $N, $T1, $T2 - MOV $Symbol, $BitBuffer, LSL $BitCount - ADD $BitCount, $BitCount, $N - SUBS $BitCount, $BitCount, #8 - LDRCSB $T1, [$pBitStream], #1 - RSB $T2, $N, #32 - ADDCC $BitCount, $BitCount, #8 - MOV $Symbol, $Symbol, LSR $T2 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - MEND - - - ;// - ;// Read variable 1<=N<=16 bits from the bitstream, advancing the bitstream pointer. - ;// - ;// Input Registers: - ;// - ;// $N - number of bits to read. 1<=N<=16 - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - the next N bits of the bitstream - ;// $T1 - corrupted temp/scratch register - ;// $T2 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_VREAD16 $Symbol, $N, $T1, $T2 - MOV $Symbol, $BitBuffer, LSL $BitCount - ADD $BitCount, $BitCount, $N - SUBS $BitCount, $BitCount, #8 - LDRCSB $T1, [$pBitStream], #1 - RSB $T2, $N, #32 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - SUBCSS $BitCount, $BitCount, #8 - LDRCSB $T1, [$pBitStream], #1 - ADDCC $BitCount, $BitCount, #8 - MOV $Symbol, $Symbol, LSR $T2 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - MEND - - - ;// - ;// Decode a code of the form 0000...001 where there - ;// are N zeros before the 1 and N<=15 (code length<=16) - ;// - ;// Input Registers: - ;// - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - the number of zeros before the next 1 - ;// >=16 is an illegal code - ;// $T1 - corrupted temp/scratch register - ;// $T2 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_CLZ16 $Symbol, $T1, $T2 - MOVS $Symbol, $BitBuffer, LSL $BitCount - CLZ $Symbol, $Symbol - ADD $BitCount, $BitCount, $Symbol - SUBS $BitCount, $BitCount, #7 ;// length is Symbol+1 - LDRCSB $T1, [$pBitStream], #1 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - SUBCSS $BitCount, $BitCount, #8 - LDRCSB $T1, [$pBitStream], #1 - ADDCC $BitCount, $BitCount, #8 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - MEND - - ;// - ;// Decode a code of the form 1111...110 where there - ;// are N ones before the 0 and N<=15 (code length<=16) - ;// - ;// Input Registers: - ;// - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - the number of zeros before the next 1 - ;// >=16 is an illegal code - ;// $T1 - corrupted temp/scratch register - ;// $T2 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_CLO16 $Symbol, $T1, $T2 - MOV $Symbol, $BitBuffer, LSL $BitCount - MVN $Symbol, $Symbol - CLZ $Symbol, $Symbol - ADD $BitCount, $BitCount, $Symbol - SUBS $BitCount, $BitCount, #7 ;// length is Symbol+1 - LDRCSB $T1, [$pBitStream], #1 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - SUBCSS $BitCount, $BitCount, #8 - LDRCSB $T1, [$pBitStream], #1 - ADDCC $BitCount, $BitCount, #8 - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 - MEND - - - ;// - ;// Variable Length Decode module - ;// - ;// Decodes one VLD Symbol from a bitstream and refill the bitstream - ;// buffer. - ;// - ;// Input Registers: - ;// - ;// $pVLDTable - pointer to VLD decode table of 16-bit entries. - ;// The format is described above at the start of - ;// this file. - ;// $S0 - The number of bits to look up for the first step - ;// 1<=$S0<=8 - ;// $S1 - The number of bits to look up for each subsequent - ;// step 1<=$S1<=$S0. - ;// - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $Symbol - decoded VLD symbol value - ;// $T1 - corrupted temp/scratch register - ;// $T2 - corrupted temp/scratch register - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_VLD $Symbol, $T1, $T2, $pVLDTable, $S0, $S1 - ASSERT (1<=$S0):LAND:($S0<=8) - ASSERT (1<=$S1):LAND:($S1<=$S0) - - ;// Note 0<=BitCount<=15 on entry and exit - - MOVS $T1, $BitBuffer, LSL $BitCount ;// left align next bits - MOVS $Symbol, #(2<<$S0)-2 ;// create mask - AND $Symbol, $Symbol, $T1, LSR #(31-$S0) ;// 2*(next $S0 bits) - SUBS $BitCount, $BitCount, #8 ;// CS if buffer can be filled -01 - LDRCSB $T1, [$pBitStream], #1 ;// load refill byte - LDRH $Symbol, [$pVLDTable, $Symbol] ;// load table entry - ADDCC $BitCount, $BitCount, #8 ;// refill not possible - ADD $BitCount, $BitCount, #$S0 ;// assume $S0 bits used - ORRCS $BitBuffer, $T1, $BitBuffer, LSL #8 ;// merge in refill byte - MOVS $T1, $Symbol, LSR #1 ;// CS=leaf entry - BCS %FT02 - - MOVS $T1, $BitBuffer, LSL $BitCount ;// left align next bit - IF (2*$S0-$S1<=8) - ;// Can combine refill check and -S0+S1 and keep $BitCount<=15 - SUBS $BitCount, $BitCount, #8+($S0-$S1) - ELSE - ;// Separate refill check and -S0+S1 offset - SUBS $BitCount, $BitCount, #8 - SUB $BitCount, $BitCount, #($S0-$S1) - ENDIF - ADD $Symbol, $Symbol, $T1, LSR #(31-$S1) ;// add 2*(next $S1 bits) to - BIC $Symbol, $Symbol, #1 ;// table offset - B %BT01 ;// load next table entry -02 - ;// BitCount range now depend on the route here - ;// if (first step) S0 <= BitCount <= 7+S0 <=15 - ;// else if (2*S0-S1<=8) S0 <= BitCount <= 7+(2*S0-S1) <=15 - ;// else S1 <= BitCount <= 7+S1 <=15 - - SUB $BitCount, $BitCount, $Symbol, LSR#13 - BIC $Symbol, $T1, #0xF000 - MEND - - - ;// Add an offset number of bits - ;// - ;// Outputs destination byte and bit index values which corresponds to an offset number of bits - ;// from the current location. This is used to compare bitstream positions using. M_BD_CMP. - ;// - ;// Input Registers: - ;// - ;// $Offset - Offset to be added in bits. - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $ByteIndex - Destination pBitStream pointer after adding the Offset. - ;// This value will be 4 byte ahead and needs to subtract by 4 to get exact - ;// pointer (as in M_BD_FINI). But for using with M_BD_CMP subtract is not needed. - ;// $BitIndex - Destination BitCount after the addition of Offset number of bits - ;// - MACRO - M_BD_ADD $ByteIndex, $BitIndex, $Offset - - ;// ($ByteIndex,$BitIndex) = Current position + $Offset bits - ADD $Offset, $Offset, $BitCount - AND $BitIndex, $Offset, #7 - ADD $ByteIndex, $pBitStream, $Offset, ASR #3 - MEND - - ;// Move bitstream pointers to the location given - ;// - ;// Outputs destination byte and bit index values which corresponds to - ;// the current location given (calculated using M_BD_ADD). - ;// - ;// Input Registers: - ;// - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// $ByteIndex - Destination pBitStream pointer after move. - ;// This value will be 4 byte ahead and needs to subtract by 4 to get exact - ;// pointer (as in M_BD_FINI). - ;// $BitIndex - Destination BitCount after the move - ;// - ;// Output Registers: - ;// - ;// $pBitStream \ - ;// } See description above. - ;// $BitCount / - ;// - MACRO - M_BD_MOV $ByteIndex, $BitIndex - - ;// ($pBitStream, $Offset) = ($ByteIndex,$BitIndex) - MOV $BitCount, $BitIndex - MOV $pBitStream, $ByteIndex - MEND - - ;// Bitstream Compare - ;// - ;// Compares bitstream position with that of a destination position. Destination position - ;// is held in two input registers which are calculated using M_BD_ADD macro - ;// - ;// Input Registers: - ;// - ;// $ByteIndex - Destination pBitStream pointer, (4 byte ahead as described in M_BD_ADD) - ;// $BitIndex - Destination BitCount - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// FLAGS - GE if destination is reached, LT = is destination is ahead - ;// $T1 - corrupted temp/scratch register - ;// - MACRO - M_BD_CMP $ByteIndex, $BitIndex, $T1 - - ;// Return flags set by (current positon)-($ByteIndex,$BitIndex) - ;// so GE means that we have reached the indicated position - - ADD $T1, $pBitStream, $BitCount, LSR #3 - CMP $T1, $ByteIndex - AND $T1, $BitCount, #7 - CMPEQ $T1, $BitIndex - MEND - - - ;// Bitstream Decode finalise - ;// - ;// Writes back the bitstream state to the bitstream pointers - ;// - ;// Input Registers: - ;// - ;// $pBitStream \ - ;// $BitBuffer } See description above. - ;// $BitCount / - ;// - ;// Output Registers: - ;// - ;// $ppBitStream - pointer to pointer to the next bitstream byte - ;// $pBitOffset - pointer to the number of bits used in the current byte (0..7) - ;// $pBitStream \ - ;// $BitBuffer } these register are corrupted - ;// $BitCount / - ;// - MACRO - M_BD_FINI $ppBitStream, $pBitOffset - - ;// Advance pointer by the number of free bits in the buffer - ADD $pBitStream, $pBitStream, $BitCount, LSR#3 - AND $BitCount, $BitCount, #7 - - ;// Now move back 32 bits to reach the first usued bit - SUB $pBitStream, $pBitStream, #4 - - ;// Store out bitstream state - STR $BitCount, [$pBitOffset] - STR $pBitStream, [$ppBitStream] - MEND - - END -
\ No newline at end of file |