... and report second component only when the driver supports h264 encode. v2: Drop if (name_specific_length) conditional. v3: Reword comment and commit message.
Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> --- src/gallium/state_trackers/omx/entrypoint.c | 14 ++++++++++++-- src/gallium/state_trackers/omx/vid_enc.c | 25 +++++++++---------------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/gallium/state_trackers/omx/entrypoint.c b/src/gallium/state_trackers/omx/entrypoint.c index 52b2495..9187f13 100644 --- a/src/gallium/state_trackers/omx/entrypoint.c +++ b/src/gallium/state_trackers/omx/entrypoint.c @@ -50,10 +50,20 @@ 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; + + /* Provide a component only when the driver supports h264 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 +75,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; -- 1.9.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev