16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*M///////////////////////////////////////////////////////////////////////////////////////
26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  By downloading, copying, installing or using the software you agree to this license.
66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  If you do not agree to this license, do not download, install,
76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//  copy or use the software.
86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//            Intel License Agreement
116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//        For Open Source Computer Vision Library
126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Copyright (C) 2000, Intel Corporation, all rights reserved.
146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Third party copyrights are property of their respective owners.
156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// Redistribution and use in source and binary forms, with or without modification,
176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// are permitted provided that the following conditions are met:
186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * Redistribution's of source code must retain the above copyright notice,
206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     this list of conditions and the following disclaimer.
216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * Redistribution's in binary form must reproduce the above copyright notice,
236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     this list of conditions and the following disclaimer in the documentation
246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     and/or other materials provided with the distribution.
256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//   * The name of Intel Corporation may not be used to endorse or promote products
276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//     derived from this software without specific prior written permission.
286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// This software is provided by the copyright holders and contributors "as is" and
306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// any express or implied warranties, including, but not limited to, the implied
316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// warranties of merchantability and fitness for a particular purpose are disclaimed.
326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// In no event shall the Intel Corporation or contributors be liable for any direct,
336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// indirect, incidental, special, exemplary, or consequential damages
346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// (including, but not limited to, procurement of substitute goods or services;
356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// loss of use, data, or profits; or business interruption) however caused
366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// and on any theory of liability, whether in contract, strict liability,
376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// or tort (including negligence or otherwise) arising in any way out of
386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn// the use of this software, even if advised of the possibility of such damage.
396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//
406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn//M*/
416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "_cxcore.h"
436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined WIN32 || defined WIN64
456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <windows.h>
466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else
476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include <pthread.h>
486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct
516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    const char* file;
536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int         line;
546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCvStackRecord;
566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renntypedef struct CvContext
586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int  err_code;
606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int  err_mode;
616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvErrorCallback error_callback;
626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    void*  userdata;
636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    char  err_msg[4096];
646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvStackRecord  err_ctx;
656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn} CvContext;
666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined WIN32 || defined WIN64
686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEFAULT_ERROR_CALLBACK  cvGuiBoxReport
696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else
706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#define CV_DEFAULT_ERROR_CALLBACK  cvStdErrReport
716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstatic CvContext*
746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennicvCreateContext(void)
756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvContext* context = (CvContext*)malloc( sizeof(*context) );
776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    context->err_mode = CV_ErrModeLeaf;
796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    context->err_code = CV_StsOk;
806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    context->error_callback = CV_DEFAULT_ERROR_CALLBACK;
826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    context->userdata = 0;
836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return context;
856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstatic void
886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennicvDestroyContext(CvContext* context)
896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    free(context);
916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined WIN32 || defined WIN64
946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    static DWORD g_TlsIndex = TLS_OUT_OF_INDEXES;
956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else
966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    static pthread_key_t g_TlsIndex;
976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennstatic CvContext*
1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennicvGetContext(void)
1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#ifdef CV_DLL
1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined WIN32 || defined WIN64
1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvContext* context;
1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    //assert(g_TlsIndex != TLS_OUT_OF_INDEXES);
1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( g_TlsIndex == TLS_OUT_OF_INDEXES )
1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        g_TlsIndex = TlsAlloc();
1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( g_TlsIndex == TLS_OUT_OF_INDEXES )
1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            FatalAppExit( 0, "Only set CV_DLL for DLL usage" );
1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    context = (CvContext*)TlsGetValue( g_TlsIndex );
1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !context )
1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        context = icvCreateContext();
1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( !context )
1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            FatalAppExit( 0, "OpenCV. Problem to allocate memory for TLS OpenCV context." );
1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        TlsSetValue( g_TlsIndex, context );
1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return context;
1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else
1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvContext* context = (CvContext*)pthread_getspecific( g_TlsIndex );
1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !context )
1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    context = icvCreateContext();
1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !context )
1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            fprintf(stderr,"OpenCV. Problem to allocate memory for OpenCV context.");
1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        exit(1);
1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    pthread_setspecific( g_TlsIndex, context );
1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return context;
1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else /* static single-thread library case */
1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    static CvContext* context = 0;
1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( !context )
1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        context = icvCreateContext();
1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return context;
1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL int
1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvStdErrReport( int code, const char *func_name, const char *err_msg,
1516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                const char *file, int line, void* )
1526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( code == CV_StsBackTrace || code == CV_StsAutoTrace )
1546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        fprintf( stderr, "\tcalled from " );
1556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
1566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        fprintf( stderr, "OpenCV ERROR: %s (%s)\n\tin function ",
1576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                 cvErrorStr(code), err_msg ? err_msg : "no description" );
1586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    fprintf( stderr, "%s, %s(%d)\n", func_name ? func_name : "<unknown>",
1606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn             file != NULL ? file : "", line );
1616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( cvGetErrMode() == CV_ErrModeLeaf )
1636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        fprintf( stderr, "Terminating the application...\n" );
1656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        return 1;
1666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
1686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        return 0;
1696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL int
1736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvGuiBoxReport( int code, const char *func_name, const char *err_msg,
1746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                const char *file, int line, void* )
1756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if !defined WIN32 && !defined WIN64
1776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return cvStdErrReport( code, func_name, err_msg, file, line, 0 );
1786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else
1796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( code != CV_StsBackTrace && code != CV_StsAutoTrace )
1806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        size_t msg_len = strlen(err_msg ? err_msg : "") + 1024;
1826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        char* message = (char*)alloca(msg_len);
1836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        char title[100];
1846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        wsprintf( message, "%s (%s)\nin function %s, %s(%d)\n\n"
1866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                  "Press \"Abort\" to terminate application.\n"
1876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                  "Press \"Retry\" to debug (if the app is running under debugger).\n"
1886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                  "Press \"Ignore\" to continue (this is not safe).\n",
1896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                  cvErrorStr(code), err_msg ? err_msg : "no description",
1906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                  func_name, file, line );
1916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        wsprintf( title, "OpenCV GUI Error Handler" );
1936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        int answer = MessageBox( NULL, message, title, MB_ICONERROR|MB_ABORTRETRYIGNORE|MB_SYSTEMMODAL );
1956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( answer == IDRETRY )
1976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        {
1986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            CV_DBG_BREAK();
1996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
2006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        return answer != IDIGNORE;
2016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return 0;
2036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
2046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL int cvNulDevReport( int /*code*/, const char* /*func_name*/,
2086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    const char* /*err_msg*/, const char* /*file*/, int /*line*/, void* )
2096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return cvGetErrMode() == CV_ErrModeLeaf;
2116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL CvErrorCallback
2156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvRedirectError( CvErrorCallback func, void* userdata, void** prev_userdata )
2166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvContext* context = icvGetContext();
2186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvErrorCallback old = context->error_callback;
2206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( prev_userdata )
2216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        *prev_userdata = context->userdata;
2226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( func )
2236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        context->error_callback = func;
2256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        context->userdata = userdata;
2266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
2286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        context->error_callback = CV_DEFAULT_ERROR_CALLBACK;
2306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        context->userdata = 0;
2316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return old;
2346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL int cvGetErrInfo( const char** errorcode_desc, const char** description,
2386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                          const char** filename, int* line )
2396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int code = cvGetErrStatus();
2416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( errorcode_desc )
2436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        *errorcode_desc = cvErrorStr( code );
2446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( code >= 0 )
2466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( description )
2486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            *description = 0;
2496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( filename )
2506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            *filename = 0;
2516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( line )
2526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            *line = 0;
2536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
2556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        CvContext* ctx = icvGetContext();
2576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( description )
2596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            *description = ctx->err_msg;
2606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( filename )
2616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            *filename = ctx->err_ctx.file;
2626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( line )
2636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            *line = ctx->err_ctx.line;
2646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
2656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return code;
2676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
2686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL const char* cvErrorStr( int status )
2716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
2726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    static char buf[256];
2736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
2746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    switch (status)
2756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
2766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsOk :        return "No Error";
2776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsBackTrace : return "Backtrace";
2786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsError :     return "Unspecified error";
2796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsInternal :  return "Internal error";
2806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsNoMem :     return "Insufficient memory";
2816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsBadArg :    return "Bad argument";
2826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsNoConv :    return "Iterations do not converge";
2836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsAutoTrace : return "Autotrace call";
2846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsBadSize :   return "Incorrect size of input array";
2856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsNullPtr :   return "Null pointer";
2866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsDivByZero : return "Divizion by zero occured";
2876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BadStep :      return "Image step is wrong";
2886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsInplaceNotSupported : return "Inplace operation is not supported";
2896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsObjectNotFound :      return "Requested object was not found";
2906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BadDepth :     return "Input image depth is not supported by function";
2916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsUnmatchedFormats : return "Formats of input arguments do not match";
2926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsUnmatchedSizes :  return "Sizes of input arguments do not match";
2936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsOutOfRange : return "One of arguments\' values is out of range";
2946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsUnsupportedFormat : return "Unsupported format or combination of formats";
2956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BadCOI :      return "Input COI is not supported";
2966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BadNumChannels : return "Bad number of channels";
2976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsBadFlag :   return "Bad flag (parameter or structure field)";
2986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsBadPoint :  return "Bad parameter of type CvPoint";
2996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsBadMask : return "Bad type of mask argument";
3006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsParseError : return "Parsing error";
3016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsNotImplemented : return "The function/feature is not implemented";
3026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_StsBadMemBlock :  return "Memory block has been corrupted";
3036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    };
3046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    sprintf(buf, "Unknown %s code %d", status >= 0 ? "status":"error", status);
3066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return buf;
3076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL int cvGetErrMode(void)
3106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return icvGetContext()->err_mode;
3126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL int cvSetErrMode( int mode )
3156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvContext* context = icvGetContext();
3176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    int prev_mode = context->err_mode;
3186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    context->err_mode = mode;
3196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return prev_mode;
3206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL int cvGetErrStatus()
3236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return icvGetContext()->err_code;
3256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL void cvSetErrStatus( int code )
3286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    icvGetContext()->err_code = code;
3306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL void cvError( int code, const char* func_name,
3346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                      const char* err_msg,
3356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                      const char* file_name, int line )
3366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( code == CV_StsOk )
3386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        cvSetErrStatus( code );
3396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
3406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
3416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        CvContext* context = icvGetContext();
3426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( code != CV_StsBackTrace && code != CV_StsAutoTrace )
3446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        {
3456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            char* message = context->err_msg;
3466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            context->err_code = code;
3476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            strcpy( message, err_msg );
3496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            context->err_ctx.file = file_name;
3506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            context->err_ctx.line = line;
3516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
3526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( context->err_mode != CV_ErrModeSilent )
3546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        {
3556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            int terminate = context->error_callback( code, func_name, err_msg,
3566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                                                    file_name, line, context->userdata );
3576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            if( terminate )
3586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            {
3596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                CV_DBG_BREAK();
3606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                //exit(-abs(terminate));
3616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            }
3626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
3636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
3646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
3656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/******************** End of implementation of profiling stuff *********************/
3686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/**********************DllMain********************************/
3716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#if defined WIN32 || defined WIN64
3736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennBOOL WINAPI DllMain( HINSTANCE, DWORD  fdwReason, LPVOID )
3746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
3756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvContext *pContext;
3766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    switch (fdwReason)
3786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
3796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case DLL_PROCESS_ATTACH:
3806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        g_TlsIndex = TlsAlloc();
3816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( g_TlsIndex == TLS_OUT_OF_INDEXES ) return FALSE;
3826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        //break;
3836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case DLL_THREAD_ATTACH:
3856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        pContext = icvCreateContext();
3866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( pContext == NULL)
3876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            return FALSE;
3886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        TlsSetValue( g_TlsIndex, (LPVOID)pContext );
3896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        break;
3906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
3916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case DLL_THREAD_DETACH:
3926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( g_TlsIndex != TLS_OUT_OF_INDEXES )
3936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        {
3946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            pContext = (CvContext*)TlsGetValue( g_TlsIndex );
3956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            if( pContext != NULL )
3966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                icvDestroyContext( pContext );
3976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
3986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        break;
3996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case DLL_PROCESS_DETACH:
4016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( g_TlsIndex != TLS_OUT_OF_INDEXES )
4026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        {
4036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            pContext = (CvContext*)TlsGetValue( g_TlsIndex );
4046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            if( pContext != NULL )
4056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn                icvDestroyContext( pContext );
4066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
4076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        TlsFree( g_TlsIndex );
4086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        break;
4096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    default:
4106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        ;
4116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
4126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return TRUE;
4136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
4146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#else
4156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* POSIX pthread */
4166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* function - destructor of thread */
4186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid icvPthreadDestructor(void* key_val)
4196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
4206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    CvContext* context = (CvContext*) key_val;
4216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    icvDestroyContext( context );
4226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
4236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennint pthrerr = pthread_key_create( &g_TlsIndex, icvPthreadDestructor );
4256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#endif
4276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* function, which converts int to int */
4296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCV_IMPL int
4306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RenncvErrorFromIppStatus( int status )
4316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
4326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    switch (status)
4336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
4346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADSIZE_ERR: return CV_StsBadSize;
4356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADMEMBLOCK_ERR: return CV_StsBadMemBlock;
4366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_NULLPTR_ERR: return CV_StsNullPtr;
4376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_DIV_BY_ZERO_ERR: return CV_StsDivByZero;
4386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADSTEP_ERR: return CV_BadStep ;
4396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_OUTOFMEM_ERR: return CV_StsNoMem;
4406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADARG_ERR: return CV_StsBadArg;
4416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_NOTDEFINED_ERR: return CV_StsError;
4426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_INPLACE_NOT_SUPPORTED_ERR: return CV_StsInplaceNotSupported;
4436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_NOTFOUND_ERR: return CV_StsObjectNotFound;
4446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADCONVERGENCE_ERR: return CV_StsNoConv;
4456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADDEPTH_ERR: return CV_BadDepth;
4466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_UNMATCHED_FORMATS_ERR: return CV_StsUnmatchedFormats;
4476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_UNSUPPORTED_COI_ERR: return CV_BadCOI;
4486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_UNSUPPORTED_CHANNELS_ERR: return CV_BadNumChannels;
4496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADFLAG_ERR: return CV_StsBadFlag;
4506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADRANGE_ERR: return CV_StsBadArg;
4516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADCOEF_ERR: return CV_StsBadArg;
4526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADFACTOR_ERR: return CV_StsBadArg;
4536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    case CV_BADPOINT_ERR: return CV_StsBadPoint;
4546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    default: return CV_StsError;
4566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
4576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
4586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/* End of file */
4596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
4606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
461