namespace cv
{
-static vector<ImageDecoder> decoders;
-static vector<ImageEncoder> encoders;
+struct ImageCodecInitializer
+{
+ ImageCodecInitializer()
+ {
+ decoders.push_back( new BmpDecoder );
+ encoders.push_back( new BmpEncoder );
+ #ifdef HAVE_JPEG
+ decoders.push_back( new JpegDecoder );
+ encoders.push_back( new JpegEncoder );
+ #endif
+ decoders.push_back( new SunRasterDecoder );
+ encoders.push_back( new SunRasterEncoder );
+ decoders.push_back( new PxMDecoder );
+ encoders.push_back( new PxMEncoder );
+ #ifdef HAVE_TIFF
+ decoders.push_back( new TiffDecoder );
+ #endif
+ encoders.push_back( new TiffEncoder );
+ #ifdef HAVE_PNG
+ decoders.push_back( new PngDecoder );
+ encoders.push_back( new PngEncoder );
+ #endif
+ #ifdef HAVE_JASPER
+ decoders.push_back( new Jpeg2KDecoder );
+ encoders.push_back( new Jpeg2KEncoder );
+ #endif
+ #ifdef HAVE_OPENEXR
+ decoders.push_back( new ExrDecoder );
+ encoders.push_back( new ExrEncoder );
+ #endif
+ // because it is a generic image I/O API, supporting many formats,
+ // it should be last in the list.
+ #ifdef HAVE_IMAGEIO
+ decoders.push_back( new ImageIODecoder );
+ encoders.push_back( new ImageIOEncoder );
+ #endif
+ }
+
+ vector<ImageDecoder> decoders;
+ vector<ImageEncoder> encoders;
+};
+
+static ImageCodecInitializer codecs;
static ImageDecoder findDecoder( const string& filename )
{
size_t i, maxlen = 0;
- for( i = 0; i < decoders.size(); i++ )
+ for( i = 0; i < codecs.decoders.size(); i++ )
{
- size_t len = decoders[i]->signatureLength();
+ size_t len = codecs.decoders[i]->signatureLength();
maxlen = std::max(maxlen, len);
}
fclose(f);
signature = signature.substr(0, maxlen);
- for( i = 0; i < decoders.size(); i++ )
+ for( i = 0; i < codecs.decoders.size(); i++ )
{
- if( decoders[i]->checkSignature(signature) )
- return decoders[i]->newDecoder();
+ if( codecs.decoders[i]->checkSignature(signature) )
+ return codecs.decoders[i]->newDecoder();
}
return ImageDecoder();
if( buf.rows*buf.cols < 1 || !buf.isContinuous() )
return ImageDecoder();
- for( i = 0; i < decoders.size(); i++ )
+ for( i = 0; i < codecs.decoders.size(); i++ )
{
- size_t len = decoders[i]->signatureLength();
+ size_t len = codecs.decoders[i]->signatureLength();
maxlen = std::max(maxlen, len);
}
string signature(maxlen, ' ');
memcpy( &signature[0], buf.data, maxlen );
- for( i = 0; i < decoders.size(); i++ )
+ for( i = 0; i < codecs.decoders.size(); i++ )
{
- if( decoders[i]->checkSignature(signature) )
- return decoders[i]->newDecoder();
+ if( codecs.decoders[i]->checkSignature(signature) )
+ return codecs.decoders[i]->newDecoder();
}
return ImageDecoder();
for( ext++; isalnum(ext[len]) && len < 128; len++ )
;
- for( size_t i = 0; i < encoders.size(); i++ )
+ for( size_t i = 0; i < codecs.encoders.size(); i++ )
{
- string description = encoders[i]->getDescription();
+ string description = codecs.encoders[i]->getDescription();
const char* descr = strchr( description.c_str(), '(' );
while( descr )
break;
}
if( j == len && !isalnum(descr[j]))
- return encoders[i]->newEncoder();
+ return codecs.encoders[i]->newEncoder();
descr += j;
}
}
return ImageEncoder();
}
-struct ImageCodecInitializer
-{
- ImageCodecInitializer()
- {
- decoders.push_back( new BmpDecoder );
- encoders.push_back( new BmpEncoder );
- #ifdef HAVE_JPEG
- decoders.push_back( new JpegDecoder );
- encoders.push_back( new JpegEncoder );
- #endif
- decoders.push_back( new SunRasterDecoder );
- encoders.push_back( new SunRasterEncoder );
- decoders.push_back( new PxMDecoder );
- encoders.push_back( new PxMEncoder );
- #ifdef HAVE_TIFF
- decoders.push_back( new TiffDecoder );
- #endif
- encoders.push_back( new TiffEncoder );
- #ifdef HAVE_PNG
- decoders.push_back( new PngDecoder );
- encoders.push_back( new PngEncoder );
- #endif
- #ifdef HAVE_JASPER
- decoders.push_back( new Jpeg2KDecoder );
- encoders.push_back( new Jpeg2KEncoder );
- #endif
- #ifdef HAVE_OPENEXR
- decoders.push_back( new ExrDecoder );
- encoders.push_back( new ExrEncoder );
- #endif
- // because it is a generic image I/O API, supporting many formats,
- // it should be last in the list.
- #ifdef HAVE_IMAGEIO
- decoders.push_back( new ImageIODecoder );
- encoders.push_back( new ImageIOEncoder );
- #endif
- }
-};
-
-static ImageCodecInitializer initialize_codecs;
-
-
enum { LOAD_CVMAT=0, LOAD_IMAGE=1, LOAD_MAT=2 };
static void*