View | Details | Raw Unified | Return to bug 144086
Collapse All | Expand All

(-)modules/access/v4l2.c (-2 / +36 lines)
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;

Return to bug 144086