| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /*------------------------------------------------------------------------------ |
| |
| Table of contents |
| |
| 1. Include headers |
| 2. Module defines |
| 3. Data types |
| 4. Function prototypes |
| |
| ------------------------------------------------------------------------------*/ |
| |
| #ifndef H264SWDEC_UTIL_H |
| #define H264SWDEC_UTIL_H |
| |
| /*------------------------------------------------------------------------------ |
| 1. Include headers |
| ------------------------------------------------------------------------------*/ |
| |
| #ifdef _ASSERT_USED |
| #include <assert.h> |
| #endif |
| |
| #include "H264SwDecApi.h" |
| |
| #if defined(_RANGE_CHECK) || defined(_DEBUG_PRINT) || defined(_ERROR_PRINT) |
| #include <stdio.h> |
| #endif |
| |
| #include <stdint.h> |
| #include "basetype.h" |
| #include "h264bsd_stream.h" |
| #include "h264bsd_image.h" |
| |
| /*------------------------------------------------------------------------------ |
| 2. Module defines |
| ------------------------------------------------------------------------------*/ |
| |
| #define HANTRO_OK 0 |
| #define HANTRO_NOK 1 |
| |
| #define HANTRO_TRUE (1) |
| #define HANTRO_FALSE (0) |
| |
| #ifndef NULL |
| #define NULL 0 |
| #endif |
| |
| #define MEMORY_ALLOCATION_ERROR 0xFFFF |
| #define PARAM_SET_ERROR 0xFFF0 |
| |
| /* value to be returned by GetBits if stream buffer is empty */ |
| #define END_OF_STREAM 0xFFFFFFFFU |
| |
| #define EMPTY_RESIDUAL_INDICATOR 0xFFFFFF |
| |
| /* macro to mark a residual block empty, i.e. contain zero coefficients */ |
| #define MARK_RESIDUAL_EMPTY(residual) ((residual)[0] = EMPTY_RESIDUAL_INDICATOR) |
| /* macro to check if residual block is empty */ |
| #define IS_RESIDUAL_EMPTY(residual) ((residual)[0] == EMPTY_RESIDUAL_INDICATOR) |
| |
| /* macro for assertion, used only if compiler flag _ASSERT_USED is defined */ |
| #ifdef _ASSERT_USED |
| #define ASSERT(expr) assert(expr) |
| #else |
| #define ASSERT(expr) |
| #endif |
| |
| /* macro for range checking an value, used only if compiler flag _RANGE_CHECK |
| * is defined */ |
| #ifdef _RANGE_CHECK |
| #define RANGE_CHECK(value, minBound, maxBound) \ |
| { \ |
| if ((value) < (minBound) || (value) > (maxBound)) \ |
| fprintf(stderr, "Warning: Value exceeds given limit(s)!\n"); \ |
| } |
| #else |
| #define RANGE_CHECK(value, minBound, maxBound) |
| #endif |
| |
| /* macro for range checking an array, used only if compiler flag _RANGE_CHECK |
| * is defined */ |
| #ifdef _RANGE_CHECK |
| #define RANGE_CHECK_ARRAY(array, minBound, maxBound, length) \ |
| { \ |
| i32 i; \ |
| for (i = 0; i < (length); i++) \ |
| if ((array)[i] < (minBound) || (array)[i] > (maxBound)) \ |
| fprintf(stderr,"Warning: Value [%d] exceeds given limit(s)!\n",i); \ |
| } |
| #else |
| #define RANGE_CHECK_ARRAY(array, minBound, maxBound, length) |
| #endif |
| |
| /* macro for debug printing, used only if compiler flag _DEBUG_PRINT is |
| * defined */ |
| #ifdef _DEBUG_PRINT |
| #define DEBUG(args) printf args |
| #else |
| #define DEBUG(args) |
| #endif |
| |
| /* macro for error printing, used only if compiler flag _ERROR_PRINT is |
| * defined */ |
| #ifdef _ERROR_PRINT |
| #define EPRINT(msg) fprintf(stderr,"ERROR: %s\n",msg) |
| #else |
| #define EPRINT(msg) |
| #endif |
| |
| /* macro to get smaller of two values */ |
| #define MIN(a, b) (((a) < (b)) ? (a) : (b)) |
| |
| /* macro to get greater of two values */ |
| #define MAX(a, b) (((a) > (b)) ? (a) : (b)) |
| |
| /* macro to get absolute value */ |
| #define ABS(a) (((a) < 0) ? -(a) : (a)) |
| |
| /* macro to clip a value z, so that x <= z =< y */ |
| #define CLIP3(x,y,z) (((z) < (x)) ? (x) : (((z) > (y)) ? (y) : (z))) |
| |
| /* macro to clip a value z, so that 0 <= z =< 255 */ |
| #define CLIP1(z) (((z) < 0) ? 0 : (((z) > 255) ? 255 : (z))) |
| |
| /* macro to allocate memory */ |
| #define ALLOCATE(ptr, count, type) \ |
| { \ |
| (ptr) = H264SwDecMalloc(sizeof(type), (count)); \ |
| } |
| |
| /* macro to free allocated memory */ |
| #define FREE(ptr) \ |
| { \ |
| H264SwDecFree((ptr)); (ptr) = NULL; \ |
| } |
| |
| #define ALIGN(ptr, bytePos) \ |
| ((ptr) + ( (((bytePos) - (uintptr_t)(ptr)) & ((bytePos) - 1)) / sizeof(*(ptr)) )) |
| |
| extern const u32 h264bsdQpC[52]; |
| |
| /*------------------------------------------------------------------------------ |
| 3. Data types |
| ------------------------------------------------------------------------------*/ |
| |
| /*------------------------------------------------------------------------------ |
| 4. Function prototypes |
| ------------------------------------------------------------------------------*/ |
| #ifndef H264DEC_NEON |
| u32 h264bsdCountLeadingZeros(u32 value, u32 length); |
| #else |
| u32 h264bsdCountLeadingZeros(u32 value); |
| #endif |
| u32 h264bsdRbspTrailingBits(strmData_t *strmData); |
| |
| u32 h264bsdMoreRbspData(strmData_t *strmData); |
| |
| u32 h264bsdNextMbAddress(u32 *pSliceGroupMap, u32 picSizeInMbs, u32 currMbAddr); |
| |
| void h264bsdSetCurrImageMbPointers(image_t *image, u32 mbNum); |
| |
| #endif /* #ifdef H264SWDEC_UTIL_H */ |
| |