Line data Source code
1 : /******************************************************************************************************
2 :
3 : (C) 2022-2025 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB,
4 : Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
5 : Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
6 : Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
7 : contributors to this repository. All Rights Reserved.
8 :
9 : This software is protected by copyright law and by international treaties.
10 : The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB,
11 : Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD.,
12 : Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange,
13 : Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other
14 : contributors to this repository retain full ownership rights in their respective contributions in
15 : the software. This notice grants no license of any kind, including but not limited to patent
16 : license, nor is any license granted by implication, estoppel or otherwise.
17 :
18 : Contributors are required to enter into the IVAS codec Public Collaboration agreement before making
19 : contributions.
20 :
21 : This software is provided "AS IS", without any express or implied warranties. The software is in the
22 : development stage. It is intended exclusively for experts who have experience with such software and
23 : solely for the purpose of inspection. All implied warranties of non-infringement, merchantability
24 : and fitness for a particular purpose are hereby disclaimed and excluded.
25 :
26 : Any dispute, controversy or claim arising under or in relation to providing this software shall be
27 : submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in
28 : accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and
29 : the United Nations Convention on Contracts on the International Sales of Goods.
30 :
31 : *******************************************************************************************************/
32 :
33 : #ifndef IVAS_ERROR_UTILS_H
34 : #define IVAS_ERROR_UTILS_H
35 :
36 : #include "options.h"
37 :
38 : #include <assert.h>
39 : #include <stdarg.h>
40 : #include <stdint.h>
41 :
42 : #include "ivas_error.h"
43 :
44 : #ifdef DEBUGGING
45 : #include <stdio.h>
46 : #endif
47 :
48 : /*
49 : * Usage:
50 : *
51 : * IVAS_ERROR( error_code, decription_fmt, ... );
52 : *
53 : * where:
54 : * - error_code is of type enum ivas_error
55 : * - decription_fmt is a description string with printf-like formatting
56 : * - ... are (optional) printf-like arguments to place in the description format string
57 : *
58 : * Examples:
59 : *
60 : * IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for XXX" );
61 : *
62 : * IVAS_ERROR( IVAS_ERR_INTERNAL, "Unexpected value %f in frame %d", var, frame );
63 : *
64 : * Note: Contrary to printf, this macro is not able to verify at build time that the
65 : * placeholders (e.g. "%f") in the format string match the types of provided arguments.
66 : * If unexpected values are printed or the macro causes a crash, double check that the
67 : * format specifiers are correct.
68 : */
69 : #ifdef DEBUGGING
70 : #define IVAS_ERROR( error_code, ... ) ivas_error_wrapper( error_code, __func__, __FILE__, __LINE__, __VA_ARGS__ )
71 : #else
72 : #define IVAS_ERROR( error_code, ... ) ivas_error_wrapper( error_code )
73 : #endif
74 :
75 : #ifdef DEBUGGING
76 : static inline ivas_error ivas_error_wrapper( const ivas_error error_code, const char *function, const char *file, int32_t line, const char *description, ... )
77 : {
78 : fprintf( stderr, "\n%s: ", ivas_error_to_string( error_code ) );
79 :
80 : va_list args;
81 : va_start( args, description );
82 : vfprintf( stderr, description, args );
83 : va_end( args );
84 :
85 : fprintf( stderr, "\n\nIn function: %s(), %s:%d\n\n", function, file, line );
86 :
87 : return error_code;
88 : }
89 : #else
90 19 : static inline ivas_error ivas_error_wrapper( const ivas_error error_code )
91 : {
92 19 : return error_code;
93 : }
94 : #endif
95 :
96 : #endif /* IVAS_ERROR_UTILS_H */
|