-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPiSignageLogging.cc
180 lines (152 loc) · 8.09 KB
/
PiSignageLogging.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <stdio.h>
#include <stdarg.h>
#include "PiSignageLogging.h"
#include "compositor/ilclient/ilclient.h"
PisLogLevels pis_loggingLevel = PIS_LOGLEVEL_WARN;
void printState(OMX_HANDLETYPE handle) {
OMX_STATETYPE state;
OMX_ERRORTYPE err;
err = OMX_GetState(handle, &state);
if (err != OMX_ErrorNone) {
fprintf(stderr, "Error on getting state\n");
exit(1);
}
switch (state) {
case OMX_StateLoaded: printf("StateLoaded\n"); break;
case OMX_StateIdle: printf("StateIdle\n"); break;
case OMX_StateExecuting: printf("StateExecuting\n"); break;
case OMX_StatePause: printf("StatePause\n"); break;
case OMX_StateWaitForResources: printf("StateWait\n"); break;
case OMX_StateInvalid: printf("StateInvalid\n"); break;
default: printf("State unknown\n"); break;
}
}
void pis_logMessage(PisLogLevels level, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
if(level >= pis_loggingLevel)
{
vprintf(fmt,args);
}
va_end(args);
}
const char *OMX_errString(int err) {
switch (err) {
case OMX_ErrorInsufficientResources: return "OMX_ErrorInsufficientResources";
case OMX_ErrorUndefined: return "OMX_ErrorUndefined";
case OMX_ErrorInvalidComponentName: return "OMX_ErrorInvalidComponentName";
case OMX_ErrorComponentNotFound: return "OMX_ErrorComponentNotFound";
case OMX_ErrorInvalidComponent: return "OMX_ErrorInvalidComponent";
case OMX_ErrorBadParameter: return "OMX_ErrorBadParameter";
case OMX_ErrorNotImplemented: return "OMX_ErrorNotImplemented";
case OMX_ErrorUnderflow: return "OMX_ErrorUnderflow";
case OMX_ErrorOverflow: return "OMX_ErrorOverflow";
case OMX_ErrorHardware: return "OMX_ErrorHardware";
case OMX_ErrorInvalidState: return "OMX_ErrorInvalidState";
case OMX_ErrorStreamCorrupt: return "OMX_ErrorStreamCorrupt";
case OMX_ErrorPortsNotCompatible: return "OMX_ErrorPortsNotCompatible";
case OMX_ErrorResourcesLost: return "OMX_ErrorResourcesLost";
case OMX_ErrorNoMore: return "OMX_ErrorNoMore";
case OMX_ErrorVersionMismatch: return "OMX_ErrorVersionMismatch";
case OMX_ErrorNotReady: return "OMX_ErrorNotReady";
case OMX_ErrorTimeout: return "OMX_ErrorTimeout";
case OMX_ErrorSameState: return "OMX_ErrorSameState";
case OMX_ErrorResourcesPreempted: return "OMX_ErrorResourcesPreempted";
case OMX_ErrorPortUnresponsiveDuringAllocation: return "OMX_ErrorPortUnresponsiveDuringAllocation";
case OMX_ErrorPortUnresponsiveDuringDeallocation: return "OMX_ErrorPortUnresponsiveDuringDeallocation";
case OMX_ErrorPortUnresponsiveDuringStop: return "OMX_ErrorPortUnresponsiveDuringStop";
case OMX_ErrorIncorrectStateTransition: return "OMX_ErrorIncorrectStateTransition";
case OMX_ErrorIncorrectStateOperation: return "OMX_ErrorIncorrectStateOperation";
case OMX_ErrorUnsupportedSetting: return "OMX_ErrorUnsupportedSetting";
case OMX_ErrorUnsupportedIndex: return "OMX_ErrorUnsupportedIndex";
case OMX_ErrorBadPortIndex: return "OMX_ErrorBadPortIndex";
case OMX_ErrorPortUnpopulated: return "OMX_ErrorPortUnpopulated";
case OMX_ErrorComponentSuspended: return "OMX_ErrorComponentSuspended";
case OMX_ErrorDynamicResourcesUnavailable: return "OMX_ErrorDynamicResourcesUnavailable";
case OMX_ErrorMbErrorsInFrame: return "OMX_ErrorMbErrorsInFrame";
case OMX_ErrorFormatNotDetected: return "OMX_ErrorFormatNotDetected";
case OMX_ErrorContentPipeOpenFailed: return "OMX_ErrorContentPipeOpenFailed";
case OMX_ErrorContentPipeCreationFailed: return "OMX_ErrorContentPipeCreationFailed";
case OMX_ErrorSeperateTablesUsed: return "OMX_ErrorSeperateTablesUsed";
case OMX_ErrorTunnelingUnsupported: return "OMX_ErrorTunnelingUnsupported";
default: return "unknown error";
}
}
extern "C"
{
OMX_ERRORTYPE OMX_GetDebugInformation (OMX_OUT OMX_STRING debugInfo, OMX_INOUT OMX_S32 *pLen);
}
#define DEBUG_LEN 4096
OMX_STRING debug_info;
void printOMXdebug() {
int len = DEBUG_LEN;
if(debug_info == NULL)
debug_info = new char[DEBUG_LEN];
debug_info[0] = 0;
OMX_GetDebugInformation(debug_info, &len);
fprintf(stderr, debug_info);
}
void printOMXPort(OMX_HANDLETYPE componentHandle, OMX_U32 portno){
OMX_PARAM_PORTDEFINITIONTYPE portdef;
portdef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
portdef.nVersion.nVersion = OMX_VERSION;
portdef.nPortIndex = portno;
OMX_GetParameter(componentHandle,
OMX_IndexParamPortDefinition, &portdef);
char domain[50];
switch(portdef.eDomain){
case OMX_PortDomainAudio: strcpy(domain,"Audio"); break;
case OMX_PortDomainVideo: strcpy(domain,"Video"); break;
case OMX_PortDomainImage: strcpy(domain,"Image"); break;
case OMX_PortDomainOther: strcpy(domain,"Other"); break;
case OMX_PortDomainKhronosExtensions: strcpy(domain,"Khronos Extensions"); break;
case OMX_PortDomainVendorStartUnused: strcpy(domain,"Vendor Start Unused"); break;
case OMX_PortDomainMax: strcpy(domain,"Max"); break;
default: strcpy(domain,"Unknown"); break;
}
printf("Port Info:\n\tOMX Version: %d\n\tPort Index: %d\n\tDirection: %s\n\tBuffer Count Actual: %d\n\tBuffer Count Min: %d\n\tBuffer Size: %d\n\tEnabled: %s\n\tPopulated: %s\n\tDomain: %s\n",
portdef.nVersion.nVersion, portdef.nPortIndex, portdef.eDir == 0 ? "Input" : "Output", portdef.nBufferCountActual, portdef.nBufferCountMin, portdef.nBufferSize, portdef.bEnabled == 1 ? "Yes" : "No",
portdef.bPopulated == 1 ? "Yes" : "No",domain);
//TODO: Detail other types of ports
if(portdef.eDomain == OMX_PortDomainImage){
char coding[20];
switch(portdef.format.image.eCompressionFormat){
case OMX_IMAGE_CodingUnused: strcpy(coding,"Unused"); break;
case OMX_IMAGE_CodingAutoDetect: strcpy(coding,"Auto Detect"); break;
case OMX_IMAGE_CodingJPEG: strcpy(coding,"JPEG"); break;
case OMX_IMAGE_CodingJPEG2K: strcpy(coding,"JPEG2K"); break;
case OMX_IMAGE_CodingEXIF: strcpy(coding,"EXIF"); break;
case OMX_IMAGE_CodingTIFF: strcpy(coding,"TIFF"); break;
case OMX_IMAGE_CodingGIF: strcpy(coding,"GIF"); break;
case OMX_IMAGE_CodingPNG: strcpy(coding,"PNG"); break;
case OMX_IMAGE_CodingLZW: strcpy(coding,"LZW"); break;
case OMX_IMAGE_CodingBMP: strcpy(coding,"BMP"); break;
case OMX_IMAGE_CodingTGA: strcpy(coding,"TGA"); break;
case OMX_IMAGE_CodingPPM: strcpy(coding,"PPM"); break;
default: strcpy(coding,"???");
}
printf("\tMIME Type: %s\n\tWidth: %d\n\tHeight: %d\n\tStride: %d\n\tSlice Height: %d\n\tFlag Error Concealment: %s\n\tCompression Format: %s\n\tColor Format: %d\n",
portdef.format.image.cMIMEType,portdef.format.image.nFrameWidth,portdef.format.image.nFrameHeight,portdef.format.image.nStride,
portdef.format.image.nSliceHeight,portdef.format.image.bFlagErrorConcealment == 1 ? "True" : "False", coding, portdef.format.image.eColorFormat );
}
if(portdef.eDomain == OMX_PortDomainVideo){
char coding[20];
switch(portdef.format.image.eCompressionFormat){
case OMX_VIDEO_CodingUnused: strcpy(coding,"Unused"); break;
case OMX_VIDEO_CodingAutoDetect: strcpy(coding,"Auto Detect"); break;
case OMX_VIDEO_CodingMPEG2: strcpy(coding,"MPEG2"); break;
case OMX_VIDEO_CodingH263: strcpy(coding,"H.263"); break;
case OMX_VIDEO_CodingMPEG4: strcpy(coding,"MPEG4"); break;
case OMX_VIDEO_CodingWMV: strcpy(coding,"WMV"); break;
case OMX_VIDEO_CodingRV: strcpy(coding,"RV"); break;
default: strcpy(coding,"???");
}
printf("\tBitrate: %d\n\tWidth: %d\n\tHeight: %d\n"
"\tStride: %d\n\tSlice Height: %d\n\t"
"Flag Error Concealment: %s\n\tCompression Format: %s\n\tColor Format: %d\n",
portdef.format.video.nBitrate,portdef.format.video.nFrameWidth,portdef.format.video.nFrameHeight,
portdef.format.video.nStride,portdef.format.video.nSliceHeight,
portdef.format.video.bFlagErrorConcealment == 1 ? "True" : "False", coding, portdef.format.video.eColorFormat );
}
}