Changeset 1060:ddaf199fe8d6 in roaraudio


Ignore:
Timestamp:
12/24/08 12:40:31 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

corrected bug with from_size > to_size

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libroardsp/convert.c

    r1059 r1060  
    574574int roar_conv       (void * out, void * in, int samples, struct roar_audio_info * from, struct roar_audio_info * to) { 
    575575 void * ip = in; 
    576  void * real_out; 
     576 void * real_out = NULL; 
    577577 size_t from_size, to_size; 
    578578 
     
    581581 //       for the moment: guess out >= in 
    582582 
    583  from_size = from->channels * from->bits * samples / 8; 
    584  to_size   =   to->channels *   to->bits * samples / 8; 
     583 from_size = (from->bits * samples) / 8; 
     584 to_size   = (  to->bits * samples) / 8; 
    585585 
    586586 if ( to_size < from_size ) { 
     
    589589  if ( (out = malloc(from_size)) == NULL ) 
    590590   return -1; 
     591 
     592  ROAR_DBG("roar_conv(*): malloc(%i)=%p", (int)from_size, out); 
    591593 } 
    592594 
     
    635637 if ( from->rate != to->rate ) { 
    636638  if ( roar_conv_rate(out, ip, samples, from->rate, to->rate, to->bits, from->channels) == -1 ) { 
    637    if ( to_size < from_size ) 
    638     free(out); 
     639   ROAR_DBG("roar_conv(*): failed to convert rate %i->%i (%ich%ibits)", from->rate, to->rate, to->bits, from->channels); 
    639640   return -1; 
    640641  } else { 
     
    664665 
    665666 if ( to_size < from_size ) { 
     667  ROAR_DBG("roar_conv(*): memcpy(%p, %p, %i) = ?", real_out, out, (int)to_size); 
    666668  memcpy(real_out, out, to_size); 
    667669  free(out); 
Note: See TracChangeset for help on using the changeset viewer.