Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

AsyncAudioResample< input_t, output_t > Class Template Reference

The asynchronous resampler is by export to prooduce locked audio. More...

#include <frame.h>

Collaboration diagram for AsyncAudioResample< input_t, output_t >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 AsyncAudioResample (AudioResampleType type, PlayList *playlist, double rate, int begin, int end, int every)
 ~AsyncAudioResample ()
bool IsError () const
std::string GetError () const
long ReadAudio (float **data)
int Process (double rate, int samples)
output_t * GetOutput (void)

Static Public Member Functions

static long callback (void *cb_data, float **data)

Private Attributes

SRC_STATE * m_state
PlayListm_playlist
int m_position
int m_every
input_t m_input [BUFFER_LEN]
float m_internalInput [BUFFER_LEN]
float m_internalConformed [BUFFER_LEN]
float m_internalOutput [BUFFER_LEN]
output_t m_output [BUFFER_LEN]
int m_error
Framem_frame
double m_rate
SRC_STATE * m_conformer
SRC_DATA m_srcdata
AudioInfo m_info
int m_channels
int m_end
int m_silentFrameCount

Detailed Description

template<class input_t, class output_t>
class AsyncAudioResample< input_t, output_t >

The asynchronous resampler is by export to prooduce locked audio.

The reading of frames is asynchronous with the reading of audio samples from the resampler. Therefore, the reading of the samples out of the resampler can follow a locked audio sequence. It conforms the incoming audio to a designated frequency, and it applies another resampling ratio on the output side. The idea with the output resampling is that you can request a sample rate with some differential applied in order to coerce it into producing an intended number of samples--i.e., locked audio.

Definition at line 416 of file frame.h.


Constructor & Destructor Documentation

template<class input_t, class output_t>
AsyncAudioResample< input_t, output_t >::AsyncAudioResample AudioResampleType  type,
PlayList playlist,
double  rate,
int  begin,
int  end,
int  every
[inline]
 

Definition at line 439 of file frame.h.

References AUDIO_RESAMPLE_SRC_LINEAR, AUDIO_RESAMPLE_SRC_SINC_BEST_QUALITY, AUDIO_RESAMPLE_SRC_SINC_FASTEST, AUDIO_RESAMPLE_SRC_SINC_MEDIUM_QUALITY, AUDIO_RESAMPLE_SRC_ZERO_ORDER_HOLD, BUFFER_LEN, AsyncAudioResample< input_t, output_t >::callback(), AsyncAudioResample< input_t, output_t >::m_channels, AsyncAudioResample< input_t, output_t >::m_conformer, AsyncAudioResample< input_t, output_t >::m_error, AsyncAudioResample< input_t, output_t >::m_internalConformed, AsyncAudioResample< input_t, output_t >::m_internalInput, AsyncAudioResample< input_t, output_t >::m_srcdata, and AsyncAudioResample< input_t, output_t >::m_state.

00440                                                          :
00441         m_playlist( playlist ),
00442         m_position( begin ),
00443         m_every( every ),
00444         m_error( 0 ),
00445         m_frame( *GetFramePool()->GetFrame() ),
00446         m_rate( rate ),
00447         m_conformer( 0 ),
00448         m_channels( 2 ),
00449         m_end( end ),
00450         m_silentFrameCount( 0 )
00451     {
00452         int src_type;
00453         switch ( type )
00454         {
00455         case AUDIO_RESAMPLE_SRC_SINC_BEST_QUALITY:
00456             src_type = SRC_SINC_BEST_QUALITY;
00457         case AUDIO_RESAMPLE_SRC_SINC_MEDIUM_QUALITY:
00458             src_type = SRC_SINC_MEDIUM_QUALITY;
00459         case AUDIO_RESAMPLE_SRC_SINC_FASTEST:
00460             src_type = SRC_SINC_FASTEST;
00461         case AUDIO_RESAMPLE_SRC_ZERO_ORDER_HOLD:
00462             src_type = SRC_ZERO_ORDER_HOLD;
00463         case AUDIO_RESAMPLE_SRC_LINEAR:
00464             src_type = SRC_LINEAR;
00465         default:
00466             src_type = SRC_SINC_FASTEST;
00467         }
00468         m_state = src_callback_new( AsyncAudioResample::callback, src_type, m_channels, &m_error, this );
00469         if ( m_error == 0 )
00470         {
00471             m_conformer = src_new( src_type, m_channels, &m_error );
00472             if ( m_error == 0 )
00473             {
00474                 m_srcdata.data_in = m_internalInput;
00475                 m_srcdata.data_out = m_internalConformed;
00476                 m_srcdata.output_frames = BUFFER_LEN / m_channels;
00477             }
00478         }
00479     }

