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....@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 <gurkirpal...@gmail.com <mailto:gurkirpal...@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@lists.freedesktop.org <mailto:mesa-dev@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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to