Index: /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.cpp =================================================================== --- /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.cpp (revision 714) +++ /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.cpp (revision 715) @@ -24,4 +24,5 @@ #include "AmdtpTransmitStreamProcessor.h" #include "AmdtpPort.h" +#include "../StreamProcessorManager.h" #include "../util/cycletimer.h" @@ -40,6 +41,6 @@ /* transmit */ -AmdtpTransmitStreamProcessor::AmdtpTransmitStreamProcessor(int port, int framerate, int dimension) - : StreamProcessor(ePT_Transmit, port, framerate) +AmdtpTransmitStreamProcessor::AmdtpTransmitStreamProcessor(int port, int dimension) + : StreamProcessor(ePT_Transmit, port) , m_dimension(dimension) , m_last_timestamp(0) @@ -446,5 +447,5 @@ } - switch (m_framerate) { + switch (m_manager->getNominalRate()) { case 32000: m_syt_interval = 8; @@ -482,14 +483,14 @@ IEC61883_FMT_AMDTP, m_fdf, - m_framerate, + m_manager->getNominalRate(), m_dimension, m_syt_interval); // prepare the framerate estimate - float ticks_per_frame = (TICKS_PER_SECOND*1.0) / ((float)m_framerate); + float ticks_per_frame = (TICKS_PER_SECOND*1.0) / ((float)m_manager->getNominalRate()); m_ticks_per_frame=ticks_per_frame; // initialize internal buffer - m_ringbuffer_size_frames=m_nb_buffers * m_period; + m_ringbuffer_size_frames=m_manager->getNbBuffers() * m_manager->getPeriodSize(); assert(m_data_buffer); @@ -498,5 +499,5 @@ m_data_buffer->setEventsPerFrame(m_dimension); - m_data_buffer->setUpdatePeriod(m_period); + m_data_buffer->setUpdatePeriod(m_manager->getPeriodSize()); m_data_buffer->setNominalRate(ticks_per_frame); @@ -513,6 +514,6 @@ { debugOutput(DEBUG_LEVEL_VERBOSE, "Setting up port %s\n",(*it)->getName().c_str()); - if(!(*it)->setBufferSize(m_period)) { - debugFatal("Could not set buffer size to %d\n",m_period); + if(!(*it)->setBufferSize(m_manager->getPeriodSize())) { + debugFatal("Could not set buffer size to %d\n",m_manager->getPeriodSize()); return false; } @@ -599,7 +600,7 @@ debugOutput( DEBUG_LEVEL_VERBOSE, "Prepared for:\n"); debugOutput( DEBUG_LEVEL_VERBOSE, " Samplerate: %d, FDF: %d, DBS: %d, SYT: %d\n", - m_framerate,m_fdf,m_dimension,m_syt_interval); + m_manager->getNominalRate(),m_fdf,m_dimension,m_syt_interval); debugOutput( DEBUG_LEVEL_VERBOSE, " PeriodSize: %d, NbBuffers: %d\n", - m_period,m_nb_buffers); + m_manager->getPeriodSize(), m_manager->getNbBuffers()); debugOutput( DEBUG_LEVEL_VERBOSE, " Port: %d, Channel: %d\n", m_port,m_channel); @@ -625,4 +626,10 @@ return true; +} + +unsigned int +AmdtpTransmitStreamProcessor::getPacketsPerPeriod() +{ + return (m_manager->getPeriodSize())/m_syt_interval; } Index: /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.cpp =================================================================== --- /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.cpp (revision 714) +++ /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.cpp (revision 715) @@ -24,4 +24,5 @@ #include "AmdtpReceiveStreamProcessor.h" #include "AmdtpPort.h" +#include "../StreamProcessorManager.h" #include "../util/cycletimer.h" @@ -41,6 +42,6 @@ /* --------------------- RECEIVE ----------------------- */ -AmdtpReceiveStreamProcessor::AmdtpReceiveStreamProcessor(int port, int framerate, int dimension) - : StreamProcessor(ePT_Receive , port, framerate) +AmdtpReceiveStreamProcessor::AmdtpReceiveStreamProcessor(int port, int dimension) + : StreamProcessor(ePT_Receive , port) , m_dimension(dimension) , m_last_timestamp(0) @@ -279,5 +280,5 @@ } - switch (m_framerate) { + switch (m_manager->getNominalRate()) { case 32000: m_syt_interval = 8; @@ -305,5 +306,5 @@ // prepare the framerate estimate - float ticks_per_frame = (TICKS_PER_SECOND*1.0) / ((float)m_framerate); + float ticks_per_frame = (TICKS_PER_SECOND*1.0) / ((float)m_manager->getNominalRate()); m_ticks_per_frame=ticks_per_frame; @@ -311,5 +312,5 @@ // initialize internal buffer - unsigned int ringbuffer_size_frames=m_nb_buffers * m_period; + unsigned int ringbuffer_size_frames=m_manager->getNbBuffers() * m_manager->getPeriodSize(); assert(m_data_buffer); @@ -334,6 +335,6 @@ { debugOutput(DEBUG_LEVEL_VERBOSE, "Setting up port %s\n",(*it)->getName().c_str()); - if(!(*it)->setBufferSize(m_period)) { - debugFatal("Could not set buffer size to %d\n",m_period); + if(!(*it)->setBufferSize(m_manager->getPeriodSize())) { + debugFatal("Could not set buffer size to %d\n",m_manager->getPeriodSize()); return false; } @@ -400,7 +401,7 @@ debugOutput( DEBUG_LEVEL_VERBOSE, "Prepared for:\n"); debugOutput( DEBUG_LEVEL_VERBOSE, " Samplerate: %d, DBS: %d, SYT: %d\n", - m_framerate,m_dimension,m_syt_interval); + m_manager->getNominalRate(),m_dimension,m_syt_interval); debugOutput( DEBUG_LEVEL_VERBOSE, " PeriodSize: %d, NbBuffers: %d\n", - m_period,m_nb_buffers); + m_manager->getPeriodSize(), m_manager->getNbBuffers()); debugOutput( DEBUG_LEVEL_VERBOSE, " Port: %d, Channel: %d\n", m_port,m_channel); @@ -418,4 +419,10 @@ disable(); return true; +} + +unsigned int +AmdtpReceiveStreamProcessor::getPacketsPerPeriod() +{ + return (m_manager->getPeriodSize())/m_syt_interval; } Index: /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.h =================================================================== --- /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.h (revision 714) +++ /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpTransmitStreamProcessor.h (revision 715) @@ -77,5 +77,5 @@ * (midi-muxed is only one stream) */ - AmdtpTransmitStreamProcessor(int port, int framerate, int dimension); + AmdtpTransmitStreamProcessor(int port, int dimension); virtual ~AmdtpTransmitStreamProcessor() {}; @@ -104,5 +104,5 @@ // however, if we only count the number of used packets // it is m_period / m_syt_interval - unsigned int getPacketsPerPeriod() {return (m_period)/m_syt_interval;}; + unsigned int getPacketsPerPeriod(); unsigned int getMaxPacketSize() {return 4 * (2 + m_syt_interval * m_dimension);}; Index: /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.h =================================================================== --- /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.h (revision 714) +++ /branches/ppalmers-streaming/src/libstreaming/amdtp/AmdtpReceiveStreamProcessor.h (revision 715) @@ -76,5 +76,5 @@ * (midi-muxed is only one stream) */ - AmdtpReceiveStreamProcessor(int port, int framerate, int dimension); + AmdtpReceiveStreamProcessor(int port, int dimension); virtual ~AmdtpReceiveStreamProcessor() {}; @@ -101,5 +101,5 @@ // however, if we only count the number of used packets // it is m_period / m_syt_interval - unsigned int getPacketsPerPeriod() {return (m_period)/m_syt_interval;}; + unsigned int getPacketsPerPeriod(); unsigned int getMaxPacketSize() {return 4 * (2 + m_syt_interval * m_dimension);}; Index: /branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.cpp =================================================================== --- /branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.cpp (revision 714) +++ /branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.cpp (revision 715) @@ -38,9 +38,10 @@ IMPL_DEBUG_MODULE( StreamProcessorManager, StreamProcessorManager, DEBUG_LEVEL_VERBOSE ); -StreamProcessorManager::StreamProcessorManager(unsigned int period, unsigned int nb_buffers) +StreamProcessorManager::StreamProcessorManager(unsigned int period, unsigned int framerate, unsigned int nb_buffers) : m_is_slave( false ) , m_SyncSource(NULL) , m_nb_buffers(nb_buffers) , m_period(period) + , m_nominal_framerate ( framerate ) , m_xruns(0) , m_isoManager(0) Index: /branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.h =================================================================== --- /branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.h (revision 714) +++ /branches/ppalmers-streaming/src/libstreaming/StreamProcessorManager.h (revision 715) @@ -53,5 +53,5 @@ public: - StreamProcessorManager(unsigned int period, unsigned int nb_buffers); + StreamProcessorManager(unsigned int period, unsigned int rate, unsigned int nb_buffers); virtual ~StreamProcessorManager(); @@ -95,4 +95,6 @@ bool xrunOccurred(); int getXrunCount() {return m_xruns;}; + + unsigned int getNominalRate() {return m_nominal_framerate;}; private: @@ -139,4 +141,5 @@ unsigned int m_nb_buffers; unsigned int m_period; + unsigned int m_nominal_framerate; unsigned int m_xruns; Index: /branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.h =================================================================== --- /branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.h (revision 714) +++ /branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.h (revision 715) @@ -38,6 +38,5 @@ namespace Streaming { -class StreamProcessorManager; - + class StreamProcessorManager; /*! \brief Class providing a generic interface for Stream Processors @@ -89,5 +88,5 @@ // constructor/destructor public: - StreamProcessor(enum eProcessorType type, int port, int framerate); + StreamProcessor(enum eProcessorType type, int port); virtual ~StreamProcessor(); @@ -125,5 +124,5 @@ - // state stuff (TODO: cleanup) +//--- state stuff (TODO: cleanup) bool xrunOccurred() { return (m_xruns>0); }; bool isRunning(); ///< returns true if there is some stream data processed @@ -144,21 +143,5 @@ // move to private? void resetXrunCounter(); - - -public: // FIXME: should be private - Util::TimestampedBuffer *m_data_buffer; - -protected: // SPM related - void setManager(StreamProcessorManager *manager) {m_manager=manager;}; - void clearManager() {m_manager=0;}; - protected: - unsigned int m_nb_buffers; ///< cached from manager->getNbBuffers(), the number of periods to buffer - unsigned int m_period; ///< cached from manager->getPeriod(), the period size - unsigned int m_xruns; - unsigned int m_framerate; - - StreamProcessorManager *m_manager; - bool m_running; bool m_disabled; @@ -166,4 +149,12 @@ unsigned int m_cycle_to_enable_at; +//--- data buffering and accounting +public: // FIXME: should be private + Util::TimestampedBuffer *m_data_buffer; + +protected: + unsigned int m_xruns; + + StreamProcessorManager *m_manager; // frame counter & sync stuff @@ -263,14 +254,15 @@ int getLastCycle() {return m_last_cycle;}; - int getFrameRate() {return m_framerate;}; int getBufferFill(); protected: - float m_ticks_per_frame; - int m_last_cycle; int m_sync_delay; + +protected: // SPM related + void setManager(StreamProcessorManager *manager) {m_manager=manager;}; + void clearManager() {m_manager=NULL;}; public: Index: /branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.cpp =================================================================== --- /branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.cpp (revision 714) +++ /branches/ppalmers-streaming/src/libstreaming/generic/StreamProcessor.cpp (revision 715) @@ -35,12 +35,9 @@ IMPL_DEBUG_MODULE( StreamProcessor, StreamProcessor, DEBUG_LEVEL_VERBOSE ); -StreamProcessor::StreamProcessor(enum eProcessorType type, int port, int framerate) +StreamProcessor::StreamProcessor(enum eProcessorType type, int port) : IsoStream((type==ePT_Receive ? IsoStream::eST_Receive : IsoStream::eST_Transmit), port) , m_processor_type ( type ) , m_state( ePS_Created ) - , m_nb_buffers(0) - , m_period(0) - , m_xruns(0) - , m_framerate(framerate) + , m_xruns( 0 ) , m_manager(NULL) , m_running(false) @@ -85,5 +82,5 @@ debugOutputShort( DEBUG_LEVEL_NORMAL, " enable status : %s\n", m_is_disabled ? "No" : "Yes"); - debugOutputShort( DEBUG_LEVEL_NORMAL, " Nominal framerate : %u\n", m_framerate); + debugOutputShort( DEBUG_LEVEL_NORMAL, " Nominal framerate : %u\n", m_manager->getNominalRate()); debugOutputShort( DEBUG_LEVEL_NORMAL, " Device framerate : Sync: %f, Buffer %f\n", 24576000.0/getSyncSource().m_data_buffer->getRate(), @@ -101,7 +98,5 @@ { debugOutput( DEBUG_LEVEL_VERY_VERBOSE, "enter...\n"); - m_data_buffer->init(); - return IsoStream::init(); } @@ -156,7 +151,4 @@ debugOutput( DEBUG_LEVEL_VERBOSE, "Preparing...\n"); - - // init the ports - if(!m_manager) { debugFatal("Not attached to a manager!\n"); @@ -164,10 +156,5 @@ } - m_nb_buffers=m_manager->getNbBuffers(); - debugOutput( DEBUG_LEVEL_VERBOSE, "Setting m_nb_buffers : %d\n", m_nb_buffers); - - m_period=m_manager->getPeriodSize(); - debugOutput( DEBUG_LEVEL_VERBOSE, "Setting m_period : %d\n", m_period); - + // init the ports // loop over the ports to reset them PortManager::preparePorts(); @@ -318,5 +305,5 @@ StreamProcessor::getTimeAtPeriod() { if (getType() == ePT_Receive) { - ffado_timestamp_t next_period_boundary=m_data_buffer->getTimestampFromHead(m_period); + ffado_timestamp_t next_period_boundary=m_data_buffer->getTimestampFromHead(m_manager->getPeriodSize()); #ifdef DEBUG @@ -331,5 +318,5 @@ return (uint64_t)next_period_boundary; } else { - ffado_timestamp_t next_period_boundary=m_data_buffer->getTimestampFromTail((m_nb_buffers-1) * m_period); + ffado_timestamp_t next_period_boundary=m_data_buffer->getTimestampFromTail((m_manager->getNbBuffers()-1) * m_manager->getPeriodSize()); #ifdef DEBUG Index: /branches/ppalmers-streaming/src/dice/dice_avdevice.cpp =================================================================== --- /branches/ppalmers-streaming/src/dice/dice_avdevice.cpp (revision 712) +++ /branches/ppalmers-streaming/src/dice/dice_avdevice.cpp (revision 715) @@ -447,6 +447,4 @@ bool DiceAvDevice::prepare() { - int samplerate=getSamplingFrequency(); - // prepare receive SP's for (unsigned int i=0;igetPort(), - samplerate, nb_channels); @@ -580,5 +577,4 @@ p=new Streaming::AmdtpTransmitStreamProcessor( m_p1394Service->getPort(), - samplerate, nb_channels); Index: /branches/ppalmers-streaming/src/genericavc/avc_avdevice.cpp =================================================================== --- /branches/ppalmers-streaming/src/genericavc/avc_avdevice.cpp (revision 685) +++ /branches/ppalmers-streaming/src/genericavc/avc_avdevice.cpp (revision 715) @@ -430,5 +430,4 @@ p=new Streaming::AmdtpReceiveStreamProcessor( get1394Service().getPort(), - samplerate, outputPlug->getNrOfChannels()); @@ -455,10 +454,8 @@ p=new Streaming::AmdtpReceiveStreamProcessor( get1394Service().getPort(), - samplerate, inputPlug->getNrOfChannels()); } else { p=new Streaming::AmdtpTransmitStreamProcessor( get1394Service().getPort(), - samplerate, inputPlug->getNrOfChannels()); } Index: /branches/ppalmers-streaming/src/ffado_streaming.cpp =================================================================== --- /branches/ppalmers-streaming/src/ffado_streaming.cpp (revision 714) +++ /branches/ppalmers-streaming/src/ffado_streaming.cpp (revision 715) @@ -86,5 +86,7 @@ // create a processor manager to manage the actual stream // processors - dev->processorManager = new StreamProcessorManager(dev->options.period_size,dev->options.nb_buffers); + dev->processorManager = new StreamProcessorManager( dev->options.period_size, + dev->options.sample_rate, + dev->options.nb_buffers); if(!dev->processorManager) { debugFatal("Could not create StreamProcessorManager\n");