1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
;/**
; *
; * File Name: omxVCM4P2_DecodeVLCZigzag_Inter_s.s
; * OpenMAX DL: v1.0.2
; * Revision: 9641
; * Date: Thursday, February 7, 2008
; *
; * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
; *
; *
; *
; * Description:
; * Contains modules for zigzag scanning and VLC decoding
; * for inter block.
; *
; *
; *
; * Function: omxVCM4P2_DecodeVLCZigzag_Inter
; *
; * Description:
; * Performs VLC decoding and inverse zigzag scan for one inter coded block.
; *
; * Remarks:
; *
; * Parameters:
; * [in] ppBitStream pointer to the pointer to the current byte in
; * the bitstream buffer
; * [in] pBitOffset pointer to the bit position in the byte pointed
; * to by *ppBitStream. *pBitOffset is valid within [0-7].
; * [in] shortVideoHeader binary flag indicating presence of short_video_header;
; * escape modes 0-3 are used if shortVideoHeader==0,
; * and escape mode 4 is used when shortVideoHeader==1.
; * [out] ppBitStream *ppBitStream is updated after the block is
; * decoded, so that it points to the current byte
; * in the bit stream buffer
; * [out] pBitOffset *pBitOffset is updated so that it points to the
; * current bit position in the byte pointed by
; * *ppBitStream
; * [out] pDst pointer to the coefficient buffer of current
; * block. Must be 16-byte aligned
; *
; * Return Value:
; * OMX_Sts_BadArgErr - bad arguments
; * -At least one of the following pointers is NULL: ppBitStream, *ppBitStream, pBitOffset, pDst, or
; * -pDst is not 16-byte aligned, or
; * -*pBitOffset exceeds [0,7].
; * OMX_Sts_Err - status error
; * -At least one mark bit is equal to zero
; * -Encountered an illegal stream code that cannot be found in the VLC table
; * -Encountered and illegal code in the VLC FLC table
; * -The number of coefficients is greater than 64
; *
; */
INCLUDE omxtypes_s.h
INCLUDE armCOMM_s.h
INCLUDE armCOMM_BitDec_s.h
M_VARIANTS ARM1136JS
IF ARM1136JS
;// Import various tables needed for the function
IMPORT armVCM4P2_InterVlcL0L1 ;// Contains optimized and packed VLC Tables for both Last =1 and last=0
;// Packed in Run:Level:Last format
IMPORT armVCM4P2_InterL0L1LMAX ;// Contains LMAX table entries with both Last=0 and Last=1
IMPORT armVCM4P2_InterL0L1RMAX ;// Contains RMAX table entries with both Last=0 and Last=1
IMPORT armVCM4P2_aClassicalZigzagScan ;// contains classical Zigzag table entries with double the original values
IMPORT armVCM4P2_DecodeVLCZigzag_AC_unsafe
;//Input Arguments
ppBitStream RN 0
pBitOffset RN 1
pDst RN 2
shortVideoHeader RN 3
;//Local Variables
Return RN 0
pVlcTableL0L1 RN 4
pLMAXTableL0L1 RN 4
pRMAXTableL0L1 RN 4
pZigzagTable RN 4
Count RN 6
;// Allocate stack memory to store the VLC,Zigzag,LMAX and RMAX tables
M_ALLOC4 ppVlcTableL0L1,4
M_ALLOC4 ppLMAXTableL0L1,4
M_ALLOC4 ppRMAXTableL0L1,4
M_ALLOC4 ppZigzagTable,4
M_START omxVCM4P2_DecodeVLCZigzag_Inter,r12
LDR pZigzagTable, =armVCM4P2_aClassicalZigzagScan ;// Load zigzag table
M_STR pZigzagTable,ppZigzagTable ;// Store zigzag table on stack to pass as argument to unsafe function
LDR pVlcTableL0L1, =armVCM4P2_InterVlcL0L1 ;// Load optimized VLC table with both L=0 and L=1 entries
M_STR pVlcTableL0L1,ppVlcTableL0L1 ;// Store optimized VLC table address on stack
LDR pLMAXTableL0L1, =armVCM4P2_InterL0L1LMAX ;// Load Interleaved L=0 and L=1 LMAX Tables
M_STR pLMAXTableL0L1,ppLMAXTableL0L1 ;// Store LMAX table address on stack
LDR pRMAXTableL0L1, =armVCM4P2_InterL0L1RMAX ;// Load Interleaved L=0 and L=1 RMAX Tables
MOV Count,#0 ;// set start=0
M_STR pRMAXTableL0L1,ppRMAXTableL0L1 ;// store RMAX table address on stack
BL armVCM4P2_DecodeVLCZigzag_AC_unsafe ;// call Unsafe Function for VLC Zigzag Decoding
M_END
ENDIF
END
|