armCOMM_Bitstream.h revision 78e52bfac041d71ce53b5b13c2abf78af742b09d
1/*
2 * Copyright (C) 2007-2008 ARM Limited
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17/**
18 *
19 * File Name:  armCOMM_Bitstream.h
20 * OpenMAX DL: v1.0.2
21 * Revision:   9641
22 * Date:       Thursday, February 7, 2008
23 *
24 *
25 *
26 *
27 * File: armCOMM_Bitstream.h
28 * Brief: Declares common API's/Data types used across the OpenMax Encoders/Decoders.
29 *
30 */
31
32#ifndef _armCodec_H_
33#define _armCodec_H_
34
35#include "omxtypes.h"
36
37typedef struct {
38    OMX_U8   codeLen;
39    OMX_U32	 codeWord;
40} ARM_VLC32;
41
42/* The above should be renamed as "ARM_VLC32" */
43
44/**
45 * Function: armLookAheadBits()
46 *
47 * Description:
48 * Get the next N bits from the bitstream without advancing the bitstream pointer
49 *
50 * Parameters:
51 * [in]     **ppBitStream
52 * [in]     *pOffset
53 * [in]     N=1...32
54 *
55 * Returns  Value
56 */
57
58OMX_U32 armLookAheadBits(const OMX_U8 **ppBitStream, OMX_INT *pOffset, OMX_INT N);
59
60/**
61 * Function: armGetBits()
62 *
63 * Description:
64 * Read N bits from the bitstream
65 *
66 * Parameters:
67 * [in]     *ppBitStream
68 * [in]     *pOffset
69 * [in]     N=1..32
70 *
71 * [out]    *ppBitStream
72 * [out]    *pOffset
73 * Returns  Value
74 */
75
76OMX_U32 armGetBits(const OMX_U8 **ppBitStream, OMX_INT *pOffset, OMX_INT N);
77
78/**
79 * Function: armByteAlign()
80 *
81 * Description:
82 * Align the pointer *ppBitStream to the next byte boundary
83 *
84 * Parameters:
85 * [in]     *ppBitStream
86 * [in]     *pOffset
87 *
88 * [out]    *ppBitStream
89 * [out]    *pOffset
90 *
91 **/
92
93OMXVoid armByteAlign(const OMX_U8 **ppBitStream,OMX_INT *pOffset);
94
95/**
96 * Function: armSkipBits()
97 *
98 * Description:
99 * Skip N bits from the value at *ppBitStream
100 *
101 * Parameters:
102 * [in]     *ppBitStream
103 * [in]     *pOffset
104 * [in]     N
105 *
106 * [out]    *ppBitStream
107 * [out]    *pOffset
108 *
109 **/
110
111OMXVoid armSkipBits(const OMX_U8 **ppBitStream,OMX_INT *pOffset,OMX_INT N);
112
113/***************************************
114 * Variable bit length Decode
115 ***************************************/
116
117/**
118 * Function: armUnPackVLC32()
119 *
120 * Description:
121 * Variable length decode of variable length symbol (max size 32 bits) read from
122 * the bit stream pointed by *ppBitStream at *pOffset by using the table
123 * pointed by pCodeBook
124 *
125 * Parameters:
126 * [in]     **ppBitStream
127 * [in]     *pOffset
128 * [in]     pCodeBook
129 *
130 * [out]    **ppBitStream
131 * [out]    *pOffset
132 *
133 * Returns : Code Book Index if successfull.
134 *         : "ARM_NO_CODEBOOK_INDEX = 0xFFFF" if search fails.
135 **/
136
137#define ARM_NO_CODEBOOK_INDEX (OMX_U16)(0xFFFF)
138
139OMX_U16 armUnPackVLC32(
140    const OMX_U8 **ppBitStream,
141    OMX_INT *pOffset,
142    const ARM_VLC32 *pCodeBook
143);
144
145/***************************************
146 * Fixed bit length Encode
147 ***************************************/
148
149/**
150 * Function: armPackBits
151 *
152 * Description:
153 * Pack a VLC code word into the bitstream
154 *
155 * Remarks:
156 *
157 * Parameters:
158 * [in]	ppBitStream		pointer to the pointer to the current byte
159 *                      in the bit stream.
160 * [in]	pOffset	        pointer to the bit position in the byte
161 *                      pointed by *ppBitStream. Valid within 0
162 *                      to 7.
163 * [in]	codeWord		Code word that need to be inserted in to the
164 *                          bitstream
165 * [in]	codeLength		Length of the code word valid range 1...32
166 *
167 * [out] ppBitStream	*ppBitStream is updated after the block is encoded,
168 *	                        so that it points to the current byte in the bit
169 *							stream buffer.
170 * [out] pBitOffset		*pBitOffset is updated so that it points to the
171 *							current bit position in the byte pointed by
172 *							*ppBitStream.
173 *
174 * Return Value:
175 * Standard OMX_RESULT result. See enumeration for possible result codes.
176 *
177 */
178
179OMXResult armPackBits (
180    OMX_U8  **ppBitStream,
181    OMX_INT *pOffset,
182    OMX_U32 codeWord,
183    OMX_INT codeLength
184);
185
186/***************************************
187 * Variable bit length Encode
188 ***************************************/
189
190/**
191 * Function: armPackVLC32
192 *
193 * Description:
194 * Pack a VLC code word into the bitstream
195 *
196 * Remarks:
197 *
198 * Parameters:
199 * [in]	ppBitStream		pointer to the pointer to the current byte
200 *                      in the bit stream.
201 * [in]	pBitOffset	    pointer to the bit position in the byte
202 *                      pointed by *ppBitStream. Valid within 0
203 *                      to 7.
204 * [in]	 code     		VLC code word that need to be inserted in to the
205 *                      bitstream
206 *
207 * [out] ppBitStream	*ppBitStream is updated after the block is encoded,
208 *	                    so that it points to the current byte in the bit
209 *						stream buffer.
210 * [out] pBitOffset		*pBitOffset is updated so that it points to the
211 *						current bit position in the byte pointed by
212 *						*ppBitStream.
213 *
214 * Return Value:
215 * Standard OMX_RESULT result. See enumeration for possible result codes.
216 *
217 */
218
219OMXResult armPackVLC32 (
220    OMX_U8 **ppBitStream,
221    OMX_INT *pBitOffset,
222    ARM_VLC32 code
223);
224
225#endif      /*_armCodec_H_*/
226
227/*End of File*/
228