vdr-plugin-softhddevice-drm-gles 1.6.7
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
34/*****************************************************************************
35 * cSoftHdLogger class
36 ****************************************************************************/
37
43std::shared_ptr<cSoftHdLogger> cSoftHdLogger::GetLogger()
44{
45 static std::shared_ptr<cSoftHdLogger> instance(new cSoftHdLogger());
46 return instance;
47}
48
52void cSoftHdLogger::LogFatal(const char *format, ...)
53{
54 if (SysLogLevel <= 0)
55 abort();
56
57 va_list ap;
59
61 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
62
63 va_start(ap, format);
65 va_end(ap);
66
67 abort();
68}
69
73void cSoftHdLogger::LogError(const char *format, ...)
74{
75 if (SysLogLevel <= 0)
76 return;
77
78 va_list ap;
80
82 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
83
84 va_start(ap, format);
86 va_end(ap);
87}
88
92void cSoftHdLogger::LogWarning(const char *format, ...)
93{
94 if (SysLogLevel <= 1)
95 return;
96
97 va_list ap;
99
101 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
102
103 va_start(ap, format);
105 va_end(ap);
106}
107
111void cSoftHdLogger::LogInfo(const char *format, ...)
112{
113 if (SysLogLevel <= 2)
114 return;
115
116 va_list ap;
118
120 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
121
122 va_start(ap, format);
124 va_end(ap);
125}
126
130void cSoftHdLogger::LogDebug(const char *format, ...)
131{
132 if (!m_logLevel)
133 return;
134
135 va_list ap;
137
139 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
140
141 va_start(ap, format);
143 va_end(ap);
144}
145
149void cSoftHdLogger::LogDebug2(const int cat, const char *format, ...)
150{
151 if (!format)
152 return;
153
154 va_list ap;
156 char prefix[20] = "";
157
158 switch (m_logLevel & cat) {
159 case L_AV_SYNC:
160 strcpy(prefix, "[AV_Sync]");
161 break;
162 case L_SOUND:
163 strcpy(prefix, "[Sound]");
164 break;
165 case L_OSD:
166 strcpy(prefix, "[Osd]");
167 break;
168 case L_DRM:
169 strcpy(prefix, "[Drm]");
170 break;
171 case L_CODEC:
172 strcpy(prefix, "[Codec]");
173 break;
174 case L_STILL:
175 strcpy(prefix, "[Still]");
176 break;
177 case L_TRICK:
178 strcpy(prefix, "[Trick]");
179 break;
180 case L_MEDIA:
181 strcpy(prefix, "[Media]");
182 break;
183 case L_OPENGL:
184 case L_OPENGL_TIME:
186 strcpy(prefix, "[OpenGL]");
187 break;
188 case L_PACKET:
189 strcpy(prefix, "[Packet]");
190 break;
191 case L_GRAB:
192 strcpy(prefix, "[Grab]");
193 break;
194 case L_DEBUG:
195 default:
196 return;
197 }
199 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice]%s %s", threadId, prefix, format);
200
201 va_start(ap, format);
203 va_end(ap);
204}
205
210{
211 if (!(m_logLevel & L_FFMPEG))
212 return;
213
215
216 char format[MAX_LOGMESSAGE_SIZE];
217 char prefix[20] = "";
219
220 strcpy(prefix, "[FFMpeg]");
221 snprintf(format, sizeof(format), "[%d] [softhddevice]%s %s", threadId, prefix, fmt);
222
223 vsyslog(LOG_DEBUG, format, vl);
224}
225
232{
233 if (auto logger = GetLogger())
234 logger->LogFFmpeg(fmt, vl);
235}
static std::shared_ptr< cSoftHdLogger > GetLogger()
Get an instance to the global logger.
Definition logger.cpp:43
void LogInfo(const char *format,...)
Log to syslog LOG_INFO.
Definition logger.cpp:111
void LogError(const char *format,...)
Log to syslog LOG_ERR.
Definition logger.cpp:73
void LogFFmpeg(const char *, va_list)
Log to syslog LOG_DEBUG and add prefix [FFMpeg] to output.
Definition logger.cpp:209
void LogDebug(const char *format,...)
Log to syslog LOG_DEBUG.
Definition logger.cpp:130
std::atomic< int > m_logLevel
loglevel mask (see enum LogFlags)
Definition logger.h:104
void LogWarning(const char *format,...)
Log to syslog LOG_WARNING.
Definition logger.cpp:92
static void LogFFmpegCallback(void *, int, const char *, va_list)
Callback for ffmpeg logs.
Definition logger.cpp:231
cSoftHdLogger(void)=default
static constexpr int MAX_LOGMESSAGE_SIZE
max size of the log message
Definition logger.h:102
void LogFatal(const char *format,...)
Log to syslog LOG_ERR and abort.
Definition logger.cpp:52
void LogDebug2(const int cat, const char *format,...)
Log to syslog LOG_DEBUG and add logging category to output.
Definition logger.cpp:149
#define AV_LOGLEVEL
FFmpeg log level.
Definition logger.h:30
@ L_PACKET
decoder packet/frame tracking logs
Definition logger.h:68
@ L_DRM
drm logs
Definition logger.h:60
@ L_OPENGL_TIME
opengl osd flush time measurement
Definition logger.h:66
@ L_STILL
stillpicture logs
Definition logger.h:62
@ L_FFMPEG
ffmpeg logs
Definition logger.h:70
@ L_AV_SYNC
audio/video sync logs
Definition logger.h:57
@ L_MEDIA
mediaplayer logs
Definition logger.h:64
@ L_OSD
osd logs
Definition logger.h:59
@ L_TRICK
trickspeed logs
Definition logger.h:63
@ L_OPENGL
opengl osd logs
Definition logger.h:65
@ L_DEBUG
common debug logs
Definition logger.h:56
@ L_OPENGL_TIME_ALL
opengl osd all commands time measurement
Definition logger.h:67
@ L_CODEC
codec logs
Definition logger.h:61
@ L_SOUND
sound logs
Definition logger.h:58
@ L_GRAB
grabbing logs
Definition logger.h:69
Logger Header File.
int SysLogLevel