log.h 7.39 KB
Newer Older
1 2 3
/*
 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
 *
4
 * This file is part of Libav.
5
 *
6
 * Libav is free software; you can redistribute it and/or
7 8
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
9
 * version 2.1 of the License, or (at your option) any later version.
10
 *
11
 * Libav is distributed in the hope that it will be useful,
12 13 14 15 16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with Libav; if not, write to the Free Software
18 19 20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

21 22
#ifndef AVUTIL_LOG_H
#define AVUTIL_LOG_H
23 24

#include <stdarg.h>
25
#include "avutil.h"
26
#include "attributes.h"
27
#include "version.h"
28 29

/**
30
 * Describe the class of an AVClass context structure. That is an
31 32
 * arbitrary struct of which the first field is a pointer to an
 * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.).
33
 */
34
typedef struct AVClass {
35
    /**
Diego Biurrun's avatar
Diego Biurrun committed
36
     * The name of the class; usually it is the same name as the
Diego Biurrun's avatar
Diego Biurrun committed
37
     * context structure type to which the AVClass is associated.
38
     */
39
    const char* class_name;
40 41

    /**
42
     * A pointer to a function which returns the name of a context
43
     * instance ctx associated with the class.
44 45 46 47 48 49 50 51
     */
    const char* (*item_name)(void* ctx);

    /**
     * a pointer to the first option specified in the class if any or NULL
     *
     * @see av_set_default_options()
     */
52
    const struct AVOption *option;
53 54 55

    /**
     * LIBAVUTIL_VERSION with which this structure was created.
Jai Menon's avatar
Jai Menon committed
56
     * This is used to allow fields to be added without requiring major
57 58 59 60
     * version bumps everywhere.
     */

    int version;
61 62 63 64 65 66

    /**
     * Offset in the structure where log_level_offset is stored.
     * 0 means there is no such variable
     */
    int log_level_offset_offset;
67 68

    /**
69 70 71 72 73
     * Offset in the structure where a pointer to the parent context for
     * logging is stored. For example a decoder could pass its AVCodecContext
     * to eval as such a parent context, which an av_log() implementation
     * could then leverage to display the parent context.
     * The offset can be NULL.
74 75
     */
    int parent_log_context_offset;
76 77

    /**
78
     * Return next AVOptions-enabled child or NULL
79
     */
80 81 82
    void* (*child_next)(void *obj, void *prev);

    /**
83
     * Return an AVClass corresponding to the next potential
84 85 86 87 88 89 90
     * AVOptions-enabled child.
     *
     * The difference between child_next and this is that
     * child_next iterates over _already existing_ objects, while
     * child_class_next iterates over _all possible_ children.
     */
    const struct AVClass* (*child_class_next)(const struct AVClass *prev);
91
} AVClass;
92

Luca Barbato's avatar
Luca Barbato committed
93 94 95 96 97 98 99 100 101
/**
 * @addtogroup lavu_log
 *
 * @{
 *
 * @defgroup lavu_log_constants Logging Constants
 *
 * @{
 */
102

Luca Barbato's avatar
Luca Barbato committed
103 104 105
/**
 * Print no output.
 */
106 107 108
#define AV_LOG_QUIET    -8

/**
109
 * Something went really wrong and we will crash now.
110 111 112 113
 */
#define AV_LOG_PANIC     0

/**
114 115 116
 * Something went wrong and recovery is not possible.
 * For example, no header was found for a format which depends
 * on headers or an illegal combination of parameters is used.
117 118 119 120
 */
#define AV_LOG_FATAL     8

/**
121 122
 * Something went wrong and cannot losslessly be recovered.
 * However, not all future data is affected.
123 124 125 126
 */
#define AV_LOG_ERROR    16

/**
127 128
 * Something somehow does not look correct. This may or may not
 * lead to problems. An example would be the use of '-vstrict -2'.
129 130 131
 */
#define AV_LOG_WARNING  24

Luca Barbato's avatar
Luca Barbato committed
132 133 134
/**
 * Standard information.
 */
135
#define AV_LOG_INFO     32
Luca Barbato's avatar
Luca Barbato committed
136 137 138 139

/**
 * Detailed information.
 */
140 141 142
#define AV_LOG_VERBOSE  40

/**
143
 * Stuff which is only useful for libav* developers.
144 145
 */
#define AV_LOG_DEBUG    48
146

