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