|
Lines 492-497
Link Here
|
| 492 |
{ |
492 |
{ |
| 493 |
void * start; |
493 |
void * start; |
| 494 |
size_t length; |
494 |
size_t length; |
|
|
495 |
#if !defined (HAVE_POSIX_MEMALIGN) && !defined (HAVE_MEMALIGN) |
| 496 |
void * free; |
| 497 |
#endif |
| 495 |
}; |
498 |
}; |
| 496 |
|
499 |
|
| 497 |
struct demux_sys_t |
500 |
struct demux_sys_t |
|
Lines 1038-1044
Link Here
|
| 1038 |
switch( p_sys->io ) |
1041 |
switch( p_sys->io ) |
| 1039 |
{ |
1042 |
{ |
| 1040 |
case IO_METHOD_READ: |
1043 |
case IO_METHOD_READ: |
| 1041 |
free( p_sys->p_buffers[0].start ); |
1044 |
#if !defined (HAVE_POSIX_MEMALIGN) && !defined (HAVE_MEMALIGN) |
|
|
1045 |
if (p_sys->p_buffers[0].free) |
| 1046 |
free( p_sys->p_buffers[0].free ); |
| 1047 |
else |
| 1048 |
#endif |
| 1049 |
free( p_sys->p_buffers[0].start ); |
| 1042 |
break; |
1050 |
break; |
| 1043 |
|
1051 |
|
| 1044 |
case IO_METHOD_MMAP: |
1052 |
case IO_METHOD_MMAP: |
|
Lines 1054-1060
Link Here
|
| 1054 |
case IO_METHOD_USERPTR: |
1062 |
case IO_METHOD_USERPTR: |
| 1055 |
for( i = 0; i < p_sys->i_nbuffers; ++i ) |
1063 |
for( i = 0; i < p_sys->i_nbuffers; ++i ) |
| 1056 |
{ |
1064 |
{ |
| 1057 |
free( p_sys->p_buffers[i].start ); |
1065 |
#if !defined (HAVE_POSIX_MEMALIGN) && !defined (HAVE_MEMALIGN) |
|
|
1066 |
if (p_sys->p_buffers[0].free) |
| 1067 |
free( p_sys->p_buffers[i].free ); |
| 1068 |
else |
| 1069 |
#endif |
| 1070 |
free( p_sys->p_buffers[i].start ); |
| 1058 |
} |
1071 |
} |
| 1059 |
break; |
1072 |
break; |
| 1060 |
|
1073 |
|
|
Lines 1600-1609
Link Here
|
| 1600 |
|
1613 |
|
| 1601 |
for( p_sys->i_nbuffers = 0; p_sys->i_nbuffers < 4; ++p_sys->i_nbuffers ) |
1614 |
for( p_sys->i_nbuffers = 0; p_sys->i_nbuffers < 4; ++p_sys->i_nbuffers ) |
| 1602 |
{ |
1615 |
{ |
|
|
1616 |
#if defined (HAVE_POSIX_MEMALIGN) |
| 1603 |
p_sys->p_buffers[p_sys->i_nbuffers].length = i_buffer_size; |
1617 |
p_sys->p_buffers[p_sys->i_nbuffers].length = i_buffer_size; |
| 1604 |
if( posix_memalign( &p_sys->p_buffers[p_sys->i_nbuffers].start, |
1618 |
if( posix_memalign( &p_sys->p_buffers[p_sys->i_nbuffers].start, |
| 1605 |
/* boundary */ i_page_size, i_buffer_size ) ) |
1619 |
/* boundary */ i_page_size, i_buffer_size ) ) |
| 1606 |
goto open_failed; |
1620 |
goto open_failed; |
|
|
1621 |
#elif defined (HAVE_MEMALIGN) |
| 1622 |
p_sys->p_buffers[p_sys->i_nbuffers].length = i_buffer_size; |
| 1623 |
p_sys->p_buffers[p_sys->i_nbuffers].start = |
| 1624 |
memalign ( /* boundary */ i_page_size, i_buffer_size ); |
| 1625 |
if (p_sys->p_buffers[p_sys->i_nbuffers].start == NULL) |
| 1626 |
goto open_failed; |
| 1627 |
#else |
| 1628 |
unsigned char *ptr; |
| 1629 |
size_t align = i_page_size - 1; |
| 1630 |
|
| 1631 |
p_sys->p_buffers[p_sys->i_nbuffers].length = i_buffer_size; |
| 1632 |
ptr = malloc (i_buffer_size + align); |
| 1633 |
if ( ptr == NULL ) |
| 1634 |
goto open_failed; |
| 1635 |
|
| 1636 |
p_sys->p_buffers[p_sys->i_nbuffers].free = ptr; |
| 1637 |
ptr += align; |
| 1638 |
p_sys->p_buffers[p_sys->i_nbuffers].start = |
| 1639 |
(void *)(((uintptr_t)ptr) & ~align); |
| 1640 |
#endif |
| 1607 |
} |
1641 |
} |
| 1608 |
|
1642 |
|
| 1609 |
return VLC_SUCCESS; |
1643 |
return VLC_SUCCESS; |