template<class input_t, class output_t>
AsyncAudioResample< input_t, output_t >::~AsyncAudioResample  )  [inline]
 

Definition at line 481 of file frame.h.

References GetFramePool(), AsyncAudioResample< input_t, output_t >::m_conformer, AsyncAudioResample< input_t, output_t >::m_frame, and AsyncAudioResample< input_t, output_t >::m_state.

00482     {
00483         GetFramePool()->DoneWithFrame( &m_frame );
00484         if ( m_state )
00485             src_delete( m_state );
00486         if ( m_conformer )
00487             src_delete( m_conformer );
00488     }


Member Function Documentation

template<class input_t, class output_t>
static long AsyncAudioResample< input_t, output_t >::callback void *  cb_data,
float **  data
[inline, static]
 

Definition at line 548 of file frame.h.

References AsyncAudioResample< input_t, output_t >::ReadAudio().

Referenced by AsyncAudioResample< input_t, output_t >::AsyncAudioResample().

00549     {
00550         AsyncAudioResample<input_t,output_t>* p = static_cast< AsyncAudioResample<input_t,output_t>* >( cb_data );
00551         return p->ReadAudio( data );
00552     }

template<class input_t, class output_t>
std::string AsyncAudioResample< input_t, output_t >::GetError  )  const [inline]
 

Definition at line 495 of file frame.h.

References AsyncAudioResample< input_t, output_t >::m_conformer, AsyncAudioResample< input_t, output_t >::m_error, and AsyncAudioResample< input_t, output_t >::m_state.

Referenced by ExportPipe::doExport(), ExportMJPEG::doExport(), ExportAVI::doExport(), ExportAudio::doExport(), Export1394::doExport(), and kino2raw().

00496     {
00497         if ( src_error( m_state ) )
00498             return src_strerror( src_error( m_state ) );
00499         else if ( src_error( m_conformer ) )
00500             return src_strerror( src_error( m_conformer ) );
00501         else
00502             return src_strerror( m_error );
00503     }

template<class input_t, class output_t>
output_t* AsyncAudioResample< input_t, output_t >::GetOutput void   )  [inline]
 

Definition at line 573 of file frame.h.

References AsyncAudioResample< input_t, output_t >::m_output.

Referenced by ExportPipe::doExport(), ExportMJPEG::doExport(), ExportAVI::doExport(), ExportAudio::doExport(), Export1394::doExport(), and kino2raw().

00574     {
00575         return m_output;
00576     }

template<class input_t, class output_t>
bool AsyncAudioResample< input_t, output_t >::IsError  )  const [inline]
 

Definition at line 490 of file frame.h.

References AsyncAudioResample< input_t, output_t >::m_conformer, AsyncAudioResample< input_t, output_t >::m_error, and AsyncAudioResample< input_t, output_t >::m_state.

Referenced by ExportPipe::doExport(), ExportMJPEG::doExport(), ExportAVI::doExport(), ExportAudio::doExport(), Export1394::doExport(), and kino2raw().

00491     {
00492         return m_error || (m_state && src_error( m_state )) || (m_conformer && src_error( m_conformer ));
00493     }

template<class input_t, class output_t>
int AsyncAudioResample< input_t, output_t >::Process double  rate,
int  samples
[inline]
 

Definition at line 554 of file frame.h.

