Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gst-plugins-base
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Seungha Yang
gst-plugins-base
Commits
c7c2d09a
Commit
c7c2d09a
authored
Feb 26, 2020
by
Matthew Waters
🐨
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
gl/context/glx: dump GLXFBConfig information to debug logs
parent
ea930a4b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
235 additions
and
21 deletions
+235
-21
gst-libs/gst/gl/x11/gstglcontext_glx.c
gst-libs/gst/gl/x11/gstglcontext_glx.c
+235
-21
No files found.
gst-libs/gst/gl/x11/gstglcontext_glx.c
View file @
c7c2d09a
...
...
@@ -121,27 +121,236 @@ gst_gl_context_glx_new (GstGLDisplay * display)
return
context
;
}
static
inline
void
_describe_fbconfig
(
Display
*
display
,
GLXFBConfig
config
)
static
void
gst_gl_context_glx_dump_fb_config
(
GstGLContextGLX
*
glx
,
Display
*
dpy
,
GLXFBConfig
fbconfig
)
{
int
val
;
glXGetFBConfigAttrib
(
display
,
config
,
GLX_FBCONFIG_ID
,
&
val
);
GST_DEBUG
(
"ID: %d"
,
val
);
glXGetFBConfigAttrib
(
display
,
config
,
GLX_DOUBLEBUFFER
,
&
val
);
GST_DEBUG
(
"double buffering: %d"
,
val
);
glXGetFBConfigAttrib
(
display
,
config
,
GLX_RED_SIZE
,
&
val
);
GST_DEBUG
(
"red: %d"
,
val
);
glXGetFBConfigAttrib
(
display
,
config
,
GLX_GREEN_SIZE
,
&
val
);
GST_DEBUG
(
"green: %d"
,
val
);
glXGetFBConfigAttrib
(
display
,
config
,
GLX_BLUE_SIZE
,
&
val
);
GST_DEBUG
(
"blue: %d"
,
val
);
glXGetFBConfigAttrib
(
display
,
config
,
GLX_ALPHA_SIZE
,
&
val
);
GST_DEBUG
(
"alpha: %d"
,
val
);
glXGetFBConfigAttrib
(
display
,
config
,
GLX_DEPTH_SIZE
,
&
val
);
GST_DEBUG
(
"depth: %d"
,
val
);
glXGetFBConfigAttrib
(
display
,
config
,
GLX_STENCIL_SIZE
,
&
val
);
GST_DEBUG
(
"stencil: %d"
,
val
);
#define SIMPLE_STRING_ASSIGN(res_str,value,to_check,str) \
if (res_str == NULL && value == to_check) \
res_str = str
int
fb_id
,
render_type
;
{
int
visual_id
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_FBCONFIG_ID
,
&
fb_id
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_VISUAL_ID
,
&
visual_id
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_RENDER_TYPE
,
&
render_type
))
return
;
GST_DEBUG_OBJECT
(
glx
,
"dumping GLXFBConfig %p with id 0x%x and "
"visual id 0x%x"
,
fbconfig
,
fb_id
,
visual_id
);
}
{
#define MAX_RENDER_TYPE 8
#define MAX_DRAWABLE_TYPE 8
int
x_renderable
,
visual_type
,
drawable_type
,
caveat
,
i
=
0
;
const
char
*
render_values
[
MAX_RENDER_TYPE
]
=
{
NULL
,
};
const
char
*
drawable_values
[
MAX_DRAWABLE_TYPE
]
=
{
NULL
,
};
const
char
*
caveat_str
=
NULL
;
const
char
*
visual_type_str
=
NULL
;
char
*
render_type_str
=
NULL
;
char
*
drawable_type_str
=
NULL
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_X_RENDERABLE
,
&
x_renderable
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_CONFIG_CAVEAT
,
&
caveat
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_X_VISUAL_TYPE
,
&
visual_type
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_DRAWABLE_TYPE
,
&
drawable_type
))
return
;
SIMPLE_STRING_ASSIGN
(
visual_type_str
,
visual_type
,
GLX_TRUE_COLOR
,
"TrueColor"
);
SIMPLE_STRING_ASSIGN
(
visual_type_str
,
visual_type
,
GLX_DIRECT_COLOR
,
"DirectColor"
);
SIMPLE_STRING_ASSIGN
(
visual_type_str
,
visual_type
,
GLX_PSEUDO_COLOR
,
"PseudoColor"
);
SIMPLE_STRING_ASSIGN
(
visual_type_str
,
visual_type
,
GLX_STATIC_COLOR
,
"StaticColor"
);
SIMPLE_STRING_ASSIGN
(
visual_type_str
,
visual_type
,
GLX_GRAY_SCALE
,
"GrayScale"
);
SIMPLE_STRING_ASSIGN
(
visual_type_str
,
visual_type
,
GLX_STATIC_GRAY
,
"StaticGray"
);
SIMPLE_STRING_ASSIGN
(
visual_type_str
,
visual_type
,
GLX_NONE
,
"None"
);
SIMPLE_STRING_ASSIGN
(
caveat_str
,
caveat
,
GLX_NONE
,
"None"
);
SIMPLE_STRING_ASSIGN
(
caveat_str
,
caveat
,
GLX_SLOW_CONFIG
,
"SlowConfig"
);
SIMPLE_STRING_ASSIGN
(
caveat_str
,
caveat
,
GLX_NON_CONFORMANT_CONFIG
,
"NonConformantConfig"
);
i
=
0
;
if
(
render_type
&
GLX_RGBA_BIT
)
render_values
[
i
++
]
=
"RGBA"
;
if
(
render_type
&
GLX_COLOR_INDEX_BIT
)
render_values
[
i
++
]
=
"Color Index"
;
/* bad things have happened if this fails: we haven't allocated enough
* space to hold all the values */
g_assert
(
i
<
MAX_RENDER_TYPE
);
i
=
0
;
if
(
drawable_type
&
GLX_WINDOW_BIT
)
drawable_values
[
i
++
]
=
"Window"
;
if
(
drawable_type
&
GLX_PIXMAP_BIT
)
drawable_values
[
i
++
]
=
"Pixmap"
;
if
(
drawable_type
&
GLX_PBUFFER_BIT
)
drawable_values
[
i
++
]
=
"PBuffer"
;
/* bad things have happened if this fails: we haven't allocated enough
* space to hold all the values */
g_assert
(
i
<
MAX_DRAWABLE_TYPE
);
render_type_str
=
g_strjoinv
(
"|"
,
(
char
**
)
render_values
);
drawable_type_str
=
g_strjoinv
(
"|"
,
(
char
**
)
drawable_values
);
GST_DEBUG_OBJECT
(
glx
,
"Is XRenderable?: %s, visual type: (0x%x) %s, "
"render type: (0x%x) %s, drawable type: (0x%x) %s, caveat: (0x%x) %s"
,
x_renderable
?
"YES"
:
"NO"
,
visual_type
,
visual_type_str
,
render_type
,
render_type_str
,
drawable_type
,
drawable_type_str
,
caveat
,
caveat_str
);
g_free
(
render_type_str
);
g_free
(
drawable_type_str
);
#undef MAX_RENDER_TYPE
#undef MAX_DRAWABLE_TYPE
}
{
int
buffer_size
,
level
,
double_buffered
,
stereo
,
aux_buffers
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_BUFFER_SIZE
,
&
buffer_size
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_LEVEL
,
&
level
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_DOUBLEBUFFER
,
&
double_buffered
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_STEREO
,
&
stereo
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_AUX_BUFFERS
,
&
aux_buffers
))
return
;
GST_DEBUG_OBJECT
(
glx
,
"Level: %i, buffer size: %i, double buffered: %i, "
"stereo: %i, aux buffers: %i"
,
level
,
buffer_size
,
double_buffered
,
stereo
,
aux_buffers
);
}
if
(
render_type
&
GLX_RGBA_BIT
)
{
int
r
,
g
,
b
,
a
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_RED_SIZE
,
&
r
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_GREEN_SIZE
,
&
g
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_BLUE_SIZE
,
&
b
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_ALPHA_SIZE
,
&
a
))
return
;
GST_DEBUG_OBJECT
(
glx
,
"[R, G, B, A] = [%i, %i, %i, %i]"
,
r
,
g
,
b
,
a
);
}
{
int
d
,
s
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_DEPTH_SIZE
,
&
d
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_STENCIL_SIZE
,
&
s
))
return
;
GST_DEBUG_OBJECT
(
glx
,
"[D, S] = [%i, %i]"
,
d
,
s
);
}
{
int
r
,
g
,
b
,
a
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_ACCUM_RED_SIZE
,
&
r
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_ACCUM_GREEN_SIZE
,
&
g
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_ACCUM_BLUE_SIZE
,
&
b
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_ACCUM_ALPHA_SIZE
,
&
a
))
return
;
GST_DEBUG_OBJECT
(
glx
,
"Accumulation [R, G, B, A] = [%i, %i, %i, %i]"
,
r
,
g
,
b
,
a
);
}
{
int
transparent_type
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_TRANSPARENT_TYPE
,
&
transparent_type
))
return
;
if
(
transparent_type
==
GLX_NONE
)
{
GST_DEBUG_OBJECT
(
glx
,
"Is opaque"
);
}
else
if
(
transparent_type
==
GLX_TRANSPARENT_INDEX
)
{
int
transparent_index
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_TRANSPARENT_INDEX
,
&
transparent_index
))
return
;
GST_DEBUG_OBJECT
(
glx
,
"Is transparent for index value 0x%x"
,
transparent_index
);
}
else
if
(
transparent_type
==
GLX_TRANSPARENT_RGB
)
{
int
r
,
g
,
b
,
a
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_TRANSPARENT_RED_VALUE
,
&
r
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_TRANSPARENT_GREEN_VALUE
,
&
g
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_TRANSPARENT_BLUE_VALUE
,
&
b
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_TRANSPARENT_ALPHA_VALUE
,
&
a
))
return
;
GST_DEBUG_OBJECT
(
glx
,
"Is transparent for value [R, G, B, A] = "
"[0x%x, 0x%x, 0x%x, 0x%x]"
,
r
,
g
,
b
,
a
);
}
else
{
GST_DEBUG_OBJECT
(
glx
,
"Unknown transparent type 0x%x"
,
transparent_type
);
}
}
{
int
w
,
h
,
pixels
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_MAX_PBUFFER_WIDTH
,
&
w
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_MAX_PBUFFER_HEIGHT
,
&
h
))
return
;
if
(
Success
!=
glXGetFBConfigAttrib
(
dpy
,
fbconfig
,
GLX_MAX_PBUFFER_PIXELS
,
&
pixels
))
return
;
GST_DEBUG_OBJECT
(
glx
,
"PBuffer maximum dimensions are [%i, %i]. Max pixels are %i"
,
w
,
h
,
pixels
);
}
#undef SIMPLE_STRING_ASSIGN
}
static
void
gst_gl_context_glx_dump_all_fb_configs
(
GstGLContextGLX
*
glx
,
Display
*
dpy
,
int
screen
)
{
int
i
,
n
;
GLXFBConfig
*
configs
;
configs
=
glXGetFBConfigs
(
dpy
,
screen
,
&
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
{
gst_gl_context_glx_dump_fb_config
(
glx
,
dpy
,
configs
[
i
]);
}
XFree
(
configs
);
}
static
GLXContext
...
...
@@ -400,6 +609,9 @@ gst_gl_context_glx_choose_format (GstGLContext * context, GError ** error)
};
int
fbcount
;
gst_gl_context_glx_dump_all_fb_configs
(
context_glx
,
device
,
DefaultScreen
(
device
));
context_glx
->
priv
->
fbconfigs
=
glXChooseFBConfig
(
device
,
DefaultScreen
(
device
),
attribs
,
&
fbcount
);
...
...
@@ -410,7 +622,9 @@ gst_gl_context_glx_choose_format (GstGLContext * context, GError ** error)
goto
failure
;
}
_describe_fbconfig
(
device
,
context_glx
->
priv
->
fbconfigs
[
0
]);
GST_DEBUG_OBJECT
(
context_glx
,
"Chosen GLXFBConfig:"
);
gst_gl_context_glx_dump_fb_config
(
context_glx
,
device
,
context_glx
->
priv
->
fbconfigs
[
0
]);
window_x11
->
visual_info
=
glXGetVisualFromFBConfig
(
device
,
context_glx
->
priv
->
fbconfigs
[
0
]);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment