[Mesa-dev] [PATCH 4/4] st/omx: add headless support

Liu, Leo Leo.Liu at amd.com
Thu Nov 5 19:19:39 PST 2015



>-----Original Message-----
>From: Emil Velikov [mailto:emil.l.velikov at gmail.com]
>Sent: Thursday, November 05, 2015 6:30 PM
>To: Liu, Leo
>Cc: ML mesa-dev
>Subject: Re: [Mesa-dev] [PATCH 4/4] st/omx: add headless support
>
>On 5 November 2015 at 18:47, Leo Liu <leo.liu at amd.com> wrote:
>> This will allow dec/enc/transcode without X
>>
>Are we talking about multi GPU setup where X is running on one, and OMX on
>another, or a true "without X" case ?

Only one.

> I'm leaning that the latter isn't really
>possible, yet.

Why?

Regards,
Leo

>

>> Signed-off-by: Leo Liu <leo.liu at amd.com>
>> ---
>>  src/gallium/state_trackers/omx/entrypoint.c | 39
>> +++++++++++++++++++++--------
>>  1 file changed, 29 insertions(+), 10 deletions(-)
>>
>> diff --git a/src/gallium/state_trackers/omx/entrypoint.c
>> b/src/gallium/state_trackers/omx/entrypoint.c
>> index a765666..a6a1279 100644
>> --- a/src/gallium/state_trackers/omx/entrypoint.c
>> +++ b/src/gallium/state_trackers/omx/entrypoint.c
>> @@ -33,6 +33,7 @@
>>
>>  #include <assert.h>
>>  #include <string.h>
>> +#include <fcntl.h>
>>
>>  #include <X11/Xlib.h>
>>
>> @@ -47,6 +48,7 @@ pipe_static_mutex(omx_lock);  static Display
>> *omx_display = NULL;  static struct vl_screen *omx_screen = NULL;
>> static unsigned omx_usecount = 0;
>> +static const char *omx_render_node = NULL;
>>
>>  int omx_component_library_Setup(stLoaderComponentType **stComponents)
>> { @@ -73,33 +75,50 @@ struct vl_screen *omx_get_screen(void)
>>     pipe_mutex_lock(omx_lock);
>>
>>     if (!omx_display) {
>> +      omx_render_node = debug_get_option("OMX_DRM_RENDER_NODES",
>> + NULL);
>Shorten the variable name - OMX_RENDER_NODE ? debug_get_option is only
>available on debug builds so better use getenv.
>
>omx_render_node can be an empty string so we should check for that.
>
>>        omx_display = XOpenDisplay(NULL);
>>        if (!omx_display) {
>> -         pipe_mutex_unlock(omx_lock);
>> -         return NULL;
>> -      }
>> +         if (!omx_render_node)
>> +            goto error;
>> +      } else
>> +         omx_render_node = NULL;
>The following will honour the env override, without attempting to connect to X.
>
>if (!omx_render_node && omx_render_node != "") {
>  int fd = loader_open_device()
>  vl_drm_screen_create()
>} else {
>  omx_display = XOpenDisplay()
>  vl_screen_create()
>}
>
>
>
>>     }
>>
>>     if (!omx_screen) {
>> -      omx_screen = vl_screen_create(omx_display, 0);
>> -      if (!omx_screen) {
>> -         pipe_mutex_unlock(omx_lock);
>> -         return NULL;
>> -      }
>> +      if (omx_render_node) {
>> +         int fd = open(omx_render_node, O_RDWR);
>Use loader_open_device(), it gives you free C_CLOEXEC handling.
>
>As you send v2 of the series feel free to squash patches 2 and 3.
>
>Thanks
>Emil


More information about the mesa-dev mailing list