References AsyncAudioResample< input_t, output_t >::m_channels, AsyncAudioResample< input_t, output_t >::m_internalOutput, AsyncAudioResample< input_t, output_t >::m_output, AsyncAudioResample< input_t, output_t >::m_rate, and AsyncAudioResample< input_t, output_t >::m_state.

Referenced by Export::calculateAdjustedRate(), ExportPipe::doExport(), ExportMJPEG::doExport(), ExportAVI::doExport(), ExportAudio::doExport(), Export1394::doExport(), and kino2raw().

00555     {
00556         int out_samples = src_callback_read( m_state, rate / m_rate, samples, m_internalOutput );
00557 // cerr << "AsyncAudioResample::Process rate " << rate << " req samples " << samples << " out samples " << out_samples << endl;
00558         for ( int i = 0; i < out_samples * m_channels; ++i )
00559         {
00560             float sample = m_internalOutput[ i ];
00561             if ( sample > 1.0 )
00562                 sample = 1.0;
00563             if ( sample < -1.0 )
00564                 sample = -1.0;
00565             if ( sample >= 0 )
00566                 m_output[ i ] = ( long int )( 32767.0 * sample );
00567             else
00568                 m_output[ i ] = ( long int )( 32768.0 * sample );
00569         }
00570         return out_samples;
00571     }

template<class input_t, class output_t>
long AsyncAudioResample< input_t, output_t >::ReadAudio float **  data  )  [inline]
 

Definition at line 505 of file frame.h.

References Frame::ExtractAudio(), AudioInfo::frequency, Frame::GetAudioInfo(), PlayList::GetFrame(), AsyncAudioResample< input_t, output_t >::m_channels, AsyncAudioResample< input_t, output_t >::m_conformer, AsyncAudioResample< input_t, output_t >::m_end, AsyncAudioResample< input_t, output_t >::m_every, AsyncAudioResample< input_t, output_t >::m_frame, AsyncAudioResample< input_t, output_t >::m_info, AsyncAudioResample< input_t, output_t >::m_input, AsyncAudioResample< input_t, output_t >::m_internalConformed, AsyncAudioResample< input_t, output_t >::m_internalInput, AsyncAudioResample< input_t, output_t >::m_playlist, AsyncAudioResample< input_t, output_t >::m_position, AsyncAudioResample< input_t, output_t >::m_rate, AsyncAudioResample< input_t, output_t >::m_silentFrameCount, and AsyncAudioResample< input_t, output_t >::m_srcdata.

Referenced by AsyncAudioResample< input_t, output_t >::callback().

00506     {
00507 // cerr << "AsyncAudioResample::ReadAudio" << endl;
00508         long output_frames = 0;
00509         if ( m_position <= m_end )
00510         {
00511             if ( m_playlist->GetFrame( m_position, m_frame ) )
00512             {
00513                 int n = m_frame.ExtractAudio( m_input ) / m_channels / sizeof(input_t);
00514 // cerr << "AsyncAudioResample::ReadAudio position " << m_position << " input samples " << n << endl;
00515                 *data = m_internalConformed;
00516                 if ( n == 0 )
00517                 {
00518                     output_frames = m_frame.CalculateNumberSamples( int(m_rate), m_silentFrameCount++ );
00519                     memset( m_internalConformed, 0, sizeof( m_internalConformed ) );
00520                 }
00521                 else
00522                 {
00523                     m_frame.GetAudioInfo( m_info );
00524                     if ( m_rate != m_info.frequency )
00525                     {
00526                         for ( int i = 0; i < n * m_channels; ++i )
00527                             m_internalInput[ i ] = ( float ) m_input[ i ] / 32768.0;
00528                         m_srcdata.input_frames = n;
00529                         m_srcdata.src_ratio = m_rate / m_info.frequency;
00530                         m_srcdata.end_of_input = (m_position > m_end );
00531                         src_process( m_conformer, &m_srcdata );
00532                         output_frames = m_srcdata.output_frames_gen;
00533                     }
00534                     else
00535                     {
00536                         for ( int i = 0; i < n * m_channels; ++i )
00537                             m_internalConformed[ i ] = ( float ) m_input[ i ] / 32768.0;
00538                         output_frames = n;
00539                     }
00540                 }
00541             }
00542             m_position += m_every;
00543         }
00544 
00545         return output_frames;
00546     }


