Thread: [Hdrflow-svn] SF.net SVN: hdrflow: [80] lib/openlibraries/src
Status: Pre-Alpha
Brought to you by:
glslang
|
From: <gl...@us...> - 2007-04-13 22:04:27
|
Revision: 80
http://hdrflow.svn.sourceforge.net/hdrflow/?rev=80&view=rev
Author: glslang
Date: 2007-04-13 15:04:25 -0700 (Fri, 13 Apr 2007)
Log Message:
-----------
+ bug fixes
Modified Paths:
--------------
lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.cpp
lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.opl
lib/openlibraries/src/openimagelib/il/utility.cpp
lib/openlibraries/src/openimagelib/plugins/exr/exr_plugin.cpp
Modified: lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.cpp
===================================================================
--- lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.cpp 2007-04-13 10:28:42 UTC (rev 79)
+++ lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.cpp 2007-04-13 22:04:25 UTC (rev 80)
@@ -36,7 +36,6 @@
typedef il::image_type::size_type size_type;
#ifdef HAVE_OPENEXR
-
// From ILM OpenEXR examples.
float knee (double x, double f)
{ return float( Imath::Math<double>::log( x * f + 1 ) / f ); }
@@ -110,7 +109,7 @@
return ( unsigned char ) ( v + d[ y & 3 ][ x & 3 ] );
}
- void compute_fog_color( const image_type_ptr& im, int bs, float& fog_r, float& fog_g, float& fog_b )
+ void compute_fog_color( const image_type_ptr& im, float& fog_r, float& fog_g, float& fog_b )
{
fog_r = fog_g = fog_b = 0.0f;
@@ -119,7 +118,7 @@
{
for( int j = 0; j < im->width( ); ++j )
{
- for( int k = 0; k < bs; ++k )
+ for( int k = 0; k < 3; ++k )
{
half h;
@@ -137,49 +136,36 @@
fog_b /= im->width( ) * im->height( );
}
- image_type_ptr convert_to_half( const image_type_ptr& im, int& bs )
+ image_type_ptr convert_to_half( const image_type_ptr& im )
{
- typedef il::image<unsigned char, il::r16g16b16f> r16g16b16f_image_type;
- typedef il::image<unsigned char, il::r16g16b16a16f> r16g16b16a16f_image_type;
-
- if( !( im->pf( ) == L"r32g32b32f" || im->pf( ) == L"r32g32b32a32f" ) )
- {
- if( im->pf( ) == L"r16g16b16f" )
- bs = 3;
- else if( im->pf( ) == L"r16g16b16a16f" )
- bs = 4;
-
+ if( im->pf( ) == L"r16g16b16f" )
return im;
- }
- image_type_ptr new_im;
- if( im->pf( ) == L"r32g32b32f" )
- {
- new_im = il::allocate( L"r16g16b16f", im->width( ), im->height( ) );
- bs = 3;
- }
- else if( im->pf( ) == L"r32g32b32a32f" )
- {
- new_im = il::allocate( L"r16g16b16a16f", im->width( ), im->height( ) );
- bs = 4;
- }
+ size_type width = im->width( );
+ size_type height = im->height( );
- image_type::const_pointer src_im = im->data( );
- image_type::pointer dst_im = new_im->data( );
+ image_type_ptr new_im = il::allocate( L"r16g16b16f", im->width( ), im->height( ) );
+
+ image_type::const_pointer src = im->data( );
+ image_type::pointer dst = new_im->data( );
- int f_block_inc = sizeof( float ) * bs;
- int i_block_inc = sizeof( unsigned short ) * bs;
+ int src_pitch = ( im->pitch( ) - im->linesize( ) ) * sizeof( float );
+ int dst_pitch = ( new_im->pitch( ) - new_im->linesize( ) ) * sizeof( unsigned short );
- for( int i = 0; i < im->height( ); ++i )
+ for( int i = 0; i < height; ++i )
{
- for( int j = 0; j < im->width( ); ++j )
+ for( int j = 0; j < width; ++j )
{
- for( int k = 0; k < bs; ++k )
- ( ( unsigned short* ) dst_im )[ k ] = Imf::floatToHalf( ( ( const float* ) src_im )[ k ] ).bits( );
-
- src_im += f_block_inc;
- dst_im += i_block_inc;
+ ( ( unsigned short* ) dst )[ 0 ] = Imf::floatToHalf( ( ( const float* ) src )[ 0 ] ).bits( );
+ ( ( unsigned short* ) dst )[ 1 ] = Imf::floatToHalf( ( ( const float* ) src )[ 1 ] ).bits( );
+ ( ( unsigned short* ) dst )[ 2 ] = Imf::floatToHalf( ( ( const float* ) src )[ 2 ] ).bits( );
+
+ src += 3 * sizeof( float );
+ dst += 3 * sizeof( unsigned short );
}
+
+ src += src_pitch;
+ dst += dst_pitch;
}
return new_im;
@@ -187,53 +173,55 @@
image_type_ptr tm_ilm_exr( const image_type_ptr& im, float exposure, float defog, float kneeLow, float kneeHigh )
{
- if( !( im->pf( ) == L"r16g16b16f" ||
- im->pf( ) == L"r16g16b16a16f" ||
- im->pf( ) == L"r32g32b32f" ||
- im->pf( ) == L"r32g32b32a32f" ) )
- return image_type_ptr( );
+ image_type_ptr dst_img = im;
+
+ if( im->pf( ) == L"r16g16b16f" || im->pf( ) == L"r32g32b32f" )
+ {
+ image_type_ptr half_im = convert_to_half( im );
- int bs;
- image_type_ptr half_im = convert_to_half( im, bs );
+ float fog_r, fog_g, fog_b;
+ compute_fog_color( half_im, fog_r, fog_g, fog_b );
- float fog_r, fog_g, fog_b;
- compute_fog_color( half_im, bs, fog_r, fog_g, fog_b );
+ halfFunction<float> r_gamma( gamma( exposure, defog * fog_r, kneeLow, kneeHigh ), -HALF_MAX, HALF_MAX );
+ halfFunction<float> g_gamma( gamma( exposure, defog * fog_g, kneeLow, kneeHigh ), -HALF_MAX, HALF_MAX );
+ halfFunction<float> b_gamma( gamma( exposure, defog * fog_b, kneeLow, kneeHigh ), -HALF_MAX, HALF_MAX );
- halfFunction<float> r_gamma( gamma( exposure, defog * fog_r, kneeLow, kneeHigh ), -HALF_MAX, HALF_MAX );
- halfFunction<float> g_gamma( gamma( exposure, defog * fog_g, kneeLow, kneeHigh ), -HALF_MAX, HALF_MAX );
- halfFunction<float> b_gamma( gamma( exposure, defog * fog_b, kneeLow, kneeHigh ), -HALF_MAX, HALF_MAX );
+ size_type width = im->width( );
+ size_type height = im->height( );
- image_type_ptr new_im;
- if( bs == 3 )
- new_im = il::allocate( L"r8g8b8", im->width( ), im->height( ) );
- else if( bs == 4 )
- new_im = il::allocate( L"r8g8b8a8", im->width( ), im->height( ) );
+ dst_img = il::allocate( L"b8g8r8a8", width, height );
- image_type::const_pointer src_im = half_im->data( );
- image_type::pointer dst_im = new_im->data( );
+ image_type::const_pointer src = half_im->data( );
+ image_type::pointer dst = dst_img->data( );
- for( int i = 0; i < new_im->height( ); ++i )
- {
- for( int j = 0; j < new_im->width( ); ++j )
+ size_type src_pitch = ( half_im->pitch( ) - half_im->linesize( ) ) * sizeof( unsigned short );
+ size_type dst_pitch = dst_img->pitch( ) - dst_img->linesize( );
+
+ for( int i = 0; i < height; ++i )
{
- for( int k = 0; k < bs; ++k )
+ for( int j = 0; j < width; ++j )
{
- half h;
-
- h.setBits( ( ( unsigned short* ) src_im )[ 0 ] );
-
- *dst_im = dither( r_gamma( h ), j, i );
-
- src_im += sizeof( unsigned short );
- dst_im += sizeof( unsigned char );
+ half h0, h1, h2;
+
+ h0.setBits( ( ( unsigned short* ) src )[ 0 ] ); src += sizeof( unsigned short );
+ h1.setBits( ( ( unsigned short* ) src )[ 0 ] ); src += sizeof( unsigned short );
+ h2.setBits( ( ( unsigned short* ) src )[ 0 ] ); src += sizeof( unsigned short );
+
+ *dst++ = dither( r_gamma( h2 ), j, i );
+ *dst++ = dither( g_gamma( h1 ), j, i );
+ *dst++ = dither( b_gamma( h0 ), j, i );
+ *dst++ = 255;
}
+
+ src += src_pitch;
+ dst += dst_pitch;
}
}
- return new_im;
+ return dst_img;
}
-
#endif
+
// Ferwerda et al TVI functions.
float tp( float L )
{
Modified: lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.opl
===================================================================
--- lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.opl 2007-04-13 10:28:42 UTC (rev 79)
+++ lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.opl 2007-04-13 22:04:25 UTC (rev 80)
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<openlibraries version="1.0">
<!-- plugins go here -->
- <openeffectslib name="oel" version="0.1.0">
- <plugin name="OpenLibraries tonemap plugin" type="filter" extension='"tm_linear", "tm_ilm_exr". "tm_ferwerda"' merit="0" filename='"libopeneffectslib_tonemap.so", "libopeneffectslib_tonemap.dylib", "openeffectslib_tonemap-vc80-d-0_4_0.dll", "openeffectslib_tonemap-vc80-r-0_4_0.dll"'/>
- </openeffectslib>
+ <openmedialib name="oel" version="0.1.0">
+ <plugin name="OpenLibraries tonemap plugin" type="filter" extension='"tm_linear", "tm_ilm_exr", "tm_ferwerda"' merit="0" filename='"libopeneffectslib_tonemap.so", "libopeneffectslib_tonemap.dylib", "openeffectslib_tonemap-vc80-d-0_4_0.dll", "openeffectslib_tonemap-vc80-r-0_4_0.dll"'/>
+ </openmedialib>
</openlibraries>
Modified: lib/openlibraries/src/openimagelib/il/utility.cpp
===================================================================
--- lib/openlibraries/src/openimagelib/il/utility.cpp 2007-04-13 10:28:42 UTC (rev 79)
+++ lib/openlibraries/src/openimagelib/il/utility.cpp 2007-04-13 22:04:25 UTC (rev 80)
@@ -1853,7 +1853,7 @@
return dst_img;
}
-// Free function to truncate 32-bit float to b8g8r8a8. intention is to perform all tonemaps at the float level and convert to 8-bit only if needed.
+// Truncates 32-bit float to b8g8r8a8. The intention is to perform all tonemaps at the float level and convert to 8-bit only when needed.
// Assumes normalise( im, 255.0f ) has already been called.
static image_type_ptr r32g32b32f_to_b8g8r8a8( image_type_ptr src_img, const std::wstring &format )
{
@@ -1877,9 +1877,9 @@
{
while( width-- )
{
+ *( dst + 2 ) = static_cast<unsigned char>( *src++ );
+ *( dst + 1 ) = static_cast<unsigned char>( *src++ );
*( dst + 0 ) = static_cast<unsigned char>( *src++ );
- *( dst + 1 ) = static_cast<unsigned char>( *src++ );
- *( dst + 2 ) = static_cast<unsigned char>( *src++ );
*( dst + 3 ) = 255;
dst += 4;
Modified: lib/openlibraries/src/openimagelib/plugins/exr/exr_plugin.cpp
===================================================================
--- lib/openlibraries/src/openimagelib/plugins/exr/exr_plugin.cpp 2007-04-13 10:28:42 UTC (rev 79)
+++ lib/openlibraries/src/openimagelib/plugins/exr/exr_plugin.cpp 2007-04-13 22:04:25 UTC (rev 80)
@@ -22,11 +22,6 @@
void destroy( il::image_type* im )
{ delete im; }
- std::wstring exr_image_type_to_image_type( )
- {
- return L"r32g32b32f";
- }
-
il::image_type_ptr load_exr( const fs::path& path )
{
Imf::RgbaInputFile file( path.native_file_string( ).c_str( ) );
@@ -41,21 +36,17 @@
file.setFrameBuffer( &exr_texels[ 0 ][ 0 ], 1, width );
file.readPixels( dw.min.y, dw.max.y );
- il::image_type_ptr im = il::allocate( exr_image_type_to_image_type( ), width, height );
+ il::image_type_ptr im = il::allocate( L"r32g32b32f", width, height );
il::image_type::pointer texels = im->data( );
for( int j = 0; j < height; ++j )
{
for( int i = 0; i < width; ++i )
{
- half h0 = exr_texels[ j ][ i ].r;
- half h1 = exr_texels[ j ][ i ].g;
- half h2 = exr_texels[ j ][ i ].b;
-
- ( ( float* ) texels )[ 0 ] = ImfHalfToFloat( ( ImfHalf ) h0 );
- ( ( float* ) texels )[ 1 ] = ImfHalfToFloat( ( ImfHalf ) h1 );
- ( ( float* ) texels )[ 2 ] = ImfHalfToFloat( ( ImfHalf ) h2 );
-
+ ( ( float* ) texels )[ 0 ] = exr_texels[ j ][ i ].r;
+ ( ( float* ) texels )[ 1 ] = exr_texels[ j ][ i ].g;
+ ( ( float* ) texels )[ 2 ] = exr_texels[ j ][ i ].b;
+
texels += 3 * sizeof( float );
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <gl...@us...> - 2007-04-27 22:05:42
|
Revision: 105
http://hdrflow.svn.sourceforge.net/hdrflow/?rev=105&view=rev
Author: glslang
Date: 2007-04-27 15:05:41 -0700 (Fri, 27 Apr 2007)
Log Message:
-----------
+ rgbe native colour space
+ greg ward's hdr store
+ colour conversion for rgbe
+ more ofx implementation (very far from complete)
Modified Paths:
--------------
lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.cpp
lib/openlibraries/src/openimagelib/il/float_traits.hpp
lib/openlibraries/src/openimagelib/il/utility.cpp
lib/openlibraries/src/openimagelib/plugins/hdr/hdr_plugin.cpp
lib/openlibraries/src/openimagelib/plugins/jpg/jpg_plugin.opl
lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
lib/openlibraries/src/openpluginlib/pl/openpluginlib.cpp
Modified: lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.cpp
===================================================================
--- lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.cpp 2007-04-24 22:56:51 UTC (rev 104)
+++ lib/openlibraries/src/openeffectslib/plugins/tonemap/tonemap_plugin.cpp 2007-04-27 22:05:41 UTC (rev 105)
@@ -173,11 +173,12 @@
image_type_ptr tm_ilm_exr( const image_type_ptr& im, float exposure, float defog, float kneeLow, float kneeHigh )
{
- image_type_ptr dst_img = im;
+ image_type_ptr src_img = convert( im, L"r32g32b32f" );
+ image_type_ptr dst_img = src_img;
- if( im->pf( ) == L"r16g16b16f" || im->pf( ) == L"r32g32b32f" )
+ if( src_img->pf( ) == L"r16g16b16f" || src_img->pf( ) == L"r32g32b32f" )
{
- image_type_ptr half_im = convert_to_half( im );
+ image_type_ptr half_im = convert_to_half( src_img );
float fog_r, fog_g, fog_b;
compute_fog_color( half_im, fog_r, fog_g, fog_b );
@@ -186,8 +187,8 @@
halfFunction<float> g_gamma( gamma( exposure, defog * fog_g, kneeLow, kneeHigh ), -HALF_MAX, HALF_MAX );
halfFunction<float> b_gamma( gamma( exposure, defog * fog_b, kneeLow, kneeHigh ), -HALF_MAX, HALF_MAX );
- size_type width = im->width( );
- size_type height = im->height( );
+ size_type width = src_img->width( );
+ size_type height = src_img->height( );
dst_img = il::allocate( L"b8g8r8a8", width, height );
@@ -245,98 +246,94 @@
image_type_ptr tm_ferwerda( image_type_ptr im, float factor, float Ldmax )
{
- image_type_ptr dst_img = im;
+ image_type_ptr src_img = convert( im, L"r32g32b32f" );
+ image_type_ptr dst_img = il::allocate( L"r32g32b32f", im->width( ), im->height( ) );
- if( im->pf( ) == L"r32g32b32f" )
- {
- dst_img = il::allocate( im->pf( ), im->width( ), im->height( ) );
+ size_type width = src_img->width( );
+ size_type height = src_img->height( );
- size_type width = im->width( );
- size_type height = im->height( );
+ const float* src = ( const float* ) src_img->data( );
+ size_type src_pitch = src_img->pitch( );
- const float* src = ( const float* ) im->data( );
- size_type src_pitch = im->pitch( );
+ float* dst = ( float* ) dst_img->data( );
+ size_type dst_pitch = dst_img->pitch( );
- float* dst = ( float* ) dst_img->data( );
- size_type dst_pitch = dst_img->pitch( );
+ const float* sptr = src;
+ float* dptr = dst;
- const float* sptr = src;
- float* dptr = dst;
-
- // apply linear scaling factor.
- for( int i = 0; i < height; ++i )
+ // apply linear scaling factor.
+ for( int i = 0; i < height; ++i )
+ {
+ for( int j = 0; j < width; ++j )
{
- for( int j = 0; j < width; ++j )
- {
- *dst++ = *src++ * factor;
- *dst++ = *src++ * factor;
- *dst++ = *src++ * factor;
- }
-
- dst = dptr += dst_pitch;
- src = sptr += src_pitch;
+ *dst++ = *src++ * factor;
+ *dst++ = *src++ * factor;
+ *dst++ = *src++ * factor;
}
+
+ dst = dptr += dst_pitch;
+ src = sptr += src_pitch;
+ }
- // reset the pointer.
- dst = ( float* ) dst_img->data( );
- dptr = dst;
+ // reset the pointer.
+ dst = ( float* ) dst_img->data( );
+ dptr = dst;
- float Lmax = 0.0f;
+ float Lmax = 0.0f;
- // calculate maximum luminance value.
- for( int i = 0; i < height; ++i )
+ // calculate maximum luminance value.
+ for( int i = 0; i < height; ++i )
+ {
+ for( int j = 0; j < width; ++j )
{
- for( int j = 0; j < width; ++j )
- {
- float r = *dst++;
- float g = *dst++;
- float b = *dst++;
+ float r = *dst++;
+ float g = *dst++;
+ float b = *dst++;
- float lum = r * 0.2125f + g * 0.7154f + b * 0.0721f;
+ float lum = r * 0.2125f + g * 0.7154f + b * 0.0721f;
- if( lum > Lmax )
- Lmax = lum;
- }
-
- dst = dptr += dst_pitch;
+ if( lum > Lmax )
+ Lmax = lum;
}
+
+ dst = dptr += dst_pitch;
+ }
- float Lwa = Lmax * 0.5f;
- float log_Lwa = log10f( Lwa );
- float log_Lda = log10f( Ldmax * 0.5f );
+ float Lwa = Lmax * 0.5f;
+ float log_Lwa = log10f( Lwa );
+ float log_Lda = log10f( Ldmax * 0.5f );
- // calculate photopic and scotopic factors.
- float mp = powf( 10.0f, tp( log_Lda ) - tp( log_Lwa ) );
- float ms = powf( 10.0f, ts( log_Lda ) - ts( log_Lwa ) );
- float df = Lmax / Ldmax;
+ // calculate photopic and scotopic factors.
+ float mp = powf( 10.0f, tp( log_Lda ) - tp( log_Lwa ) );
+ float ms = powf( 10.0f, ts( log_Lda ) - ts( log_Lwa ) );
+ float df = Lmax / Ldmax;
- // reset the dst pointer.
- dst = ( float* ) dst_img->data( );
- dptr = dst;
+ // reset the dst pointer.
+ dst = ( float* ) dst_img->data( );
+ dptr = dst;
- // tonemap
- for( int i = 0; i < height; ++i )
+ // tonemap
+ for( int i = 0; i < height; ++i )
+ {
+ for( int j = 0; j < width; ++j )
{
- for( int j = 0; j < width; ++j )
- {
- float r = *( dst + 0 );
- float g = *( dst + 1 );
- float b = *( dst + 2 );
+ float r = *( dst + 0 );
+ float g = *( dst + 1 );
+ float b = *( dst + 2 );
- float lum = r * 0.2125f + g * 0.7154f + b * 0.0721f;
- float sf = ms * lum;
+ float lum = r * 0.2125f + g * 0.7154f + b * 0.0721f;
+ float sf = ms * lum;
- float dr = df * ( mp * r + sf );
- float dg = df * ( mp * g + sf );
- float db = df * ( mp * b + sf );
+ float dr = df * ( mp * r + sf );
+ float dg = df * ( mp * g + sf );
+ float db = df * ( mp * b + sf );
- *dst++ = dr > Ldmax ? Ldmax : dr;
- *dst++ = dg > Ldmax ? Ldmax : dg;
- *dst++ = db > Ldmax ? Ldmax : db;
- }
-
- dst = dptr += dst_pitch;
+ *dst++ = dr > Ldmax ? Ldmax : dr;
+ *dst++ = dg > Ldmax ? Ldmax : dg;
+ *dst++ = db > Ldmax ? Ldmax : db;
}
+
+ dst = dptr += dst_pitch;
}
return dst_img;
Modified: lib/openlibraries/src/openimagelib/il/float_traits.hpp
===================================================================
--- lib/openlibraries/src/openimagelib/il/float_traits.hpp 2007-04-24 22:56:51 UTC (rev 104)
+++ lib/openlibraries/src/openimagelib/il/float_traits.hpp 2007-04-27 22:05:41 UTC (rev 105)
@@ -22,7 +22,7 @@
typedef typename surface_format<T, storage>::size_type size_type;
private:
- static const size_type bs = 3;
+ static const size_type bs = 4;
public:
explicit rgbe( size_type width,
@@ -42,7 +42,7 @@
public:
virtual size_type allocsize( size_type width, size_type height, size_type depth ) const
- { return sizeof( float ) * detail::rgb_Allocate_size<T>( )( bs, width, height, depth ); }
+ { return detail::rgb_Allocate_size<T>( )( bs, width, height, depth ); }
virtual rgbe* clone( size_type w, size_type h )
{ return new rgbe( *this, w, h ); }
Modified: lib/openlibraries/src/openimagelib/il/utility.cpp
===================================================================
--- lib/openlibraries/src/openimagelib/il/utility.cpp 2007-04-24 22:56:51 UTC (rev 104)
+++ lib/openlibraries/src/openimagelib/il/utility.cpp 2007-04-27 22:05:41 UTC (rev 105)
@@ -73,6 +73,44 @@
lut[ i ] = static_cast<unsigned short>( floorf( val + 0.5f ) );
}
}
+
+ void float2rgbe( float red, float green, float blue, unsigned char rgbe[ 4 ] )
+ {
+ float v = red;
+ if( v < green ) v = green;
+ if( v < blue ) v = blue;
+
+ if( v < ( std::numeric_limits<float>::min )( ) )
+ {
+ rgbe[ 0 ] = rgbe[ 1 ] = rgbe[ 2 ] = rgbe[ 3 ] = 0;
+ }
+ else
+ {
+ int exponent;
+ v = frexp( v, &exponent ) * 256.0f / v;
+
+ rgbe[ 0 ] = static_cast<unsigned char>( red * v );
+ rgbe[ 1 ] = static_cast<unsigned char>( green * v );
+ rgbe[ 2 ] = static_cast<unsigned char>( blue * v );
+ rgbe[ 3 ] = static_cast<unsigned char>( exponent + 128 );
+ }
+ }
+
+ void rgbe2float( unsigned char rgbe[ 4 ], float& red, float& green, float& blue )
+ {
+ if( rgbe[ 3 ] )
+ {
+ float f = ldexp( 1.0f, rgbe[ 3 ] - ( 128 + 8 ) );
+
+ red = rgbe[ 0 ] * f;
+ green = rgbe[ 1 ] * f;
+ blue = rgbe[ 2 ] * f;
+ }
+ else
+ {
+ red = green = blue = 0.0f;
+ }
+ }
}
// The following private functions are a bit rough and shouldn't be exposed publicly
@@ -115,6 +153,7 @@
typedef image< unsigned char, r16g16b16a16log > r16g16b16a16log_image_type;
typedef image< unsigned char, r32g32b32f > r32g32b32f_image_type;
typedef image< unsigned char, r32g32b32a32f > r32g32b32a32f_image_type;
+typedef image< unsigned char, rgbe > rgbe_image_type;
typedef image< unsigned char, yuv444 > yuv444_image_type;
typedef image< unsigned char, yuv422 > yuv422_image_type;
typedef image< unsigned char, yuv422p > yuv422p_image_type;
@@ -194,6 +233,8 @@
dst_img = image_type_ptr( new image_type( r32g32b32f_image_type( width, height, 1 ) ) );
else if( pf == L"r32g32b32a32f" )
dst_img = image_type_ptr( new image_type( r32g32b32a32f_image_type( width, height, 1 ) ) );
+ else if( pf == L"rgbe" )
+ dst_img = image_type_ptr( new image_type( rgbe_image_type( width, height, 1 ) ) );
else if ( pf == L"yuv444" )
dst_img = image_type_ptr( new image_type( yuv444_image_type( width, height, 1 ) ) );
else if ( pf == L"yuv422" )
@@ -914,7 +955,6 @@
size_type src_pitch0 = 2 * src_img->pitch( 0 ) - src_img->linesize( 0 );
size_type src_pitch1 = src_img->pitch( 1 ) - src_img->linesize( 1 );
size_type src_pitch2 = src_img->pitch( 2 ) - src_img->linesize( 2 );
- size_type chroma_pitch = src_img->pitch( 1 );
pointer dst0 = dst_img->data( );
pointer dst1 = dst_img->data( ) + dst_img->pitch( );
@@ -1890,7 +1930,6 @@
*( dst + 2 ) = static_cast<unsigned char>( opl::fast_floorf( *src++ ) );
*( dst + 1 ) = static_cast<unsigned char>( opl::fast_floorf( *src++ ) );
*( dst + 0 ) = static_cast<unsigned char>( opl::fast_floorf( *src++ ) );
-
*( dst + 3 ) = 255;
dst += 4;
@@ -1905,6 +1944,80 @@
return dst_img;
}
+static image_type_ptr rgbe_to_r32g32b32f( image_type_ptr src_img, const std::wstring &format )
+{
+ size_type width = src_img->width( );
+ size_type height = src_img->height( );
+
+ image_type_ptr dst_img = allocate( src_img, format );
+ if( dst_img != 0 )
+ {
+ pointer src = src_img->data( );
+ size_type src_pitch = src_img->pitch( );
+ float* dst = ( float* ) dst_img->data( );
+ size_type dst_pitch = dst_img->pitch( );
+
+ pointer sptr = src;
+ float* dptr = dst;
+
+ size_type orig_width = width;
+
+ while( height-- )
+ {
+ while( width-- )
+ {
+ rgbe2float( src, *( dst + 0 ), *( dst + 1 ), *( dst + 2 ) );
+
+ dst += 3;
+ src += 4;
+ }
+
+ dst = dptr += dst_pitch;
+ src = sptr += src_pitch;
+ width = orig_width;
+ }
+ }
+
+ return dst_img;
+}
+
+static image_type_ptr r32g32b32f_to_rgbe( image_type_ptr src_img, const std::wstring &format )
+{
+ size_type width = src_img->width( );
+ size_type height = src_img->height( );
+
+ image_type_ptr dst_img = allocate( src_img, format );
+ if( dst_img != 0 )
+ {
+ float* src = ( float* )src_img->data( );
+ size_type src_pitch = src_img->pitch( );
+ pointer dst = dst_img->data( );
+ size_type dst_pitch = dst_img->pitch( );
+
+ float* sptr = src;
+ pointer dptr = dst;
+
+ size_type orig_width = width;
+
+ while( height-- )
+ {
+ while( width-- )
+ {
+ float2rgbe( *( src + 0 ), *( src + 1 ), *( src + 2 ), dst );
+
+ dst += 4;
+ src += 3;
+ }
+
+ dst = dptr += dst_pitch;
+ src = sptr += src_pitch;
+ width = orig_width;
+ }
+ }
+
+ return dst_img;
+}
+
static image_type_ptr yuv420p_to_yuv411p( const image_type_ptr &src_img, const std::wstring &format )
{
size_type width = src_img->width( );
@@ -2488,9 +2601,18 @@
{
if( dst_pf == L"b8g8r8a8" )
return tm_linear( src );
+ else if( dst_pf == L"rgbe" )
+ return r32g32b32f_to_rgbe( src, L"rgbe" );
else if( dst_pf == L"ldr8" ) // stub colour space for straight truncation to LDR data.
return r32g32b32f_to_b8g8r8a8( src, L"b8g8r8a8" );
}
+ else if( src_pf == L"rgbe" )
+ {
+ if( dst_pf == L"b8g8r8a8" )
+ return tm_linear( rgbe_to_r32g32b32f( src, L"r32g32b32f" ) );
+ else if( dst_pf == L"r32g32b32f" )
+ return rgbe_to_r32g32b32f( src, L"r32g32b32f" );
+ }
else if ( src_pf == L"yuv444" )
{
if ( dst_pf == L"r8g8b8" )
Modified: lib/openlibraries/src/openimagelib/plugins/hdr/hdr_plugin.cpp
===================================================================
--- lib/openlibraries/src/openimagelib/plugins/hdr/hdr_plugin.cpp 2007-04-24 22:56:51 UTC (rev 104)
+++ lib/openlibraries/src/openimagelib/plugins/hdr/hdr_plugin.cpp 2007-04-27 22:05:41 UTC (rev 105)
@@ -7,19 +7,11 @@
#ifdef WIN32
#include <windows.h>
-#include <gdiplus.h>
-
-#ifdef min
-# undef min
#endif
-#endif // WIN32
#include <cmath>
-#include <cstdio>
-#include <cstdlib>
#include <limits>
#include <vector>
-#include <string>
#include <boost/filesystem/fstream.hpp>
@@ -45,9 +37,6 @@
char format[ 16 ];
};
- void destroy( il::image_type* im )
- { delete im; }
-
bool Read_s( fs::ifstream& file, char* s, std::streamsize size, std::streamsize max )
{
#if _MSC_VER >= 1400
@@ -59,57 +48,15 @@
return !file.fail( );
}
- void float2rgbe( float red, float green, float blue, unsigned char rgbe[ 4 ] )
+ bool read_rgbe_pixels_raw( fs::ifstream& file, unsigned char* data, int width, int height )
{
- float v = red;
- if( v < green ) v = green;
- if( v < blue ) v = blue;
-
- if( v < std::numeric_limits<float>::min( ) )
- {
- rgbe[ 0 ] = rgbe[ 1 ] = rgbe[ 2 ] = rgbe[ 3 ] = 0;
- }
- else
- {
- int exponent;
- v = frexp( v, &exponent );
-
- rgbe[ 0 ] = static_cast<unsigned char>( red * v );
- rgbe[ 1 ] = static_cast<unsigned char>( green * v );
- rgbe[ 2 ] = static_cast<unsigned char>( blue * v );
- rgbe[ 3 ] = exponent + 128;
- }
- }
-
- void rgbe2float( unsigned char rgbe[ 4 ], float& red, float& green, float& blue )
- {
- if( rgbe[ 3 ] )
- {
- float f = ldexp( 1.0f, rgbe[ 3 ] - ( 128 + 8 ) );
-
- red = rgbe[ 0 ] * f;
- green = rgbe[ 1 ] * f;
- blue = rgbe[ 2 ] * f;
- }
- else
- {
- red = green = blue = 0.0f;
- }
- }
-
- bool read_rgbe_pixels_raw( fs::ifstream& file, float* data, int width, int height )
- {
- char rgbe[ 4 ];
-
int numpixels = width * height;
while( numpixels-- )
{
- if( !Read_s( file, rgbe, sizeof( rgbe ), sizeof( rgbe ) ) )
+ if( !Read_s( file, ( char* ) data, 4, 4 ) )
return false;
- rgbe2float( ( unsigned char* ) rgbe, data[ 0 ], data[ 1 ], data[ 2 ] );
-
- data += 3;
+ data += 4;
}
return true;
@@ -117,13 +64,13 @@
bool read_rgbe_pixels( fs::ifstream& file, il::image_type_ptr im, int width, int height )
{
- float* data = reinterpret_cast<float*>( im->data( ) );
+ il::image_type::pointer data = im->data( );
if( width < 8 || width > 0x7FFF )
return read_rgbe_pixels_raw( file, data, width, height );
std::vector<unsigned char> line;
- line.resize( width * 4 * sizeof( float ) );
+ line.resize( width * 4 * 4 );
unsigned char rgbe[ 4 ];
for( int i = 0; i < height; ++i )
@@ -133,9 +80,12 @@
if( ( rgbe[ 0 ] != 2 ) || ( rgbe[ 1 ] != 2 ) || ( rgbe[ 2 ] & 0x80 ) )
{
- rgbe2float( rgbe, data[ 0 ], data[ 1 ], data[ 2 ] );
+ data[ 0 ] = rgbe[ 0 ];
+ data[ 1 ] = rgbe[ 1 ];
+ data[ 2 ] = rgbe[ 2 ];
+ data[ 3 ] = rgbe[ 3 ];
- data += 3;
+ data += 4;
return read_rgbe_pixels_raw( file, data, width, height );
}
@@ -186,14 +136,12 @@
for( int k = 0; k < width; ++k )
{
- rgbe[ 0 ] = line[ k + 0 * width ];
- rgbe[ 1 ] = line[ k + 1 * width ];
- rgbe[ 2 ] = line[ k + 2 * width ];
- rgbe[ 3 ] = line[ k + 3 * width ];
-
- rgbe2float( rgbe, data[ 0 ], data[ 1 ], data[ 2 ] );
-
- data += 3;
+ data[ 0 ] = line[ k + 0 * width ];
+ data[ 1 ] = line[ k + 1 * width ];
+ data[ 2 ] = line[ k + 2 * width ];
+ data[ 3 ] = line[ k + 3 * width ];
+
+ data += 4;
}
data += im->pitch( ) - im->linesize( );
@@ -202,13 +150,6 @@
return true;
}
- il::image_type_ptr rgbe_to_image_type( int width, int height )
- {
- typedef il::image<unsigned char, il::r32g32b32f> r32g32b32f_image_type;
-
- return il::image_type_ptr( new il::image_type( r32g32b32f_image_type( width, height, 1 ) ), destroy );
- }
-
bool read_hdr_header( fs::ifstream& file, RgbeInfo& info, int& width, int& height )
{
info.valid = 0;
@@ -297,7 +238,7 @@
if( !read_hdr_header( file, rgbe_info, width, height ) )
return il::image_type_ptr( );
- il::image_type_ptr image = rgbe_to_image_type( width, height );
+ il::image_type_ptr image = il::allocate( L"rgbe", width, height );
if( !image )
return il::image_type_ptr( );
@@ -306,12 +247,41 @@
return image;
}
-}
+
+ bool store_hdr( const fs::path& path, const il::image_type_ptr& im )
+ {
+ fs::ofstream file( path, std::ios::out | std::ios::binary );
+ if( !file.is_open( ) )
+ return false;
+
+ il::image_type_ptr dst = il::convert( im, L"rgbe" );
+ if( dst )
+ {
+ il::image_type::size_type width = dst->width( );
+ il::image_type::size_type height = dst->height( );
+
+ // write header.
+ file << "#?RGBE\nGAMMA=1.0\nEXPOSURE=1.0\nFORMAT=32-bit_rle_rgbe\n\n";
+ file << "-Y " << height << "+X " << width << "\n";
+ il::image_type::const_pointer data = dst->data( );
+ il::image_type::size_type pitch = dst->pitch( );
+
+ while( height-- )
+ {
+ file.write( ( char* ) data, dst->linesize( ) );
+ data += pitch;
+ }
+ }
+
+ return true;
+ }
+}
+
il::image_type_ptr HDR_plugin::load( const fs::path& path )
-{ return il::image_type_ptr( load_hdr( path ) ); }
+{ return load_hdr( path ); }
-bool HDR_plugin::store( const fs::path&, const il::image_type_ptr& )
-{ return false; }
+bool HDR_plugin::store( const fs::path& path, const il::image_type_ptr& im )
+{ return store_hdr( path, im ); }
} } } }
Modified: lib/openlibraries/src/openimagelib/plugins/jpg/jpg_plugin.opl
===================================================================
--- lib/openlibraries/src/openimagelib/plugins/jpg/jpg_plugin.opl 2007-04-24 22:56:51 UTC (rev 104)
+++ lib/openlibraries/src/openimagelib/plugins/jpg/jpg_plugin.opl 2007-04-27 22:05:41 UTC (rev 105)
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<openlibraries version="1.0">
- <!-- plugins go here -->
- <openimagelib name="oil" version="0.2.0">
- <plugin name="OpenLibraries JPG plugin" type="input" extension='".*\.jpg"' merit="80" filename='"libopenimagelib_jpg.so", "openimagelib_jpg-vc80-d-0_4_0.dll" "openimagelib_jpg-vc80-r-0_4_0.dll"'/>
- <plugin name="OpenLibraries JPG plugin" type="output" extension='".*\.jpg"' merit="80" filename='"libopenimagelib_jpg.so", "libopenimagelib_jpg.dylib", "openimagelib_jpg-vc80-d-0_4_0.dll" "openimagelib_jpg-vc80-r-0_4_0.dll"'/>
- </openimagelib>
+ <!-- plugins go here -->
+ <openimagelib name="oil" version="0.2.0">
+ <plugin name="OpenLibraries JPG plugin" type="input" in_filter="*.jpg" extension='".*\.jpg"' merit="80" filename='"libopenimagelib_jpg.so", "libopenimagelib_jpg.dylib", "openimagelib_jpg-vc80-d-0_4_0.dll", "openimagelib_jpg-vc80-r-0_4_0.dll"'/>
+ <plugin name="OpenLibraries JPG plugin" type="output" in_filter="*.jpg" extension='".*\.jpg"' merit="80" filename='"libopenimagelib_jpg.so", "libopenimagelib_jpg.dylib", "openimagelib_jpg-vc80-d-0_4_0.dll", "openimagelib_jpg-vc80-r-0_4_0.dll"'/>
+ </openimagelib>
</openlibraries>
Modified: lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
===================================================================
--- lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-04-24 22:56:51 UTC (rev 104)
+++ lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-04-27 22:05:41 UTC (rev 105)
@@ -5,6 +5,13 @@
// Released under the LGPL.
// For more information, see http://www.openlibraries.org.
+#if _MSC_VER >= 1400
+#include <hash_map>
+#else
+#include <map>
+#endif
+
+#include <cstdarg>
#include <cstring>
#include <new>
#include <vector>
@@ -52,52 +59,995 @@
virtual property_container_ptr get_property_set( ) = 0;
};
- class image_instance : public Ofx_base
+ class param_descriptor : public Ofx_base
{
public:
- explicit image_instance( )
- : image_instance_prop_type_( pcos::key::from_string( kOfxPropType ) )
- , image_instance_prop_pixel_depth_( pcos::key::from_string( kOfxImageEffectPropPixelDepth ) )
- , image_instance_prop_components_( pcos::key::from_string( kOfxImageEffectPropComponents ) )
- , image_instance_prop_premultiplication_( pcos::key::from_string( kOfxImageEffectPropPreMultiplication ) )
- , image_instance_prop_render_scale_( pcos::key::from_string( kOfxImageEffectPropRenderScale ) )
- , image_instance_prop_pixel_aspect_ratio_( pcos::key::from_string( kOfxImagePropPixelAspectRatio ) )
- , image_instance_prop_data_( pcos::key::from_string( kOfxImagePropData ) )
- , image_instance_prop_bounds_( pcos::key::from_string( kOfxImagePropBounds ) )
- , image_instance_prop_region_of_definition_( pcos::key::from_string( kOfxImagePropRegionOfDefinition ) )
- , image_instance_prop_row_bytes_( pcos::key::from_string( kOfxImagePropRowBytes ) )
- , image_instance_prop_field_( pcos::key::from_string( kOfxImagePropField ) )
- , image_instance_prop_unique_identifier_( pcos::key::from_string( kOfxImagePropUniqueIdentifier ) )
+ explicit param_descriptor( )
+ : param_descriptor_prop_type_( pcos::key::from_string( kOfxPropType ) )
+ , param_descriptor_prop_name_( pcos::key::from_string( kOfxPropName ) )
+ , param_descriptor_prop_label_( pcos::key::from_string( kOfxPropLabel ) )
+ , param_descriptor_prop_short_label_( pcos::key::from_string( kOfxPropShortLabel ) )
+ , param_descriptor_prop_long_label_( pcos::key::from_string( kOfxPropLongLabel ) )
+ , param_descriptor_prop_param_prop_type_( pcos::key::from_string( kOfxParamPropType ) )
+ , param_descriptor_prop_param_prop_secret_( pcos::key::from_string( kOfxParamPropSecret ) )
+ , param_descriptor_prop_param_prop_can_undo_( pcos::key::from_string( kOfxParamPropCanUndo ) )
+ , param_descriptor_prop_param_prop_hint_( pcos::key::from_string( kOfxParamPropHint ) )
+ , param_descriptor_prop_param_prop_script_name_( pcos::key::from_string( kOfxParamPropScriptName ) )
+ , param_descriptor_prop_param_prop_parent_( pcos::key::from_string( kOfxParamPropParent ) )
+ , param_descriptor_prop_param_prop_enabled_( pcos::key::from_string( kOfxParamPropEnabled ) )
+ , param_descriptor_prop_param_prop_data_ptr_( pcos::key::from_string( kOfxParamPropDataPtr ) )
{ }
virtual property_container_ptr get_property_set( )
- { return &image_instance_props_; }
+ { return ¶m_descriptor_props_; }
+
+ private:
+ pcos::property_container param_descriptor_props_;
+ pcos::property param_descriptor_prop_type_;
+ pcos::property param_descriptor_prop_name_;
+ pcos::property param_descriptor_prop_label_;
+ pcos::property param_descriptor_prop_short_label_;
+ pcos::property param_descriptor_prop_long_label_;
+ pcos::property param_descriptor_prop_param_prop_type_;
+ pcos::property param_descriptor_prop_param_prop_secret_;
+ pcos::property param_descriptor_prop_param_prop_can_undo_;
+ pcos::property param_descriptor_prop_param_prop_hint_;
+ pcos::property param_descriptor_prop_param_prop_script_name_;
+ pcos::property param_descriptor_prop_param_prop_parent_;
+ pcos::property param_descriptor_prop_param_prop_enabled_;
+ pcos::property param_descriptor_prop_param_prop_data_ptr_;
+ };
+
+ class value_param_descriptor : public param_descriptor
+ {
+ public:
+ explicit value_param_descriptor( )
+ : value_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , value_param_descriptor_param_prop_animates_( pcos::key::from_string( kOfxParamPropAnimates ) )
+ , value_param_descriptor_param_prop_is_animating_( pcos::key::from_string( kOfxParamPropIsAnimating ) )
+ , value_param_descriptor_param_prop_is_auto_keying_( pcos::key::from_string( kOfxParamPropIsAutoKeying ) )
+ , value_param_descriptor_param_prop_persistant_( pcos::key::from_string( kOfxParamPropPersistant ) )
+ , value_param_descriptor_param_prop_evaluate_on_change_( pcos::key::from_string( kOfxParamPropEvaluateOnChange ) )
+ , value_param_descriptor_param_prop_plugin_may_write_( pcos::key::from_string( kOfxParamPropPluginMayWrite ) )
+ , value_param_descriptor_param_prop_cache_invalidation_( pcos::key::from_string( kOfxParamPropCacheInvalidation ) )
+ { }
- void set_image_ptr( image_type_ptr im )
+ private:
+ pcos::property value_param_descriptor_param_prop_default_;
+ pcos::property value_param_descriptor_param_prop_animates_;
+ pcos::property value_param_descriptor_param_prop_is_animating_;
+ pcos::property value_param_descriptor_param_prop_is_auto_keying_;
+ pcos::property value_param_descriptor_param_prop_persistant_;
+ pcos::property value_param_descriptor_param_prop_evaluate_on_change_;
+ pcos::property value_param_descriptor_param_prop_plugin_may_write_;
+ pcos::property value_param_descriptor_param_prop_cache_invalidation_;
+ };
+
+ class string_param_descriptor : public value_param_descriptor
+ {
+ public:
+ explicit string_param_descriptor( )
+ : string_param_descriptor_param_prop_string_mode_( pcos::key::from_string( kOfxParamPropStringMode ) )
+ , string_param_descriptor_param_prop_string_file_path_exists_( pcos::key::from_string( kOfxParamPropStringFilePathExists ) )
+ { }
+
+ private:
+ pcos::property string_param_descriptor_param_prop_string_mode_;
+ pcos::property string_param_descriptor_param_prop_string_file_path_exists_;
+ };
+
+ class int_param_descriptor : public value_param_descriptor
+ {
+ public:
+ explicit int_param_descriptor( )
+ : int_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
+ , int_param_descriptor_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
+ , int_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
+ , int_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
+ { }
+
+ private:
+ pcos::property int_param_descriptor_param_prop_min_;
+ pcos::property int_param_descriptor_param_prop_max_;
+ pcos::property int_param_descriptor_param_prop_display_min_;
+ pcos::property int_param_descriptor_param_prop_display_max_;
+ };
+
+ class int2D_param_descriptor : public value_param_descriptor
+ {
+ public:
+ explicit int2D_param_descriptor( )
+ : int2D_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
+ , int2D_param_descriptor_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
+ , int2D_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
+ , int2D_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
+ , int2D_param_descriptor_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
+ { }
+
+ private:
+ pcos::property int2D_param_descriptor_param_prop_min_;
+ pcos::property int2D_param_descriptor_param_prop_max_;
+ pcos::property int2D_param_descriptor_param_prop_display_min_;
+ pcos::property int2D_param_descriptor_param_prop_display_max_;
+ pcos::property int2D_param_descriptor_param_prop_dimension_label_;
+ };
+
+ class int3D_param_descriptor : public value_param_descriptor
+ {
+ public:
+ explicit int3D_param_descriptor( )
+ : int3D_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
+ , int3D_param_descriptor_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
+ , int3D_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
+ , int3D_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
+ , int3D_param_descriptor_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
+ { }
+
+ private:
+ pcos::property int3D_param_descriptor_param_prop_min_;
+ pcos::property int3D_param_descriptor_param_prop_max_;
+ pcos::property int3D_param_descriptor_param_prop_display_min_;
+ pcos::property int3D_param_descriptor_param_prop_display_max_;
+ pcos::property int3D_param_descriptor_param_prop_dimension_label_;
+ };
+
+ class base_double_param_descriptor : public value_param_descriptor
+ {
+ public:
+ explicit base_double_param_descriptor( )
+ : base_double_param_descriptor_param_prop_increment_( pcos::key::from_string( kOfxParamPropIncrement ) )
+ , base_double_param_descriptor_param_prop_digits_( pcos::key::from_string( kOfxParamPropDigits ) )
+ { }
+
+ private:
+ pcos::property base_double_param_descriptor_param_prop_increment_;
+ pcos::property base_double_param_descriptor_param_prop_digits_;
+ };
+
+ class double_param_descriptor : public value_param_descriptor
+ {
+ public:
+ explicit double_param_descriptor( )
+ : double_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
+ , double_param_descriptor_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
+ , double_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
+ , double_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
+ , double_param_descriptor_param_prop_show_time_marker_( pcos::key::from_string( kOfxParamPropShowTimeMar...
[truncated message content] |
|
From: <gl...@us...> - 2007-04-30 23:57:04
|
Revision: 107
http://hdrflow.svn.sourceforge.net/hdrflow/?rev=107&view=rev
Author: glslang
Date: 2007-04-30 16:56:54 -0700 (Mon, 30 Apr 2007)
Log Message:
-----------
+ ofx bindings M1 (milestone 1)
Modified Paths:
--------------
lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp
Modified: lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
===================================================================
--- lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-04-27 23:47:47 UTC (rev 106)
+++ lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-04-30 23:56:54 UTC (rev 107)
@@ -317,7 +317,7 @@
{ }
};
- class param_set_descriptor
+ class param_set_descriptor : public Ofx_base
{
public:
typedef pl::string key_type;
@@ -420,8 +420,12 @@
return 0;
}
+ virtual property_container_ptr get_property_set( )
+ { return ¶m_set_descriptor_props_; }
+
private:
container params_;
+ pcos::property_container param_set_descriptor_props_;
};
class param : public Ofx_base
@@ -1025,13 +1029,15 @@
if( !dst_img )
return false;
+ int_vec bounds_and_rod( 4 );
+ bounds_and_rod[ 0 ] = 0;
+ bounds_and_rod[ 1 ] = 0;
+ bounds_and_rod[ 2 ] = dst_img->width( );
+ bounds_and_rod[ 3 ] = dst_img->height( );
+
+ image_prop_bounds_ = bounds_and_rod;
+ image_prop_region_of_definition_ = bounds_and_rod;
image_prop_data_ = ( void* ) dst_img->data( );
-
- int_vec i_vec( 4 );
- i_vec[ 0 ] = 0; i_vec[ 1 ] = 0; i_vec[ 2 ] = dst_img->width( ); i_vec[ 3 ] = dst_img->height( );
- image_prop_bounds_ = i_vec;
- image_prop_region_of_definition_ = i_vec;
-
image_prop_row_bytes_ = dst_img->pitch( );
return true;
@@ -1040,21 +1046,19 @@
private:
void set_image_properties( )
{
- double_vec d_vec( 2 );
- d_vec[ 0 ] = 1.0; d_vec[ 1 ] = 1.0;
+ double_vec render_scale( 2 );
+ render_scale[ 0 ] = 1.0;
+ render_scale[ 1 ] = 1.0;
- int_vec i_vec( 4 );
- i_vec[ 0 ] = 0; i_vec[ 1 ] = 0; i_vec[ 2 ] = 0; i_vec[ 3 ] = 0;
-
image_props_.append( image_prop_type_ = kOfxTypeImage );
image_props_.append( image_effect_prop_pixel_depth_ = kOfxBitDepthNone );
image_props_.append( image_effect_prop_components_ = kOfxImageComponentNone );
image_props_.append( image_effect_prop_pre_multiplication_ = kOfxImageUnPreMultiplied );
- image_props_.append( image_effect_prop_render_scale_ = d_vec );
+ image_props_.append( image_effect_prop_render_scale_ = render_scale );
image_props_.append( image_prop_pixel_aspect_ratio_ = 1.0 );
image_props_.append( image_prop_data_ = ( void* ) 0 );
- image_props_.append( image_prop_bounds_ = i_vec );
- image_props_.append( image_prop_region_of_definition_ = i_vec );
+ image_props_.append( image_prop_bounds_ = int_vec( 4 ) );
+ image_props_.append( image_prop_region_of_definition_ = int_vec( 4 ) );
image_props_.append( image_prop_row_bytes_ = 0 );
image_props_.append( image_prop_field_ = kOfxImageFieldNone );
image_props_.append( image_prop_unique_identifier_ = "No Unique Identifier" );
@@ -1130,99 +1134,6 @@
pcos::property clip_descriptor_prop_supports_tiles_;
};
- class clip_instance : public Ofx_base
- {
- public:
- explicit clip_instance( )
- : clip_instance_prop_type_( pcos::key::from_string( kOfxPropType ) )
- , clip_instance_prop_name_( pcos::key::from_string( kOfxPropName ) )
- , clip_instance_prop_label_( pcos::key::from_string( kOfxPropLabel ) )
- , clip_instance_prop_short_label_( pcos::key::from_string( kOfxPropShortLabel ) )
- , clip_instance_prop_long_label_( pcos::key::from_string( kOfxPropLongLabel ) )
- , clip_instance_prop_supported_components_( pcos::key::from_string( kOfxImageEffectPropSupportedComponents ) )
- , clip_instance_prop_temporal_clip_access_( pcos::key::from_string( kOfxImageEffectPropTemporalClipAccess ) )
- , clip_instance_prop_optional_( pcos::key::from_string( kOfxImageClipPropOptional ) )
- , clip_instance_prop_field_extraction_( pcos::key::from_string( kOfxImageClipPropFieldExtraction ) )
- , clip_instance_prop_is_mask_( pcos::key::from_string( kOfxImageClipPropIsMask ) )
- , clip_instance_prop_supports_tiles_( pcos::key::from_string( kOfxImageEffectPropSupportsTiles ) )
- , clip_instance_prop_pixel_depth_( pcos::key::from_string( kOfxImageEffectPropPixelDepth ) )
- , clip_instance_prop_components_( pcos::key::from_string( kOfxImageEffectPropComponents ) )
- , clip_instance_prop_unmapped_pixel_depth_( pcos::key::from_string( kOfxImageClipPropUnmappedPixelDepth ) )
- , clip_instance_prop_unmapped_components_( pcos::key::from_string( kOfxImageClipPropUnmappedComponents ) )
- , clip_instance_prop_premultiplication_( pcos::key::from_string( kOfxImageEffectPropPreMultiplication ) )
- , clip_instance_prop_pixel_aspect_ratio_( pcos::key::from_string( kOfxImagePropPixelAspectRatio ) )
- , clip_instance_prop_frame_rate_( pcos::key::from_string( kOfxImageEffectPropFrameRate ) )
- , clip_instance_prop_frame_range_( pcos::key::from_string( kOfxImageEffectPropFrameRange ) )
- , clip_instance_prop_field_order_( pcos::key::from_string( kOfxImageClipPropFieldOrder ) )
- , clip_instance_prop_connected_( pcos::key::from_string( kOfxImageClipPropConnected ) )
- , clip_instance_prop_unmapped_frame_range_( pcos::key::from_string( kOfxImageEffectPropUnmappedFrameRange ) )
- , clip_instance_prop_unmapped_frame_rate_( pcos::key::from_string( kOfxImageEffectPropUnmappedFrameRate ) )
- , clip_instance_prop_continuous_samples_( pcos::key::from_string( kOfxImageClipPropContinuousSamples ) )
- {
- set_clip_instance_properties( );
- }
-
- virtual property_container_ptr get_property_set( )
- { return &clip_instance_props_; }
-
- private:
- void set_clip_instance_properties( )
- {
- clip_instance_props_.append( clip_instance_prop_type_ = kOfxTypeClip );
- clip_instance_props_.append( clip_instance_prop_name_ = "" );
- clip_instance_props_.append( clip_instance_prop_label_ = "" );
- clip_instance_props_.append( clip_instance_prop_short_label_ = "" );
- clip_instance_props_.append( clip_instance_prop_long_label_ = "" );
- clip_instance_props_.append( clip_instance_prop_supported_components_ = string_vec( ) );
- clip_instance_props_.append( clip_instance_prop_temporal_clip_access_ = 0 );
- clip_instance_props_.append( clip_instance_prop_optional_ = 0 );
- clip_instance_props_.append( clip_instance_prop_field_extraction_ = kOfxImageFieldDoubled );
- clip_instance_props_.append( clip_instance_prop_is_mask_ = 0 );
- clip_instance_props_.append( clip_instance_prop_supports_tiles_ = 1 );
- clip_instance_props_.append( clip_instance_prop_pixel_depth_ = kOfxBitDepthNone );
- clip_instance_props_.append( clip_instance_prop_components_ = kOfxImageComponentNone );
- clip_instance_props_.append( clip_instance_prop_unmapped_pixel_depth_ = kOfxBitDepthNone );
- clip_instance_props_.append( clip_instance_prop_unmapped_components_ = kOfxImageComponentNone );
- clip_instance_props_.append( clip_instance_prop_premultiplication_ = kOfxImageOpaque );
- clip_instance_props_.append( clip_instance_prop_pixel_aspect_ratio_ = 0.0 );
- clip_instance_props_.append( clip_instance_prop_frame_rate_ = 0.0 );
- clip_instance_props_.append( clip_instance_prop_frame_range_ = double_vec( 2 ) );
- clip_instance_props_.append( clip_instance_prop_field_order_ = kOfxImageFieldNone );
- clip_instance_props_.append( clip_instance_prop_connected_ = 0 );
- clip_instance_props_.append( clip_instance_prop_unmapped_frame_range_ = double_vec( 2 ) );
- clip_instance_props_.append( clip_instance_prop_unmapped_frame_rate_ = 0.0 );
- clip_instance_props_.append( clip_instance_prop_continuous_samples_ = 0 );
- }
-
- // Clip instance properties.
- private:
- pcos::property_container clip_instance_props_;
- pcos::property clip_instance_prop_type_;
- pcos::property clip_instance_prop_name_;
- pcos::property clip_instance_prop_label_;
- pcos::property clip_instance_prop_short_label_;
- pcos::property clip_instance_prop_long_label_;
- pcos::property clip_instance_prop_supported_components_;
- pcos::property clip_instance_prop_temporal_clip_access_;
- pcos::property clip_instance_prop_optional_;
- pcos::property clip_instance_prop_field_extraction_;
- pcos::property clip_instance_prop_is_mask_;
- pcos::property clip_instance_prop_supports_tiles_;
- pcos::property clip_instance_prop_pixel_depth_;
- pcos::property clip_instance_prop_components_;
- pcos::property clip_instance_prop_unmapped_pixel_depth_;
- pcos::property clip_instance_prop_unmapped_components_;
- pcos::property clip_instance_prop_premultiplication_;
- pcos::property clip_instance_prop_pixel_aspect_ratio_;
- pcos::property clip_instance_prop_frame_rate_;
- pcos::property clip_instance_prop_frame_range_;
- pcos::property clip_instance_prop_field_order_;
- pcos::property clip_instance_prop_connected_;
- pcos::property clip_instance_prop_unmapped_frame_range_;
- pcos::property clip_instance_prop_unmapped_frame_rate_;
- pcos::property clip_instance_prop_continuous_samples_;
- };
-
class image_effect_descriptor : public param_set_descriptor
{
public:
@@ -1334,8 +1245,126 @@
private:
container clip_desc_;
};
+
+ struct image_effect_instance_base : public param_set
+ {
+ virtual il::image_type_ptr get_source( ) = 0;
+ virtual il::image_type_ptr get_output( ) = 0;
+ };
+
+ class clip_instance : public Ofx_base
+ {
+ public:
+ explicit clip_instance( image_effect_instance_base* const image_instance, const pl::string& name )
+ : clip_instance_prop_type_( pcos::key::from_string( kOfxPropType ) )
+ , clip_instance_prop_name_( pcos::key::from_string( kOfxPropName ) )
+ , clip_instance_prop_label_( pcos::key::from_string( kOfxPropLabel ) )
+ , clip_instance_prop_short_label_( pcos::key::from_string( kOfxPropShortLabel ) )
+ , clip_instance_prop_long_label_( pcos::key::from_string( kOfxPropLongLabel ) )
+ , clip_instance_prop_supported_components_( pcos::key::from_string( kOfxImageEffectPropSupportedComponents ) )
+ , clip_instance_prop_temporal_clip_access_( pcos::key::from_string( kOfxImageEffectPropTemporalClipAccess ) )
+ , clip_instance_prop_optional_( pcos::key::from_string( kOfxImageClipPropOptional ) )
+ , clip_instance_prop_field_extraction_( pcos::key::from_string( kOfxImageClipPropFieldExtraction ) )
+ , clip_instance_prop_is_mask_( pcos::key::from_string( kOfxImageClipPropIsMask ) )
+ , clip_instance_prop_supports_tiles_( pcos::key::from_string( kOfxImageEffectPropSupportsTiles ) )
+ , clip_instance_prop_pixel_depth_( pcos::key::from_string( kOfxImageEffectPropPixelDepth ) )
+ , clip_instance_prop_components_( pcos::key::from_string( kOfxImageEffectPropComponents ) )
+ , clip_instance_prop_unmapped_pixel_depth_( pcos::key::from_string( kOfxImageClipPropUnmappedPixelDepth ) )
+ , clip_instance_prop_unmapped_components_( pcos::key::from_string( kOfxImageClipPropUnmappedComponents ) )
+ , clip_instance_prop_premultiplication_( pcos::key::from_string( kOfxImageEffectPropPreMultiplication ) )
+ , clip_instance_prop_pixel_aspect_ratio_( pcos::key::from_string( kOfxImagePropPixelAspectRatio ) )
+ , clip_instance_prop_frame_rate_( pcos::key::from_string( kOfxImageEffectPropFrameRate ) )
+ , clip_instance_prop_frame_range_( pcos::key::from_string( kOfxImageEffectPropFrameRange ) )
+ , clip_instance_prop_field_order_( pcos::key::from_string( kOfxImageClipPropFieldOrder ) )
+ , clip_instance_prop_connected_( pcos::key::from_string( kOfxImageClipPropConnected ) )
+ , clip_instance_prop_unmapped_frame_range_( pcos::key::from_string( kOfxImageEffectPropUnmappedFrameRange ) )
+ , clip_instance_prop_unmapped_frame_rate_( pcos::key::from_string( kOfxImageEffectPropUnmappedFrameRate ) )
+ , clip_instance_prop_continuous_samples_( pcos::key::from_string( kOfxImageClipPropContinuousSamples ) )
+ , image_instance_( image_instance )
+ , name_( name )
+ {
+ set_clip_instance_properties( );
+ }
+
+ virtual property_container_ptr get_property_set( )
+ { return &clip_instance_props_; }
+
+ property_container_ptr get_image( )
+ {
+ if( name_ == "Source" )
+ im_.set_image( image_instance_->get_source( ) );
+ else if( name_ == "Output" )
+ im_.set_image( image_instance_->get_output( ) );
+
+ return im_.get_property_set( );
+ }
+
+ private:
+ void set_clip_instance_properties( )
+ {
+ clip_instance_props_.append( clip_instance_prop_type_ = kOfxTypeClip );
+ clip_instance_props_.append( clip_instance_prop_name_ = "" );
+ clip_instance_props_.append( clip_instance_prop_label_ = "" );
+ clip_instance_props_.append( clip_instance_prop_short_label_ = "" );
+ clip_instance_props_.append( clip_instance_prop_long_label_ = "" );
+ clip_instance_props_.append( clip_instance_prop_supported_components_ = string_vec( ) );
+ clip_instance_props_.append( clip_instance_prop_temporal_clip_access_ = 0 );
+ clip_instance_props_.append( clip_instance_prop_optional_ = 0 );
+ clip_instance_props_.append( clip_instance_prop_field_extraction_ = kOfxImageFieldDoubled );
+ clip_instance_props_.append( clip_instance_prop_is_mask_ = 0 );
+ clip_instance_props_.append( clip_instance_prop_supports_tiles_ = 1 );
+ clip_instance_props_.append( clip_instance_prop_pixel_depth_ = kOfxBitDepthNone );
+ clip_instance_props_.append( clip_instance_prop_components_ = kOfxImageComponentNone );
+ clip_instance_props_.append( clip_instance_prop_unmapped_pixel_depth_ = kOfxBitDepthNone );
+ clip_instance_props_.append( clip_instance_prop_unmapped_components_ = kOfxImageComponentNone );
+ clip_instance_props_.append( clip_instance_prop_premultiplication_ = kOfxImageOpaque );
+ clip_instance_props_.append( clip_instance_prop_pixel_aspect_ratio_ = 0.0 );
+ clip_instance_props_.append( clip_instance_prop_frame_rate_ = 0.0 );
+ clip_instance_props_.append( clip_instance_prop_frame_range_ = double_vec( 2 ) );
+ clip_instance_props_.append( clip_instance_prop_field_order_ = kOfxImageFieldNone );
+ clip_instance_props_.append( clip_instance_prop_connected_ = 0 );
+ clip_instance_props_.append( clip_instance_prop_unmapped_frame_range_ = double_vec( 2 ) );
+ clip_instance_props_.append( clip_instance_prop_unmapped_frame_rate_ = 0.0 );
+ clip_instance_props_.append( clip_instance_prop_continuous_samples_ = 0 );
+ }
- class image_effect_instance : public param_set
+ // Clip instance properties.
+ private:
+ pcos::property_container clip_instance_props_;
+ pcos::property clip_instance_prop_type_;
+ pcos::property clip_instance_prop_name_;
+ pcos::property clip_instance_prop_label_;
+ pcos::property clip_instance_prop_short_label_;
+ pcos::property clip_instance_prop_long_label_;
+ pcos::property clip_instance_prop_supported_components_;
+ pcos::property clip_instance_prop_temporal_clip_access_;
+ pcos::property clip_instance_prop_optional_;
+ pcos::property clip_instance_prop_field_extraction_;
+ pcos::property clip_instance_prop_is_mask_;
+ pcos::property clip_instance_prop_supports_tiles_;
+ pcos::property clip_instance_prop_pixel_depth_;
+ pcos::property clip_instance_prop_components_;
+ pcos::property clip_instance_prop_unmapped_pixel_depth_;
+ pcos::property clip_instance_prop_unmapped_components_;
+ pcos::property clip_instance_prop_premultiplication_;
+ pcos::property clip_instance_prop_pixel_aspect_ratio_;
+ pcos::property clip_instance_prop_frame_rate_;
+ pcos::property clip_instance_prop_frame_range_;
+ pcos::property clip_instance_prop_field_order_;
+ pcos::property clip_instance_prop_connected_;
+ pcos::property clip_instance_prop_unmapped_frame_range_;
+ pcos::property clip_instance_prop_unmapped_frame_rate_;
+ pcos::property clip_instance_prop_continuous_samples_;
+
+ private:
+ image im_;
+
+ private:
+ image_effect_instance_base* const image_instance_;
+ pl::string name_;
+ };
+
+ class image_effect_instance : public image_effect_instance_base
{
public:
typedef pl::string key_type;
@@ -1375,12 +1404,27 @@
if( I != clip_instance_.end( ) )
return I->second.get( );
- clip_instance_ptr new_clip_instance( new clip_instance( ) );
- clip_instance_.insert( container::value_type( name, new_clip_instance ) );
-
- return new_clip_instance.get( );
+ return 0;
}
+
+ clip_instance* add_clip_instance( const pl::string& name )
+ {
+ clip_instance_ptr clip( new clip_instance( this, name ) );
+ clip_instance_.insert( container::value_type( name, clip ) );
+
+ return clip.get( );
+ }
+
+ il::image_type_ptr get_source( )
+ { return source_; }
+ il::image_type_ptr get_output( )
+ { return output_; }
+ void set_source( il::image_type_ptr im )
+ { source_ = im; }
+ void set_output( il::image_type_ptr im )
+ { output_ = im; }
+
private:
void set_image_effect_instance_properties( )
{
@@ -1414,7 +1458,11 @@
private:
container clip_instance_;
- };
+
+ private:
+ il::image_type_ptr source_;
+ il::image_type_ptr output_;
+ };
}
class ML_PLUGIN_DECLSPEC ofx_filter : public filter_type, public OfxHost
@@ -1491,25 +1539,40 @@
{
acquire_values( );
- frame_type_ptr result = frame_type::deep_copy( fetch_from_slot( ) );
-
+ frame_type_ptr result = fetch_from_slot( );
if( result && result->get_image( ) )
{
+ il::image_type_ptr src = result->get_image( );
+ image_effect_instance_.set_source( src );
+ image_effect_instance_.set_output( il::allocate( src->pf( ), src->width( ), src->height( ) ) );
+
pcos::property_container sequence_in_args;
sequence_in_args.append( sequence_prop_frame_range_ = double_vec( 2 ) );
sequence_in_args.append( sequence_prop_frame_step_ = 1.0 );
sequence_in_args.append( sequence_prop_is_interactive_ = 0 );
sequence_in_args.append( sequence_prop_render_scale_ = double_vec( 2 ) );
+ int_vec render_win( 4 );
+ render_win[ 0 ] = 0;
+ render_win[ 1 ] = 0;
+ render_win[ 2 ] = src->width( );
+ render_win[ 3 ] = src->height( );
+
+ int_vec render_scale( 2 );
+ render_scale[ 0 ] = 1;
+ render_scale[ 1 ] = 1;
+
pcos::property_container render_in_args;
render_in_args.append( render_prop_time_ = 0.0 );
render_in_args.append( render_prop_field_to_render_ = kOfxImageFieldNone );
- render_in_args.append( render_prop_render_window_ = int_vec( 4 ) );
- render_in_args.append( render_prop_render_scale_ = int_vec( 2 ) );
+ render_in_args.append( render_prop_render_window_ = render_win );
+ render_in_args.append( render_prop_render_scale_ = render_scale );
plug_->mainEntry( kOfxImageEffectActionBeginSequenceRender, &image_effect_instance_, ( OfxPropertySetHandle ) &sequence_in_args, 0 );
plug_->mainEntry( kOfxImageEffectActionRender, &image_effect_instance_, ( OfxPropertySetHandle ) &render_in_args, 0 );
plug_->mainEntry( kOfxImageEffectActionEndSequenceRender, &image_effect_instance_, ( OfxPropertySetHandle ) &sequence_in_args, 0 );
+
+ result->set_image( image_effect_instance_.get_output( ) );
}
return result;
@@ -1757,7 +1820,7 @@
template<typename T, typename U>
OfxStatus get_multiple_property( OfxPropertySetHandle properties, const char* property, int count, T* value )
{
- pcos::property_container* prop_set = ( pcos::property_container* ) properties;
+ property_container_ptr prop_set = ( property_container_ptr ) properties;
pcos::property src = prop_set->get_property_with_string( property );
if( src.is_a<U>( ) )
@@ -1799,6 +1862,16 @@
{
return set_multiple_property<int, int_vec>( properties, property, count, value );
}
+
+ OfxStatus prop_get_pointer( OfxPropertySetHandle properties, const char* property, int index, void** value )
+ {
+ pcos::property_container* prop_set = ( pcos::property_container* ) properties;
+
+ pcos::property src = prop_set->get_property_with_string( property );
+ *value = src.value<void*>( );
+
+ return kOfxStatOK;
+ }
OfxStatus prop_get_string( OfxPropertySetHandle properties, const char* property, int index, char** value )
{
@@ -2314,9 +2387,7 @@
OfxStatus get_property_set( OfxImageEffectHandle image_effect, OfxPropertySetHandle* prop_handle )
{
Ofx_base* plug = ( Ofx_base* ) image_effect;
-
*prop_handle = ( OfxPropertySetHandle ) plug->get_property_set( );
-
return kOfxStatOK;
}
@@ -2328,9 +2399,7 @@
OfxStatus clip_define( OfxImageEffectHandle image_effect, const char* name, OfxPropertySetHandle* property_set )
{
image_effect_descriptor* desc = ( image_effect_descriptor* ) image_effect;
-
desc->clip_define( name, property_set );
-
return kOfxStatOK;
}
@@ -2339,37 +2408,54 @@
image_effect_instance* instance = ( image_effect_instance* ) image_effect;
clip_instance* clip = instance->clip_get_handle( name );
+ if( !clip )
+ clip = instance->add_clip_instance( name );
- if( *handle )
+ if( handle )
*handle = ( OfxImageClipHandle ) clip;
+ if( property_set )
+ *property_set = ( OfxPropertySetHandle ) clip->get_property_set( );
- if( *property_set )
- *property_set = ( OfxPropertySetHandle ) clip;
-
return kOfxStatOK;
}
OfxStatus clip_get_property_set( OfxImageClipHandle clip, OfxPropertySetHandle* handle )
{
clip_instance* instance = ( clip_instance* ) clip;
-
*handle = ( OfxPropertySetHandle ) instance->get_property_set( );
-
return kOfxStatOK;
}
OfxStatus clip_get_image( OfxImageClipHandle clip, OfxTime time, OfxRectD* region, OfxPropertySetHandle* image_handle )
{
+ clip_instance* instance = ( clip_instance* ) clip;
+ if( !instance )
+ return kOfxStatErrBadHandle;
+
+ *image_handle = ( OfxPropertySetHandle ) instance->get_image( );
+
return kOfxStatOK;
}
- OfxStatus clip_release_image( OfxPropertySetHandle image_handle )
+ OfxStatus clip_release_image( OfxPropertySetHandle )
{
return kOfxStatOK;
}
-
+
OfxStatus clip_get_region_of_definition( OfxImageClipHandle clip, OfxTime time, OfxRectD* bounds )
{
+ clip_instance* instance = ( clip_instance* ) clip;
+ if( !instance )
+ return kOfxStatErrBadHandle;
+
+ property_container_ptr image = instance->get_image( );
+ int_vec b = image->get_property_with_string( kOfxImagePropBounds ).value<int_vec>( );
+
+ bounds->x1 = b[ 0 ];
+ bounds->y1 = b[ 1 ];
+ bounds->x2 = b[ 2 ];
+ bounds->y2 = b[ 3 ];
+
return kOfxStatOK;
}
@@ -2412,6 +2498,7 @@
property_suite.propSetStringN = prop_set_stringN;
property_suite.propSetDoubleN = prop_set_doubleN;
property_suite.propSetIntN = prop_set_intN;
+ property_suite.propGetPointer = prop_get_pointer;
property_suite.propGetString = prop_get_string;
property_suite.propGetDouble = prop_get_double;
property_suite.propGetInt = prop_get_int;
Modified: lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp
===================================================================
--- lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp 2007-04-27 23:47:47 UTC (rev 106)
+++ lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp 2007-04-30 23:56:54 UTC (rev 107)
@@ -122,6 +122,9 @@
template<typename U>
T operator( )( const U& ) const
{ return T( ); }
+
+ T operator( )( const T& t ) const
+ { return t; }
};
template<>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <gl...@us...> - 2007-05-01 22:26:14
|
Revision: 110
http://hdrflow.svn.sourceforge.net/hdrflow/?rev=110&view=rev
Author: glslang
Date: 2007-05-01 15:26:13 -0700 (Tue, 01 May 2007)
Log Message:
-----------
+ more ofx bindings
Modified Paths:
--------------
lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
lib/openlibraries/src/openpluginlib/pl/pcos/property.hpp
lib/openlibraries/src/openpluginlib/pl/string.hpp
Modified: lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
===================================================================
--- lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-05-01 01:24:13 UTC (rev 109)
+++ lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-05-01 22:26:13 UTC (rev 110)
@@ -39,11 +39,6 @@
namespace
{
typedef pcos::property_container* property_container_ptr;
- typedef std::vector<int> int_vec;
- typedef std::vector<unsigned int> uint_vec;
- typedef std::vector<double> double_vec;
- typedef std::vector<pl::string> string_vec;
- typedef std::vector<pl::wstring> wstring_vec;
void set_property_suite( OfxPropertySuiteV1& );
void set_image_effect_suite( OfxImageEffectSuiteV1& );
@@ -76,12 +71,31 @@
, param_descriptor_prop_param_prop_parent_( pcos::key::from_string( kOfxParamPropParent ) )
, param_descriptor_prop_param_prop_enabled_( pcos::key::from_string( kOfxParamPropEnabled ) )
, param_descriptor_prop_param_prop_data_ptr_( pcos::key::from_string( kOfxParamPropDataPtr ) )
- { }
+ {
+ set_param_descriptor_properties( );
+ }
virtual property_container_ptr get_property_set( )
{ return ¶m_descriptor_props_; }
private:
+ void set_param_descriptor_properties( )
+ {
+ param_descriptor_props_.append( param_descriptor_prop_type_ = pl::string( kOfxTypeParameter ) );
+ param_descriptor_props_.append( param_descriptor_prop_name_ = pl::string( ) );
+ param_descriptor_props_.append( param_descriptor_prop_label_ = pl::string( ) );
+ param_descriptor_props_.append( param_descriptor_prop_short_label_ = pl::string( ) );
+ param_descriptor_props_.append( param_descriptor_prop_long_label_ = pl::string( ) );
+ param_descriptor_props_.append( param_descriptor_prop_param_prop_secret_ = 0 );
+ param_descriptor_props_.append( param_descriptor_prop_param_prop_can_undo_ = 1 );
+ param_descriptor_props_.append( param_descriptor_prop_param_prop_hint_ = pl::string( ) );
+ param_descriptor_props_.append( param_descriptor_prop_param_prop_script_name_ = pl::string( ) );
+ param_descriptor_props_.append( param_descriptor_prop_param_prop_parent_ = pl::string( ) );
+ param_descriptor_props_.append( param_descriptor_prop_param_prop_enabled_ = 1 );
+ param_descriptor_props_.append( param_descriptor_prop_param_prop_data_ptr_ = ( void* ) 0 );
+ }
+
+ private:
pcos::property_container param_descriptor_props_;
pcos::property param_descriptor_prop_type_;
pcos::property param_descriptor_prop_name_;
@@ -102,18 +116,33 @@
{
public:
explicit value_param_descriptor( )
- : value_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
- , value_param_descriptor_param_prop_animates_( pcos::key::from_string( kOfxParamPropAnimates ) )
+ : value_param_descriptor_param_prop_animates_( pcos::key::from_string( kOfxParamPropAnimates ) )
, value_param_descriptor_param_prop_is_animating_( pcos::key::from_string( kOfxParamPropIsAnimating ) )
, value_param_descriptor_param_prop_is_auto_keying_( pcos::key::from_string( kOfxParamPropIsAutoKeying ) )
, value_param_descriptor_param_prop_persistant_( pcos::key::from_string( kOfxParamPropPersistant ) )
, value_param_descriptor_param_prop_evaluate_on_change_( pcos::key::from_string( kOfxParamPropEvaluateOnChange ) )
, value_param_descriptor_param_prop_plugin_may_write_( pcos::key::from_string( kOfxParamPropPluginMayWrite ) )
, value_param_descriptor_param_prop_cache_invalidation_( pcos::key::from_string( kOfxParamPropCacheInvalidation ) )
- { }
+ {
+ set_value_param_descriptor_properties( );
+ }
private:
- pcos::property value_param_descriptor_param_prop_default_;
+ void set_value_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( value_param_descriptor_param_prop_animates_ = 1 );
+ param_props_->append( value_param_descriptor_param_prop_is_animating_ = 0 );
+ param_props_->append( value_param_descriptor_param_prop_is_auto_keying_ = 0 );
+ param_props_->append( value_param_descriptor_param_prop_persistant_ = 1 );
+ param_props_->append( value_param_descriptor_param_prop_evaluate_on_change_ = 1 );
+ param_props_->append( value_param_descriptor_param_prop_plugin_may_write_ = 0 );
+ param_props_->append( value_param_descriptor_param_prop_cache_invalidation_ = pl::string( kOfxParamInvalidateValueChange ) );
+ }
+
+ private:
+
pcos::property value_param_descriptor_param_prop_animates_;
pcos::property value_param_descriptor_param_prop_is_animating_;
pcos::property value_param_descriptor_param_prop_is_auto_keying_;
@@ -127,11 +156,25 @@
{
public:
explicit string_param_descriptor( )
- : string_param_descriptor_param_prop_string_mode_( pcos::key::from_string( kOfxParamPropStringMode ) )
+ : string_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , string_param_descriptor_param_prop_string_mode_( pcos::key::from_string( kOfxParamPropStringMode ) )
, string_param_descriptor_param_prop_string_file_path_exists_( pcos::key::from_string( kOfxParamPropStringFilePathExists ) )
- { }
+ {
+ set_string_param_descriptor_properties( );
+ }
+
+ private:
+ void set_string_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( string_param_descriptor_param_prop_default_ = pl::string( ) );
+ param_props_->append( string_param_descriptor_param_prop_string_mode_ = pl::string( kOfxParamStringIsSingleLine ) );
+ param_props_->append( string_param_descriptor_param_prop_string_file_path_exists_ = 1 );
+ }
private:
+ pcos::property string_param_descriptor_param_prop_default_;
pcos::property string_param_descriptor_param_prop_string_mode_;
pcos::property string_param_descriptor_param_prop_string_file_path_exists_;
};
@@ -140,13 +183,29 @@
{
public:
explicit int_param_descriptor( )
- : int_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
+ : int_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , int_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
, int_param_descriptor_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
, int_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
, int_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
- { }
+ {
+ set_int_param_descriptor_properties( );
+ }
private:
+ void set_int_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( int_param_descriptor_param_prop_default_ = 0 );
+ param_props_->append( int_param_descriptor_param_prop_min_ = ( std::numeric_limits<int>::min )( ) );
+ param_props_->append( int_param_descriptor_param_prop_max_ = ( std::numeric_limits<int>::max )( ) );
+ param_props_->append( int_param_descriptor_param_prop_display_min_ = ( std::numeric_limits<int>::min )( ) );
+ param_props_->append( int_param_descriptor_param_prop_display_max_ = ( std::numeric_limits<int>::max )( ) );
+ }
+
+ private:
+ pcos::property int_param_descriptor_param_prop_default_;
pcos::property int_param_descriptor_param_prop_min_;
pcos::property int_param_descriptor_param_prop_max_;
pcos::property int_param_descriptor_param_prop_display_min_;
@@ -157,14 +216,31 @@
{
public:
explicit int2D_param_descriptor( )
- : int2D_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
+ : int2D_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , int2D_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
, int2D_param_descriptor_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
, int2D_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
, int2D_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
, int2D_param_descriptor_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
- { }
+ {
+ set_int2D_param_descriptor_properties( );
+ }
private:
+ void set_int2D_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( int2D_param_descriptor_param_prop_default_ = pcos::int_vec( 2, 0 ) );
+ param_props_->append( int2D_param_descriptor_param_prop_min_ = pcos::int_vec( 2, ( std::numeric_limits<int>::min )( ) ) );
+ param_props_->append( int2D_param_descriptor_param_prop_max_ = pcos::int_vec( 2, ( std::numeric_limits<int>::max )( ) ) );
+ param_props_->append( int2D_param_descriptor_param_prop_display_min_ = pcos::int_vec( 2, ( std::numeric_limits<int>::min )( ) ) );
+ param_props_->append( int2D_param_descriptor_param_prop_display_max_ = pcos::int_vec( 2, ( std::numeric_limits<int>::max )( ) ) );
+ param_props_->append( int2D_param_descriptor_param_prop_dimension_label_ = pl::string_vec( 2 ) );
+ }
+
+ private:
+ pcos::property int2D_param_descriptor_param_prop_default_;
pcos::property int2D_param_descriptor_param_prop_min_;
pcos::property int2D_param_descriptor_param_prop_max_;
pcos::property int2D_param_descriptor_param_prop_display_min_;
@@ -176,14 +252,31 @@
{
public:
explicit int3D_param_descriptor( )
- : int3D_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
+ : int3D_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , int3D_param_descriptor_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
, int3D_param_descriptor_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
, int3D_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
, int3D_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
, int3D_param_descriptor_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
- { }
+ {
+ set_int3D_param_descriptor_properties( );
+ }
private:
+ void set_int3D_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( int3D_param_descriptor_param_prop_default_ = pcos::int_vec( 3, 0 ) );
+ param_props_->append( int3D_param_descriptor_param_prop_min_ = pcos::int_vec( 3, ( std::numeric_limits<int>::min )( ) ) );
+ param_props_->append( int3D_param_descriptor_param_prop_max_ = pcos::int_vec( 3, ( std::numeric_limits<int>::max )( ) ) );
+ param_props_->append( int3D_param_descriptor_param_prop_display_min_ = pcos::int_vec( 3, ( std::numeric_limits<int>::min )( ) ) );
+ param_props_->append( int3D_param_descriptor_param_prop_display_max_ = pcos::int_vec( 3, ( std::numeric_limits<int>::max )( ) ) );
+ param_props_->append( int3D_param_descriptor_param_prop_dimension_label_ = pl::string_vec( 3 ) );
+ }
+
+ private:
+ pcos::property int3D_param_descriptor_param_prop_default_;
pcos::property int3D_param_descriptor_param_prop_min_;
pcos::property int3D_param_descriptor_param_prop_max_;
pcos::property int3D_param_descriptor_param_prop_display_min_;
@@ -195,16 +288,33 @@
{
public:
explicit base_double_param_descriptor( )
- : base_double_param_descriptor_param_prop_increment_( pcos::key::from_string( kOfxParamPropIncrement ) )
+ : base_double_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , base_double_param_descriptor_param_prop_increment_( pcos::key::from_string( kOfxParamPropIncrement ) )
, base_double_param_descriptor_param_prop_digits_( pcos::key::from_string( kOfxParamPropDigits ) )
- { }
+ , base_double_param_descriptor_param_prop_double_type_( pcos::key::from_string( kOfxParamPropDoubleType ) )
+ {
+ set_base_double_param_descriptor_properties( );
+ }
+
+ private:
+ void set_base_double_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( base_double_param_descriptor_param_prop_default_ = 0.0 );
+ param_props_->append( base_double_param_descriptor_param_prop_increment_ = 1.0 );
+ param_props_->append( base_double_param_descriptor_param_prop_digits_ = 2 );
+ param_props_->append( base_double_param_descriptor_param_prop_double_type_ = kOfxParamDoubleTypePlain );
+ }
private:
+ pcos::property base_double_param_descriptor_param_prop_default_;
pcos::property base_double_param_descriptor_param_prop_increment_;
pcos::property base_double_param_descriptor_param_prop_digits_;
+ pcos::property base_double_param_descriptor_param_prop_double_type_;
};
- class double_param_descriptor : public value_param_descriptor
+ class double_param_descriptor : public base_double_param_descriptor
{
public:
explicit double_param_descriptor( )
@@ -213,7 +323,21 @@
, double_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
, double_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
, double_param_descriptor_param_prop_show_time_marker_( pcos::key::from_string( kOfxParamPropShowTimeMarker ) )
- { }
+ {
+ set_double_param_descriptor_properties( );
+ }
+
+ private:
+ void set_double_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( double_param_descriptor_param_prop_min_ = ( std::numeric_limits<double>::min )( ) );
+ param_props_->append( double_param_descriptor_param_prop_max_ = ( std::numeric_limits<double>::max )( ) );
+ param_props_->append( double_param_descriptor_param_prop_display_min_ = ( std::numeric_limits<double>::min )( ) );
+ param_props_->append( double_param_descriptor_param_prop_display_max_ = ( std::numeric_limits<double>::max )( ) );
+ param_props_->append( double_param_descriptor_param_prop_show_time_marker_ = 0 );
+ }
private:
pcos::property double_param_descriptor_param_prop_min_;
@@ -223,7 +347,7 @@
pcos::property double_param_descriptor_param_prop_show_time_marker_;
};
- class double2D_param_descriptor : public value_param_descriptor
+ class double2D_param_descriptor : public base_double_param_descriptor
{
public:
explicit double2D_param_descriptor( )
@@ -233,6 +357,18 @@
, double2D_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
, double2D_param_descriptor_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
{ }
+
+ private:
+ void set_double2D_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( double2D_param_descriptor_param_prop_min_ = pcos::double_vec( 2, ( std::numeric_limits<double>::min )( ) ) );
+ param_props_->append( double2D_param_descriptor_param_prop_max_ = pcos::double_vec( 2, ( std::numeric_limits<double>::max )( ) ) );
+ param_props_->append( double2D_param_descriptor_param_prop_display_min_ = pcos::double_vec( 2, ( std::numeric_limits<double>::min )( ) ) );
+ param_props_->append( double2D_param_descriptor_param_prop_display_max_ = pcos::double_vec( 2, ( std::numeric_limits<double>::max )( ) ) );
+ param_props_->append( double2D_param_descriptor_param_prop_dimension_label_ = pl::string_vec( 2 ) );
+ }
private:
pcos::property double2D_param_descriptor_param_prop_min_;
@@ -242,7 +378,7 @@
pcos::property double2D_param_descriptor_param_prop_dimension_label_;
};
- class double3D_param_descriptor : public value_param_descriptor
+ class double3D_param_descriptor : public base_double_param_descriptor
{
public:
explicit double3D_param_descriptor( )
@@ -251,7 +387,21 @@
, double3D_param_descriptor_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
, double3D_param_descriptor_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
, double3D_param_descriptor_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
- { }
+ {
+ set_double3D_param_descriptor_properties( );
+ }
+
+ private:
+ void set_double3D_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( double3D_param_descriptor_param_prop_min_ = pcos::double_vec( 3, ( std::numeric_limits<double>::min )( ) ) );
+ param_props_->append( double3D_param_descriptor_param_prop_max_ = pcos::double_vec( 3, ( std::numeric_limits<double>::max )( ) ) );
+ param_props_->append( double3D_param_descriptor_param_prop_display_min_ = pcos::double_vec( 3, ( std::numeric_limits<double>::min )( ) ) );
+ param_props_->append( double3D_param_descriptor_param_prop_display_max_ = pcos::double_vec( 3, ( std::numeric_limits<double>::max )( ) ) );
+ param_props_->append( double3D_param_descriptor_param_prop_dimension_label_ = pl::string_vec( 3 ) );
+ }
private:
pcos::property double3D_param_descriptor_param_prop_min_;
@@ -279,7 +429,21 @@
{
public:
explicit boolean_param_descriptor( )
- { }
+ : boolean_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ {
+ set_boolean_param_descriptor_properties( );
+ }
+
+ private:
+ void set_boolean_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( boolean_param_descriptor_param_prop_default_ = 0 );
+ }
+
+ private:
+ pcos::property boolean_param_descriptor_param_prop_default_;
};
class choice_param_descriptor : public value_param_descriptor
@@ -317,9 +481,15 @@
{ }
};
- class param_set_descriptor : public Ofx_base
+ class param_set_base : public Ofx_base
{
public:
+ virtual OfxParamSetHandle get_param_set( ) = 0;
+ };
+
+ class param_set_descriptor : public param_set_base
+ {
+ public:
typedef pl::string key_type;
typedef boost::shared_ptr<param_descriptor> param_descriptor_ptr;
@@ -421,7 +591,14 @@
}
virtual property_container_ptr get_property_set( )
- { return ¶m_set_descriptor_props_; }
+ {
+ return ¶m_set_descriptor_props_;
+ }
+
+ virtual OfxParamSetHandle get_param_set( )
+ {
+ return ( OfxParamSetHandle ) this;
+ }
private:
container params_;
@@ -445,7 +622,9 @@
, param_prop_param_prop_parent_( pcos::key::from_string( kOfxParamPropParent ) )
, param_prop_param_prop_enabled_( pcos::key::from_string( kOfxParamPropEnabled ) )
, param_prop_param_prop_data_ptr_( pcos::key::from_string( kOfxParamPropDataPtr ) )
- { }
+ {
+ set_param_properties( );
+ }
virtual property_container_ptr get_property_set( )
{ return ¶m_props_; }
@@ -454,6 +633,24 @@
virtual pl::string get_type( ) = 0;
private:
+ void set_param_properties( )
+ {
+ param_props_.append( param_prop_type_ = pl::string( kOfxTypeParameter ) );
+ param_props_.append( param_prop_name_ = pl::string( ) );
+ param_props_.append( param_prop_label_ = pl::string( ) );
+ param_props_.append( param_prop_short_label_ = pl::string( ) );
+ param_props_.append( param_prop_long_label_ = pl::string( ) );
+ param_props_.append( param_prop_name_ = pl::string( ) );
+ param_props_.append( param_prop_param_prop_secret_ = 0 );
+ param_props_.append( param_prop_param_prop_can_undo_ = 1 );
+ param_props_.append( param_prop_param_prop_hint_ = pl::string( ) );
+ param_props_.append( param_prop_param_prop_script_name_ = pl::string( ) );
+ param_props_.append( param_prop_param_prop_parent_ = pl::string( ) );
+ param_props_.append( param_prop_param_prop_enabled_ = 1 );
+ param_props_.append( param_prop_param_prop_data_ptr_ = ( void* ) 0 );
+ }
+
+ private:
pcos::property_container param_props_;
pcos::property param_prop_type_;
pcos::property param_prop_name_;
@@ -474,18 +671,32 @@
{
public:
explicit value_param( )
- : value_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
- , value_param_prop_animates_( pcos::key::from_string( kOfxParamPropAnimates ) )
+ : value_param_prop_animates_( pcos::key::from_string( kOfxParamPropAnimates ) )
, value_param_prop_is_animating_( pcos::key::from_string( kOfxParamPropIsAnimating ) )
, value_param_prop_is_auto_keying_( pcos::key::from_string( kOfxParamPropIsAutoKeying ) )
, value_param_prop_persistant_( pcos::key::from_string( kOfxParamPropPersistant ) )
, value_param_prop_evaluate_on_change_( pcos::key::from_string( kOfxParamPropEvaluateOnChange ) )
, value_param_prop_plugin_may_write_( pcos::key::from_string( kOfxParamPropPluginMayWrite ) )
, value_param_prop_cache_invalidation_( pcos::key::from_string( kOfxParamPropCacheInvalidation ) )
- { }
+ {
+ set_value_param_properties( );
+ }
private:
- pcos::property value_param_prop_default_;
+ void set_value_param_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( value_param_prop_animates_ = 1 );
+ param_props_->append( value_param_prop_is_animating_ = 0 );
+ param_props_->append( value_param_prop_is_auto_keying_ = 0 );
+ param_props_->append( value_param_prop_persistant_ = 1 );
+ param_props_->append( value_param_prop_evaluate_on_change_ = 1 );
+ param_props_->append( value_param_prop_plugin_may_write_ = 0 );
+ param_props_->append( value_param_prop_cache_invalidation_ = pl::string( kOfxParamInvalidateValueChange ) );
+ }
+
+ private:
pcos::property value_param_prop_animates_;
pcos::property value_param_prop_is_animating_;
pcos::property value_param_prop_is_auto_keying_;
@@ -500,9 +711,12 @@
public:
explicit string_param( )
: string_param_value_( pcos::key::from_string( "value" ) )
+ , string_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
, string_param_prop_string_mode_( pcos::key::from_string( kOfxParamPropStringMode ) )
, string_param_prop_string_file_path_exists_( pcos::key::from_string( kOfxParamPropStringFilePathExists ) )
- { }
+ {
+ set_string_param_properties( );
+ }
virtual pcos::property get_value( )
{
@@ -513,9 +727,21 @@
{
return kOfxParamTypeString;
}
-
+
private:
+ void set_string_param_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( string_param_value_ = pl::string( ) );
+ param_props_->append( string_param_prop_default_ = pl::string( ) );
+ param_props_->append( string_param_prop_string_mode_ = pl::string( kOfxParamStringIsSingleLine ) );
+ param_props_->append( string_param_prop_string_file_path_exists_ = 1 );
+ }
+
+ private:
pcos::property string_param_value_;
+ pcos::property string_param_prop_default_;
pcos::property string_param_prop_string_mode_;
pcos::property string_param_prop_string_file_path_exists_;
};
@@ -525,11 +751,14 @@
public:
explicit int_param( )
: int_param_value_( pcos::key::from_string( "value" ) )
+ , int_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
, int_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
, int_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
, int_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
, int_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
- { }
+ {
+ set_int_param_properties( );
+ }
virtual pcos::property get_value( )
{
@@ -540,9 +769,23 @@
{
return kOfxParamTypeInteger;
}
+
+ private:
+ void set_int_param_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( int_param_value_ = 0 );
+ param_props_->append( int_param_prop_default_ = 0 );
+ param_props_->append( int_param_prop_min_ = ( std::numeric_limits<int>::min )( ) );
+ param_props_->append( int_param_prop_max_ = ( std::numeric_limits<int>::max )( ) );
+ param_props_->append( int_param_prop_display_min_ = ( std::numeric_limits<int>::min )( ) );
+ param_props_->append( int_param_prop_display_max_ = ( std::numeric_limits<int>::max )( ) );
+ }
private:
pcos::property int_param_value_;
+ pcos::property int_param_prop_default_;
pcos::property int_param_prop_min_;
pcos::property int_param_prop_max_;
pcos::property int_param_prop_display_min_;
@@ -554,12 +797,15 @@
public:
explicit int2D_param( )
: int2D_param_value_( pcos::key::from_string( "value" ) )
+ , int2D_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
, int2D_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
, int2D_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
, int2D_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
, int2D_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
, int2D_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
- { }
+ {
+ set_int2D_param_properties( );
+ }
virtual pcos::property get_value( )
{
@@ -570,9 +816,24 @@
{
return kOfxParamTypeInteger2D;
}
+
+ private:
+ void set_int2D_param_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( int2D_param_value_ = pcos::int_vec( 2, 0 ) );
+ param_props_->append( int2D_param_prop_default_ = pcos::int_vec( 2, 0 ) );
+ param_props_->append( int2D_param_prop_min_ = pcos::int_vec( 2, ( std::numeric_limits<int>::min )( ) ) );
+ param_props_->append( int2D_param_prop_max_ = pcos::int_vec( 2, ( std::numeric_limits<int>::max )( ) ) );
+ param_props_->append( int2D_param_prop_display_min_ = pcos::int_vec( 2, ( std::numeric_limits<int>::min )( ) ) );
+ param_props_->append( int2D_param_prop_display_max_ = pcos::int_vec( 2, ( std::numeric_limits<int>::max )( ) ) );
+ param_props_->append( int2D_param_prop_dimension_label_ = pl::string_vec( 2 ) );
+ }
private:
pcos::property int2D_param_value_;
+ pcos::property int2D_param_prop_default_;
pcos::property int2D_param_prop_min_;
pcos::property int2D_param_prop_max_;
pcos::property int2D_param_prop_display_min_;
@@ -585,12 +846,15 @@
public:
explicit int3D_param( )
: int3D_param_value_( pcos::key::from_string( "value" ) )
- , int3D_param_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
- , int3D_param_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
- , int3D_param_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
- , int3D_param_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
- , int3D_param_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
- { }
+ , int3D_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , int3D_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
+ , int3D_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
+ , int3D_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
+ , int3D_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
+ , int3D_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
+ {
+ set_int3D_param_properties( );
+ }
virtual pcos::property get_value( )
{
@@ -603,38 +867,72 @@
}
private:
+ void set_int3D_param_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( int3D_param_value_ = pcos::int_vec( 3, 0 ) );
+ param_props_->append( int3D_param_prop_default_ = pcos::int_vec( 3, 0 ) );
+ param_props_->append( int3D_param_prop_min_ = pcos::int_vec( 3, ( std::numeric_limits<int>::min )( ) ) );
+ param_props_->append( int3D_param_prop_max_ = pcos::int_vec( 3, ( std::numeric_limits<int>::max )( ) ) );
+ param_props_->append( int3D_param_prop_display_min_ = pcos::int_vec( 3, ( std::numeric_limits<int>::min )( ) ) );
+ param_props_->append( int3D_param_prop_display_max_ = pcos::int_vec( 3, ( std::numeric_limits<int>::max )( ) ) );
+ param_props_->append( int3D_param_prop_dimension_label_ = pl::string_vec( 3 ) );
+ }
+
+ private:
pcos::property int3D_param_value_;
- pcos::property int3D_param_param_prop_min_;
- pcos::property int3D_param_param_prop_max_;
- pcos::property int3D_param_param_prop_display_min_;
- pcos::property int3D_param_param_prop_display_max_;
- pcos::property int3D_param_param_prop_dimension_label_;
+ pcos::property int3D_param_prop_default_;
+ pcos::property int3D_param_prop_min_;
+ pcos::property int3D_param_prop_max_;
+ pcos::property int3D_param_prop_display_min_;
+ pcos::property int3D_param_prop_display_max_;
+ pcos::property int3D_param_prop_dimension_label_;
};
class base_double_param : public value_param
{
public:
explicit base_double_param( )
- : base_double_param_prop_increment_( pcos::key::from_string( kOfxParamPropIncrement ) )
+ : base_double_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , base_double_param_prop_increment_( pcos::key::from_string( kOfxParamPropIncrement ) )
, base_double_param_prop_digits_( pcos::key::from_string( kOfxParamPropDigits ) )
- { }
+ , base_double_param_prop_double_type_( pcos::key::from_string( kOfxParamPropDoubleType ) )
+ {
+ set_base_double_param_properties( );
+ }
private:
+ void set_base_double_param_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( base_double_param_prop_defa...
[truncated message content] |
|
From: <gl...@us...> - 2007-05-03 23:00:02
|
Revision: 112
http://hdrflow.svn.sourceforge.net/hdrflow/?rev=112&view=rev
Author: glslang
Date: 2007-05-03 16:00:00 -0700 (Thu, 03 May 2007)
Log Message:
-----------
+ OFX bindings continued
Modified Paths:
--------------
lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp
lib/openlibraries/src/openpluginlib/pl/pcos/property.hpp
Modified: lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
===================================================================
--- lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-05-01 22:40:09 UTC (rev 111)
+++ lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-05-03 23:00:00 UTC (rev 112)
@@ -38,8 +38,6 @@
namespace
{
- typedef pcos::property_container* property_container_ptr;
-
void set_property_suite( OfxPropertySuiteV1& );
void set_image_effect_suite( OfxImageEffectSuiteV1& );
void set_parameter_suite( OfxParameterSuiteV1& );
@@ -48,6 +46,14 @@
void set_interact_suite( OfxInteractSuiteV1& );
void set_message_suite( OfxMessageSuiteV1& );
+ // typedefs
+ typedef pcos::property_container* property_container_ptr;
+
+ // forward declaration
+ class param;
+ class param_set;
+ class clip_instance;
+
struct Ofx_base
{
virtual ~Ofx_base( ) { }
@@ -75,8 +81,8 @@
set_param_descriptor_properties( );
}
- virtual property_container_ptr get_property_set( )
- { return ¶m_descriptor_props_; }
+ virtual property_container_ptr get_property_set( ) { return ¶m_descriptor_props_; }
+ virtual param* create_instance( ) = 0;
private:
void set_param_descriptor_properties( )
@@ -162,6 +168,8 @@
{
set_string_param_descriptor_properties( );
}
+
+ virtual param* create_instance( );
private:
void set_string_param_descriptor_properties( )
@@ -192,6 +200,8 @@
set_int_param_descriptor_properties( );
}
+ virtual param* create_instance( );
+
private:
void set_int_param_descriptor_properties( )
{
@@ -225,6 +235,8 @@
{
set_int2D_param_descriptor_properties( );
}
+
+ virtual param* create_instance( );
private:
void set_int2D_param_descriptor_properties( )
@@ -261,6 +273,8 @@
{
set_int3D_param_descriptor_properties( );
}
+
+ virtual param* create_instance( );
private:
void set_int3D_param_descriptor_properties( )
@@ -326,6 +340,8 @@
{
set_double_param_descriptor_properties( );
}
+
+ virtual param* create_instance( );
private:
void set_double_param_descriptor_properties( )
@@ -369,6 +385,8 @@
param_props_->append( double2D_param_descriptor_param_prop_display_max_ = pcos::double_vec( 2, ( std::numeric_limits<double>::max )( ) ) );
param_props_->append( double2D_param_descriptor_param_prop_dimension_label_ = pl::string_vec( 2 ) );
}
+
+ virtual param* create_instance( );
private:
pcos::property double2D_param_descriptor_param_prop_min_;
@@ -390,6 +408,8 @@
{
set_double3D_param_descriptor_properties( );
}
+
+ virtual param* create_instance( );
private:
void set_double3D_param_descriptor_properties( )
@@ -416,6 +436,8 @@
public:
explicit rgb_param_descriptor( )
{ }
+
+ virtual param* create_instance( );
};
class rgba_param_descriptor : public value_param_descriptor
@@ -423,6 +445,8 @@
public:
explicit rgba_param_descriptor( )
{ }
+
+ virtual param* create_instance( );
};
class boolean_param_descriptor : public value_param_descriptor
@@ -433,6 +457,8 @@
{
set_boolean_param_descriptor_properties( );
}
+
+ virtual param* create_instance( );
private:
void set_boolean_param_descriptor_properties( )
@@ -451,6 +477,8 @@
public:
explicit choice_param_descriptor( )
{ }
+
+ virtual param* create_instance( );
};
class group_param_descriptor : public value_param_descriptor
@@ -458,13 +486,34 @@
public:
explicit group_param_descriptor( )
{ }
+
+ virtual param* create_instance( );
};
class page_param_descriptor : public value_param_descriptor
{
public:
explicit page_param_descriptor( )
- { }
+ : page_param_descriptor_param_prop_type_( pcos::key::from_string( kOfxParamPropType ) )
+ , page_param_descriptor_param_prop_child_( pcos::key::from_string( kOfxParamPropPageChild ) )
+ {
+ set_page_param_descriptor_properties( );
+ }
+
+ virtual param* create_instance( );
+
+ private:
+ void set_page_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( page_param_descriptor_param_prop_type_ = pl::string( kOfxParamTypePage ) );
+ param_props_->append( page_param_descriptor_param_prop_child_ = pl::string_vec( ) );
+ }
+
+ private:
+ pcos::property page_param_descriptor_param_prop_type_;
+ pcos::property page_param_descriptor_param_prop_child_;
};
class push_button_param_descriptor : public value_param_descriptor
@@ -472,6 +521,8 @@
public:
explicit push_button_param_descriptor( )
{ }
+
+ virtual param* create_instance( );
};
class custom_param_descriptor : public value_param_descriptor
@@ -479,6 +530,8 @@
public:
explicit custom_param_descriptor( )
{ }
+
+ virtual param* create_instance( );
};
class param_set_base : public Ofx_base
@@ -498,108 +551,30 @@
#else
typedef std::map<key_type, param_descriptor_ptr> container;
#endif
+ typedef container::const_iterator const_iterator;
public:
explicit param_set_descriptor( )
{ }
- OfxStatus define( const pl::string& param_type, const pl::string& name )
- {
- typedef container::const_iterator const_iterator;
-
- const_iterator I;
- if( ( I = params_.find( name ) ) == params_.end( ) )
- {
- if( param_type == kOfxParamTypeInteger )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new int_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeInteger2D )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new int2D_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeInteger3D )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new int3D_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeDouble )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new double_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeDouble2D )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new double2D_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeDouble3D )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new double3D_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeRGB )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new rgb_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeRGBA )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new rgba_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeBoolean )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new boolean_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeChoice )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new choice_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeGroup )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new group_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypePage )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new page_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeCustom )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new custom_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypePushButton )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new push_button_param_descriptor( ) ) ) );
- }
- else if( param_type == kOfxParamTypeString )
- {
- params_.insert( container::value_type( name, param_descriptor_ptr( new string_param_descriptor( ) ) ) );
- }
- }
- else
- {
- // parameter already exists. if the type is the same return success. otherwise flag as an error.
- }
-
- return kOfxStatOK;
- }
+ OfxStatus define( const pl::string& param_type, const pl::string& name );
property_container_ptr find_property_set( const pl::string& name )
{
- typedef container::const_iterator const_iterator;
-
const_iterator I;
if( ( I = params_.find( name ) ) != params_.end( ) )
return I->second->get_property_set( );
-
return 0;
}
- virtual property_container_ptr get_property_set( )
- {
- return ¶m_set_descriptor_props_;
- }
+ virtual property_container_ptr get_property_set( ) { return ¶m_set_descriptor_props_; }
+ virtual OfxParamSetHandle get_param_set( ) { return ( OfxParamSetHandle ) this; }
- virtual OfxParamSetHandle get_param_set( )
- {
- return ( OfxParamSetHandle ) this;
- }
+ const_iterator begin( ) const { return params_.begin( ); }
+ const_iterator end( ) const { return params_.end( ); }
+ virtual param_set* create_instance( );
+
private:
container params_;
pcos::property_container param_set_descriptor_props_;
@@ -608,13 +583,12 @@
class param : public Ofx_base
{
public:
- explicit param( )
+ explicit param( param_descriptor& vpd )
: param_prop_type_( pcos::key::from_string( kOfxPropType ) )
, param_prop_name_( pcos::key::from_string( kOfxPropName ) )
, param_prop_label_( pcos::key::from_string( kOfxPropLabel ) )
, param_prop_short_label_( pcos::key::from_string( kOfxPropShortLabel ) )
, param_prop_long_label_( pcos::key::from_string( kOfxPropLongLabel ) )
- , param_prop_param_prop_type_( pcos::key::from_string( kOfxParamPropType ) )
, param_prop_param_prop_secret_( pcos::key::from_string( kOfxParamPropSecret ) )
, param_prop_param_prop_can_undo_( pcos::key::from_string( kOfxParamPropCanUndo ) )
, param_prop_param_prop_hint_( pcos::key::from_string( kOfxParamPropHint ) )
@@ -623,31 +597,47 @@
, param_prop_param_prop_enabled_( pcos::key::from_string( kOfxParamPropEnabled ) )
, param_prop_param_prop_data_ptr_( pcos::key::from_string( kOfxParamPropDataPtr ) )
{
- set_param_properties( );
+ set_param_properties( vpd );
}
- virtual property_container_ptr get_property_set( )
- { return ¶m_props_; }
-
- virtual pcos::property get_value( ) = 0;
- virtual pl::string get_type( ) = 0;
+ virtual property_container_ptr get_property_set( ) { return ¶m_props_; }
+ virtual pcos::property get_value( ) = 0;
+ virtual pl::string get_type( ) = 0;
private:
- void set_param_properties( )
+ // assign the instance properties from the descriptor. do not assign properties since
+ // they have shallow copy semantics and clone will cause a leak.
+ // therefore extract all the values and assign those. descriptors and instances are
+ // meant to be separate entities and values should not be shared.
+ void set_param_properties( param_descriptor& vpd )
{
- param_props_.append( param_prop_type_ = pl::string( kOfxTypeParameter ) );
- param_props_.append( param_prop_name_ = pl::string( ) );
- param_props_.append( param_prop_label_ = pl::string( ) );
- param_props_.append( param_prop_short_label_ = pl::string( ) );
- param_props_.append( param_prop_long_label_ = pl::string( ) );
- param_props_.append( param_prop_name_ = pl::string( ) );
- param_props_.append( param_prop_param_prop_secret_ = 0 );
- param_props_.append( param_prop_param_prop_can_undo_ = 1 );
- param_props_.append( param_prop_param_prop_hint_ = pl::string( ) );
- param_props_.append( param_prop_param_prop_script_name_ = pl::string( ) );
- param_props_.append( param_prop_param_prop_parent_ = pl::string( ) );
- param_props_.append( param_prop_param_prop_enabled_ = 1 );
- param_props_.append( param_prop_param_prop_data_ptr_ = ( void* ) 0 );
+ property_container_ptr vpd_set = vpd.get_property_set( );
+
+ pl::string type = vpd_set->get_property_with_key( pcos::key::from_string( kOfxPropType ) ).value<pl::string>( );
+ pl::string name = vpd_set->get_property_with_key( pcos::key::from_string( kOfxPropName ) ).value<pl::string>( );
+ pl::string label = vpd_set->get_property_with_key( pcos::key::from_string( kOfxPropLabel ) ).value<pl::string>( );
+ pl::string short_label = vpd_set->get_property_with_key( pcos::key::from_string( kOfxPropShortLabel ) ).value<pl::string>( );
+ pl::string long_label = vpd_set->get_property_with_key( pcos::key::from_string( kOfxPropLongLabel ) ).value<pl::string>( );
+ int secret = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropSecret ) ).value<int>( );
+ int can_undo = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropCanUndo ) ).value<int>( );
+ pl::string hint = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropHint ) ).value<pl::string>( );
+ pl::string script_name = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropScriptName ) ).value<pl::string>( );
+ pl::string parent = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropParent ) ).value<pl::string>( );
+ int enabled = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropEnabled ) ).value<int>( );
+ void* data_ptr = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDataPtr ) ).value<void*>( );
+
+ param_props_.append( param_prop_type_ = type );
+ param_props_.append( param_prop_name_ = name );
+ param_props_.append( param_prop_label_ = label );
+ param_props_.append( param_prop_short_label_ = short_label );
+ param_props_.append( param_prop_long_label_ = long_label );
+ param_props_.append( param_prop_param_prop_secret_ = secret );
+ param_props_.append( param_prop_param_prop_can_undo_ = can_undo );
+ param_props_.append( param_prop_param_prop_hint_ = hint );
+ param_props_.append( param_prop_param_prop_script_name_ = script_name );
+ param_props_.append( param_prop_param_prop_parent_ = parent );
+ param_props_.append( param_prop_param_prop_enabled_ = enabled );
+ param_props_.append( param_prop_param_prop_data_ptr_ = data_ptr );
}
private:
@@ -657,7 +647,6 @@
pcos::property param_prop_label_;
pcos::property param_prop_short_label_;
pcos::property param_prop_long_label_;
- pcos::property param_prop_param_prop_type_;
pcos::property param_prop_param_prop_secret_;
pcos::property param_prop_param_prop_can_undo_;
pcos::property param_prop_param_prop_hint_;
@@ -670,8 +659,9 @@
class value_param : public param
{
public:
- explicit value_param( )
- : value_param_prop_animates_( pcos::key::from_string( kOfxParamPropAnimates ) )
+ explicit value_param( value_param_descriptor& vpd )
+ : param( vpd )
+ , value_param_prop_animates_( pcos::key::from_string( kOfxParamPropAnimates ) )
, value_param_prop_is_animating_( pcos::key::from_string( kOfxParamPropIsAnimating ) )
, value_param_prop_is_auto_keying_( pcos::key::from_string( kOfxParamPropIsAutoKeying ) )
, value_param_prop_persistant_( pcos::key::from_string( kOfxParamPropPersistant ) )
@@ -679,21 +669,35 @@
, value_param_prop_plugin_may_write_( pcos::key::from_string( kOfxParamPropPluginMayWrite ) )
, value_param_prop_cache_invalidation_( pcos::key::from_string( kOfxParamPropCacheInvalidation ) )
{
- set_value_param_properties( );
+ set_value_param_properties( vpd );
}
private:
- void set_value_param_properties( )
+ // assign the instance properties from the descriptor. do not assign properties since
+ // they have shallow copy semantics and clone will cause a leak.
+ // therefore extract all the values and assign those. descriptors and instances are
+ // meant to be separate entities and values should not be shared.
+ void set_value_param_properties( value_param_descriptor& vpd )
{
property_container_ptr param_props_ = get_property_set( );
+
+ property_container_ptr vpd_set = vpd.get_property_set( );
- param_props_->append( value_param_prop_animates_ = 1 );
- param_props_->append( value_param_prop_is_animating_ = 0 );
- param_props_->append( value_param_prop_is_auto_keying_ = 0 );
- param_props_->append( value_param_prop_persistant_ = 1 );
- param_props_->append( value_param_prop_evaluate_on_change_ = 1 );
- param_props_->append( value_param_prop_plugin_may_write_ = 0 );
- param_props_->append( value_param_prop_cache_invalidation_ = pl::string( kOfxParamInvalidateValueChange ) );
+ int animates = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropAnimates ) ).value<int>( );
+ int is_animating = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropIsAnimating ) ).value<int>( );
+ int is_auto_keying = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropIsAutoKeying ) ).value<int>( );
+ int persistant = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropPersistant ) ).value<int>( );
+ int evaluate_on_change = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropEvaluateOnChange ) ).value<int>( );
+ int may_write = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropPluginMayWrite ) ).value<int>( );
+ pl::string cache_invalidation = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropCacheInvalidation ) ).value<pl::string>( );
+
+ param_props_->append( value_param_prop_animates_ = animates );
+ param_props_->append( value_param_prop_is_animating_ = is_animating );
+ param_props_->append( value_param_prop_is_auto_keying_ = is_auto_keying );
+ param_props_->append( value_param_prop_persistant_ = persistant );
+ param_props_->append( value_param_prop_evaluate_on_change_ = evaluate_on_change );
+ param_props_->append( value_param_prop_plugin_may_write_ = may_write );
+ param_props_->append( value_param_prop_cache_invalidation_ = cache_invalidation );
}
private:
@@ -709,34 +713,38 @@
class string_param : public value_param
{
public:
- explicit string_param( )
- : string_param_value_( pcos::key::from_string( "value" ) )
+ explicit string_param( string_param_descriptor& vpd )
+ : value_param( vpd )
+ , string_param_value_( pcos::key::from_string( "value" ) )
, string_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
, string_param_prop_string_mode_( pcos::key::from_string( kOfxParamPropStringMode ) )
, string_param_prop_string_file_path_exists_( pcos::key::from_string( kOfxParamPropStringFilePathExists ) )
{
- set_string_param_properties( );
+ set_string_param_properties( vpd );
}
- virtual pcos::property get_value( )
- {
- return string_param_value_;
- }
-
- virtual pl::string get_type( )
- {
- return kOfxParamTypeString;
- }
+ virtual pcos::property get_value( ) { return string_param_value_; }
+ virtual pl::string get_type( ) { return kOfxParamTypeString; }
private:
- void set_string_param_properties( )
+ // assign the instance properties from the descriptor. do not assign properties since
+ // they have shallow copy semantics and clone will cause a leak.
+ // therefore extract all the values and assign those. descriptors and instances are
+ // meant to be separate entities and values should not be shared.
+ void set_string_param_properties( string_param_descriptor& vpd )
{
property_container_ptr param_props_ = get_property_set( );
+
+ property_container_ptr vpd_set = vpd.get_property_set( );
- param_props_->append( string_param_value_ = pl::string( ) );
- param_props_->append( string_param_prop_default_ = pl::string( ) );
- param_props_->append( string_param_prop_string_mode_ = pl::string( kOfxParamStringIsSingleLine ) );
- param_props_->append( string_param_prop_string_file_path_exists_ = 1 );
+ pl::string def = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDefault ) ).value<pl::string>( );
+ pl::string mode = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropStringMode ) ).value<pl::string>( );
+ int file_path_exists = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropStringFilePathExists ) ).value<int>( );
+
+ param_props_->append( string_param_value_ = def );
+ param_props_->append( string_param_prop_default_ = def );
+ param_props_->append( string_param_prop_string_mode_ = mode );
+ param_props_->append( string_param_prop_string_file_path_exists_ = file_path_exists );
}
private:
@@ -749,38 +757,44 @@
class int_param : public value_param
{
public:
- explicit int_param( )
- : int_param_value_( pcos::key::from_string( "value" ) )
+ explicit int_param( int_param_descriptor& vpd )
+ : value_param( vpd )
+ , int_param_value_( pcos::key::from_string( "value" ) )
, int_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
, int_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
, int_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
, int_param_prop_display_min_( pcos::key::from_string( kOfxParamPropDisplayMin ) )
, int_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
{
- set_int_param_properties( );
+ set_int_param_properties( vpd );
}
- virtual pcos::property get_value( )
- {
- return int_param_value_;
- }
+ virtual pcos::property get_value( ) { return int_param_value_; }
+ virtual pl::string get_type( ) { return kOfxParamTypeInteger; }
- virtual pl::string get_type( )
- {
- return kOfxParamTypeInteger;
- }
-
private:
- void set_int_param_properties( )
+ // assign the instance properties from the descriptor. do not assign properties since
+ // they have shallow copy semantics and clone will cause a leak.
+ // therefore extract all the values and assign those. descriptors and instances are
+ // meant to be separate entities and values should not be shared.
+ void set_int_param_properties( int_param_descriptor& vpd )
{
property_container_ptr param_props_ = get_property_set( );
+
+ property_container_ptr vpd_set = vpd.get_property_set( );
- param_props_->append( int_param_value_ = 0 );
- param_props_->append( int_param_prop_default_ = 0 );
- param_props_->append( int_param_prop_min_ = ( std::numeric_limits<int>::min )( ) );
- param_props_->append( int_param_prop_max_ = ( std::numeric_limits<int>::max )( ) );
- param_props_->append( int_param_prop_display_min_ = ( std::numeric_limits<int>::min )( ) );
- param_props_->append( int_param_prop_display_max_ = ( std::numeric_limits<int>::max )( ) );
+ int def = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDefault ) ).value<int>( );
+ int min = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropMin ) ).value<int>( );
+ int max = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropMax ) ).value<int>( );
+ int display_min = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDisplayMin ) ).value<int>( );
+ int display_max = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDisplayMax ) ).value<int>( );
+
+ param_props_->append( int_param_value_ = def );
+ param_props_->append( int_param_prop_default_ = def );
+ param_props_->append( int_param_prop_min_ = min );
+ param_props_->append( int_param_prop_max_ = max );
+ param_props_->append( int_param_prop_display_min_ = display_min );
+ param_props_->append( int_param_prop_display_max_ = display_max );
}
private:
@@ -795,8 +809,9 @@
class int2D_param : public value_param
{
public:
- explicit int2D_param( )
- : int2D_param_value_( pcos::key::from_string( "value" ) )
+ explicit int2D_param( int2D_param_descriptor& vpd )
+ : value_param( vpd )
+ , int2D_param_value_( pcos::key::from_string( "value" ) )
, int2D_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
, int2D_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
, int2D_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
@@ -804,31 +819,37 @@
, int2D_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
, int2D_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
{
- set_int2D_param_properties( );
+ set_int2D_param_properties( vpd );
}
- virtual pcos::property get_value( )
- {
- return int2D_param_value_;
- }
+ virtual pcos::property get_value( ) { return int2D_param_value_; }
+ virtual pl::string get_type( ) { return kOfxParamTypeInteger2D; }
- virtual pl::string get_type( )
- {
- return kOfxParamTypeInteger2D;
- }
-
private:
- void set_int2D_param_properties( )
+ // assign the instance properties from the descriptor. do not assign properties since
+ // they have shallow copy semantics and clone will cause a leak.
+ // therefore extract all the values and assign those. descriptors and instances are
+ // meant to be separate entities and values should not be shared.
+ void set_int2D_param_properties( int2D_param_descriptor& vpd )
{
property_container_ptr param_props_ = get_property_set( );
+
+ property_container_ptr vpd_set = vpd.get_property_set( );
- param_props_->append( int2D_param_value_ = pcos::int_vec( 2, 0 ) );
- param_props_->append( int2D_param_prop_default_ = pcos::int_vec( 2, 0 ) );
- param_props_->append( int2D_param_prop_min_ = pcos::int_vec( 2, ( std::numeric_limits<int>::min )( ) ) );
- param_props_->append( int2D_param_prop_max_ = pcos::int_vec( 2, ( std::numeric_limits<int>::max )( ) ) );
- param_props_->append( int2D_param_prop_display_min_ = pcos::int_vec( 2, ( std::numeric_limits<int>::min )( ) ) );
- param_props_->append( int2D_param_prop_display_max_ = pcos::int_vec( 2, ( std::numeric_limits<int>::max )( ) ) );
- param_props_->append( int2D_param_prop_dimension_label_ = pl::string_vec( 2 ) );
+ pcos::int_vec def = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDefault ) ).value<pcos::int_vec>( );
+ pcos::int_vec min = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropMin ) ).value<pcos::int_vec>( );
+ pcos::int_vec max = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropMax ) ).value<pcos::int_vec>( );
+ pcos::int_vec display_min = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDisplayMin ) ).value<pcos::int_vec>( );
+ pcos::int_vec display_max = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDisplayMax ) ).value<pcos::int_vec>( );
+ pl::string_vec dimension_label = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDimensionLabel ) ).value<pl::string_vec>( );
+
+ param_props_->append( int2D_param_value_ = def );
+ param_props_->append( int2D_param_prop_default_ = def );
+ param_props_->append( int2D_param_prop_min_ = min );
+ param_props_->append( int2D_param_prop_max_ = max );
+ param_props_->append( int2D_param_prop_display_min_ = display_min );
+ param_props_->append( int2D_param_prop_display_max_ = display_max );
+ param_props_->append( int2D_param_prop_dimension_label_ = dimension_label );
}
private:
@@ -844,8 +865,9 @@
class int3D_param : public value_param
{
public:
- explicit int3D_param( )
- : int3D_param_value_( pcos::key::from_string( "value" ) )
+ explicit int3D_param( int3D_param_descriptor& vpd )
+ : value_param( vpd )
+ , int3D_param_value_( pcos::key::from_string( "value" ) )
, int3D_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
, int3D_param_prop_min_( pcos::key::from_string( kOfxParamPropMin ) )
, int3D_param_prop_max_( pcos::key::from_string( kOfxParamPropMax ) )
@@ -853,31 +875,37 @@
, int3D_param_prop_display_max_( pcos::key::from_string( kOfxParamPropDisplayMax ) )
, int3D_param_prop_dimension_label_( pcos::key::from_string( kOfxParamPropDimensionLabel ) )
{
- set_int3D_param_properties( );
+ set_int3D_param_properties( vpd );
}
- virtual pcos::property get_value( )
- {
- return int3D_param_value_;
- }
-
- virtual pl::string get_type( )
- {
- return kOfxParamTypeInteger3D;
- }
+ virtual pcos::property get_value( ) { return int3D_param_value_; }
+ virtual pl::string get_type( ) { return kOfxParamTypeInteger3D; }
private:
- void set_int3D_param_properties( )
+ // assign the instance properties from the descriptor. do not assign properties since
+ // they have shallow copy semantics and clone will cause a leak.
+ // therefore extract all the values and assign those. descriptors and instances are
+ // meant to be separate entities and values should not be shared.
+ void set_int3D_param_properties( int3D_param_descriptor& vpd )
{
property_container_ptr param_props_ = get_property_set( );
+
+ property_container_ptr vpd_set = vpd.get_property_set( );
- param_props_->append( int3D_param_value_ = pcos::int_vec( 3, 0 ) );
- param_props_->append( int3D_param_prop_default_ = pcos::int_vec( 3, 0 ) );
- param_props_->append( int3D_param_prop_min_ = pcos::int_vec( 3, ( std::numeric_limits<int>::min )( ) ) );
- param_props_->append( int3D_param_prop_max_ = pcos::int_vec( 3, ( std::numeric_limits<int>::max )( ) ) );
- param_props_->append( int3D_param_prop_display_min_ = pcos::int_vec( 3, ( std::numeric_limits<int>::min )( ) ) );
- param_props_->append( int3D_param_prop_display_max_ = pcos::int_vec( 3, ( std::numeric_limits<int>::max )( ) ) );
- param_props_->append( int3D_param_prop_dimension_label_ = pl::string_vec( 3 ) );
+ pcos::int_vec def = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDefault ) ).value<pcos::int_vec>( );
+ pcos...
[truncated message content] |
|
From: <gl...@us...> - 2007-05-09 00:29:10
|
Revision: 114
http://hdrflow.svn.sourceforge.net/hdrflow/?rev=114&view=rev
Author: glslang
Date: 2007-05-08 17:29:07 -0700 (Tue, 08 May 2007)
Log Message:
-----------
+ OFX bindings continued
Modified Paths:
--------------
lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp
lib/openlibraries/src/openpluginlib/pl/pcos/property.hpp
Modified: lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp
===================================================================
--- lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-05-04 17:24:48 UTC (rev 113)
+++ lib/openlibraries/src/openmedialib/plugins/ofx/ofx_plugin.cpp 2007-05-09 00:29:07 UTC (rev 114)
@@ -476,9 +476,26 @@
{
public:
explicit choice_param_descriptor( )
- { }
+ : choice_param_descriptor_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , choice_param_descriptor_param_prop_choice_option_( pcos::key::from_string( kOfxParamPropChoiceOption ) )
+ {
+ set_choice_param_descriptor_properties( );
+ }
virtual param* create_instance( );
+
+ private:
+ void set_choice_param_descriptor_properties( )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ param_props_->append( choice_param_descriptor_param_prop_default_ = 0 );
+ param_props_->append( choice_param_descriptor_param_prop_choice_option_ = pl::string_vec( ) );
+ }
+
+ private:
+ pcos::property choice_param_descriptor_param_prop_default_;
+ pcos::property choice_param_descriptor_param_prop_choice_option_;
};
class group_param_descriptor : public value_param_descriptor
@@ -1196,13 +1213,38 @@
explicit choice_param( choice_param_descriptor& vpd )
: value_param( vpd )
, choice_param_value_( pcos::key::from_string( "value" ) )
- { }
+ , choice_param_prop_default_( pcos::key::from_string( kOfxParamPropDefault ) )
+ , choice_param_prop_choice_option_( pcos::key::from_string( kOfxParamPropChoiceOption ) )
+ {
+ set_choice_param_properties( vpd );
+ }
virtual pcos::property get_value( ) { return choice_param_value_; }
virtual pl::string get_type( ) { return kOfxParamTypeChoice; }
private:
+ // assign the instance properties from the descriptor. do not assign properties since
+ // they have shallow copy semantics and clone will cause a leak.
+ // therefore extract all the values and assign those. descriptors and instances are
+ // meant to be separate entities and values should not be shared.
+ void set_choice_param_properties( choice_param_descriptor& vpd )
+ {
+ property_container_ptr param_props_ = get_property_set( );
+
+ property_container_ptr vpd_set = vpd.get_property_set( );
+
+ int def = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropDefault ) ).value<int>( );
+ pl::string_vec choice_vec = vpd_set->get_property_with_key( pcos::key::from_string( kOfxParamPropChoiceOption ) ).value<pl::string_vec>( );
+
+ param_props_->append( choice_param_value_ = def );
+ param_props_->append( choice_param_prop_default_ = def );
+ param_props_->append( choice_param_prop_choice_option_ = choice_vec );
+ }
+
+ private:
pcos::property choice_param_value_;
+ pcos::property choice_param_prop_default_;
+ pcos::property choice_param_prop_choice_option_;
};
class group_param : public value_param
@@ -1442,6 +1484,31 @@
pcos::property clip_descriptor_prop_is_mask_;
pcos::property clip_descriptor_prop_supports_tiles_;
};
+
+ class interact_descriptor : public Ofx_base
+ {
+ public:
+ explicit interact_descriptor( )
+ : interact_descriptor_prop_has_alpha_( pcos::key::from_string( kOfxInteractPropHasAlpha ) )
+ , interact_descriptor_prop_bit_depth_( pcos::key::from_string( kOfxInteractPropBitDepth ) )
+ {
+ set_interact_descriptor_properties( );
+ }
+
+ virtual property_container_ptr get_property_set( ) { return &interact_descriptor_props_; }
+
+ private:
+ void set_interact_descriptor_properties( )
+ {
+ interact_descriptor_props_.append( interact_descriptor_prop_has_alpha_ = 1 );
+ interact_descriptor_props_.append( interact_descriptor_prop_bit_depth_ = 8 );
+ }
+
+ private:
+ pcos::property_container interact_descriptor_props_;
+ pcos::property interact_descriptor_prop_has_alpha_;
+ pcos::property interact_descriptor_prop_bit_depth_;
+ };
class image_effect_descriptor : public param_set_descriptor
{
@@ -1652,6 +1719,49 @@
private:
image im_;
};
+
+ class interact_instance : public Ofx_base
+ {
+ public:
+ explicit interact_instance( )
+ : interact_instance_prop_effect_instance_( pcos::key::from_string( kOfxPropEffectInstance ) )
+ , interact_instance_prop_instance_data_( pcos::key::from_string( kOfxPropInstanceData ) )
+ , interact_instance_prop_pixel_scale_( pcos::key::from_string( kOfxInteractPropPixelScale ) )
+ , interact_instance_prop_background_colour_( pcos::key::from_string( kOfxInteractPropBackgroundColour ) )
+ , interact_instance_prop_viewport_size_( pcos::key::from_string( kOfxInteractPropViewportSize ) )
+ , interact_instance_prop_has_alpha_( pcos::key::from_string( kOfxInteractPropHasAlpha ) )
+ , interact_instance_prop_bit_depth_( pcos::key::from_string( kOfxInteractPropBitDepth ) )
+ , interact_instance_prop_slave_to_param_( pcos::key::from_string( kOfxInteractPropSlaveToParam ) )
+ {
+ set_interact_instance_properties( );
+ }
+
+ virtual property_container_ptr get_property_set( ) { return &interact_instance_props_; }
+
+ private:
+ void set_interact_instance_properties( )
+ {
+ interact_instance_props_.append( interact_instance_prop_effect_instance_ = ( void* ) 0 );
+ interact_instance_props_.append( interact_instance_prop_instance_data_ = ( void* ) 0 );
+ interact_instance_props_.append( interact_instance_prop_pixel_scale_ = pcos::double_vec( 2, 0.0 ) );
+ interact_instance_props_.append( interact_instance_prop_background_colour_ = pcos::double_vec( 3, 0.0 ) );
+ interact_instance_props_.append( interact_instance_prop_viewport_size_ = pcos::int_vec( 2, 0 ) ); // deprecated
+ interact_instance_props_.append( interact_instance_prop_has_alpha_ = 1 );
+ interact_instance_props_.append( interact_instance_prop_bit_depth_ = 8 );
+ interact_instance_props_.append( interact_instance_prop_slave_to_param_ = pl::string_vec( ) );
+ }
+
+ private:
+ pcos::property_container interact_instance_props_;
+ pcos::property interact_instance_prop_effect_instance_;
+ pcos::property interact_instance_prop_instance_data_;
+ pcos::property interact_instance_prop_pixel_scale_;
+ pcos::property interact_instance_prop_background_colour_;
+ pcos::property interact_instance_prop_viewport_size_;
+ pcos::property interact_instance_prop_has_alpha_;
+ pcos::property interact_instance_prop_bit_depth_;
+ pcos::property interact_instance_prop_slave_to_param_;
+ };
class image_effect_instance : public param_set_base
{
@@ -1847,9 +1957,8 @@
param* page_param_descriptor::create_instance( ) { return new page_param( *this ); }
param* push_button_param_descriptor::create_instance( ) { return new push_button_param( *this ); }
param* custom_param_descriptor::create_instance( ) { return new custom_param( *this ); }
-
- param_set* param_set_descriptor::create_instance( ) { return new param_set( *this ); }
- clip_instance* clip_descriptor::create_instance( ) { return new clip_instance( *this ); }
+ param_set* param_set_descriptor::create_instance( ) { return new param_set( *this ); }
+ clip_instance* clip_descriptor::create_instance( ) { return new clip_instance( *this ); }
}
class ML_PLUGIN_DECLSPEC ofx_filter : public filter_type, public OfxHost
@@ -1862,6 +1971,7 @@
, host_prop_label_( pcos::key::from_string( kOfxPropLabel ) )
, host_prop_is_background_( pcos::key::from_string( kOfxImageEffectHostPropIsBackground ) )
, host_prop_supports_overlays_( pcos::key::from_string( kOfxImageEffectPropSupportsOverlays ) )
+ , host_prop_supported_pixel_depths_( pcos::key::from_string( kOfxImageEffectPropSupportedPixelDepths ) )
, host_prop_supports_multiresolution_( pcos::key::from_string( kOfxImageEffectPropSupportsMultiResolution ) )
, host_prop_supports_tiles_( pcos::key::from_string( kOfxImageEffectPropSupportsTiles ) )
, host_prop_temporal_clip_access_( pcos::key::from_string( kOfxImageEffectPropTemporalClipAccess ) )
@@ -1880,16 +1990,7 @@
, host_prop_max_pages_( pcos::key::from_string( kOfxParamHostPropMaxPages ) )
, host_prop_page_row_column_count_( pcos::key::from_string( kOfxParamHostPropPageRowColumnCount ) )
, host_prop_this_pointer_( pcos::key::from_string( "this_pointer" ) )
- , interact_descriptor_prop_has_alpha_( pcos::key::from_string( kOfxInteractPropHasAlpha ) )
- , interact_descriptor_prop_bit_depth_( pcos::key::from_string( kOfxInteractPropBitDepth ) )
- , interact_instance_prop_effect_instance_( pcos::key::from_string( kOfxPropEffectInstance ) )
- , interact_instance_prop_instance_data_( pcos::key::from_string( kOfxPropInstanceData ) )
- , interact_instance_prop_pixel_scale_( pcos::key::from_string( kOfxInteractPropPixelScale ) )
- , interact_instance_prop_background_colour_( pcos::key::from_string( kOfxInteractPropBackgroundColour ) )
- , interact_instance_prop_viewport_size_( pcos::key::from_string( kOfxInteractPropViewportSize ) )
- , interact_instance_prop_has_alpha_( pcos::key::from_string( kOfxInteractPropHasAlpha ) )
- , interact_instance_prop_bit_depth_( pcos::key::from_string( kOfxInteractPropBitDepth ) )
- , interact_instance_prop_slave_to_param_( pcos::key::from_string( kOfxInteractPropSlaveToParam ) )
+ , render_prop_name_( pcos::key::from_string( kOfxPropName ) )
, render_prop_time_( pcos::key::from_string( kOfxPropTime ) )
, render_prop_field_to_render_( pcos::key::from_string( kOfxImageEffectPropFieldToRender ) )
, render_prop_render_window_( pcos::key::from_string( kOfxImageEffectPropRenderWindow ) )
@@ -1898,6 +1999,17 @@
, sequence_prop_frame_step_( pcos::key::from_string( kOfxImageEffectPropFrameStep ) )
, sequence_prop_is_interactive_( pcos::key::from_string( kOfxPropIsInteractive ) )
, sequence_prop_render_scale_( pcos::key::from_string( kOfxImageEffectPropRenderScale ) )
+ , clip_preferences_prop_components_source_( pcos::key::from_string( "OfxImageClipPropComponents_Source" ) )
+ , clip_preferences_prop_components_output_( pcos::key::from_string( "OfxImageClipPropComponents_Output" ) )
+ , clip_preferences_prop_depth_source_( pcos::key::from_string( "OfxImageClipPropDepth_Source" ) )
+ , clip_preferences_prop_depth_output_( pcos::key::from_string( "OfxImageClipPropDepth_Output" ) )
+ , clip_preferences_prop_par_source_( pcos::key::from_string( "OfxImageClipPropPAR_Source" ) )
+ , clip_preferences_prop_par_output_( pcos::key::from_string( "OfxImageClipPropPAR_Output" ) )
+ , clip_preferences_prop_frame_rate_( pcos::key::from_string( kOfxImageEffectPropFrameRate ) )
+ , clip_preferences_prop_field_order_( pcos::key::from_string( kOfxImageClipPropFieldOrder ) )
+ , clip_preferences_prop_premultiplication_( pcos::key::from_string( kOfxImageEffectPropPreMultiplication ) )
+ , clip_preferences_prop_continuous_samples_( pcos::key::from_string( kOfxImageClipPropContinuousSamples ) )
+ , clip_preferences_prop_frame_varying_( pcos::key::from_string( kOfxImageEffectPropFrameRate ) )
{
set_host( );
set_suites( );
@@ -1910,7 +2022,11 @@
// create instance from descriptor
image_effect_instance_.init( image_effect_descriptor_ );
+
plug_->mainEntry( kOfxActionCreateInstance, &image_effect_instance_, 0, 0 );
+
+ set_clip_prefs_filter_ctx( );
+ plug_->mainEntry( kOfxImageEffectActionGetClipPreferences, &image_effect_instance_, 0, ( OfxPropertySetHandle ) &clip_preferences_props_filter_ );
}
virtual ~ofx_filter( )
@@ -1930,38 +2046,50 @@
if( result && result->get_image( ) )
{
il::image_type_ptr src = il::convert( result->get_image( ), L"r8g8b8a8" );
- il::image_type_ptr dst = il::allocate( src->pf( ), src->width( ), src->height( ) );
- image_effect_instance_.set_source( src );
- image_effect_instance_.set_output( dst );
-
- pcos::property_container sequence_in_args;
- sequence_in_args.append( sequence_prop_frame_range_ = pcos::double_vec( 2 ) );
- sequence_in_args.append( sequence_prop_frame_step_ = 1.0 );
- sequence_in_args.append( sequence_prop_is_interactive_ = 0 );
- sequence_in_args.append( sequence_prop_render_scale_ = pcos::double_vec( 2 ) );
+ pcos::property_container render_in_args;
+ pcos::property_container render_out_args;
- pcos::int_vec render_win( 4 );
- render_win[ 0 ] = 0;
- render_win[ 1 ] = 0;
+ pcos::int_vec render_win( 4, 0 );
render_win[ 2 ] = src->width( );
render_win[ 3 ] = src->height( );
- pcos::int_vec render_scale( 2 );
- render_scale[ 0 ] = 1;
- render_scale[ 1 ] = 1;
+ pcos::int_vec render_scale( 2, 1 );
- pcos::property_container render_in_args;
render_in_args.append( render_prop_time_ = 0.0 );
render_in_args.append( render_prop_field_to_render_ = pl::string( kOfxImageFieldNone ) );
render_in_args.append( render_prop_render_window_ = render_win );
render_in_args.append( render_prop_render_scale_ = render_scale );
- plug_->mainEntry( kOfxImageEffectActionBeginSequenceRender, &image_effect_instance_, ( OfxPropertySetHandle ) &sequence_in_args, 0 );
- plug_->mainEntry( kOfxImageEffectActionRender, &image_effect_instance_, ( OfxPropertySetHandle ) &render_in_args, 0 );
- plug_->mainEntry( kOfxImageEffectActionEndSequenceRender, &image_effect_instance_, ( OfxPropertySetHandle ) &sequence_in_args, 0 );
+ render_out_args.append( render_prop_name_ );
+ render_out_args.append( render_prop_time_ );
+
+ OfxStatus is_identity = plug_->mainEntry( kOfxImageEffectActionIsIdentity, &image_effect_instance_,
+ ( OfxPropertySetHandle ) &render_in_args, ( OfxPropertySetHandle ) &render_out_args );
+ if( is_identity == kOfxStatReplyDefault )
+ {
+ src = il::convert( result->get_image( ), L"r8g8b8a8" );
+ il::image_type_ptr dst = il::allocate( src->pf( ), src->width( ), src->height( ) );
- result->set_image( dst );
+ image_effect_instance_.set_source( src );
+ image_effect_instance_.set_output( dst );
+
+ pcos::property_container sequence_in_args;
+ sequence_in_args.append( sequence_prop_frame_range_ = pcos::double_vec( 2 ) );
+ sequence_in_args.append( sequence_prop_frame_step_ = 1.0 );
+ sequence_in_args.append( sequence_prop_is_interactive_ = 0 );
+ sequence_in_args.append( sequence_prop_render_scale_ = pcos::double_vec( 2 ) );
+
+ plug_->mainEntry( kOfxImageEffectActionBeginSequenceRender, &image_effect_instance_, ( OfxPropertySetHandle ) &sequence_in_args, 0 );
+ plug_->mainEntry( kOfxImageEffectActionRender, &image_effect_instance_, ( OfxPropertySetHandle ) &render_in_args, 0 );
+ plug_->mainEntry( kOfxImageEffectActionEndSequenceRender, &image_effect_instance_, ( OfxPropertySetHandle ) &sequence_in_args, 0 );
+
+ result->set_image( dst );
+ }
+ else if( is_identity == kOfxStatOK )
+ {
+ // select the appropriate clip from the out_args.
+ }
}
return result;
@@ -2005,11 +2133,17 @@
void set_host_parameters( )
{
+ pl::string_vec pixel_depths( 3 );
+ pixel_depths[ 0 ] = pl::string( kOfxBitDepthByte );
+ pixel_depths[ 1 ] = pl::string( kOfxBitDepthShort );
+ pixel_depths[ 2 ] = pl::string( kOfxBitDepthFloat );
+
host_props_.append( host_prop_type_ = pl::string( kOfxTypeImageEffectHost ) );
host_props_.append( host_prop_name_ = pl::string( "org.openlibraries.ofx_host" ) );
host_props_.append( host_prop_label_ = pl::string( "OpenLibraries OFX host" ) );
host_props_.append( host_prop_is_background_ = 0 );
host_props_.append( host_prop_supports_overlays_ = 1 );
+ host_props_.append( host_prop_supported_pixel_depths_ = pixel_depths );
host_props_.append( host_prop_supports_multiresolution_ = 1 );
host_props_.append( host_prop_supports_tiles_ = 0 );
host_props_.append( host_prop_temporal_clip_access_ = 0 );
@@ -2064,6 +2198,21 @@
}
}
+ void set_clip_prefs_filter_ctx( )
+ {
+ clip_preferences_props_filter_.append( clip_preferences_prop_components_source_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_components_output_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_depth_source_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_depth_output_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_par_source_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_par_output_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_frame_rate_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_field_order_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_premultiplication_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_continuous_samples_ );
+ clip_preferences_props_filter_.append( clip_preferences_prop_frame_varying_ );
+ }
+
private:
OfxPlugin* plug_;
@@ -2084,6 +2233,7 @@
pcos::property host_prop_label_;
pcos::property host_prop_is_background_;
pcos::property host_prop_supports_overlays_;
+ pcos::property host_prop_supported_pixel_depths_;
pcos::property host_prop_supports_multiresolution_;
pcos::property host_prop_supports_tiles_;
pcos::property host_prop_temporal_clip_access_;
@@ -2111,24 +2261,9 @@
private:
image_effect_instance image_effect_instance_;
-// Interact descriptor properties.
-private:
- pcos::property interact_descriptor_prop_has_alpha_;
- pcos::property interact_descriptor_prop_bit_depth_;
-
-// Interact instance properties.
-private:
- pcos::property interact_instance_prop_effect_instance_;
- pcos::property interact_instance_prop_instance_data_;
- pcos::property interact_instance_prop_pixel_scale_;
- pcos::property interact_instance_prop_background_colour_;
- pcos::property interact_instance_prop_viewport_size_;
- pcos::property interact_instance_prop_has_alpha_;
- pcos::property interact_instance_prop_bit_depth_;
- pcos::property interact_instance_prop_slave_to_param_;
-
// Render action properties.
private:
+ pcos::property render_prop_name_;
pcos::property render_prop_time_;
pcos::property render_prop_field_to_render_;
pcos::property render_prop_render_window_;
@@ -2140,6 +2275,21 @@
pcos::property sequence_prop_frame_step_;
pcos::property sequence_prop_is_interactive_;
pcos::property sequence_prop_render_scale_;
+
+// Clip Preferences action properties.
+private:
+ pcos::property_container clip_preferences_props_filter_;
+ pcos::property clip_preferences_prop_components_source_;
+ pcos::property clip_preferences_prop_components_output_;
+ pcos::property clip_preferences_prop_depth_source_;
+ pcos::property clip_preferences_prop_depth_output_;
+ pcos::property clip_preferences_prop_par_source_;
+ pcos::property clip_preferences_prop_par_output_;
+ pcos::property clip_preferences_prop_frame_rate_;
+ pcos::property clip_preferences_prop_field_order_;
+ pcos::property clip_preferences_prop_premultiplication_;
+ pcos::property clip_preferences_prop_continuous_samples_;
+ pcos::property clip_preferences_prop_frame_varying_;
};
namespace
@@ -2269,12 +2419,12 @@
pcos::property src = prop_set->get_property_with_string( property );
if( src.is_a<pl::string_vec>( ) )
{
- pl::string_vec val = src.value<pl::string_vec>( );
- *value = const_cast<char*>( val[ index ].c_str( ) );
+ pl::string_vec* val = src.pointer<pl::string_vec>( );
+ *value = const_cast<char*>( ( *val )[ index ].c_str( ) );
}
else
{
- *value = const_cast<char*>( src.value<opl::string>( ).c_str( ) );
+ *value = const_cast<char*>( src.pointer<opl::string>( )->c_str( ) );
}
return kOfxStatOK;
@@ -2315,6 +2465,35 @@
return get_multiple_property<int, pcos::int_vec>( properties, property, count, value );
}
+ OfxStatus prop_get_dimension( OfxPropertySetHandle properties, const char* property, int* count )
+ {
+ pcos::property_container* prop_set = ( pcos::property_container* ) properties;
+
+ pcos::property src = prop_set->get_property_with_string( property );
+ if( src.is_a<pl::string_vec>( ) )
+ {
+ *count = static_cast<int>( src.value<pl::string_vec>( ).size( ) );
+ }
+ else if( src.is_a<pcos::int_vec>( ) )
+ {
+ *count = static_cast<int>( src.value<pcos::int_vec>( ).size( ) );
+ }
+ else if( src.is_a<pcos::double_vec>( ) )
+ {
+ *count = static_cast<int>( src.value<pcos::double_vec>( ).size( ) );
+ }
+ else if( src.is_a<pcos::void_vec>( ) )
+ {
+ *count = static_cast<int>( src.value<pcos::void_vec>( ).size( ) );
+ }
+ else
+ {
+ *count = 1;
+ }
+
+ return kOfxStatOK;
+ }
+
// Memory Suite.
OfxStatus memory_alloc( void* handle, size_t nbytes, void** allocated_data )
{
@@ -2464,42 +2643,30 @@
pcos::property val = p->get_value( );
pl::string type = p->get_type( );
- if( type == kOfxParamTypeInteger )
+ if( type == kOfxParamTypeInteger || type == kOfxParamTypeBoolean || type == kOfxParamTypeChoice )
{
int* v;
if( ( v = va_arg( ap, int* ) ) != 0 )
*v = val.value<int>( );
}
- else if( type == kOfxParamTypeInteger2D )
+ else if( type == kOfxParamTypeInteger2D || type == kOfxParamTypeInteger3D )
{
+ int* v, i = 0;
+ while( ( v = va_arg( ap, int* ) ) != 0 )
+ *v = val.value<pcos::int_vec>( )[ i++ ];
}
- else if( type == kOfxParamTypeInteger3D )
- {
- }
else if( type == kOfxParamTypeDouble )
{
double* v;
if( ( v = va_arg( ap, double* ) ) != 0 )
*v = val.value<double>( );
}
- else if( type == kOfxParamTypeDouble2D )
+ else if( type == kOfxParamTypeDouble2D || type == kOfxParamTypeDouble3D || type == kOfxParamTypeRGB || type == kOfxParamTypeRGBA )
{
+ double* v, i = 0;
+ while( ( v = va_arg( ap, double* ) ) != 0 )
+ *v = val.value<pcos::double_vec>( )[ i++ ];
}
- else if( type == kOfxParamTypeDouble3D )
- {
- }
- else if( type == kOfxParamTypeRGB )
- {
- }
- else if( type == kOfxParamTypeRGBA )
- {
- }
- else if( type == kOfxParamTypeBoolean )
- {
- }
- else if( type == kOfxParamTypeChoice )
- {
- }
else if( type == kOfxParamTypeGroup )
{
}
@@ -2531,42 +2698,30 @@
pcos::property val = p->get_value( );
pl::string type = p->get_type( );
- if( type == kOfxParamTypeInteger )
+ if( type == kOfxParamTypeInteger || type == kOfxParamTypeBoolean || type == kOfxParamTypeChoice )
{
int* v;
if( ( v = va_arg( ap, int* ) ) != 0 )
*v = val.value<int>( );
}
- else if( type == kOfxParamTypeInteger2D )
+ else if( type == kOfxParamTypeInteger2D || type == kOfxParamTypeInteger3D )
{
+ int* v, i = 0;
+ while( ( v = va_arg( ap, int* ) ) != 0 )
+ *v = val.value<pcos::int_vec>( )[ i++ ];
}
- else if( type == kOfxParamTypeInteger3D )
- {
- }
else if( type == kOfxParamTypeDouble )
{
double* v;
if( ( v = va_arg( ap, double* ) ) != 0 )
*v = val.value<double>( );
}
- else if( type == kOfxParamTypeDouble2D )
+ else if( type == kOfxParamTypeDouble2D || type == kOfxParamTypeDouble3D || type == kOfxParamTypeRGB || type == kOfxParamTypeRGBA )
{
+ double* v, i = 0;
+ while( ( v = va_arg( ap, double* ) ) != 0 )
+ *v = val.value<pcos::double_vec>( )[ i++ ];
}
- else if( type == kOfxParamTypeDouble3D )
- {
- }
- else if( type == kOfxParamTypeRGB )
- {
- }
- else if( type == kOfxParamTypeRGBA )
- {
- }
- else if( type == kOfxParamTypeBoolean )
- {
- }
- else if( type == kOfxParamTypeChoice )
- {
- }
else if( type == kOfxParamTypeGroup )
{
}
@@ -2608,7 +2763,7 @@
pcos::property val = p->get_value( );
pl::string type = p->get_type( );
- if( type == kOfxParamTypeInteger )
+ if( type == kOfxParamTypeInteger || type == kOfxParamTypeBoolean || type == kOfxParamTypeChoice )
{
int v;
if( ( v = va_arg( ap, int ) ) != 0 )
@@ -2638,12 +2793,6 @@
else if( type == kOfxParamTypeRGBA )
{
}
- else if( type == kOfxParamTypeBoolean )
- {
- }
- else if( type == kOfxParamTypeChoice )
- {
- }
else if( type == kOfxParamTypeGroup )
{
}
@@ -2732,42 +2881,42 @@
return kOfxStatOK;
}
- OfxStatus param_get_num_keys( OfxParamHandle param, unsigned int* num_keys )
+ OfxStatus param_get_num_keys( OfxParamHandle, unsigned int* )
{
return kOfxStatOK;
}
- OfxStatus param_get_key_time( OfxParamHandle param, unsigned int nth_key, OfxTime* time )
+ OfxStatus param_get_key_time( OfxParamHandle, unsigned int, OfxTime* )
{
return kOfxStatOK;
}
- OfxStatus param_get_key_index( OfxParamHandle param, OfxTime time, int direction, int* index )
+ OfxStatus param_get_key_index( OfxParamHandle, OfxTime, int, int* )
{
return kOfxStatOK;
}
- OfxStatus param_delete_key( OfxParamHandle param, OfxTime time )
+ OfxStatus param_delete_key( OfxParamHandle, OfxTime )
{
return kOfxStatOK;
}
- OfxStatus param_delete_all_keys( OfxParamHandle param )
+ OfxStatus param_delete_all_keys( OfxParamHandle )
{
return kOfxStatOK;
}
- OfxStatus param_copy( OfxParamHandle param_to, OfxParamHandle param_from, OfxTime dst_offset, OfxRangeD* frame_range )
+ OfxStatus param_copy( OfxParamHandle, OfxParamHandle, OfxTime, OfxRangeD* )
{
return kOfxStatOK;
}
- OfxStatus param_edit_begin( OfxParamSetHandle param_set, const char* name )
+ OfxStatus param_edit_begin( OfxParamSetHandle, const char* )
{
return kOfxStatOK;
}
- OfxStatus param_edit_end( OfxParamSetHandle param_set )
+ OfxStatus param_edit_end( OfxParamSetHandle )
{
return kOfxStatOK;
}
@@ -2863,33 +3012,33 @@
return kOfxStatOK;
}
- int abort( OfxImageEffectHandle image_effect )
+ int abort( OfxImageEffectHandle )
{
return 0;
}
- OfxStatus image_memory_alloc( OfxImageEffectHandle instance_handle, size_t nbytes, OfxImageMemoryHandle* memory_handle )
+ OfxStatus image_memory_alloc( OfxImageEffectHandle, size_t, OfxImageMemoryHandle* )
{
return kOfxStatOK;
}
- OfxStatus image_memory_free( OfxImageMemoryHandle memory_handle )
+ OfxStatus image_memory_free( OfxImageMemoryHandle )
{
return kOfxStatOK;
}
- OfxStatus image_memory_lock( OfxImageMemoryHandle memory_handle, void** returned_ptr )
+ OfxStatus image_memory_lock( OfxImageMemoryHandle, void** )
{
return kOfxStatOK;
}
- OfxStatus image_memory_unlock( OfxImageMemoryHandle memory_handle )
+ OfxStatus image_memory_unlock( OfxImageMemoryHandle )
{
return kOfxStatOK;
}
// Message Suite
- OfxStatus message( void* handle, const char* message_type, const char* message_id, const char* format, ... )
+ OfxStatus message( void*, const char*, const char*, const char*, ... )
{
return kOfxStatOK;
}
@@ -2911,7 +3060,7 @@
property_suite.propGetDoubleN = prop_get_doubleN;
property_suite.propGetIntN = prop_get_intN;
//property_suite.propReset = prop_reset;
- //property_suite.propGetDimension = prop_get_dimension;
+ property_suite.propGetDimension = prop_get_dimension;
}
void set_image_effect_suite( OfxImageEffectSuiteV1& image_effect_suite )
Modified: lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp
===================================================================
--- lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp 2007-05-04 17:24:48 UTC (rev 113)
+++ lib/openlibraries/src/openpluginlib/pl/pcos/property.cpp 2007-05-09 00:29:07 UTC (rev 114)
@@ -689,6 +689,11 @@
{
return boost::apply_visitor( convert_to<T>( ), impl_->value );
}
+
+template < typename T > T* property::pointer() const
+{
+ return boost::get<T>( &impl_->value );
+}
template < typename T > bool property::is_a() const
{
@@ -725,6 +730,11 @@
template OPENPLUGINLIB_DECLSPEC void* property::value<void*>( ) const;
template OPENPLUGINLIB_DECLSPEC void_vec property::value<void_vec>( ) const;
+template OPENPLUGINLIB_DECLSPEC wstring* property::pointer< wstring >() const;
+template OPENPLUGINLIB_DECLSPEC string* property::pointer< string >() const;
+template OPENPLUGINLIB_DECLSPEC wstring_vec* property::pointer< wstring_vec >() const;
+template OPENPLUGINLIB_DECLSPEC string_vec* property::pointer< string_vec >() const;
+
template OPENPLUGINLIB_DECLSPEC void property::set< int >( const int& );
template OPENPLUGINLIB_DECLSPEC void property::set< unsigned int >( const unsigned int& );
template OPENPLUGINLIB_DECLSPEC void property::set< double >( const double& );
Modified: lib/openlibraries/src/openpluginlib/pl/pcos/property.hpp
===================================================================
--- lib/openlibraries/src/openpluginlib/pl/pcos/property.hpp 2007-05-04 17:24:48 UTC (rev 113)
+++ lib/openlibraries/src/openpluginlib/pl/pcos/property.hpp 2007-05-09 00:29:07 UTC (rev 114)
@@ -89,6 +89,9 @@
/// we try to extract the wrong value type
template<typename T>
T value() const;
+
+ template<typename T>
+ T* pointer() const;
/// query the type held by the property
template<typename T>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <gl...@us...> - 2007-05-19 16:34:54
|
Revision: 125
http://hdrflow.svn.sourceforge.net/hdrflow/?rev=125&view=rev
Author: glslang
Date: 2007-05-19 09:34:45 -0700 (Sat, 19 May 2007)
Log Message:
-----------
+update VC8 solution files to use boost 1.34
Modified Paths:
--------------
lib/openlibraries/src/openassetlib/py/py_vc8.vcproj
lib/openlibraries/src/openimagelib/py/py_vc8.vcproj
lib/openlibraries/src/openmedialib/py/py_vc8.vcproj
lib/openlibraries/src/openpluginlib/py/py_vc8.vcproj
Modified: lib/openlibraries/src/openassetlib/py/py_vc8.vcproj
===================================================================
--- lib/openlibraries/src/openassetlib/py/py_vc8.vcproj 2007-05-19 15:28:12 UTC (rev 124)
+++ lib/openlibraries/src/openassetlib/py/py_vc8.vcproj 2007-05-19 16:34:45 UTC (rev 125)
@@ -64,7 +64,7 @@
/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="boost_python-vc80-mt-gd-1_33_1.lib"
+ AdditionalDependencies="boost_python-vc80-mt-gd-1_34.lib"
OutputFile="$(OutDir)\openassetlib.pyd"
LinkIncremental="2"
AdditionalLibraryDirectories="C:\Boost\lib;C:\Python25\Libs;$(SolutionDir)src\openpluginlib\pl\$(ConfigurationName);$(SolutionDir)src\openassetlib\al\$(ConfigurationName);$(SolutionDir)src\openimagelib\il\$(ConfigurationName);$(SolutionDir)src\openmedialib\ml\$(ConfigurationName);$(SolutionDir)src\openobjectlib\sg\$(ConfigurationName)"
@@ -146,7 +146,7 @@
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
- AdditionalDependencies="boost_python-vc80-mt-1_33_1.lib"
+ AdditionalDependencies="boost_python-vc80-mt-1_34.lib"
OutputFile="$(OutDir)\openassetlib.pyd"
LinkIncremental="1"
AdditionalLibraryDirectories="C:\Boost\lib;C:\Python25\Libs;$(SolutionDir)src\openpluginlib\pl\$(ConfigurationName);$(SolutionDir)src\openassetlib\al\$(ConfigurationName);$(SolutionDir)src\openimagelib\il\$(ConfigurationName);$(SolutionDir)src\openmedialib\ml\$(ConfigurationName);$(SolutionDir)src\openobjectlib\sg\$(ConfigurationName)"
Modified: lib/openlibraries/src/openimagelib/py/py_vc8.vcproj
===================================================================
--- lib/openlibraries/src/openimagelib/py/py_vc8.vcproj 2007-05-19 15:28:12 UTC (rev 124)
+++ lib/openlibraries/src/openimagelib/py/py_vc8.vcproj 2007-05-19 16:34:45 UTC (rev 125)
@@ -64,7 +64,7 @@
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
- AdditionalDependencies="boost_python-vc80-mt-gd-1_33_1.lib"
+ AdditionalDependencies="boost_python-vc80-mt-gd-1_34.lib"
OutputFile="$(OutDir)\openimagelib.pyd"
LinkIncremental="2"
AdditionalLibraryDirectories="C:\Boost\lib;"$(SolutionDir)\src\openpluginlib\pl\$(ConfigurationName)";C:\Python25\Libs"
@@ -146,7 +146,7 @@
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
- AdditionalDependencies="boost_python-vc80-mt-1_33_1.lib"
+ AdditionalDependencies="boost_python-vc80-mt-1_34.lib"
OutputFile="$(OutDir)\openimagelib.pyd"
LinkIncremental="1"
AdditionalLibraryDirectories="C:\Boost\lib;"$(SolutionDir)\src\openpluginlib\pl\$(ConfigurationName)";C:\Python25\Libs"
Modified: lib/openlibraries/src/openmedialib/py/py_vc8.vcproj
===================================================================
--- lib/openlibraries/src/openmedialib/py/py_vc8.vcproj 2007-05-19 15:28:12 UTC (rev 124)
+++ lib/openlibraries/src/openmedialib/py/py_vc8.vcproj 2007-05-19 16:34:45 UTC (rev 125)
@@ -66,7 +66,7 @@
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
- AdditionalDependencies="boost_python-vc80-mt-gd-1_33_1.lib"
+ AdditionalDependencies="boost_python-vc80-mt-gd-1_34.lib"
OutputFile="$(OutDir)\openmedialib.pyd"
LinkIncremental="2"
AdditionalLibraryDirectories="C:\Boost\lib;C:\Python25\Libs;$(SolutionDir)\src\openpluginlib\pl\$(ConfigurationName);$(SolutionDir)\src\openimagelib\il\$(ConfigurationName)"
@@ -149,7 +149,7 @@
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
- AdditionalDependencies="boost_python-vc80-mt-1_33_1.lib"
+ AdditionalDependencies="boost_python-vc80-mt-1_34.lib"
OutputFile="$(OutDir)\openmedialib.pyd"
LinkIncremental="1"
AdditionalLibraryDirectories="C:\Boost\lib;C:\Python25\Libs;$(SolutionDir)\src\openpluginlib\pl\$(ConfigurationName);$(SolutionDir)\src\openimagelib\il\$(ConfigurationName)"
Modified: lib/openlibraries/src/openpluginlib/py/py_vc8.vcproj
===================================================================
--- lib/openlibraries/src/openpluginlib/py/py_vc8.vcproj 2007-05-19 15:28:12 UTC (rev 124)
+++ lib/openlibraries/src/openpluginlib/py/py_vc8.vcproj 2007-05-19 16:34:45 UTC (rev 125)
@@ -67,7 +67,7 @@
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
- AdditionalDependencies="boost_python-vc80-mt-gd-1_33_1.lib"
+ AdditionalDependencies="boost_python-vc80-mt-gd-1_34.lib"
OutputFile="$(OutDir)\openpluginlib.pyd"
LinkIncremental="2"
AdditionalLibraryDirectories="C:\Boost\lib;"C:\Program Files\NVIDIA Corporation\Cg\lib";C:\Python25\Libs"
@@ -152,7 +152,7 @@
<Tool
Name="VCLinkerTool"
IgnoreImportLibrary="true"
- AdditionalDependencies="boost_python-vc80-mt-1_33_1.lib"
+ AdditionalDependencies="boost_python-vc80-mt-1_34.lib"
OutputFile="$(OutDir)\openpluginlib.pyd"
LinkIncremental="1"
AdditionalLibraryDirectories="C:\Boost\lib;"C:\Program Files\NVIDIA Corporation\Cg\lib";C:\Python25\Libs"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|