[Jahshaka-cvs] openlibraries/src/openmedialib/ml input.hpp, 1.26, 1.27 utilities.cpp, 1.47, 1.48
Status: Beta
Brought to you by:
jahshaka
From: Charles Y. <lil...@us...> - 2007-06-28 21:47:00
|
Update of /cvsroot/openlibraries/openlibraries/src/openmedialib/ml In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv30580/src/openmedialib/ml Modified Files: input.hpp utilities.cpp Log Message: + Deferred initialisation patch for oml inputs - currently ensures backward compatability (property assignment operations and logging to follow) Index: utilities.cpp =================================================================== RCS file: /cvsroot/openlibraries/openlibraries/src/openmedialib/ml/utilities.cpp,v retrieving revision 1.47 retrieving revision 1.48 diff -u -d -r1.47 -r1.48 --- utilities.cpp 18 Apr 2007 19:01:54 -0000 1.47 +++ utilities.cpp 28 Jun 2007 21:46:53 -0000 1.48 @@ -201,6 +201,7 @@ case 1: case 3: case 4: + case 5: case 6: return true; } @@ -350,6 +351,26 @@ + CHANNEL_WEIGHT_LEFT_RIGHT_SURROUND * float(*(sample_data + CHANNEL_IDX_RIGHT_SURROUND)); } break; + case 5: + { + const unsigned char CHANNEL_IDX_LEFT = 0; + const unsigned char CHANNEL_IDX_RIGHT = 1; + const unsigned char CHANNEL_IDX_LEFT_SURROUND = 2; + const unsigned char CHANNEL_IDX_RIGHT_SURROUND = 3; + const unsigned char CHANNEL_IDX_CENTRE = 4; + const unsigned char NUM_INPUT_CHANNELS = 5; + + short* sample_data = ((short*)(input_audio->data()) + (sample_idx * NUM_INPUT_CHANNELS)); + + sum[0] = float(*(sample_data + CHANNEL_IDX_LEFT)) + + float(*(sample_data + CHANNEL_IDX_LEFT_SURROUND)) + + float(*(sample_data + CHANNEL_IDX_CENTRE)); + + sum[1] = float(*(sample_data + CHANNEL_IDX_RIGHT)) + + float(*(sample_data + CHANNEL_IDX_RIGHT_SURROUND)) + + float(*(sample_data + CHANNEL_IDX_CENTRE)); + } + break; case 6: { const unsigned char CHANNEL_IDX_LOW_FREQ_EFFECTS = 0; @@ -360,22 +381,17 @@ const unsigned char CHANNEL_IDX_RIGHT_SURROUND = 5; const unsigned char NUM_INPUT_CHANNELS = 6; - const float CHANNEL_WEIGHT_LEFT_RIGHT = 0.4; - const float CHANNEL_WEIGHT_LEFT_RIGHT_SURROUND = 0.4; - const float CHANNEL_WEIGHT_CENTRE = 0.2; - const float CHANNEL_WEIGHT_LOW_FREQ_EFFECTS = 0.22; - short* sample_data = ((short*)(input_audio->data()) + (sample_idx * NUM_INPUT_CHANNELS)); - sum[0] = CHANNEL_WEIGHT_LEFT_RIGHT * float(*(sample_data + CHANNEL_IDX_LEFT)) - + CHANNEL_WEIGHT_LEFT_RIGHT_SURROUND * float(*(sample_data + CHANNEL_IDX_LEFT_SURROUND)) - + CHANNEL_WEIGHT_CENTRE * float(*(sample_data + CHANNEL_IDX_CENTRE)) - + CHANNEL_WEIGHT_LOW_FREQ_EFFECTS * float(*(sample_data + CHANNEL_IDX_LOW_FREQ_EFFECTS)); + sum[0] = float(*(sample_data + CHANNEL_IDX_LEFT)) + + float(*(sample_data + CHANNEL_IDX_LEFT_SURROUND)) + + float(*(sample_data + CHANNEL_IDX_CENTRE)) + + float(*(sample_data + CHANNEL_IDX_LOW_FREQ_EFFECTS)); - sum[1] = CHANNEL_WEIGHT_LEFT_RIGHT * float(*(sample_data + CHANNEL_IDX_RIGHT)) - + CHANNEL_WEIGHT_LEFT_RIGHT_SURROUND * float(*(sample_data + CHANNEL_IDX_RIGHT_SURROUND)) - + CHANNEL_WEIGHT_CENTRE * float(*(sample_data + CHANNEL_IDX_CENTRE)) - + CHANNEL_WEIGHT_LOW_FREQ_EFFECTS * float(*(sample_data + CHANNEL_IDX_LOW_FREQ_EFFECTS)); + sum[1] = float(*(sample_data + CHANNEL_IDX_RIGHT)) + + float(*(sample_data + CHANNEL_IDX_RIGHT_SURROUND)) + + float(*(sample_data + CHANNEL_IDX_CENTRE)) + + float(*(sample_data + CHANNEL_IDX_LOW_FREQ_EFFECTS)); } break; } @@ -500,11 +516,12 @@ { input_type_ptr result = input_type_ptr( ); openmedialib_plugin_ptr plug = get_plug( resource, L"input" ); - return plug == 0 ? result : plug->input( resource ); + result = plug == 0 ? result : plug->input( resource ); + if ( result ) + result->init( ); + return result; } - - // Return the first matching input object ML_DECLSPEC ml::input_type_ptr ml::create_input( const pl::string &resource ) { @@ -529,7 +546,10 @@ { filter_type_ptr result = filter_type_ptr( ); openmedialib_plugin_ptr plug = get_plug( resource, L"filter" ); - return plug == 0 ? result : plug->filter( resource ); + result = plug == 0 ? result : plug->filter( resource ); + if ( result ) + result->init( ); + return result; } ML_DECLSPEC ml::audio_type_ptr ml::audio_resample(const audio_type_ptr& input_audio, int sampling_freq) Index: input.hpp =================================================================== RCS file: /cvsroot/openlibraries/openlibraries/src/openmedialib/ml/input.hpp,v retrieving revision 1.26 retrieving revision 1.27 diff -u -d -r1.26 -r1.27 --- input.hpp 4 Jan 2007 09:08:01 -0000 1.26 +++ input.hpp 28 Jun 2007 21:46:53 -0000 1.27 @@ -59,6 +59,7 @@ // Constructor/destructor explicit input_type( ) : properties_( ) + , initialized_( false ) , prop_debug_( pcos::key::from_string( "debug" ) ) , position_( 0 ) , process_( process_image | process_audio ) @@ -69,6 +70,10 @@ virtual ~input_type( ) { } + // Provides a mechanism for defering initialisation from the ctor + bool init( ) { if ( !initialized_ ) initialized_ = initialize( ); return initialized_; } + const bool initialized( ) const { return initialized_; } + // Filters reimplement these virtual const size_t slot_count( ) const { return 0; } virtual bool connect( input_type_ptr, size_t = 0 ) { return false; } @@ -149,8 +154,13 @@ // Determine the debug level inline int debug_level( ) { return prop_debug_.value< int >( ); } + protected: + // Virtual method for initialization + virtual bool initialize( ) { return true; } + private: pcos::property_container properties_; + bool initialized_; pcos::property prop_debug_; int position_; int process_; |