Member Data Documentation

template<class input_t, class output_t>
int AsyncAudioResample< input_t, output_t >::m_channels [private]
 

Definition at line 434 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::AsyncAudioResample(), AsyncAudioResample< input_t, output_t >::Process(), and AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
SRC_STATE* AsyncAudioResample< input_t, output_t >::m_conformer [private]
 

Definition at line 431 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::AsyncAudioResample(), AsyncAudioResample< input_t, output_t >::GetError(), AsyncAudioResample< input_t, output_t >::IsError(), AsyncAudioResample< input_t, output_t >::ReadAudio(), and AsyncAudioResample< input_t, output_t >::~AsyncAudioResample().

template<class input_t, class output_t>
int AsyncAudioResample< input_t, output_t >::m_end [private]
 

Definition at line 435 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
int AsyncAudioResample< input_t, output_t >::m_error [private]
 

Definition at line 428 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::AsyncAudioResample(), AsyncAudioResample< input_t, output_t >::GetError(), and AsyncAudioResample< input_t, output_t >::IsError().

template<class input_t, class output_t>
int AsyncAudioResample< input_t, output_t >::m_every [private]
 

Definition at line 422 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
Frame& AsyncAudioResample< input_t, output_t >::m_frame [private]
 

Definition at line 429 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::ReadAudio(), and AsyncAudioResample< input_t, output_t >::~AsyncAudioResample().

template<class input_t, class output_t>
AudioInfo AsyncAudioResample< input_t, output_t >::m_info [private]
 

Definition at line 433 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
input_t AsyncAudioResample< input_t, output_t >::m_input[BUFFER_LEN] [private]
 

Definition at line 423 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
float AsyncAudioResample< input_t, output_t >::m_internalConformed[BUFFER_LEN] [private]
 

Definition at line 425 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::AsyncAudioResample(), and AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
float AsyncAudioResample< input_t, output_t >::m_internalInput[BUFFER_LEN] [private]
 

Definition at line 424 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::AsyncAudioResample(), and AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
float AsyncAudioResample< input_t, output_t >::m_internalOutput[BUFFER_LEN] [private]
 

Definition at line 426 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::Process().

template<class input_t, class output_t>
output_t AsyncAudioResample< input_t, output_t >::m_output[BUFFER_LEN] [private]
 

Definition at line 427 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::GetOutput(), and AsyncAudioResample< input_t, output_t >::Process().

template<class input_t, class output_t>
PlayList* AsyncAudioResample< input_t, output_t >::m_playlist [private]
 

Definition at line 420 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
int AsyncAudioResample< input_t, output_t >::m_position [private]
 

Definition at line 421 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
double AsyncAudioResample< input_t, output_t >::m_rate [private]
 

Definition at line 430 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::Process(), and AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
int AsyncAudioResample< input_t, output_t >::m_silentFrameCount [private]
 

Definition at line 436 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
SRC_DATA AsyncAudioResample< input_t, output_t >::m_srcdata [private]
 

Definition at line 432 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::AsyncAudioResample(), and AsyncAudioResample< input_t, output_t >::ReadAudio().

template<class input_t, class output_t>
SRC_STATE* AsyncAudioResample< input_t, output_t >::m_state [private]
 

Definition at line 419 of file frame.h.

Referenced by AsyncAudioResample< input_t, output_t >::AsyncAudioResample(), AsyncAudioResample< input_t, output_t >::GetError(), AsyncAudioResample< input_t, output_t >::IsError(), AsyncAudioResample< input_t, output_t >::Process(), and AsyncAudioResample< input_t, output_t >::~AsyncAudioResample().


The documentation for this class was generated from the following file:
Generated on Sun Mar 11 22:12:43 2007 for Kino by  doxygen 1.4.2