Changeset 10e4032179794aa614cf029de90dd3d4b66f15f8

Show
Ignore:
Timestamp:
19/08/08 21:13:22 (4 months ago)
Author:
Laurent Aimar <fenrir@videolan.org>
git-committer:
Laurent Aimar <fenrir@videolan.org> 1219173202 +0200
git-parent:

[1e4a18a2156a1bb3743601c0273997a08b56e50a]

git-author:
Laurent Aimar <fenrir@videolan.org> 1219172081 +0200
Message:

Added s32l/b to float conversion support (close #1872).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/audio_filter/converter/float.c

    r9e50567 r10e4032  
    7777static void Do_S24ToFL32( aout_instance_t *, aout_filter_t *, aout_buffer_t *, 
    7878                           aout_buffer_t * ); 
     79static void Do_S32ToFL32( aout_instance_t *, aout_filter_t *, aout_buffer_t *, 
     80                           aout_buffer_t * ); 
    7981 
    8082static int  Create_S16ToFL32_SW( vlc_object_t * ); 
     
    8284                           aout_buffer_t * ); 
    8385static void Do_S24ToFL32_SW( aout_instance_t *, aout_filter_t *, aout_buffer_t *, 
     86                           aout_buffer_t * ); 
     87static void Do_S32ToFL32_SW( aout_instance_t *, aout_filter_t *, aout_buffer_t *, 
    8488                           aout_buffer_t * ); 
    8589 
     
    394398 
    395399    if ( ( p_filter->input.i_format != AOUT_FMT_S16_NE && 
    396            p_filter->input.i_format != AOUT_FMT_S24_NE ) 
     400           p_filter->input.i_format != AOUT_FMT_S24_NE && 
     401           p_filter->input.i_format != AOUT_FMT_S32_NE ) 
    397402          || p_filter->output.i_format != VLC_FOURCC('f','l','3','2') ) 
    398403    { 
     
    405410    } 
    406411 
    407     if( p_filter->input.i_format == AOUT_FMT_S24_NE ) 
     412    if( p_filter->input.i_format == AOUT_FMT_S32_NE ) 
     413        p_filter->pf_do_work = Do_S32ToFL32; 
     414    else if( p_filter->input.i_format == AOUT_FMT_S24_NE ) 
    408415        p_filter->pf_do_work = Do_S24ToFL32; 
    409416    else 
     
    443450 
    444451    p_out_buf->i_nb_samples = p_in_buf->i_nb_samples; 
    445     p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 2; 
     452    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 2; 
    446453} 
    447454 
     
    472479} 
    473480 
     481static void Do_S32ToFL32( aout_instance_t * p_aout, aout_filter_t * p_filter, 
     482                          aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf ) 
     483{ 
     484    VLC_UNUSED(p_aout); 
     485    int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input ); 
     486 
     487    /* We start from the end because b_in_place is true */ 
     488    int32_t * p_in = (int32_t *)p_in_buf->p_buffer + i - 1; 
     489    float * p_out = (float *)p_out_buf->p_buffer + i - 1; 
     490 
     491    while( i-- ) 
     492    { 
     493        *p_out-- = (float)*p_in-- / 2147483648.0; 
     494    } 
     495 
     496    p_out_buf->i_nb_samples = p_in_buf->i_nb_samples; 
     497    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 4; 
     498} 
     499 
    474500/***************************************************************************** 
    475501 * S16 To Float32 with endianness conversion 
     
    505531        return 0; 
    506532    } 
     533 
     534    if ( (p_filter->input.i_format == VLC_FOURCC('s','3','2','l') || 
     535         p_filter->input.i_format == VLC_FOURCC('s','3','2','b')) 
     536         && p_filter->output.i_format == VLC_FOURCC('f','l','3','2') 
     537         && p_filter->input.i_format != AOUT_FMT_S32_NE ) 
     538    { 
     539        p_filter->pf_do_work = Do_S32ToFL32_SW; 
     540        p_filter->b_in_place = true; 
     541 
     542        return 0; 
     543    } 
     544 
    507545    return -1; 
    508546} 
    509547 
    510548static void Do_S16ToFL32_SW( aout_instance_t * p_aout, aout_filter_t * p_filter, 
    511                           aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf ) 
     549                             aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf ) 
    512550{ 
    513551    VLC_UNUSED(p_aout); 
     
    552590 
    553591    p_out_buf->i_nb_samples = p_in_buf->i_nb_samples; 
    554     p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 2; 
     592    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 2; 
    555593} 
    556594 
    557595static void Do_S24ToFL32_SW( aout_instance_t * p_aout, aout_filter_t * p_filter, 
    558                            aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf ) 
     596                             aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf ) 
    559597{ 
    560598    VLC_UNUSED(p_aout); 
     
    587625} 
    588626 
     627static void Do_S32ToFL32_SW( aout_instance_t * p_aout, aout_filter_t * p_filter, 
     628                             aout_buffer_t * p_in_buf, aout_buffer_t * p_out_buf ) 
     629{ 
     630    VLC_UNUSED(p_aout); 
     631    int i = p_in_buf->i_nb_samples * aout_FormatNbChannels( &p_filter->input ); 
     632 
     633    /* We start from the end because b_in_place is true */ 
     634    int32_t * p_in = (int32_t *)p_in_buf->p_buffer + i - 1; 
     635    float * p_out = (float *)p_out_buf->p_buffer + i - 1; 
     636 
     637    while( i-- ) 
     638    { 
     639        *p_out-- = (float)*p_in-- / 2147483648.0; 
     640    } 
     641 
     642    p_out_buf->i_nb_samples = p_in_buf->i_nb_samples; 
     643    p_out_buf->i_nb_bytes = p_in_buf->i_nb_bytes * 4 / 4; 
     644} 
     645 
     646 
    589647/***************************************************************************** 
    590648 * S8 To FL32