History

Initial Commit

Ethan Hugg committed 12 years ago

Commit 70e5e621 parent bd509b2308 files · +97095 −-5Browse files

Showing the changes to codec/decoder/core/src/mem_align.cpp (1 of 308 files). Show all

Unified · Split

codec/decoder/core/src/mem_align.cpp+115−0
@@ -0,0 +1,115 @@
1/*!
2 * \copy
3 * Copyright (c) 2013, Cisco Systems
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 *
13 * * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
16 * distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
22 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 */
32
33#include "mem_align.h"
34#include "crt_util_safe_x.h"
35
36namespace WelsDec {
37
38//#define MEMORY_CHECK
39#ifdef MEMORY_CHECK
40
41WelsFileHandle * pMemCheckMalloc = NULL;
42WelsFileHandle * pMemCheckFree = NULL;
43
44int32_t iCountMalloc = 0;
45#endif
46//
47
48/////////////////////////////////////////////////////////////////////////////////
49#define ALIGNBYTES (16)
50/////////////////////////////////////////////////////////////////////////////////
51
52void_t * WelsMalloc( const uint32_t kuiSize, const str_t *kpTag )
53{
54 const int32_t kiSizeVoidPtr = sizeof( void_t ** );
55 const int32_t kiSizeInt = sizeof( int32_t );
56#ifdef HAVE_CACHE_LINE_ALIGN
57 const int32_t kiAlignBytes = ALIGNBYTES - 1;
58#else
59 const int32_t kiAlignBytes = 15;
60#endif// HAVE_CACHE_LINE_ALIGN
61 uint8_t* pBuf = (uint8_t *) malloc( kuiSize + kiAlignBytes + kiSizeVoidPtr + kiSizeInt );
62 uint8_t* pAlignBuf;
63
64#ifdef MEMORY_CHECK
65 if( pMemCheckMalloc == NULL ){
66 pMemCheckMalloc = WelsFopen(".\\mem_check_malloc.txt", "at+");
67 pMemCheckFree = WelsFopen(".\\mem_check_free.txt", "at+");
68 }
69
70 if ( kpTag != NULL )
71 {
72 if ( pMemCheckMalloc != NULL )
73 {
74 fprintf( pMemCheckMalloc, "0x%x, size: %d , malloc %s\n", (void_t *)pBuf, (kuiSize + kiAlignBytes + kiSizeVoidPtr + kiSizeInt), kpTag );
75 }
76 if ( pMemCheckMalloc != NULL )
77 {
78 fflush( pMemCheckMalloc );
79 }
80 }
81#endif
82
83 if ( NULL == pBuf )
84 return NULL;
85
86 // to fill zero values
87 memset( pBuf, 0, kuiSize + kiAlignBytes + kiSizeVoidPtr + kiSizeInt );
88
89 pAlignBuf = pBuf + kiAlignBytes + kiSizeVoidPtr + kiSizeInt;
90 pAlignBuf -= (int32_t) pAlignBuf & kiAlignBytes;
91 *( (void_t **) ( pAlignBuf - kiSizeVoidPtr ) ) = pBuf;
92 *( (int32_t *) ( pAlignBuf - (kiSizeVoidPtr + kiSizeInt) ) ) = kuiSize;
93
94 return (pAlignBuf);
95}
96
97/////////////////////////////////////////////////////////////////////////////
98
99void_t WelsFree( void_t* pPtr, const str_t *kpTag )
100{
101 if( pPtr )
102 {
103#ifdef MEMORY_CHECK
104 if ( NULL != pMemCheckFree && kpTag != NULL )
105 {
106 fprintf( pMemCheckFree, "0x%x, free %s\n", (void_t *)(*( ( ( void_t **) pPtr ) - 1 )), kpTag );
107 fflush( pMemCheckFree );
108 }
109#endif
110 free( *( ( ( void_t **) pPtr ) - 1 ) );
111 }
112}
113
114/////////////////////////////////////////////////////////////////////////////
115} // namespace WelsDec

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t