Disable HdmvSub log.
[xy_vsfilter.git] / src / subtitles / xy_malloc.cpp
bloba9f4e90834203ac2c9a9b7f9d8215f1526e5e5d1
1 /************************************************************************/
2 /* author: xy */
3 /* date: 20110514 */
4 /************************************************************************/
5 #include "xy_malloc.h"
6 #include <stdint.h>
7 #include <malloc.h>
8 #include <string.h>
10 //gathered from x264
11 /****************************************************************************
12 * xy_malloc:
13 ****************************************************************************/
14 void *xy_malloc( int i_size )
16 #ifdef SYS_MACOSX
17 /* Mac OS X always returns 16 bytes aligned memory */
18 return malloc( i_size );
19 #elif defined( HAVE_MALLOC_H )
20 return memalign( 16, i_size );
21 #else
22 uint8_t * buf;
23 uint8_t * align_buf;
24 buf = (uint8_t *) malloc( i_size + 15 + sizeof( void ** ) +
25 sizeof( int ) );
26 align_buf = buf + 15 + sizeof( void ** ) + sizeof( int );
27 align_buf -= (intptr_t) align_buf & 15;
28 *( (void **) ( align_buf - sizeof( void ** ) ) ) = buf;
29 *( (int *) ( align_buf - sizeof( void ** ) - sizeof( int ) ) ) = i_size;
30 return align_buf;
31 #endif
34 /****************************************************************************
35 * xy_free:
36 ****************************************************************************/
37 void xy_free( void *p )
39 if( p )
41 #if defined( HAVE_MALLOC_H ) || defined( SYS_MACOSX )
42 free( p );
43 #else
44 free( *( ( ( void **) p ) - 1 ) );
45 #endif
49 /****************************************************************************
50 * xy_realloc:
51 ****************************************************************************/
52 void *xy_realloc( void *p, int i_size )
54 #ifdef HAVE_MALLOC_H
55 return realloc( p, i_size );
56 #else
57 int i_old_size = 0;
58 uint8_t * p_new;
59 if( p )
61 i_old_size = *( (int*) ( (uint8_t*) p - sizeof( void ** ) -
62 sizeof( int ) ) );
64 p_new = (uint8_t*)xy_malloc( i_size );
65 if( i_old_size > 0 && i_size > 0 )
67 memcpy( p_new, p, ( i_old_size < i_size ) ? i_old_size : i_size );
69 xy_free( p );
70 return p_new;
71 #endif