147 148 149 150 151
/**
 * Extremely verbose debugging, useful for libav* development.
 */
#define AV_LOG_TRACE    56

152
/**
153
 * @}
154 155
 */

Luca Barbato's avatar
Luca Barbato committed
156
/**
157 158 159 160 161 162
 * Sets additional colors for extended debugging sessions.
 * @code
   av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n");
   @endcode
 * Requires 256color terminal support. Uses outside debugging is not
 * recommended.
Luca Barbato's avatar
Luca Barbato committed
163
 */
164
#define AV_LOG_C(x) (x << 8)
Luca Barbato's avatar
Luca Barbato committed
165

166
/**
167
 * Send the specified message to the log if the level is less than or equal
168
 * to the current av_log_level. By default, all logging messages are sent to
Luca Barbato's avatar
Luca Barbato committed
169
 * stderr. This behavior can be altered by setting a different logging callback
170
 * function.
Luca Barbato's avatar
Luca Barbato committed
171
 * @see av_log_set_callback
172 173
 *
 * @param avcl A pointer to an arbitrary struct of which the first field is a
Luca Barbato's avatar
Luca Barbato committed
174 175 176
 *        pointer to an AVClass struct.
 * @param level The importance level of the message expressed using a @ref
 *        lavu_log_constants "Logging Constant".
177
 * @param fmt The format string (printf-compatible) that specifies how
Luca Barbato's avatar
Luca Barbato committed
178
 *        subsequent arguments are converted to output.
179
 */
180
void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
181

Luca Barbato's avatar
Luca Barbato committed
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206

/**
 * Send the specified message to the log if the level is less than or equal
 * to the current av_log_level. By default, all logging messages are sent to
 * stderr. This behavior can be altered by setting a different logging callback
 * function.
 * @see av_log_set_callback
 *
 * @param avcl A pointer to an arbitrary struct of which the first field is a
 *        pointer to an AVClass struct.
 * @param level The importance level of the message expressed using a @ref
 *        lavu_log_constants "Logging Constant".
 * @param fmt The format string (printf-compatible) that specifies how
 *        subsequent arguments are converted to output.
 * @param vl The arguments referenced by the format string.
 */
void av_vlog(void *avcl, int level, const char *fmt, va_list vl);

/**
 * Get the current log level
 *
 * @see lavu_log_constants
 *
 * @return Current log level
 */
207
int av_log_get_level(void);
Luca Barbato's avatar
Luca Barbato committed
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237

/**
 * Set the log level
 *
 * @see lavu_log_constants
 *
 * @param level Logging level
 */
void av_log_set_level(int level);

/**
 * Set the logging callback
 *
 * @see av_log_default_callback
 *
 * @param callback A logging function with a compatible signature.
 */
void av_log_set_callback(void (*callback)(void*, int, const char*, va_list));

/**
 * Default logging callback
 *
 * It prints the message to stderr, optionally colorizing it.
 *
 * @param avcl A pointer to an arbitrary struct of which the first field is a
 *        pointer to an AVClass struct.
 * @param level The importance level of the message expressed using a @ref
 *        lavu_log_constants "Logging Constant".
 * @param fmt The format string (printf-compatible) that specifies how
 *        subsequent arguments are converted to output.
238
 * @param vl The arguments referenced by the format string.
Luca Barbato's avatar
Luca Barbato committed
239
 */
240 241
void av_log_default_callback(void *avcl, int level, const char *fmt,
                             va_list vl);
Luca Barbato's avatar
Luca Barbato committed
242 243 244 245 246 247 248 249

/**
 * Return the context name
 *
 * @param  ctx The AVClass context
 *
 * @return The AVClass class_name
 */
250
const char* av_default_item_name(void* ctx);
251

252 253 254 255 256 257 258 259 260 261 262
/**
 * Skip repeated messages, this requires the user app to use av_log() instead of
 * (f)printf as the 2 would otherwise interfere and lead to
 * "Last message repeated x times" messages below (f)printf messages with some
 * bad luck.
 * Also to receive the last, "last repeated" line if any, the user app must
 * call av_log(NULL, AV_LOG_QUIET, ""); at the end
 */
#define AV_LOG_SKIP_REPEATED 1
void av_log_set_flags(int arg);

Luca Barbato's avatar
Luca Barbato committed
263 264 265 266
/**
 * @}
 */

267
#endif /* AVUTIL_LOG_H */