diff --git a/modules/highgui/include/opencv2/highgui.hpp b/modules/highgui/include/opencv2/highgui.hpp index c20cf883ecbacdbd1187b219605796f44c33f551..c4fc73a81f8c2f7803fd777e1ba846c1f6946c0d 100644 --- a/modules/highgui/include/opencv2/highgui.hpp +++ b/modules/highgui/include/opencv2/highgui.hpp @@ -544,8 +544,8 @@ protected: Ptr writer; }; -template<> CV_EXPORTS void Ptr::delete_obj(); -template<> CV_EXPORTS void Ptr::delete_obj(); +template<> CV_EXPORTS void DefaultDeleter::operator ()(CvCapture* obj) const; +template<> CV_EXPORTS void DefaultDeleter::operator ()(CvVideoWriter* obj) const; } // cv diff --git a/modules/highgui/src/cap.cpp b/modules/highgui/src/cap.cpp index 453f1dd122634554a2c6005bc8496ef491678be6..be62ce9d382dde7741a417054188cc04f960a8ee 100644 --- a/modules/highgui/src/cap.cpp +++ b/modules/highgui/src/cap.cpp @@ -49,10 +49,10 @@ namespace cv { -template<> void Ptr::delete_obj() +template<> void DefaultDeleter::operator ()(CvCapture* obj) const { cvReleaseCapture(&obj); } -template<> void Ptr::delete_obj() +template<> void DefaultDeleter::operator ()(CvVideoWriter* obj) const { cvReleaseVideoWriter(&obj); } } @@ -492,14 +492,14 @@ VideoCapture::~VideoCapture() bool VideoCapture::open(const String& filename) { if (isOpened()) release(); - cap = cvCreateFileCapture(filename.c_str()); + cap.reset(cvCreateFileCapture(filename.c_str())); return isOpened(); } bool VideoCapture::open(int device) { if (isOpened()) release(); - cap = cvCreateCameraCapture(device); + cap.reset(cvCreateCameraCapture(device)); return isOpened(); } @@ -578,7 +578,7 @@ VideoWriter::~VideoWriter() bool VideoWriter::open(const String& filename, int _fourcc, double fps, Size frameSize, bool isColor) { - writer = cvCreateVideoWriter(filename.c_str(), _fourcc, fps, frameSize, isColor); + writer.reset(cvCreateVideoWriter(filename.c_str(), _fourcc, fps, frameSize, isColor)); return isOpened(); } diff --git a/modules/highgui/src/grfmt_bmp.cpp b/modules/highgui/src/grfmt_bmp.cpp index 131e84eca504c8eb7bc76bca7bcec07d72a5a781..f7147b5fc1d8f85f8c0eba2226fd7cf3d3e1fa3e 100644 --- a/modules/highgui/src/grfmt_bmp.cpp +++ b/modules/highgui/src/grfmt_bmp.cpp @@ -70,7 +70,7 @@ void BmpDecoder::close() ImageDecoder BmpDecoder::newDecoder() const { - return new BmpDecoder; + return makePtr(); } bool BmpDecoder::readHeader() @@ -496,7 +496,7 @@ BmpEncoder::~BmpEncoder() ImageEncoder BmpEncoder::newEncoder() const { - return new BmpEncoder; + return makePtr(); } bool BmpEncoder::write( const Mat& img, const std::vector& ) diff --git a/modules/highgui/src/grfmt_exr.cpp b/modules/highgui/src/grfmt_exr.cpp index 33d0ad0f56385b1f49d44250ac80a712031a788a..079de583403b66a26de316cf36efd7334dd0c9bf 100644 --- a/modules/highgui/src/grfmt_exr.cpp +++ b/modules/highgui/src/grfmt_exr.cpp @@ -551,7 +551,7 @@ void ExrDecoder::RGBToGray( float *in, float *out ) ImageDecoder ExrDecoder::newDecoder() const { - return new ExrDecoder; + return makePtr(); } /////////////////////// ExrEncoder /////////////////// @@ -726,7 +726,7 @@ bool ExrEncoder::write( const Mat& img, const std::vector& ) ImageEncoder ExrEncoder::newEncoder() const { - return new ExrEncoder; + return makePtr(); } } diff --git a/modules/highgui/src/grfmt_jpeg.cpp b/modules/highgui/src/grfmt_jpeg.cpp index 09db677a43e334556489cf7089d4697f514eaf23..28c52e8598795411fdb82eefb0981f89781dca1d 100644 --- a/modules/highgui/src/grfmt_jpeg.cpp +++ b/modules/highgui/src/grfmt_jpeg.cpp @@ -208,7 +208,7 @@ void JpegDecoder::close() ImageDecoder JpegDecoder::newDecoder() const { - return new JpegDecoder; + return makePtr(); } bool JpegDecoder::readHeader() @@ -539,7 +539,7 @@ JpegEncoder::~JpegEncoder() ImageEncoder JpegEncoder::newEncoder() const { - return new JpegEncoder; + return makePtr(); } bool JpegEncoder::write( const Mat& img, const std::vector& params ) diff --git a/modules/highgui/src/grfmt_jpeg2000.cpp b/modules/highgui/src/grfmt_jpeg2000.cpp index 4a48e81a65a2c7aaa4d7f00910597eb687ccb4cc..d711846ce8ee9e046123de9d7b3ddb32155eb696 100644 --- a/modules/highgui/src/grfmt_jpeg2000.cpp +++ b/modules/highgui/src/grfmt_jpeg2000.cpp @@ -88,7 +88,7 @@ Jpeg2KDecoder::~Jpeg2KDecoder() ImageDecoder Jpeg2KDecoder::newDecoder() const { - return new Jpeg2KDecoder; + return makePtr(); } void Jpeg2KDecoder::close() @@ -403,7 +403,7 @@ Jpeg2KEncoder::~Jpeg2KEncoder() ImageEncoder Jpeg2KEncoder::newEncoder() const { - return new Jpeg2KEncoder; + return makePtr(); } bool Jpeg2KEncoder::isFormatSupported( int depth ) const diff --git a/modules/highgui/src/grfmt_png.cpp b/modules/highgui/src/grfmt_png.cpp index c784d5a5b32798ae61b64dd54eeb6690af9427b7..4d5c7793ea59f8c491ca70f734ed9b0c22555bfd 100644 --- a/modules/highgui/src/grfmt_png.cpp +++ b/modules/highgui/src/grfmt_png.cpp @@ -101,7 +101,7 @@ PngDecoder::~PngDecoder() ImageDecoder PngDecoder::newDecoder() const { - return new PngDecoder; + return makePtr(); } void PngDecoder::close() @@ -317,7 +317,7 @@ bool PngEncoder::isFormatSupported( int depth ) const ImageEncoder PngEncoder::newEncoder() const { - return new PngEncoder; + return makePtr(); } diff --git a/modules/highgui/src/grfmt_pxm.cpp b/modules/highgui/src/grfmt_pxm.cpp index 0acf195dd5bb80a6a2ccd4db93ae8592d4d446e1..425a296cb92f6bbcdd27cef2014a037133067e4a 100644 --- a/modules/highgui/src/grfmt_pxm.cpp +++ b/modules/highgui/src/grfmt_pxm.cpp @@ -116,7 +116,7 @@ bool PxMDecoder::checkSignature( const String& signature ) const ImageDecoder PxMDecoder::newDecoder() const { - return new PxMDecoder; + return makePtr(); } void PxMDecoder::close() @@ -357,7 +357,7 @@ PxMEncoder::~PxMEncoder() ImageEncoder PxMEncoder::newEncoder() const { - return new PxMEncoder; + return makePtr(); } diff --git a/modules/highgui/src/grfmt_sunras.cpp b/modules/highgui/src/grfmt_sunras.cpp index a16e5d8004b7a0efb16c2f133e699f419f695c96..b67400f3370814773ee72eddc4d8412d131db54c 100644 --- a/modules/highgui/src/grfmt_sunras.cpp +++ b/modules/highgui/src/grfmt_sunras.cpp @@ -63,7 +63,7 @@ SunRasterDecoder::~SunRasterDecoder() ImageDecoder SunRasterDecoder::newDecoder() const { - return new SunRasterDecoder; + return makePtr(); } void SunRasterDecoder::close() @@ -388,7 +388,7 @@ SunRasterEncoder::SunRasterEncoder() ImageEncoder SunRasterEncoder::newEncoder() const { - return new SunRasterEncoder; + return makePtr(); } SunRasterEncoder::~SunRasterEncoder() diff --git a/modules/highgui/src/grfmt_tiff.cpp b/modules/highgui/src/grfmt_tiff.cpp index a0d53f3db836213c7c07f05b0c6ebb0d21a7f39c..d8937db25163c035dc95f102b56485e4b9b1d336 100644 --- a/modules/highgui/src/grfmt_tiff.cpp +++ b/modules/highgui/src/grfmt_tiff.cpp @@ -108,7 +108,7 @@ int TiffDecoder::normalizeChannelsNumber(int channels) const ImageDecoder TiffDecoder::newDecoder() const { - return new TiffDecoder; + return makePtr(); } bool TiffDecoder::readHeader() @@ -400,7 +400,7 @@ TiffEncoder::~TiffEncoder() ImageEncoder TiffEncoder::newEncoder() const { - return new TiffEncoder; + return makePtr(); } bool TiffEncoder::isFormatSupported( int depth ) const diff --git a/modules/highgui/src/grfmt_webp.cpp b/modules/highgui/src/grfmt_webp.cpp index fd9682a79f8a633b4b67b91b0b7e30b9ec05d10f..1c64adec60e4f89ace5bf0a6de77ae8916549e1e 100644 --- a/modules/highgui/src/grfmt_webp.cpp +++ b/modules/highgui/src/grfmt_webp.cpp @@ -90,7 +90,7 @@ bool WebPDecoder::checkSignature(const String & signature) const ImageDecoder WebPDecoder::newDecoder() const { - return new WebPDecoder; + return makePtr(); } bool WebPDecoder::readHeader() @@ -201,7 +201,7 @@ WebPEncoder::~WebPEncoder() { } ImageEncoder WebPEncoder::newEncoder() const { - return new WebPEncoder(); + return makePtr(); } bool WebPEncoder::write(const Mat& img, const std::vector& params) diff --git a/modules/highgui/src/loadsave.cpp b/modules/highgui/src/loadsave.cpp index a548df54de5947f445263692191cb897b5f1cdee..58a0a6fbf72d4c1cacf0e188d2669e679d98006e 100644 --- a/modules/highgui/src/loadsave.cpp +++ b/modules/highgui/src/loadsave.cpp @@ -58,35 +58,35 @@ struct ImageCodecInitializer { ImageCodecInitializer() { - decoders.push_back( new BmpDecoder ); - encoders.push_back( new BmpEncoder ); + decoders.push_back( makePtr() ); + encoders.push_back( makePtr() ); #ifdef HAVE_JPEG - decoders.push_back( new JpegDecoder ); - encoders.push_back( new JpegEncoder ); + decoders.push_back( makePtr() ); + encoders.push_back( makePtr() ); #endif #ifdef HAVE_WEBP - decoders.push_back( new WebPDecoder ); - encoders.push_back( new WebPEncoder ); + decoders.push_back( makePtr() ); + encoders.push_back( makePtr() ); #endif - decoders.push_back( new SunRasterDecoder ); - encoders.push_back( new SunRasterEncoder ); - decoders.push_back( new PxMDecoder ); - encoders.push_back( new PxMEncoder ); + decoders.push_back( makePtr() ); + encoders.push_back( makePtr() ); + decoders.push_back( makePtr() ); + encoders.push_back( makePtr() ); #ifdef HAVE_TIFF - decoders.push_back( new TiffDecoder ); + decoders.push_back( makePtr() ); #endif - encoders.push_back( new TiffEncoder ); + encoders.push_back( makePtr() ); #ifdef HAVE_PNG - decoders.push_back( new PngDecoder ); - encoders.push_back( new PngEncoder ); + decoders.push_back( makePtr() ); + encoders.push_back( makePtr() ); #endif #ifdef HAVE_JASPER - decoders.push_back( new Jpeg2KDecoder ); - encoders.push_back( new Jpeg2KEncoder ); + decoders.push_back( makePtr() ); + encoders.push_back( makePtr() ); #endif #ifdef HAVE_OPENEXR - decoders.push_back( new ExrDecoder ); - encoders.push_back( new ExrEncoder ); + decoders.push_back( makePtr() ); + encoders.push_back( makePtr() ); #endif } @@ -198,7 +198,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0 ) Mat temp, *data = &temp; ImageDecoder decoder = findDecoder(filename); - if( decoder.empty() ) + if( !decoder ) return 0; decoder->setSource(filename); if( !decoder->readHeader() ) @@ -269,7 +269,7 @@ static bool imwrite_( const String& filename, const Mat& image, CV_Assert( image.channels() == 1 || image.channels() == 3 || image.channels() == 4 ); ImageEncoder encoder = findEncoder( filename ); - if( encoder.empty() ) + if( !encoder ) CV_Error( CV_StsError, "could not find a writer for the specified extension" ); if( !encoder->isFormatSupported(image.depth()) ) @@ -309,7 +309,7 @@ imdecode_( const Mat& buf, int flags, int hdrtype, Mat* mat=0 ) String filename; ImageDecoder decoder = findDecoder(buf); - if( decoder.empty() ) + if( !decoder ) return 0; if( !decoder->setSource(buf) ) @@ -409,7 +409,7 @@ bool imencode( const String& ext, InputArray _image, CV_Assert( channels == 1 || channels == 3 || channels == 4 ); ImageEncoder encoder = findEncoder( ext ); - if( encoder.empty() ) + if( !encoder ) CV_Error( CV_StsError, "could not find encoder for the specified extension" ); if( !encoder->isFormatSupported(image.depth()) ) diff --git a/modules/highgui/test/test_framecount.cpp b/modules/highgui/test/test_framecount.cpp index 875ce6aca44c42e735deebb5a03ec0c4b5de8b89..30f6e67ce6df3c0fc317268defc6b878f92f7a17 100644 --- a/modules/highgui/test/test_framecount.cpp +++ b/modules/highgui/test/test_framecount.cpp @@ -71,8 +71,8 @@ void CV_FramecountTest::run(int) { string file_path = src_dir+"video/big_buck_bunny."+ext[i]; - cap = cvCreateFileCapture(file_path.c_str()); - if (cap.empty()) + cap.reset(cvCreateFileCapture(file_path.c_str())); + if (!cap) { ts->printf(cvtest::TS::LOG, "\nFile information (video %d): \n\nName: big_buck_bunny.%s\nFAILED\n\n", i+1, ext[i].c_str()); ts->printf(cvtest::TS::LOG, "Error: cannot read source video file.\n");