vdr-plugin-softhddevice-drm-gles 1.6.4-d0291bb
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
58
62void cSoftHdLogger::LogFatal(const char *format, ...)
63{
64 if (SysLogLevel <= 0)
65 abort();
66
67 va_list ap;
69
71 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
72
73 va_start(ap, format);
75 va_end(ap);
76
77 abort();
78}
79
83void cSoftHdLogger::LogError(const char *format, ...)
84{
85 if (SysLogLevel <= 0)
86 return;
87
88 va_list ap;
90
92 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
93
94 va_start(ap, format);
96 va_end(ap);
97}
98
102void cSoftHdLogger::LogWarning(const char *format, ...)
103{
104 if (SysLogLevel <= 1)
105 return;
106
107 va_list ap;
109
111 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
112
113 va_start(ap, format);
115 va_end(ap);
116}
117
121void cSoftHdLogger::LogInfo(const char *format, ...)
122{
123 if (SysLogLevel <= 2)
124 return;
125
126 va_list ap;
128
130 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
131
132 va_start(ap, format);
134 va_end(ap);
135}
136
140void cSoftHdLogger::LogDebug(const char *format, ...)
141{
142 if (!m_logLevel)
143 return;
144
145 va_list ap;
147
149 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice] %s", threadId, format);
150
151 va_start(ap, format);
153 va_end(ap);
154}
155
159void cSoftHdLogger::LogDebug2(const int cat, const char *format, ...)
160{
161 if (!format)
162 return;
163
164 va_list ap;
166 char prefix[20] = "";
167
168 switch (m_logLevel & cat) {
169 case L_AV_SYNC:
170 strcpy(prefix, "[AV_Sync]");
171 break;
172 case L_SOUND:
173 strcpy(prefix, "[Sound]");
174 break;
175 case L_OSD:
176 strcpy(prefix, "[Osd]");
177 break;
178 case L_DRM:
179 strcpy(prefix, "[Drm]");
180 break;
181 case L_CODEC:
182 strcpy(prefix, "[Codec]");
183 break;
184 case L_STILL:
185 strcpy(prefix, "[Still]");
186 break;
187 case L_TRICK:
188 strcpy(prefix, "[Trick]");
189 break;
190 case L_MEDIA:
191 strcpy(prefix, "[Media]");
192 break;
193 case L_OPENGL:
194 case L_OPENGL_TIME:
196 strcpy(prefix, "[OpenGL]");
197 break;
198 case L_PACKET:
199 strcpy(prefix, "[Packet]");
200 break;
201 case L_GRAB:
202 strcpy(prefix, "[Grab]");
203 break;
204 case L_DEBUG:
205 default:
206 return;
207 }
209 snprintf(fmt, sizeof(fmt), "[%d] [softhddevice]%s %s", threadId, prefix, format);
210
211 va_start(ap, format);
213 va_end(ap);
214}
215
220{
221 if (!(m_logLevel & L_FFMPEG))
222 return;
223
225
226 char format[MAX_LOGMESSAGE_SIZE];
227 char prefix[20] = "";
229
230 strcpy(prefix, "[FFMpeg]");
231 snprintf(format, sizeof(format), "[%d] [softhddevice]%s %s", threadId, prefix, fmt);
232
233 vsyslog(LOG_DEBUG, format, vl);
234}
235
242{
243 if (auto logger = GetLogger())
244 logger->LogFFmpeg(fmt, vl);
245}
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:121
void LogError(const char *format,...)
Log to syslog LOG_ERR.
Definition logger.cpp:83
void LogFFmpeg(const char *, va_list)
Log to syslog LOG_DEBUG and add prefix [FFMpeg] to output.
Definition logger.cpp:219
void LogDebug(const char *format,...)
Log to syslog LOG_DEBUG.
Definition logger.cpp:140
std::atomic< int > m_logLevel
loglevel mask (see enum LogFlags)
Definition logger.h:102
void LogWarning(const char *format,...)
Log to syslog LOG_WARNING.
Definition logger.cpp:102
static void LogFFmpegCallback(void *, int, const char *, va_list)
Callback for ffmpeg logs.
Definition logger.cpp:241
void SetLogLevel(int level)
Set the loglevel.
Definition logger.cpp:54
cSoftHdLogger(void)=default
static constexpr int MAX_LOGMESSAGE_SIZE
max size of the log message
Definition logger.h:100
void LogFatal(const char *format,...)
Log to syslog LOG_ERR and abort.
Definition logger.cpp:62
void LogDebug2(const int cat, const char *format,...)
Log to syslog LOG_DEBUG and add logging category to output.
Definition logger.cpp:159
#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