[Mesa-dev] [PATCH 1/7] gallium: Refactor out vl_put_screen and vl_get_screen

Leo Liu leo.liu at amd.com
Mon Jan 15 15:54:47 UTC 2018


Hi lists,


If there is no more questions, and no objection, I would like to commit 
this new OMX st. to upstream.

@Gurkipal, If you can send me or lists your rebased patches set for 
committing, that would be appreciated.


Leo


On 12/04/2017 08:58 AM, Leo Liu wrote:
>
>
>
> On 12/03/2017 10:04 AM, Gurkirpal Singh wrote:
>> I sent the modified patches in another thread a while ago.
>> Please review in case got missed.
> Please be patient for a few days to see if any other comments.
> After then please rebase, add rb/ab to your patches, and send them to me,
> I will commit them for you.
>
> Leo
>
>
>>
>> On Thu, Nov 30, 2017 at 7:35 PM, Leo Liu <leo.liu at amd.com 
>> <mailto:leo.liu at amd.com>> wrote:
>>
>>
>>
>>     On 11/30/2017 06:22 AM, Julien Isorce wrote:
>>>     Hi Gurkirpal,
>>>
>>>     > Before refactoring process both the state trackers were in independent directories.
>>>     > During earlier refactoring effort we decided to keep that directory structure so it made
>>>     > sense to move them to auxiliary code. After that I moved them both under st/omx.
>>>     > Since there could be a chance of it being useful out of st/omx, I left the decision to
>>>     > keep it or move it back to st/omx to the mailing list.
>>>
>>>     Yes please move it back to st/omx for the reasons you said, i.e.
>>>     there will now 2
>>>     sub directories, st/omx/bellagio and st/omx/tizonia and common
>>>     code in st/omx.
>>     Yes. Please move them back to st/omx.
>>
>>     With that fixed, the series are:
>>
>>     Acked-by: Leo Liu <leo.liu at amd.com> <mailto:leo.liu at amd.com>
>>
>>     Thanks for the work!
>>
>>     Leo
>>
>>
>>
>>>
>>>     Another reason is that the env var "OMX_RENDER_NODE" mentions OMX.
>>>
>>>     Thx!
>>>     Julien
>>>
>>>
>>>     On 29 November 2017 at 04:02, Gurkirpal Singh
>>>     <gurkirpal204 at gmail.com <mailto:gurkirpal204 at gmail.com>> wrote:
>>>
>>>         ---
>>>          src/gallium/auxiliary/Makefile.sources            |   2 +
>>>          src/gallium/auxiliary/vl/vl_screen.c              | 107
>>>         +++++++++++++++++++++
>>>          src/gallium/auxiliary/vl/vl_screen.h              |  33 +++++++
>>>          .../state_trackers/omx_bellagio/entrypoint.c      |  83
>>>         ----------------
>>>          .../state_trackers/omx_bellagio/entrypoint.h      |   3 -
>>>          src/gallium/state_trackers/omx_bellagio/vid_dec.c |   5 +-
>>>          src/gallium/state_trackers/omx_bellagio/vid_enc.c |   5 +-
>>>          7 files changed, 148 insertions(+), 90 deletions(-)
>>>          create mode 100644 src/gallium/auxiliary/vl/vl_screen.c
>>>          create mode 100644 src/gallium/auxiliary/vl/vl_screen.h
>>>
>>>         diff --git a/src/gallium/auxiliary/Makefile.sources
>>>         b/src/gallium/auxiliary/Makefile.sources
>>>         index f40c472..35e89f9 100644
>>>         --- a/src/gallium/auxiliary/Makefile.sources
>>>         +++ b/src/gallium/auxiliary/Makefile.sources
>>>         @@ -343,6 +343,8 @@ VL_SOURCES := \
>>>                 vl/vl_mpeg12_decoder.c \
>>>                 vl/vl_mpeg12_decoder.h \
>>>                 vl/vl_rbsp.h \
>>>         +       vl/vl_screen.c \
>>>         +       vl/vl_screen.h \
>>>                 vl/vl_types.h \
>>>                 vl/vl_vertex_buffers.c \
>>>                 vl/vl_vertex_buffers.h \
>>>         diff --git a/src/gallium/auxiliary/vl/vl_screen.c
>>>         b/src/gallium/auxiliary/vl/vl_screen.c
>>>         new file mode 100644
>>>         index 0000000..7192802
>>>         --- /dev/null
>>>         +++ b/src/gallium/auxiliary/vl/vl_screen.c
>>>         @@ -0,0 +1,107 @@
>>>         +/**************************************************************************
>>>         + *
>>>         + * Permission is hereby granted, free of charge, to any
>>>         person obtaining a
>>>         + * copy of this software and associated documentation files
>>>         (the
>>>         + * "Software"), to deal in the Software without
>>>         restriction, including
>>>         + * without limitation the rights to use, copy, modify,
>>>         merge, publish,
>>>         + * distribute, sub license, and/or sell copies of the
>>>         Software, and to
>>>         + * permit persons to whom the Software is furnished to do
>>>         so, subject to
>>>         + * the following conditions:
>>>         + *
>>>         + * The above copyright notice and this permission notice
>>>         (including the
>>>         + * next paragraph) shall be included in all copies or
>>>         substantial portions
>>>         + * of the Software.
>>>         + *
>>>         + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
>>>         ANY KIND, EXPRESS
>>>         + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>>>         + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>>>         NON-INFRINGEMENT.
>>>         + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
>>>         + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
>>>         ACTION OF CONTRACT,
>>>         + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
>>>         WITH THE
>>>         + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>>>         + *
>>>         +
>>>         **************************************************************************/
>>>         +
>>>         +#include <assert.h>
>>>         +#include <string.h>
>>>         +#include <stdbool.h>
>>>         +
>>>         +#include "os/os_thread.h"
>>>         +#include "util/u_memory.h"
>>>         +#include "loader/loader.h"
>>>         +#include "vl_screen.h"
>>>         +
>>>         +#if defined(HAVE_X11_PLATFORM)
>>>         +#include <X11/Xlib.h>
>>>         +#else
>>>         +#define XOpenDisplay(x) NULL
>>>         +#define XCloseDisplay(x)
>>>         +#define Display void
>>>         +#endif
>>>         +
>>>         +static mtx_t st_lock = _MTX_INITIALIZER_NP;
>>>         +static Display *st_display = NULL;
>>>         +static struct vl_screen *st_screen = NULL;
>>>         +static unsigned st_usecount = 0;
>>>         +static const char *st_render_node = NULL;
>>>         +static int drm_fd;
>>>         +
>>>         +struct vl_screen *vl_get_screen(const char* render_node)
>>>         +{
>>>         +   static bool first_time = true;
>>>         +   mtx_lock(&st_lock);
>>>         +
>>>         +   if (!st_screen) {
>>>         +      if (first_time) {
>>>         +         st_render_node = debug_get_option(render_node, NULL);
>>>         +         first_time = false;
>>>         +      }
>>>         +      if (st_render_node) {
>>>         +         drm_fd = loader_open_device(st_render_node);
>>>         +         if (drm_fd < 0)
>>>         +            goto error;
>>>         +
>>>         +         st_screen = vl_drm_screen_create(drm_fd);
>>>         +         if (!st_screen) {
>>>         +            close(drm_fd);
>>>         +            goto error;
>>>         +         }
>>>         +      } else {
>>>         +         st_display = XOpenDisplay(NULL);
>>>         +         if (!st_display)
>>>         +            goto error;
>>>         +
>>>         +         st_screen = vl_dri3_screen_create(st_display, 0);
>>>         +         if (!st_screen)
>>>         +            st_screen = vl_dri2_screen_create(st_display, 0);
>>>         +         if (!st_screen) {
>>>         +            XCloseDisplay(st_display);
>>>         +            goto error;
>>>         +         }
>>>         +      }
>>>         +   }
>>>         +
>>>         +   ++st_usecount;
>>>         +
>>>         +   mtx_unlock(&st_lock);
>>>         +   return st_screen;
>>>         +
>>>         +error:
>>>         +   mtx_unlock(&st_lock);
>>>         +   return NULL;
>>>         +}
>>>         +
>>>         +void vl_put_screen(void)
>>>         +{
>>>         +   mtx_lock(&st_lock);
>>>         +   if ((--st_usecount) == 0) {
>>>         +      st_screen->destroy(st_screen);
>>>         +      st_screen = NULL;
>>>         +
>>>         +      if (st_render_node)
>>>         +         close(drm_fd);
>>>         +      else
>>>         +         XCloseDisplay(st_display);
>>>         +   }
>>>         +   mtx_unlock(&st_lock);
>>>         +}
>>>         diff --git a/src/gallium/auxiliary/vl/vl_screen.h
>>>         b/src/gallium/auxiliary/vl/vl_screen.h
>>>         new file mode 100644
>>>         index 0000000..1e14775
>>>         --- /dev/null
>>>         +++ b/src/gallium/auxiliary/vl/vl_screen.h
>>>         @@ -0,0 +1,33 @@
>>>         +/**************************************************************************
>>>         + *
>>>         + * Permission is hereby granted, free of charge, to any
>>>         person obtaining a
>>>         + * copy of this software and associated documentation files
>>>         (the
>>>         + * "Software"), to deal in the Software without
>>>         restriction, including
>>>         + * without limitation the rights to use, copy, modify,
>>>         merge, publish,
>>>         + * distribute, sub license, and/or sell copies of the
>>>         Software, and to
>>>         + * permit persons to whom the Software is furnished to do
>>>         so, subject to
>>>         + * the following conditions:
>>>         + *
>>>         + * The above copyright notice and this permission notice
>>>         (including the
>>>         + * next paragraph) shall be included in all copies or
>>>         substantial portions
>>>         + * of the Software.
>>>         + *
>>>         + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
>>>         ANY KIND, EXPRESS
>>>         + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
>>>         + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
>>>         NON-INFRINGEMENT.
>>>         + * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
>>>         + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
>>>         ACTION OF CONTRACT,
>>>         + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
>>>         WITH THE
>>>         + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>>>         + *
>>>         +
>>>         **************************************************************************/
>>>         +
>>>         +#ifndef VL_VL_SCREEN_H
>>>         +#define VL_VL_SCREEN_H
>>>         +
>>>         +#include "vl_winsys.h"
>>>         +
>>>         +struct vl_screen *vl_get_screen(const char* render_node);
>>>         +void vl_put_screen(void);
>>>         +
>>>         +#endif
>>>         diff --git
>>>         a/src/gallium/state_trackers/omx_bellagio/entrypoint.c
>>>         b/src/gallium/state_trackers/omx_bellagio/entrypoint.c
>>>         index 251cc7d..5c75e8d 100644
>>>         --- a/src/gallium/state_trackers/omx_bellagio/entrypoint.c
>>>         +++ b/src/gallium/state_trackers/omx_bellagio/entrypoint.c
>>>         @@ -31,33 +31,10 @@
>>>           *
>>>           */
>>>
>>>         -#include <assert.h>
>>>         -#include <string.h>
>>>         -#include <stdbool.h>
>>>         -
>>>         -#if defined(HAVE_X11_PLATFORM)
>>>         -#include <X11/Xlib.h>
>>>         -#else
>>>         -#define XOpenDisplay(x) NULL
>>>         -#define XCloseDisplay(x)
>>>         -#define Display void
>>>         -#endif
>>>         -
>>>         -#include "os/os_thread.h"
>>>         -#include "util/u_memory.h"
>>>         -#include "loader/loader.h"
>>>         -
>>>          #include "entrypoint.h"
>>>          #include "vid_dec.h"
>>>          #include "vid_enc.h"
>>>
>>>         -static mtx_t omx_lock = _MTX_INITIALIZER_NP;
>>>         -static Display *omx_display = NULL;
>>>         -static struct vl_screen *omx_screen = NULL;
>>>         -static unsigned omx_usecount = 0;
>>>         -static const char *omx_render_node = NULL;
>>>         -static int drm_fd;
>>>         -
>>>          int omx_component_library_Setup(stLoaderComponentType
>>>         **stComponents)
>>>          {
>>>             OMX_ERRORTYPE r;
>>>         @@ -78,66 +55,6 @@ int
>>>         omx_component_library_Setup(stLoaderComponentType
>>>         **stComponents)
>>>             return 2;
>>>          }
>>>
>>>         -struct vl_screen *omx_get_screen(void)
>>>         -{
>>>         -   static bool first_time = true;
>>>         -   mtx_lock(&omx_lock);
>>>         -
>>>         -   if (!omx_screen) {
>>>         -      if (first_time) {
>>>         -         omx_render_node =
>>>         debug_get_option("OMX_RENDER_NODE", NULL);
>>>         -         first_time = false;
>>>         -      }
>>>         -      if (omx_render_node) {
>>>         -         drm_fd = loader_open_device(omx_render_node);
>>>         -         if (drm_fd < 0)
>>>         -            goto error;
>>>         -
>>>         -         omx_screen = vl_drm_screen_create(drm_fd);
>>>         -         if (!omx_screen) {
>>>         -            close(drm_fd);
>>>         -            goto error;
>>>         -         }
>>>         -      } else {
>>>         -         omx_display = XOpenDisplay(NULL);
>>>         -         if (!omx_display)
>>>         -            goto error;
>>>         -
>>>         -         omx_screen = vl_dri3_screen_create(omx_display, 0);
>>>         -         if (!omx_screen)
>>>         -            omx_screen = vl_dri2_screen_create(omx_display, 0);
>>>         -         if (!omx_screen) {
>>>         -            XCloseDisplay(omx_display);
>>>         -            goto error;
>>>         -         }
>>>         -      }
>>>         -   }
>>>         -
>>>         -   ++omx_usecount;
>>>         -
>>>         -   mtx_unlock(&omx_lock);
>>>         -   return omx_screen;
>>>         -
>>>         -error:
>>>         -   mtx_unlock(&omx_lock);
>>>         -   return NULL;
>>>         -}
>>>         -
>>>         -void omx_put_screen(void)
>>>         -{
>>>         -   mtx_lock(&omx_lock);
>>>         -   if ((--omx_usecount) == 0) {
>>>         -      omx_screen->destroy(omx_screen);
>>>         -      omx_screen = NULL;
>>>         -
>>>         -      if (omx_render_node)
>>>         -         close(drm_fd);
>>>         -      else
>>>         -         XCloseDisplay(omx_display);
>>>         -   }
>>>         -   mtx_unlock(&omx_lock);
>>>         -}
>>>         -
>>>          OMX_ERRORTYPE omx_workaround_Destructor(OMX_COMPONENTTYPE
>>>         *comp)
>>>          {
>>>             omx_base_component_PrivateType* priv =
>>>         (omx_base_component_PrivateType*)comp->pComponentPrivate;
>>>         diff --git
>>>         a/src/gallium/state_trackers/omx_bellagio/entrypoint.h
>>>         b/src/gallium/state_trackers/omx_bellagio/entrypoint.h
>>>         index 7625d7a..d566d1e 100644
>>>         --- a/src/gallium/state_trackers/omx_bellagio/entrypoint.h
>>>         +++ b/src/gallium/state_trackers/omx_bellagio/entrypoint.h
>>>         @@ -40,9 +40,6 @@
>>>
>>>          PUBLIC extern int
>>>         omx_component_library_Setup(stLoaderComponentType
>>>         **stComponents);
>>>
>>>         -struct vl_screen *omx_get_screen(void);
>>>         -void omx_put_screen(void);
>>>         -
>>>          OMX_ERRORTYPE omx_workaround_Destructor(OMX_COMPONENTTYPE
>>>         *comp);
>>>
>>>          #endif
>>>         diff --git
>>>         a/src/gallium/state_trackers/omx_bellagio/vid_dec.c
>>>         b/src/gallium/state_trackers/omx_bellagio/vid_dec.c
>>>         index f9fe19f..b62c705 100644
>>>         --- a/src/gallium/state_trackers/omx_bellagio/vid_dec.c
>>>         +++ b/src/gallium/state_trackers/omx_bellagio/vid_dec.c
>>>         @@ -50,6 +50,7 @@
>>>          #include "util/u_surface.h"
>>>          #include "vl/vl_video_buffer.h"
>>>          #include "vl/vl_vlc.h"
>>>         +#include "vl/vl_screen.h"
>>>
>>>          #include "entrypoint.h"
>>>          #include "vid_dec.h"
>>>         @@ -173,7 +174,7 @@ static OMX_ERRORTYPE
>>>         vid_dec_Constructor(OMX_COMPONENTTYPE *comp, OMX_STRING nam
>>>             comp->SetParameter = vid_dec_SetParameter;
>>>             comp->GetParameter = vid_dec_GetParameter;
>>>
>>>         -   priv->screen = omx_get_screen();
>>>         +   priv->screen = vl_get_screen("OMX_RENDER_NODE");
>>>             if (!priv->screen)
>>>                return OMX_ErrorInsufficientResources;
>>>
>>>         @@ -253,7 +254,7 @@ static OMX_ERRORTYPE
>>>         vid_dec_Destructor(OMX_COMPONENTTYPE *comp)
>>>             }
>>>
>>>             if (priv->screen)
>>>         -      omx_put_screen();
>>>         +      vl_put_screen();
>>>
>>>             return omx_workaround_Destructor(comp);
>>>          }
>>>         diff --git
>>>         a/src/gallium/state_trackers/omx_bellagio/vid_enc.c
>>>         b/src/gallium/state_trackers/omx_bellagio/vid_enc.c
>>>         index 1a4fb62..40e7a0f 100644
>>>         --- a/src/gallium/state_trackers/omx_bellagio/vid_enc.c
>>>         +++ b/src/gallium/state_trackers/omx_bellagio/vid_enc.c
>>>         @@ -50,6 +50,7 @@
>>>          #include "pipe/p_video_codec.h"
>>>          #include "util/u_memory.h"
>>>          #include "vl/vl_video_buffer.h"
>>>         +#include "vl/vl_screen.h"
>>>
>>>          #include "entrypoint.h"
>>>          #include "vid_enc.h"
>>>         @@ -170,7 +171,7 @@ static OMX_ERRORTYPE
>>>         vid_enc_Constructor(OMX_COMPONENTTYPE *comp, OMX_STRING nam
>>>             comp->GetConfig = vid_enc_GetConfig;
>>>             comp->SetConfig = vid_enc_SetConfig;
>>>
>>>         -   priv->screen = omx_get_screen();
>>>         +   priv->screen = vl_get_screen("OMX_RENDER_NODE");
>>>             if (!priv->screen)
>>>                return OMX_ErrorInsufficientResources;
>>>
>>>         @@ -296,7 +297,7 @@ static OMX_ERRORTYPE
>>>         vid_enc_Destructor(OMX_COMPONENTTYPE *comp)
>>>                priv->t_pipe->destroy(priv->t_pipe);
>>>
>>>             if (priv->screen)
>>>         -      omx_put_screen();
>>>         +      vl_put_screen();
>>>
>>>             return omx_workaround_Destructor(comp);
>>>          }
>>>         --
>>>         2.7.4
>>>
>>>         _______________________________________________
>>>         mesa-dev mailing list
>>>         mesa-dev at lists.freedesktop.org
>>>         <mailto:mesa-dev at lists.freedesktop.org>
>>>         https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>         <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>
>>>
>>>
>>>
>>>
>>>     _______________________________________________
>>>     mesa-dev mailing list
>>>     mesa-dev at lists.freedesktop.org
>>>     <mailto:mesa-dev at lists.freedesktop.org>
>>>     https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>>     <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>
>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180115/ea534974/attachment-0001.html>


More information about the mesa-dev mailing list