Changeset 285

Show
Ignore:
Timestamp:
07/07/06 00:17:38 (16 years ago)
Author:
jwoithe
Message:

Connect ports to the Motu playback stream handlers & make playback work.
Make teststreaming2.c copy input ports to output ports for testing.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/libfreebob-2.0/src/libstreaming/MotuStreamProcessor.cpp

    r284 r285  
    665665                       unsigned int offset, unsigned int nevents) { 
    666666        unsigned int j=0; 
     667#if 0 
    667668        unsigned char *target = (unsigned char *)data + p->getPosition(); 
    668669 
     
    689690                break; 
    690691        } 
     692 
     693#endif 
     694 
     695        // Use char here since the target address won't necessarily be  
     696        // aligned; use of an unaligned quadlet_t may cause issues on certain 
     697        // architectures. 
     698        unsigned char *target; 
     699        target = (unsigned char *)data + p->getPosition(); 
     700 
     701        switch(p->getDataType()) { 
     702                default: 
     703                case Port::E_Int24: 
     704                        { 
     705                                quadlet_t *buffer=(quadlet_t *)(p->getBufferAddress()); 
     706 
     707                                assert(nevents + offset <= p->getBufferSize()); 
     708 
     709                                // Offset is in frames, but each port is only a single 
     710                                // channel, so the number of frames is the same as the 
     711                                // number of quadlets to offset (assuming the port buffer 
     712                                // uses one quadlet per sample, which is the case currently). 
     713                                buffer+=offset; 
     714 
     715                                for(j = 0; j < nevents; j += 1) { // Decode nsamples 
     716                                        *target = (*buffer >> 16) & 0xff; 
     717                                        *(target+1) = (*buffer >> 8) & 0xff; 
     718                                        *(target+2) = (*buffer) & 0xff; 
     719 
     720                                        buffer++; 
     721                                        target+=m_event_size; 
     722                                } 
     723                        } 
     724                        break; 
     725                case Port::E_Float: 
     726                        { 
     727                                const float multiplier = (float)(0x7FFFFF); 
     728                                float *buffer=(float *)(p->getBufferAddress()); 
     729 
     730                                assert(nevents + offset <= p->getBufferSize()); 
     731 
     732                                buffer+=offset; 
     733 
     734                                for(j = 0; j < nevents; j += 1) { // decode max nsamples                 
     735                                        unsigned int v = *buffer * multiplier; 
     736                                        *target = (v >> 16) & 0xff; 
     737                                        *(target+1) = (v >> 8) & 0xff; 
     738                                        *(target+2) = v & 0xff; 
     739 
     740                                        buffer++; 
     741                                        target+=m_event_size; 
     742                                } 
     743                        } 
     744                        break; 
     745        } 
     746 
     747        return 0; 
     748 
    691749 
    692750 
  • branches/libfreebob-2.0/tests/streaming/teststreaming2.c

    r274 r285  
    110110         
    111111        nullbuffer=calloc(PERIOD_SIZE+1,sizeof(freebob_sample_t)); 
    112          
    113 //      for (i=0;i<nb_out_channels;i++) { 
    114 //              switch (freebob_streaming_get_capture_stream_type(dev,i)) { 
    115 //                      case freebob_stream_type_audio: 
    116 //                              if (i<nb_in_channels) { 
    117 //                                      /* assign the audiobuffer to the stream */ 
    118 //                                      freebob_streaming_set_playback_stream_buffer(dev, i, (char *)audiobuffer[i], freebob_buffer_type_uint24); 
    119 //                              } else { 
    120 //                                      freebob_streaming_set_playback_stream_buffer(dev, i, (char *)nullbuffer, freebob_buffer_type_uint24);    
    121 //                              } 
    122 //                              break; 
    123 //                              // this is done with read/write routines because the nb of bytes can differ. 
    124 //                      case freebob_stream_type_midi: 
    125 //                      default: 
    126 //                              break; 
    127 //              } 
    128 //      } 
     112 
     113#if 1 
     114        for (i=0;i<nb_out_channels;i++) { 
     115                switch (freebob_streaming_get_capture_stream_type(dev,i)) { 
     116                        case freebob_stream_type_audio: 
     117                                if (i<nb_in_channels) { 
     118                                        /* assign the audiobuffer to the stream */ 
     119                                        freebob_streaming_set_playback_stream_buffer(dev, i, (char *)audiobuffer[i]); 
     120                                } else { 
     121                                        freebob_streaming_set_playback_stream_buffer(dev, i, (char *)nullbuffer); 
     122                                } 
     123                                freebob_streaming_set_playback_buffer_type(dev, i, freebob_buffer_type_int24); 
     124                                break; 
     125                                // this is done with read/write routines because the nb of bytes can differ. 
     126                        case freebob_stream_type_midi: 
     127                        default: 
     128                                break; 
     129                } 
     130        } 
     131#endif 
    129132         
    130133        /* open the files to write to*/