Am 15.02.2014 20:35, schrieb Emil Velikov:
Query of the driver support AVC_HIGH encode before reporting
the total number of supported components.

v2: drop if (name_specific_length) check

I considered this as well, but as far as I understand it that's not necessary correct.

Have you checked the spec on how exactly we should do it?

Christian.


Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com>
---
  src/gallium/state_trackers/omx/entrypoint.c | 17 +++++++++++++++--
  src/gallium/state_trackers/omx/vid_enc.c    | 25 +++++++++----------------
  2 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/src/gallium/state_trackers/omx/entrypoint.c 
b/src/gallium/state_trackers/omx/entrypoint.c
index 52b2495..fa654ba 100644
--- a/src/gallium/state_trackers/omx/entrypoint.c
+++ b/src/gallium/state_trackers/omx/entrypoint.c
@@ -50,10 +50,23 @@ static unsigned omx_usecount = 0;
int omx_component_library_Setup(stLoaderComponentType **stComponents)
  {
+   struct vl_screen *vscreen = omx_get_screen();
+   struct pipe_screen *screen = vscreen ? vscreen->pscreen : NULL;
     OMX_ERRORTYPE r;
+   int num_components = 1;
+
+   /*
+    * Increment the number of components if the driver supports
+    * PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH encoding.
+    */
+   if (screen->get_video_param(screen, PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH,
+                               PIPE_VIDEO_ENTRYPOINT_ENCODE,
+                               PIPE_VIDEO_CAP_SUPPORTED) {
+      num_components++;
+   }
if (stComponents == NULL)
-      return 2;
+      return num_components;
/* component 0 - video decoder */
     r = vid_dec_LoaderComponent(stComponents[0]);
@@ -65,7 +78,7 @@ int omx_component_library_Setup(stLoaderComponentType 
**stComponents)
     if (r != OMX_ErrorNone)
        return r;
- return 2;
+   return num_components;
  }
struct vl_screen *omx_get_screen(void)
diff --git a/src/gallium/state_trackers/omx/vid_enc.c 
b/src/gallium/state_trackers/omx/vid_enc.c
index 6e65274..564f5b6 100644
--- a/src/gallium/state_trackers/omx/vid_enc.c
+++ b/src/gallium/state_trackers/omx/vid_enc.c
@@ -106,12 +106,7 @@ OMX_ERRORTYPE 
vid_enc_LoaderComponent(stLoaderComponentType *comp)
     comp->componentVersion.s.nRevision = 0;
     comp->componentVersion.s.nStep = 1;
     comp->constructor = vid_enc_Constructor;
-
-   if (screen->get_video_param(screen, PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH,
-                              PIPE_VIDEO_ENTRYPOINT_ENCODE, 
PIPE_VIDEO_CAP_SUPPORTED))
-      comp->name_specific_length = 1;
-   else
-      comp->name_specific_length = 0;
+   comp->name_specific_length = 1;
omx_put_screen(); @@ -129,19 +124,17 @@ OMX_ERRORTYPE vid_enc_LoaderComponent(stLoaderComponentType *comp)
     if (!comp->role_specific)
        goto error_arrays;
- if (comp->name_specific_length) {
-      comp->name_specific[0] = CALLOC(1, OMX_MAX_STRINGNAME_SIZE);
-      if (!comp->name_specific[0])
-         goto error_specific;
+   comp->name_specific[0] = CALLOC(1, OMX_MAX_STRINGNAME_SIZE);
+   if (!comp->name_specific[0])
+      goto error_specific;
- vid_enc_name_avc(comp->name_specific[0]);
+   vid_enc_name_avc(comp->name_specific[0]);
- comp->role_specific[0] = CALLOC(1, OMX_MAX_STRINGNAME_SIZE);
-      if (!comp->role_specific[0])
-         goto error_specific;
+   comp->role_specific[0] = CALLOC(1, OMX_MAX_STRINGNAME_SIZE);
+   if (!comp->role_specific[0])
+      goto error_specific;
- strcpy(comp->role_specific[0], OMX_VID_ENC_AVC_ROLE);
-   }
+   strcpy(comp->role_specific[0], OMX_VID_ENC_AVC_ROLE);
return OMX_ErrorNone;

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

Reply via email to