Changeset 715
- Timestamp:
- 11/11/07 10:12:01 (15 years ago)
- Files:
-
- branches/ppalmers-streaming/src/dice/dice_avdevice.cpp (modified) (3 diffs)
- branches/ppalmers-streaming/src/ffado_streaming.cpp (modified) (1 diff)
- branches/ppalmers-streaming/src/genericavc/avc_avdevice.cpp (modified) (2 diffs)
- branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.cpp (modified) (8 diffs)
- branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.h (modified) (2 diffs)
- branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.cpp (modified) (8 diffs)
- branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.h (modified) (2 diffs)
- branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.cpp (modified) (7 diffs)
- branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.h (modified) (6 diffs)
- branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.cpp (modified) (1 diff)
- branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.h (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/ppalmers-streaming/src/dice/dice_avdevice.cpp
r712 r715 447 447 bool 448 448 DiceAvDevice::prepare() { 449 int samplerate=getSamplingFrequency();450 451 449 // prepare receive SP's 452 450 for (unsigned int i=0;i<m_nb_tx;i++) { … … 493 491 p=new Streaming::AmdtpReceiveStreamProcessor( 494 492 m_p1394Service->getPort(), 495 samplerate,496 493 nb_channels); 497 494 … … 580 577 p=new Streaming::AmdtpTransmitStreamProcessor( 581 578 m_p1394Service->getPort(), 582 samplerate,583 579 nb_channels); 584 580 branches/ppalmers-streaming/src/ffado_streaming.cpp
r714 r715 86 86 // create a processor manager to manage the actual stream 87 87 // processors 88 dev->processorManager = new StreamProcessorManager(dev->options.period_size,dev->options.nb_buffers); 88 dev->processorManager = new StreamProcessorManager( dev->options.period_size, 89 dev->options.sample_rate, 90 dev->options.nb_buffers); 89 91 if(!dev->processorManager) { 90 92 debugFatal("Could not create StreamProcessorManager\n"); branches/ppalmers-streaming/src/genericavc/avc_avdevice.cpp
r685 r715 430 430 p=new Streaming::AmdtpReceiveStreamProcessor( 431 431 get1394Service().getPort(), 432 samplerate,433 432 outputPlug->getNrOfChannels()); 434 433 … … 455 454 p=new Streaming::AmdtpReceiveStreamProcessor( 456 455 get1394Service().getPort(), 457 samplerate,458 456 inputPlug->getNrOfChannels()); 459 457 } else { 460 458 p=new Streaming::AmdtpTransmitStreamProcessor( 461 459 get1394Service().getPort(), 462 samplerate,463 460 inputPlug->getNrOfChannels()); 464 461 } branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.cpp
r714 r715 24 24 #include "AmdtpReceiveStreamProcessor.h" 25 25 #include "AmdtpPort.h" 26 #include "../StreamProcessorManager.h" 26 27 27 28 #include "../util/cycletimer.h" … … 41 42 /* --------------------- RECEIVE ----------------------- */ 42 43 43 AmdtpReceiveStreamProcessor::AmdtpReceiveStreamProcessor(int port, int framerate, intdimension)44 : StreamProcessor(ePT_Receive , port , framerate)44 AmdtpReceiveStreamProcessor::AmdtpReceiveStreamProcessor(int port, int dimension) 45 : StreamProcessor(ePT_Receive , port) 45 46 , m_dimension(dimension) 46 47 , m_last_timestamp(0) … … 279 280 } 280 281 281 switch (m_ framerate) {282 switch (m_manager->getNominalRate()) { 282 283 case 32000: 283 284 m_syt_interval = 8; … … 305 306 306 307 // prepare the framerate estimate 307 float ticks_per_frame = (TICKS_PER_SECOND*1.0) / ((float)m_ framerate);308 float ticks_per_frame = (TICKS_PER_SECOND*1.0) / ((float)m_manager->getNominalRate()); 308 309 m_ticks_per_frame=ticks_per_frame; 309 310 … … 311 312 312 313 // initialize internal buffer 313 unsigned int ringbuffer_size_frames=m_ nb_buffers * m_period;314 unsigned int ringbuffer_size_frames=m_manager->getNbBuffers() * m_manager->getPeriodSize(); 314 315 315 316 assert(m_data_buffer); … … 334 335 { 335 336 debugOutput(DEBUG_LEVEL_VERBOSE, "Setting up port %s\n",(*it)->getName().c_str()); 336 if(!(*it)->setBufferSize(m_ period)) {337 debugFatal("Could not set buffer size to %d\n",m_ period);337 if(!(*it)->setBufferSize(m_manager->getPeriodSize())) { 338 debugFatal("Could not set buffer size to %d\n",m_manager->getPeriodSize()); 338 339 return false; 339 340 } … … 400 401 debugOutput( DEBUG_LEVEL_VERBOSE, "Prepared for:\n"); 401 402 debugOutput( DEBUG_LEVEL_VERBOSE, " Samplerate: %d, DBS: %d, SYT: %d\n", 402 m_ framerate,m_dimension,m_syt_interval);403 m_manager->getNominalRate(),m_dimension,m_syt_interval); 403 404 debugOutput( DEBUG_LEVEL_VERBOSE, " PeriodSize: %d, NbBuffers: %d\n", 404 m_ period,m_nb_buffers);405 m_manager->getPeriodSize(), m_manager->getNbBuffers()); 405 406 debugOutput( DEBUG_LEVEL_VERBOSE, " Port: %d, Channel: %d\n", 406 407 m_port,m_channel); … … 418 419 disable(); 419 420 return true; 421 } 422 423 unsigned int 424 AmdtpReceiveStreamProcessor::getPacketsPerPeriod() 425 { 426 return (m_manager->getPeriodSize())/m_syt_interval; 420 427 } 421 428 branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.h
r714 r715 76 76 * (midi-muxed is only one stream) 77 77 */ 78 AmdtpReceiveStreamProcessor(int port, int framerate, intdimension);78 AmdtpReceiveStreamProcessor(int port, int dimension); 79 79 virtual ~AmdtpReceiveStreamProcessor() {}; 80 80 … … 101 101 // however, if we only count the number of used packets 102 102 // it is m_period / m_syt_interval 103 unsigned int getPacketsPerPeriod() {return (m_period)/m_syt_interval;};103 unsigned int getPacketsPerPeriod(); 104 104 105 105 unsigned int getMaxPacketSize() {return 4 * (2 + m_syt_interval * m_dimension);}; branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.cpp
r714 r715 24 24 #include "AmdtpTransmitStreamProcessor.h" 25 25 #include "AmdtpPort.h" 26 #include "../StreamProcessorManager.h" 26 27 27 28 #include "../util/cycletimer.h" … … 40 41 41 42 /* transmit */ 42 AmdtpTransmitStreamProcessor::AmdtpTransmitStreamProcessor(int port, int framerate, intdimension)43 : StreamProcessor(ePT_Transmit, port , framerate)43 AmdtpTransmitStreamProcessor::AmdtpTransmitStreamProcessor(int port, int dimension) 44 : StreamProcessor(ePT_Transmit, port) 44 45 , m_dimension(dimension) 45 46 , m_last_timestamp(0) … … 446 447 } 447 448 448 switch (m_ framerate) {449 switch (m_manager->getNominalRate()) { 449 450 case 32000: 450 451 m_syt_interval = 8; … … 482 483 IEC61883_FMT_AMDTP, 483 484 m_fdf, 484 m_ framerate,485 m_manager->getNominalRate(), 485 486 m_dimension, 486 487 m_syt_interval); 487 488 488 489 // prepare the framerate estimate 489 float ticks_per_frame = (TICKS_PER_SECOND*1.0) / ((float)m_ framerate);490 float ticks_per_frame = (TICKS_PER_SECOND*1.0) / ((float)m_manager->getNominalRate()); 490 491 m_ticks_per_frame=ticks_per_frame; 491 492 492 493 // initialize internal buffer 493 m_ringbuffer_size_frames=m_ nb_buffers * m_period;494 m_ringbuffer_size_frames=m_manager->getNbBuffers() * m_manager->getPeriodSize(); 494 495 495 496 assert(m_data_buffer); … … 498 499 m_data_buffer->setEventsPerFrame(m_dimension); 499 500 500 m_data_buffer->setUpdatePeriod(m_ period);501 m_data_buffer->setUpdatePeriod(m_manager->getPeriodSize()); 501 502 m_data_buffer->setNominalRate(ticks_per_frame); 502 503 … … 513 514 { 514 515 debugOutput(DEBUG_LEVEL_VERBOSE, "Setting up port %s\n",(*it)->getName().c_str()); 515 if(!(*it)->setBufferSize(m_ period)) {516 debugFatal("Could not set buffer size to %d\n",m_ period);516 if(!(*it)->setBufferSize(m_manager->getPeriodSize())) { 517 debugFatal("Could not set buffer size to %d\n",m_manager->getPeriodSize()); 517 518 return false; 518 519 } … … 599 600 debugOutput( DEBUG_LEVEL_VERBOSE, "Prepared for:\n"); 600 601 debugOutput( DEBUG_LEVEL_VERBOSE, " Samplerate: %d, FDF: %d, DBS: %d, SYT: %d\n", 601 m_ framerate,m_fdf,m_dimension,m_syt_interval);602 m_manager->getNominalRate(),m_fdf,m_dimension,m_syt_interval); 602 603 debugOutput( DEBUG_LEVEL_VERBOSE, " PeriodSize: %d, NbBuffers: %d\n", 603 m_ period,m_nb_buffers);604 m_manager->getPeriodSize(), m_manager->getNbBuffers()); 604 605 debugOutput( DEBUG_LEVEL_VERBOSE, " Port: %d, Channel: %d\n", 605 606 m_port,m_channel); … … 625 626 626 627 return true; 628 } 629 630 unsigned int 631 AmdtpTransmitStreamProcessor::getPacketsPerPeriod() 632 { 633 return (m_manager->getPeriodSize())/m_syt_interval; 627 634 } 628 635 branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.h
r714 r715 77 77 * (midi-muxed is only one stream) 78 78 */ 79 AmdtpTransmitStreamProcessor(int port, int framerate, intdimension);79 AmdtpTransmitStreamProcessor(int port, int dimension); 80 80 virtual ~AmdtpTransmitStreamProcessor() {}; 81 81 … … 104 104 // however, if we only count the number of used packets 105 105 // it is m_period / m_syt_interval 106 unsigned int getPacketsPerPeriod() {return (m_period)/m_syt_interval;};106 unsigned int getPacketsPerPeriod(); 107 107 108 108 unsigned int getMaxPacketSize() {return 4 * (2 + m_syt_interval * m_dimension);}; branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.cpp
r714 r715 35 35 IMPL_DEBUG_MODULE( StreamProcessor, StreamProcessor, DEBUG_LEVEL_VERBOSE ); 36 36 37 StreamProcessor::StreamProcessor(enum eProcessorType type, int port , int framerate)37 StreamProcessor::StreamProcessor(enum eProcessorType type, int port) 38 38 : IsoStream((type==ePT_Receive ? IsoStream::eST_Receive : IsoStream::eST_Transmit), port) 39 39 , m_processor_type ( type ) 40 40 , m_state( ePS_Created ) 41 , m_nb_buffers(0) 42 , m_period(0) 43 , m_xruns(0) 44 , m_framerate(framerate) 41 , m_xruns( 0 ) 45 42 , m_manager(NULL) 46 43 , m_running(false) … … 85 82 debugOutputShort( DEBUG_LEVEL_NORMAL, " enable status : %s\n", m_is_disabled ? "No" : "Yes"); 86 83 87 debugOutputShort( DEBUG_LEVEL_NORMAL, " Nominal framerate : %u\n", m_ framerate);84 debugOutputShort( DEBUG_LEVEL_NORMAL, " Nominal framerate : %u\n", m_manager->getNominalRate()); 88 85 debugOutputShort( DEBUG_LEVEL_NORMAL, " Device framerate : Sync: %f, Buffer %f\n", 89 86 24576000.0/getSyncSource().m_data_buffer->getRate(), … … 101 98 { 102 99 debugOutput( DEBUG_LEVEL_VERY_VERBOSE, "enter...\n"); 103 104 100 m_data_buffer->init(); 105 106 101 return IsoStream::init(); 107 102 } … … 156 151 157 152 debugOutput( DEBUG_LEVEL_VERBOSE, "Preparing...\n"); 158 159 // init the ports160 161 153 if(!m_manager) { 162 154 debugFatal("Not attached to a manager!\n"); … … 164 156 } 165 157 166 m_nb_buffers=m_manager->getNbBuffers(); 167 debugOutput( DEBUG_LEVEL_VERBOSE, "Setting m_nb_buffers : %d\n", m_nb_buffers); 168 169 m_period=m_manager->getPeriodSize(); 170 debugOutput( DEBUG_LEVEL_VERBOSE, "Setting m_period : %d\n", m_period); 171 158 // init the ports 172 159 // loop over the ports to reset them 173 160 PortManager::preparePorts(); … … 318 305 StreamProcessor::getTimeAtPeriod() { 319 306 if (getType() == ePT_Receive) { 320 ffado_timestamp_t next_period_boundary=m_data_buffer->getTimestampFromHead(m_ period);307 ffado_timestamp_t next_period_boundary=m_data_buffer->getTimestampFromHead(m_manager->getPeriodSize()); 321 308 322 309 #ifdef DEBUG … … 331 318 return (uint64_t)next_period_boundary; 332 319 } else { 333 ffado_timestamp_t next_period_boundary=m_data_buffer->getTimestampFromTail((m_ nb_buffers-1) * m_period);320 ffado_timestamp_t next_period_boundary=m_data_buffer->getTimestampFromTail((m_manager->getNbBuffers()-1) * m_manager->getPeriodSize()); 334 321 335 322 #ifdef DEBUG branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.h
r714 r715 38 38 namespace Streaming { 39 39 40 class StreamProcessorManager; 41 40 class StreamProcessorManager; 42 41 /*! 43 42 \brief Class providing a generic interface for Stream Processors … … 89 88 // constructor/destructor 90 89 public: 91 StreamProcessor(enum eProcessorType type, int port , int framerate);90 StreamProcessor(enum eProcessorType type, int port); 92 91 virtual ~StreamProcessor(); 93 92 … … 125 124 126 125 127 //state stuff (TODO: cleanup)126 //--- state stuff (TODO: cleanup) 128 127 bool xrunOccurred() { return (m_xruns>0); }; 129 128 bool isRunning(); ///< returns true if there is some stream data processed … … 144 143 // move to private? 145 144 void resetXrunCounter(); 146 147 148 public: // FIXME: should be private149 Util::TimestampedBuffer *m_data_buffer;150 151 protected: // SPM related152 void setManager(StreamProcessorManager *manager) {m_manager=manager;};153 void clearManager() {m_manager=0;};154 155 145 protected: 156 unsigned int m_nb_buffers; ///< cached from manager->getNbBuffers(), the number of periods to buffer157 unsigned int m_period; ///< cached from manager->getPeriod(), the period size158 unsigned int m_xruns;159 unsigned int m_framerate;160 161 StreamProcessorManager *m_manager;162 163 146 bool m_running; 164 147 bool m_disabled; … … 166 149 unsigned int m_cycle_to_enable_at; 167 150 151 //--- data buffering and accounting 152 public: // FIXME: should be private 153 Util::TimestampedBuffer *m_data_buffer; 154 155 protected: 156 unsigned int m_xruns; 157 158 StreamProcessorManager *m_manager; 168 159 169 160 // frame counter & sync stuff … … 263 254 264 255 int getLastCycle() {return m_last_cycle;}; 265 int getFrameRate() {return m_framerate;};266 256 267 257 int getBufferFill(); 268 258 269 259 protected: 270 271 260 float m_ticks_per_frame; 272 273 261 int m_last_cycle; 274 262 int m_sync_delay; 263 264 protected: // SPM related 265 void setManager(StreamProcessorManager *manager) {m_manager=manager;}; 266 void clearManager() {m_manager=NULL;}; 275 267 276 268 public: branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.cpp
r714 r715 38 38 IMPL_DEBUG_MODULE( StreamProcessorManager, StreamProcessorManager, DEBUG_LEVEL_VERBOSE ); 39 39 40 StreamProcessorManager::StreamProcessorManager(unsigned int period, unsigned int nb_buffers)40 StreamProcessorManager::StreamProcessorManager(unsigned int period, unsigned int framerate, unsigned int nb_buffers) 41 41 : m_is_slave( false ) 42 42 , m_SyncSource(NULL) 43 43 , m_nb_buffers(nb_buffers) 44 44 , m_period(period) 45 , m_nominal_framerate ( framerate ) 45 46 , m_xruns(0) 46 47 , m_isoManager(0) branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.h
r714 r715 53 53 public: 54 54 55 StreamProcessorManager(unsigned int period, unsigned int nb_buffers);55 StreamProcessorManager(unsigned int period, unsigned int rate, unsigned int nb_buffers); 56 56 virtual ~StreamProcessorManager(); 57 57 … … 95 95 bool xrunOccurred(); 96 96 int getXrunCount() {return m_xruns;}; 97 98 unsigned int getNominalRate() {return m_nominal_framerate;}; 97 99 98 100 private: … … 139 141 unsigned int m_nb_buffers; 140 142 unsigned int m_period; 143 unsigned int m_nominal_framerate; 141 144 unsigned int m_xruns; 142 145