Changeset 858:5ef1c551785f in roaraudio


Ignore:
Timestamp:
09/30/08 03:24:22 (16 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added eddines converting for 16 bit

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • include/libroardsp/convert.h

    r857 r858  
    7979int roar_conv_codec_u2s32 (void * out, void * in, int samples); 
    8080 
    81 int roar_conv_endian_16   (void * out, void * in, int samples); 
     81                                                                // implemnted? 
     82int roar_conv_endian_16   (void * out, void * in, int samples); // yes 
     83int roar_conv_endian_24   (void * out, void * in, int samples); 
     84int roar_conv_endian_32   (void * out, void * in, int samples); 
    8285 
    8386int roar_conv       (void * out, void * in, int samples, struct roar_audio_info * from, struct roar_audio_info * to); 
  • libroardsp/convert.c

    r857 r858  
    334334 int inbo = ROAR_CODEC_BYTE_ORDER(from), outbo = ROAR_CODEC_BYTE_ORDER(to); 
    335335 int ins  = ROAR_CODEC_IS_SIGNED(from),  outs  = ROAR_CODEC_IS_SIGNED(to); 
    336  
    337  if ( inbo != outbo ) 
    338   return -1; 
     336 void * nin = in; 
     337 
     338 if ( bits == 8 || bits == 16 ) { 
     339  if ( inbo  == ROAR_CODEC_PDP ) 
     340   inbo  = ROAR_CODEC_LE; 
     341  if ( outbo == ROAR_CODEC_PDP ) 
     342   outbo = ROAR_CODEC_LE; 
     343 } 
     344 
     345 if ( inbo != outbo ) { 
     346  if ( bits != 8 ) { // there is no need to talk about eddines on 8 bit data streams 
     347   if ( bits == 16 ) { 
     348    // in this case we can only have LE vs. BE, so, only need to swap: 
     349    roar_conv_endian_16(out, nin, samples); 
     350    nin = out; 
     351   } else { 
     352    return -1; 
     353   } 
     354  } 
     355 } 
    339356 
    340357 if ( ins != outs ) { 
    341358  if ( ins && !outs ) { 
    342359   switch (bits) { 
    343     case  8: roar_conv_codec_s2u8( out, in, samples); break; 
    344     case 16: roar_conv_codec_s2u16(out, in, samples); break; 
    345     case 32: roar_conv_codec_s2u32(out, in, samples); break; 
     360    case  8: roar_conv_codec_s2u8( out, nin, samples); break; 
     361    case 16: roar_conv_codec_s2u16(out, nin, samples); break; 
     362    case 32: roar_conv_codec_s2u32(out, nin, samples); break; 
    346363    default: 
    347364     errno = ENOSYS; 
     
    350367  } else if ( !ins && outs ) { 
    351368   switch (bits) { 
    352     case  8: roar_conv_codec_u2s8( out, in, samples); break; 
    353     case 16: roar_conv_codec_u2s16(out, in, samples); break; 
    354     case 32: roar_conv_codec_u2s32(out, in, samples); break; 
     369    case  8: roar_conv_codec_u2s8( out, nin, samples); break; 
     370    case 16: roar_conv_codec_u2s16(out, nin, samples); break; 
     371    case 32: roar_conv_codec_u2s32(out, nin, samples); break; 
    355372    default: 
    356373     errno = ENOSYS; 
     
    440457 
    441458 if ( out != in ) { 
     459//  printf("out != in\n"); 
    442460  for(i = 0; i < samples; i += 2) { 
     461//   printf("op[%i] = ip[%i]\nop[%i] = ip[%i]\n", i, i+1, i+1, i); 
    443462   op[i  ] = ip[i+1]; 
    444463   op[i+1] = ip[i  ]; 
    445464  } 
    446465 } else { 
     466//  printf("out == in\n"); 
    447467  for(i = 0; i < samples; i += 2) { 
    448468   c       = ip[i+1]; 
Note: See TracChangeset for help on using the changeset viewer.