vdr-plugin-softhddevice-drm-gles 1.5.9-20e15de
logger.cpp
Go to the documentation of this file.
1
24#include <cstdarg>
25#include <cstdio>
26#include <cstdlib>
27#include <cstring>
28#include <memory>
29
30#include <syslog.h>
31#include <sys/syscall.h>
32#include <unistd.h>
33
34extern "C" {
35#include <libavutil/log.h>
36}
37
38#include <vdr/tools.h>
39
40#include "logger.h"
41
42/*****************************************************************************
43 * cSoftHdLogger class
44 ****************************************************************************/
45
51std::shared_ptr<cSoftHdLogger> cSoftHdLogger::GetLogger()
52{
53 static std::shared_ptr<cSoftHdLogger> instance(new cSoftHdLogger());
54 return instance;
55}
56
63{
64 m_logLevel = level;
65}
66
70void cSoftHdLogger::LogFatal(const char *format, ...)
71{
72 if (SysLogLevel <= 0)
73 abort();
74
75 va_list ap;
76 char fmt[256];
77
78 pid_t threadId = syscall(__NR_gettid);
79 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
80
81 va_start(ap, format);
82 vsyslog(LOG_ERR, fmt, ap);
83 va_end(ap);
84
85 abort();
86}
87
91void cSoftHdLogger::LogError(const char *format, ...)
92{
93 if (SysLogLevel <= 0)
94 return;
95
96 va_list ap;
97 char fmt[256];
98
99 pid_t threadId = syscall(__NR_gettid);
100 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
101
102 va_start(ap, format);
103 vsyslog(LOG_ERR, fmt, ap);
104 va_end(ap);
105}
106
110void cSoftHdLogger::LogWarning(const char *format, ...)
111{
112 if (SysLogLevel <= 1)
113 return;
114
115 va_list ap;
116 char fmt[256];
117
118 pid_t threadId = syscall(__NR_gettid);
119 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
120
121 va_start(ap, format);
122 vsyslog(LOG_WARNING, fmt, ap);
123 va_end(ap);
124}
125
129void cSoftHdLogger::LogInfo(const char *format, ...)
130{
131 if (SysLogLevel <= 2)
132 return;
133
134 va_list ap;
135 char fmt[256];
136
137 pid_t threadId = syscall(__NR_gettid);
138 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
139
140 va_start(ap, format);
141 vsyslog(LOG_INFO, fmt, ap);
142 va_end(ap);
143}
144
148void cSoftHdLogger::LogDebug(const char *format, ...)
149{
150 if (!m_logLevel)
151 return;
152
153 va_list ap;
154 char fmt[256];
155
156 pid_t threadId = syscall(__NR_gettid);
157 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
158
159 va_start(ap, format);
160 vsyslog(LOG_DEBUG, fmt, ap);
161 va_end(ap);
162}
163
167void cSoftHdLogger::LogDebug2(const int cat, const char *format, ...)
168{
169 if (!format)
170 return;
171
172 va_list ap;
173 char fmt[256];
174 char prefix[20] = "";
175
176 switch (m_logLevel & cat) {
177 case L_AV_SYNC:
178 strcpy(prefix, "[AV_Sync]");
179 break;
180 case L_SOUND:
181 strcpy(prefix, "[Sound]");
182 break;
183 case L_OSD:
184 strcpy(prefix, "[Osd]");
185 break;
186 case L_DRM:
187 strcpy(prefix, "[Drm]");
188 break;
189 case L_CODEC:
190 strcpy(prefix, "[Codec]");
191 break;
192 case L_STILL:
193 strcpy(prefix, "[Still]");
194 break;
195 case L_TRICK:
196 strcpy(prefix, "[Trick]");
197 break;
198 case L_MEDIA:
199 strcpy(prefix, "[Media]");
200 break;
201 case L_OPENGL:
202 case L_OPENGL_TIME:
204 strcpy(prefix, "[OpenGL]");
205 break;
206 case L_PACKET:
207 strcpy(prefix, "[Packet]");
208 break;
209 case L_GRAB:
210 strcpy(prefix, "[Grab]");
211 break;
212 case L_DEBUG:
213 default:
214 return;
215 }
216 pid_t threadId = syscall(__NR_gettid);
217 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice]%s %s", threadId, prefix, format);
218
219 va_start(ap, format);
220 vsyslog(LOG_DEBUG, fmt, ap);
221 va_end(ap);
222}
223
227void cSoftHdLogger::LogFFmpeg(const char *fmt, va_list vl)
228{
229 if (!(m_logLevel & L_FFMPEG))
230 return;
231
232 av_log_set_level(AV_LOGLEVEL);
233
234 char format[256];
235 char prefix[20] = "";
236 pid_t threadId = syscall(__NR_gettid);
237
238 strcpy(prefix, "[FFMpeg]");
239 snprintf(format, sizeof(format), "[%d] [softhddevice]%s %s", threadId, prefix, fmt);
240
241 vsyslog(LOG_DEBUG, format, vl);
242}
243
249void cSoftHdLogger::LogFFmpegCallback([[maybe_unused]] void *ptr, [[maybe_unused]] int level, const char *fmt, va_list vl)
250{
251 if (auto logger = GetLogger())
252 logger->LogFFmpeg(fmt, vl);
253}
static std::shared_ptr< cSoftHdLogger > GetLogger()
Get an instance to the global logger.
Definition logger.cpp:51
void LogInfo(const char *format,...)
Log to LOG_INFO.
Definition logger.cpp:129
void LogError(const char *format,...)
Log to LOG_ERR.
Definition logger.cpp:91
void LogFFmpeg(const char *, va_list)
Log to LOG_DEBUG and add prefix [FFMpeg] to output.
Definition logger.cpp:227
void LogDebug(const char *format,...)
Log to LOG_DEBUG.
Definition logger.cpp:148
std::atomic< int > m_logLevel
loglevel (see Logger flags above)
Definition logger.h:90
void LogWarning(const char *format,...)
Log to LOG_WARNING.
Definition logger.cpp:110
static void LogFFmpegCallback(void *, int, const char *, va_list)
Callback for ffmpeg logs.
Definition logger.cpp:249
void SetLogLevel(int level)
Set the loglevel.
Definition logger.cpp:62
cSoftHdLogger(void)=default
void LogFatal(const char *format,...)
Log to LOG_ERR and abort.
Definition logger.cpp:70
void LogDebug2(const int cat, const char *format,...)
Log to LOG_DEBUG and add logging category to output.
Definition logger.cpp:167
Logger class header file.
#define L_OPENGL_TIME_ALL
Definition logger.h:64
#define L_DEBUG
Logger flags.
Definition logger.h:53
#define L_FFMPEG
Definition logger.h:67
#define AV_LOGLEVEL
Definition logger.h:28
#define L_SOUND
Definition logger.h:55
#define L_DRM
Definition logger.h:57
#define L_OPENGL_TIME
Definition logger.h:63
#define L_GRAB
Definition logger.h:66
#define L_AV_SYNC
Definition logger.h:54
#define L_STILL
Definition logger.h:59
#define L_CODEC
Definition logger.h:58
#define L_PACKET
Definition logger.h:65
#define L_OPENGL
Definition logger.h:62
#define L_TRICK
Definition logger.h:60
#define L_OSD
Definition logger.h:56
#define L_MEDIA
Definition logger.h:61
int SysLogLevel