vdr-plugin-softhddevice-drm-gles 1.6.2
logger.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-or-later
2
16#include <cstdarg>
17#include <cstdio>
18#include <cstdlib>
19#include <cstring>
20#include <memory>
21
22#include <syslog.h>
23#include <sys/syscall.h>
24#include <unistd.h>
25
26extern "C" {
27#include <libavutil/log.h>
28}
29
30#include <vdr/tools.h>
31
32#include "logger.h"
33
41/*****************************************************************************
42 * cSoftHdLogger class
43 ****************************************************************************/
44
50std::shared_ptr<cSoftHdLogger> cSoftHdLogger::GetLogger()
51{
52 static std::shared_ptr<cSoftHdLogger> instance(new cSoftHdLogger());
53 return instance;
54}
55
65
69void cSoftHdLogger::LogFatal(const char *format, ...)
70{
71 if (SysLogLevel <= 0)
72 abort();
73
74 va_list ap;
76
78 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
79
80 va_start(ap, format);
82 va_end(ap);
83
84 abort();
85}
86
90void cSoftHdLogger::LogError(const char *format, ...)
91{
92 if (SysLogLevel <= 0)
93 return;
94
95 va_list ap;
97
99 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
100
101 va_start(ap, format);
103 va_end(ap);
104}
105
109void cSoftHdLogger::LogWarning(const char *format, ...)
110{
111 if (SysLogLevel <= 1)
112 return;
113
114 va_list ap;
116
118 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
119
120 va_start(ap, format);
122 va_end(ap);
123}
124
128void cSoftHdLogger::LogInfo(const char *format, ...)
129{
130 if (SysLogLevel <= 2)
131 return;
132
133 va_list ap;
135
137 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
138
139 va_start(ap, format);
141 va_end(ap);
142}
143
147void cSoftHdLogger::LogDebug(const char *format, ...)
148{
149 if (!m_logLevel)
150 return;
151
152 va_list ap;
154
156 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
157
158 va_start(ap, format);
160 va_end(ap);
161}
162
166void cSoftHdLogger::LogDebug2(const int cat, const char *format, ...)
167{
168 if (!format)
169 return;
170
171 va_list ap;
173 char prefix[20] = "";
174
175 switch (m_logLevel & cat) {
176 case L_AV_SYNC:
177 strcpy(prefix, "[AV_Sync]");
178 break;
179 case L_SOUND:
180 strcpy(prefix, "[Sound]");
181 break;
182 case L_OSD:
183 strcpy(prefix, "[Osd]");
184 break;
185 case L_DRM:
186 strcpy(prefix, "[Drm]");
187 break;
188 case L_CODEC:
189 strcpy(prefix, "[Codec]");
190 break;
191 case L_STILL:
192 strcpy(prefix, "[Still]");
193 break;
194 case L_TRICK:
195 strcpy(prefix, "[Trick]");
196 break;
197 case L_MEDIA:
198 strcpy(prefix, "[Media]");
199 break;
200 case L_OPENGL:
201 case L_OPENGL_TIME:
203 strcpy(prefix, "[OpenGL]");
204 break;
205 case L_PACKET:
206 strcpy(prefix, "[Packet]");
207 break;
208 case L_GRAB:
209 strcpy(prefix, "[Grab]");
210 break;
211 case L_DEBUG:
212 default:
213 return;
214 }
216 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice]%s %s", threadId, prefix, format);
217
218 va_start(ap, format);
220 va_end(ap);
221}
222
227{
228 if (!(m_logLevel & L_FFMPEG))
229 return;
230
232
233 char format[MAX_LOGMESSAGE_SIZE];
234 char prefix[20] = "";
236
237 strcpy(prefix, "[FFMpeg]");
238 snprintf(format, sizeof(format), "[%d] [softhddevice]%s %s", threadId, prefix, fmt);
239
240 vsyslog(LOG_DEBUG, format, vl);
241}
242
249{
250 if (auto logger = GetLogger())
251 logger->LogFFmpeg(fmt, vl);
252}
253
std::atomic< int > m_logLevel
loglevel mask (see enum LogFlags)
Definition logger.h:93
cSoftHdLogger(void)=default
static constexpr int MAX_LOGMESSAGE_SIZE
max size of the log message
Definition logger.h:91
static std::shared_ptr< cSoftHdLogger > GetLogger()
Get an instance to the global logger.
Definition logger.cpp:50
void LogInfo(const char *format,...)
Log to syslog LOG_INFO.
Definition logger.cpp:128
void LogError(const char *format,...)
Log to syslog LOG_ERR.
Definition logger.cpp:90
#define AV_LOGLEVEL
FFmpeg log level.
Definition logger.h:25
void LogFFmpeg(const char *, va_list)
Log to syslog LOG_DEBUG and add prefix [FFMpeg] to output.
Definition logger.cpp:226
void LogDebug(const char *format,...)
Log to syslog LOG_DEBUG.
Definition logger.cpp:147
void LogWarning(const char *format,...)
Log to syslog LOG_WARNING.
Definition logger.cpp:109
static void LogFFmpegCallback(void *, int, const char *, va_list)
Callback for ffmpeg logs.
Definition logger.cpp:248
void SetLogLevel(int level)
Set the loglevel.
Definition logger.cpp:61
void LogFatal(const char *format,...)
Log to syslog LOG_ERR and abort.
Definition logger.cpp:69
void LogDebug2(const int cat, const char *format,...)
Log to syslog LOG_DEBUG and add logging category to output.
Definition logger.cpp:166
@ L_PACKET
decoder packet/frame tracking logs
Definition logger.h:63
@ L_DRM
drm logs
Definition logger.h:55
@ L_OPENGL_TIME
opengl osd flush time measurement
Definition logger.h:61
@ L_STILL
stillpicture logs
Definition logger.h:57
@ L_FFMPEG
ffmpeg logs
Definition logger.h:65
@ L_AV_SYNC
audio/video sync logs
Definition logger.h:52
@ L_MEDIA
mediaplayer logs
Definition logger.h:59
@ L_OSD
osd logs
Definition logger.h:54
@ L_TRICK
trickspeed logs
Definition logger.h:58
@ L_OPENGL
opengl osd logs
Definition logger.h:60
@ L_DEBUG
common debug logs
Definition logger.h:51
@ L_OPENGL_TIME_ALL
opengl osd all commands time measurement
Definition logger.h:62
@ L_CODEC
codec logs
Definition logger.h:56
@ L_SOUND
sound logs
Definition logger.h:53
@ L_GRAB
grabbing logs
Definition logger.h:64
Logger Header File.
int SysLogLevel