From ae5649d3f7db22096c17f32819cc72ea4034e178 Mon Sep 17 00:00:00 2001 From: Andrey Kamaev Date: Mon, 3 Dec 2012 09:39:18 +0400 Subject: [PATCH] Drop unsupported imageio from grfmt --- CMakeLists.txt | 1 - cmake/templates/cvconfig.h.cmake | 3 - modules/highgui/CMakeLists.txt | 7 - modules/highgui/src/grfmt_imageio.cpp | 396 -------------------------- modules/highgui/src/grfmt_imageio.hpp | 67 ----- modules/highgui/src/grfmts.hpp | 1 - modules/highgui/src/loadsave.cpp | 6 - 7 files changed, 481 deletions(-) delete mode 100644 modules/highgui/src/grfmt_imageio.cpp delete mode 100644 modules/highgui/src/grfmt_imageio.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 978d3c6e4..949ca43c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,7 +120,6 @@ OCV_OPTION(WITH_EIGEN "Include Eigen2/Eigen3 support" ON) OCV_OPTION(WITH_FFMPEG "Include FFMPEG support" ON IF (NOT ANDROID AND NOT IOS) ) OCV_OPTION(WITH_GSTREAMER "Include Gstreamer support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) ) OCV_OPTION(WITH_GTK "Include GTK support" ON IF (UNIX AND NOT APPLE AND NOT ANDROID) ) -OCV_OPTION(WITH_IMAGEIO "ImageIO support for OS X" OFF IF APPLE) OCV_OPTION(WITH_IPP "Include Intel IPP support" OFF IF (MSVC OR X86 OR X86_64) ) OCV_OPTION(WITH_JASPER "Include JPEG2K support" ON IF (NOT IOS) ) OCV_OPTION(WITH_JPEG "Include JPEG support" ON IF (NOT IOS) ) diff --git a/cmake/templates/cvconfig.h.cmake b/cmake/templates/cvconfig.h.cmake index 368905fd9..37e092b66 100644 --- a/cmake/templates/cvconfig.h.cmake +++ b/cmake/templates/cvconfig.h.cmake @@ -58,9 +58,6 @@ /* OpenEXR codec */ #cmakedefine HAVE_ILMIMF -/* Apple ImageIO Framework */ -#cmakedefine HAVE_IMAGEIO - /* Define to 1 if you have the header file. */ #cmakedefine HAVE_INTTYPES_H 1 diff --git a/modules/highgui/CMakeLists.txt b/modules/highgui/CMakeLists.txt index e653737a9..f9c03fca5 100644 --- a/modules/highgui/CMakeLists.txt +++ b/modules/highgui/CMakeLists.txt @@ -171,13 +171,6 @@ if(HAVE_PVAPI) list(APPEND HIGHGUI_LIBRARIES ${PVAPI_LIBRARY}) endif() -if(WITH_IMAGEIO) - add_definitions(-DHAVE_IMAGEIO=1) - if(IOS) - list(APPEND HIGHGUI_LIBRARIES "-framework ImageIO") - endif() -endif(WITH_IMAGEIO) - if(WITH_AVFOUNDATION) add_definitions(-DHAVE_AVFOUNDATION=1) list(APPEND highgui_srcs src/cap_avfoundation.mm) diff --git a/modules/highgui/src/grfmt_imageio.cpp b/modules/highgui/src/grfmt_imageio.cpp deleted file mode 100644 index a525b96c6..000000000 --- a/modules/highgui/src/grfmt_imageio.cpp +++ /dev/null @@ -1,396 +0,0 @@ -/* - * grfmt_imageio.cpp - * - * - * Created by Morgan Conbere on 5/17/07. - * - */ - -#include "precomp.hpp" - -#ifdef HAVE_IMAGEIO - -#include "grfmt_imageio.hpp" - -namespace cv -{ - -/////////////////////// ImageIODecoder /////////////////// - -ImageIODecoder::ImageIODecoder() -{ - imageRef = NULL; -} - -ImageIODecoder::~ImageIODecoder() -{ - close(); -} - - -void ImageIODecoder::close() -{ - CGImageRelease( imageRef ); - imageRef = NULL; -} - - -size_t ImageIODecoder::signatureLength() const -{ - return 12; -} - -bool ImageIODecoder::checkSignature( const string& signature ) const -{ - // TODO: implement real signature check - return true; -} - -ImageDecoder ImageIODecoder::newDecoder() const -{ - return new ImageIODecoder; -} - -bool ImageIODecoder::readHeader() -{ - CFURLRef imageURLRef; - CGImageSourceRef sourceRef; - // diciu, if ReadHeader is called twice in a row make sure to release the previously allocated imageRef - if (imageRef != NULL) - CGImageRelease(imageRef); - imageRef = NULL; - - imageURLRef = CFURLCreateFromFileSystemRepresentation( NULL, - (const UInt8*)m_filename.c_str(), m_filename.size(), false ); - - sourceRef = CGImageSourceCreateWithURL( imageURLRef, NULL ); - CFRelease( imageURLRef ); - if ( !sourceRef ) - return false; - - imageRef = CGImageSourceCreateImageAtIndex( sourceRef, 0, NULL ); - CFRelease( sourceRef ); - if( !imageRef ) - return false; - - m_width = CGImageGetWidth( imageRef ); - m_height = CGImageGetHeight( imageRef ); - - CGColorSpaceRef colorSpace = CGImageGetColorSpace( imageRef ); - if( !colorSpace ) - return false; - - m_type = CGColorSpaceGetNumberOfComponents( colorSpace ) > 1 ? CV_8UC3 : CV_8UC1; - - return true; -} - - -bool ImageIODecoder::readData( Mat& img ) -{ - uchar* data = img.data; - int step = img.step; - bool color = img.channels() > 1; - int bpp; // Bytes per pixel - int bit_depth = 8; - - // Get Height, Width, and color information - if( !readHeader() ) - return false; - - CGContextRef context = NULL; // The bitmap context - CGColorSpaceRef colorSpace = NULL; - uchar* bitmap = NULL; - CGImageAlphaInfo alphaInfo; - - // CoreGraphics will take care of converting to grayscale and back as long as the - // appropriate colorspace is set - if( color == CV_LOAD_IMAGE_GRAYSCALE ) - { - colorSpace = CGColorSpaceCreateDeviceGray(); - bpp = 1; - alphaInfo = kCGImageAlphaNone; - } - else if( color == CV_LOAD_IMAGE_COLOR ) - { -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - colorSpace = CGColorSpaceCreateDeviceRGB(); -#else - colorSpace = CGColorSpaceCreateWithName( kCGColorSpaceGenericRGBLinear ); -#endif - bpp = 4; /* CG only has 8 and 32 bit color spaces, so we waste a byte */ - alphaInfo = kCGImageAlphaNoneSkipLast; - } - if( !colorSpace ) - return false; - - bitmap = (uchar*)malloc( bpp * m_height * m_width ); - if( !bitmap ) - { - CGColorSpaceRelease( colorSpace ); - return false; - } - - context = CGBitmapContextCreate( (void *)bitmap, - m_width, /* width */ - m_height, /* height */ - bit_depth, /* bit depth */ - bpp * m_width, /* bytes per row */ - colorSpace, /* color space */ - alphaInfo); - - CGColorSpaceRelease( colorSpace ); - if( !context ) - { - free( bitmap ); - return false; - } - - // Copy the image data into the bitmap region - CGRect rect = {{0,0},{m_width,m_height}}; - CGContextDrawImage( context, rect, imageRef ); - - uchar* bitdata = (uchar*)CGBitmapContextGetData( context ); - if( !bitdata ) - { - free( bitmap); - CGContextRelease( context ); - return false; - } - - // Move the bitmap (in RGB) into data (in BGR) - int bitmapIndex = 0; - - if( color == CV_LOAD_IMAGE_COLOR ) - { - uchar * base = data; - - for (int y = 0; y < m_height; y++) - { - uchar * line = base + y * step; - - for (int x = 0; x < m_width; x++) - { - // Blue channel - line[0] = bitdata[bitmapIndex + 2]; - // Green channel - line[1] = bitdata[bitmapIndex + 1]; - // Red channel - line[2] = bitdata[bitmapIndex + 0]; - - line += 3; - bitmapIndex += bpp; - } - } - } - else if( color == CV_LOAD_IMAGE_GRAYSCALE ) - { - for (int y = 0; y < m_height; y++) - memcpy (data + y * step, bitmap + y * m_width, m_width); - } - - free( bitmap ); - CGContextRelease( context ); - return true; -} - - -/////////////////////// ImageIOEncoder /////////////////// - -ImageIOEncoder::ImageIOEncoder() -{ - m_description = "Apple ImageIO (*.bmp;*.dib;*.exr;*.jpeg;*.jpg;*.jpe;*.jp2;*.pdf;*.png;*.tiff;*.tif)"; -} - - -ImageIOEncoder::~ImageIOEncoder() -{ -} - - -ImageEncoder ImageIOEncoder::newEncoder() const -{ - return new ImageIOEncoder; -} - -static -CFStringRef FilenameToUTI( const char* filename ) -{ - const char* ext = filename; - char* ext_buf; - int i; - CFStringRef imageUTI = NULL; - - for(;;) - { - const char* temp = strchr( ext + 1, '.' ); - if( !temp ) break; - ext = temp; - } - - if(!ext) - return NULL; - - ext_buf = (char*)malloc(strlen(ext)+1); - for(i = 0; ext[i] != '\0'; i++) - ext_buf[i] = (char)tolower(ext[i]); - ext_buf[i] = '\0'; - ext = ext_buf; - - if( !strcmp(ext, ".bmp") || !strcmp(ext, ".dib") ) - imageUTI = CFSTR( "com.microsoft.bmp" ); - else if( !strcmp(ext, ".exr") ) - imageUTI = CFSTR( "com.ilm.openexr-image" ); - else if( !strcmp(ext, ".jpeg") || !strcmp(ext, ".jpg") || !strcmp(ext, ".jpe") ) - imageUTI = CFSTR( "public.jpeg" ); - else if( !strcmp(ext, ".jp2") ) - imageUTI = CFSTR( "public.jpeg-2000" ); - else if( !strcmp(ext, ".pdf") ) - imageUTI = CFSTR( "com.adobe.pdf" ); - else if( !strcmp(ext, ".png") ) - imageUTI = CFSTR( "public.png" ); - else if( !strcmp(ext, ".tiff") || !strcmp(ext, ".tif") ) - imageUTI = CFSTR( "public.tiff" ); - - free(ext_buf); - - return imageUTI; -} - - -bool ImageIOEncoder::write( const Mat& img, const vector& params ) -{ - int width = img.cols, height = img.rows; - int _channels = img.channels(); - const uchar* data = img.data; - int step = img.step; - - // Determine the appropriate UTI based on the filename extension - CFStringRef imageUTI = FilenameToUTI( m_filename.c_str() ); - - // Determine the Bytes Per Pixel - int bpp = (_channels == 1) ? 1 : 4; - - // Write the data into a bitmap context - CGContextRef context; - CGColorSpaceRef colorSpace; - uchar* bitmapData = NULL; - - if( bpp == 1 ) { -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - colorSpace = CGColorSpaceCreateDeviceGray(); -#else - colorSpace = CGColorSpaceCreateWithName( kCGColorSpaceGenericGray ); -#endif - } - else if( bpp == 4 ) { -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - colorSpace = CGColorSpaceCreateDeviceRGB(); -#else - colorSpace = CGColorSpaceCreateWithName( kCGColorSpaceGenericRGBLinear ); -#endif - } - if( !colorSpace ) - return false; - - bitmapData = (uchar*)malloc( bpp * height * width ); - if( !bitmapData ) - { - CGColorSpaceRelease( colorSpace ); - return false; - } - - context = CGBitmapContextCreate( bitmapData, - width, - height, - 8, - bpp * width, - colorSpace, - (bpp == 1) ? kCGImageAlphaNone : - kCGImageAlphaNoneSkipLast ); - CGColorSpaceRelease( colorSpace ); - if( !context ) - { - free( bitmapData ); - return false; - } - - // Copy pixel information from data into bitmapData - if (bpp == 4) - { - int bitmapIndex = 0; - const uchar * base = data; - - for (int y = 0; y < height; y++) - { - const uchar * line = base + y * step; - - for (int x = 0; x < width; x++) - { - // Blue channel - bitmapData[bitmapIndex + 2] = line[0]; - // Green channel - bitmapData[bitmapIndex + 1] = line[1]; - // Red channel - bitmapData[bitmapIndex + 0] = line[2]; - - line += 3; - bitmapIndex += bpp; - } - } - } - else if (bpp == 1) - { - for (int y = 0; y < height; y++) - memcpy (bitmapData + y * width, data + y * step, width); - } - - // Turn the bitmap context into an imageRef - CGImageRef imageRef = CGBitmapContextCreateImage( context ); - CGContextRelease( context ); - if( !imageRef ) - { - free( bitmapData ); - return false; - } - - // Write the imageRef to a file based on the UTI - CFURLRef imageURLRef = CFURLCreateFromFileSystemRepresentation( NULL, - (const UInt8*)m_filename.c_str(), m_filename.size(), false ); - if( !imageURLRef ) - { - CGImageRelease( imageRef ); - free( bitmapData ); - return false; - } - - CGImageDestinationRef destRef = CGImageDestinationCreateWithURL( imageURLRef, - imageUTI, - 1, - NULL); - CFRelease( imageURLRef ); - if( !destRef ) - { - CGImageRelease( imageRef ); - free( bitmapData ); - fprintf(stderr, "!destRef\n"); - return false; - } - - CGImageDestinationAddImage(destRef, imageRef, NULL); - if( !CGImageDestinationFinalize(destRef) ) - { - fprintf(stderr, "Finalize failed\n"); - return false; - } - - CFRelease( destRef ); - CGImageRelease( imageRef ); - free( bitmapData ); - - return true; -} - -} - -#endif /* HAVE_IMAGEIO */ diff --git a/modules/highgui/src/grfmt_imageio.hpp b/modules/highgui/src/grfmt_imageio.hpp deleted file mode 100644 index 3eeb31103..000000000 --- a/modules/highgui/src/grfmt_imageio.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * grfmt_imageio.h - * - * - * Created by Morgan Conbere on 5/17/07. - * - */ - -#ifndef _GRFMT_IMAGEIO_H_ -#define _GRFMT_IMAGEIO_H_ - -#ifdef HAVE_IMAGEIO - -#include "grfmt_base.hpp" -#include - -#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR - -#include -#include - -#else - -#include - -#endif - -namespace cv -{ - -class ImageIODecoder : public BaseImageDecoder -{ -public: - - ImageIODecoder(); - ~ImageIODecoder(); - - bool readData( Mat& img ); - bool readHeader(); - void close(); - - size_t signatureLength() const; - bool checkSignature( const string& signature ) const; - - ImageDecoder newDecoder() const; - -protected: - - CGImageRef imageRef; -}; - -class ImageIOEncoder : public BaseImageEncoder -{ -public: - ImageIOEncoder(); - ~ImageIOEncoder(); - - bool write( const Mat& img, const vector& params ); - - ImageEncoder newEncoder() const; -}; - -} - -#endif/*HAVE_IMAGEIO*/ - -#endif/*_GRFMT_IMAGEIO_H_*/ diff --git a/modules/highgui/src/grfmts.hpp b/modules/highgui/src/grfmts.hpp index 20acd4ccf..8dddf0def 100644 --- a/modules/highgui/src/grfmts.hpp +++ b/modules/highgui/src/grfmts.hpp @@ -43,7 +43,6 @@ #define _GRFMTS_H_ #include "grfmt_base.hpp" -#include "grfmt_imageio.hpp" #include "grfmt_bmp.hpp" #include "grfmt_sunras.hpp" #include "grfmt_jpeg.hpp" diff --git a/modules/highgui/src/loadsave.cpp b/modules/highgui/src/loadsave.cpp index 667c2d16e..5a9eafee1 100644 --- a/modules/highgui/src/loadsave.cpp +++ b/modules/highgui/src/loadsave.cpp @@ -84,12 +84,6 @@ struct ImageCodecInitializer 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 decoders;