PageRenderTime 7ms CodeModel.GetById 1ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/H264Dec/source/h264bsd_util.h

http://github.com/mbebenita/Broadway
C Header | 178 lines | 86 code | 36 blank | 56 comment | 8 complexity | 5f1adbe1c6732a7c538c0f4b415b39f9 MD5 | raw file
  1/*
  2 * Copyright (C) 2009 The Android Open Source Project
  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    Table of contents
 20
 21    1. Include headers
 22    2. Module defines
 23    3. Data types
 24    4. Function prototypes
 25
 26------------------------------------------------------------------------------*/
 27
 28#ifndef H264SWDEC_UTIL_H
 29#define H264SWDEC_UTIL_H
 30
 31/*------------------------------------------------------------------------------
 32    1. Include headers
 33------------------------------------------------------------------------------*/
 34
 35#ifdef _ASSERT_USED
 36#include <assert.h>
 37#endif
 38
 39#include "H264SwDecApi.h"
 40
 41#if defined(_RANGE_CHECK) || defined(_DEBUG_PRINT) || defined(_ERROR_PRINT)
 42#include <stdio.h>
 43#endif
 44
 45#include "basetype.h"
 46#include "h264bsd_stream.h"
 47#include "h264bsd_image.h"
 48
 49/*------------------------------------------------------------------------------
 50    2. Module defines
 51------------------------------------------------------------------------------*/
 52
 53#define HANTRO_OK   0
 54#define HANTRO_NOK  1
 55
 56#define HANTRO_TRUE     (1)
 57#define HANTRO_FALSE    (0)
 58
 59#ifndef NULL
 60#define NULL 0
 61#endif
 62
 63#define MEMORY_ALLOCATION_ERROR 0xFFFF
 64#define PARAM_SET_ERROR 0xFFF0
 65
 66/* value to be returned by GetBits if stream buffer is empty */
 67#define END_OF_STREAM 0xFFFFFFFFU
 68
 69#define EMPTY_RESIDUAL_INDICATOR 0xFFFFFF
 70
 71/* macro to mark a residual block empty, i.e. contain zero coefficients */
 72#define MARK_RESIDUAL_EMPTY(residual) ((residual)[0] = EMPTY_RESIDUAL_INDICATOR)
 73/* macro to check if residual block is empty */
 74#define IS_RESIDUAL_EMPTY(residual) ((residual)[0] == EMPTY_RESIDUAL_INDICATOR)
 75
 76/* macro for assertion, used only if compiler flag _ASSERT_USED is defined */
 77#ifdef _ASSERT_USED
 78#define ASSERT(expr) assert(expr)
 79#else
 80#define ASSERT(expr)
 81#endif
 82
 83/* macro for range checking an value, used only if compiler flag _RANGE_CHECK
 84 * is defined */
 85#ifdef _RANGE_CHECK
 86#define RANGE_CHECK(value, minBound, maxBound) \
 87{ \
 88    if ((value) < (minBound) || (value) > (maxBound)) \
 89        fprintf(stderr, "Warning: Value exceeds given limit(s)!\n"); \
 90}
 91#else
 92#define RANGE_CHECK(value, minBound, maxBound)
 93#endif
 94
 95/* macro for range checking an array, used only if compiler flag _RANGE_CHECK
 96 * is defined */
 97#ifdef _RANGE_CHECK
 98#define RANGE_CHECK_ARRAY(array, minBound, maxBound, length) \
 99{ \
100    i32 i; \
101    for (i = 0; i < (length); i++) \
102        if ((array)[i] < (minBound) || (array)[i] > (maxBound)) \
103            fprintf(stderr,"Warning: Value [%d] exceeds given limit(s)!\n",i); \
104}
105#else
106#define RANGE_CHECK_ARRAY(array, minBound, maxBound, length)
107#endif
108
109/* macro for debug printing, used only if compiler flag _DEBUG_PRINT is
110 * defined */
111#ifdef _DEBUG_PRINT
112#define DEBUG(args) printf args
113#else
114#define DEBUG(args)
115#endif
116
117/* macro for error printing, used only if compiler flag _ERROR_PRINT is
118 * defined */
119#ifdef _ERROR_PRINT
120#define EPRINT(msg) fprintf(stderr,"ERROR: %s\n",msg)
121#else
122#define EPRINT(msg)
123#endif
124
125/* macro to get smaller of two values */
126#define MIN(a, b) (((a) < (b)) ? (a) : (b))
127
128/* macro to get greater of two values */
129#define MAX(a, b) (((a) > (b)) ? (a) : (b))
130
131/* macro to get absolute value */
132#define ABS(a) (((a) < 0) ? -(a) : (a))
133
134/* macro to clip a value z, so that x <= z =< y */
135#define CLIP3(x,y,z) (((z) < (x)) ? (x) : (((z) > (y)) ? (y) : (z)))
136
137/* macro to clip a value z, so that 0 <= z =< 255 */
138#define CLIP1(z) (((z) < 0) ? 0 : (((z) > 255) ? 255 : (z)))
139
140/* macro to allocate memory */
141#define ALLOCATE(ptr, count, type) \
142{ \
143    (ptr) = H264SwDecMalloc((count) * sizeof(type)); \
144}
145
146/* macro to free allocated memory */
147#define FREE(ptr) \
148{ \
149    H264SwDecFree((ptr)); (ptr) = NULL; \
150}
151
152#define ALIGN(ptr, bytePos) \
153        (ptr + ( ((bytePos - (int)ptr) & (bytePos - 1)) / sizeof(*ptr) ))
154
155extern const u32 h264bsdQpC[52];
156
157/*------------------------------------------------------------------------------
158    3. Data types
159------------------------------------------------------------------------------*/
160
161/*------------------------------------------------------------------------------
162    4. Function prototypes
163------------------------------------------------------------------------------*/
164#ifndef H264DEC_NEON
165u32 h264bsdCountLeadingZeros(u32 value, u32 length);
166#else
167u32 h264bsdCountLeadingZeros(u32 value);
168#endif
169u32 h264bsdRbspTrailingBits(strmData_t *strmData);
170
171u32 h264bsdMoreRbspData(strmData_t *strmData);
172
173u32 h264bsdNextMbAddress(u32 *pSliceGroupMap, u32 picSizeInMbs, u32 currMbAddr);
174
175void h264bsdSetCurrImageMbPointers(image_t *image, u32 mbNum);
176
177#endif /* #ifdef H264SWDEC_UTIL_H */
178