ephyr: Refactor XV adaptor feature detection.
This obviously wanted a helper function beforehand, but even more so now that we have XCB. Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Julien Cristau <jcristau@debian.org>
This commit is contained in:
		
							parent
							
								
									7a9c311add
								
							
						
					
					
						commit
						fad79d2e3e
					
				| 
						 | 
					@ -137,74 +137,6 @@ ephyrHostXVAdaptorGetVideoFormats (const xcb_xv_adaptor_info_t *a_this,
 | 
				
			||||||
    return formats;
 | 
					    return formats;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Bool
 | 
					 | 
				
			||||||
ephyrHostXVAdaptorHasPutVideo (const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                               Bool *a_result)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EPHYR_RETURN_VAL_IF_FAIL(a_this && a_result, FALSE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ((a_this->type & (XCB_XV_TYPE_VIDEO_MASK | XCB_XV_TYPE_INPUT_MASK)) ==
 | 
					 | 
				
			||||||
        (XCB_XV_TYPE_VIDEO_MASK | XCB_XV_TYPE_INPUT_MASK))
 | 
					 | 
				
			||||||
        *a_result = TRUE;
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        *a_result = FALSE;
 | 
					 | 
				
			||||||
    return TRUE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Bool
 | 
					 | 
				
			||||||
ephyrHostXVAdaptorHasGetVideo(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                              Bool *a_result)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if ((a_this->type & (XCB_XV_TYPE_VIDEO_MASK | XCB_XV_TYPE_OUTPUT_MASK)) ==
 | 
					 | 
				
			||||||
        (XCB_XV_TYPE_VIDEO_MASK | XCB_XV_TYPE_OUTPUT_MASK))
 | 
					 | 
				
			||||||
        *a_result = TRUE;
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        *a_result = FALSE;
 | 
					 | 
				
			||||||
    return TRUE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Bool
 | 
					 | 
				
			||||||
ephyrHostXVAdaptorHasPutStill(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                              Bool *a_result)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EPHYR_RETURN_VAL_IF_FAIL(a_this && a_result, FALSE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ((a_this->type & (XCB_XV_TYPE_STILL_MASK | XCB_XV_TYPE_INPUT_MASK)) ==
 | 
					 | 
				
			||||||
        (XCB_XV_TYPE_STILL_MASK | XCB_XV_TYPE_INPUT_MASK))
 | 
					 | 
				
			||||||
        *a_result = TRUE;
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        *a_result = FALSE;
 | 
					 | 
				
			||||||
    return TRUE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Bool
 | 
					 | 
				
			||||||
ephyrHostXVAdaptorHasGetStill(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                              Bool *a_result)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EPHYR_RETURN_VAL_IF_FAIL(a_this && a_result, FALSE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ((a_this->type & (XCB_XV_TYPE_STILL_MASK | XCB_XV_TYPE_OUTPUT_MASK)) ==
 | 
					 | 
				
			||||||
        (XCB_XV_TYPE_STILL_MASK | XCB_XV_TYPE_OUTPUT_MASK))
 | 
					 | 
				
			||||||
        *a_result = TRUE;
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        *a_result = FALSE;
 | 
					 | 
				
			||||||
    return TRUE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Bool
 | 
					 | 
				
			||||||
ephyrHostXVAdaptorHasPutImage(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                              Bool *a_result)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    EPHYR_RETURN_VAL_IF_FAIL(a_this && a_result, FALSE);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if ((a_this->type & (XCB_XV_TYPE_IMAGE_MASK | XCB_XV_TYPE_INPUT_MASK)) ==
 | 
					 | 
				
			||||||
        (XCB_XV_TYPE_IMAGE_MASK | XCB_XV_TYPE_INPUT_MASK))
 | 
					 | 
				
			||||||
        *a_result = TRUE;
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        *a_result = FALSE;
 | 
					 | 
				
			||||||
    return TRUE;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Bool
 | 
					Bool
 | 
				
			||||||
ephyrHostXVQueryEncodings(int a_port_id,
 | 
					ephyrHostXVQueryEncodings(int a_port_id,
 | 
				
			||||||
                          EphyrHostEncoding ** a_encodings,
 | 
					                          EphyrHostEncoding ** a_encodings,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,17 +98,6 @@ char* ephyrHostXVAdaptorGetName(const xcb_xv_adaptor_info_t *a_this);
 | 
				
			||||||
EphyrHostVideoFormat *ephyrHostXVAdaptorGetVideoFormats
 | 
					EphyrHostVideoFormat *ephyrHostXVAdaptorGetVideoFormats
 | 
				
			||||||
    (const xcb_xv_adaptor_info_t *a_this, int *a_nb_formats);
 | 
					    (const xcb_xv_adaptor_info_t *a_this, int *a_nb_formats);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Bool ephyrHostXVAdaptorHasPutVideo(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                                   Bool *a_result);
 | 
					 | 
				
			||||||
Bool ephyrHostXVAdaptorHasGetVideo(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                                   Bool *a_result);
 | 
					 | 
				
			||||||
Bool ephyrHostXVAdaptorHasPutStill(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                                   Bool *a_result);
 | 
					 | 
				
			||||||
Bool ephyrHostXVAdaptorHasGetStill(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                                   Bool *a_result);
 | 
					 | 
				
			||||||
Bool ephyrHostXVAdaptorHasPutImage(const xcb_xv_adaptor_info_t *a_this,
 | 
					 | 
				
			||||||
                                   Bool *a_result);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * encoding
 | 
					 * encoding
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -169,6 +169,12 @@ static int s_base_port_id;
 | 
				
			||||||
 * <helpers>
 | 
					 * <helpers>
 | 
				
			||||||
 * ************/
 | 
					 * ************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static Bool
 | 
				
			||||||
 | 
					adaptor_has_flags(const xcb_xv_adaptor_info_t *adaptor, uint32_t flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    return (adaptor->type & flags) == flags;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static Bool
 | 
					static Bool
 | 
				
			||||||
DoSimpleClip(BoxPtr a_dst_box, BoxPtr a_clipper, BoxPtr a_result)
 | 
					DoSimpleClip(BoxPtr a_dst_box, BoxPtr a_clipper, BoxPtr a_result)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -508,7 +514,6 @@ static Bool
 | 
				
			||||||
ephyrXVPrivSetAdaptorsHooks(EphyrXVPriv * a_this)
 | 
					ephyrXVPrivSetAdaptorsHooks(EphyrXVPriv * a_this)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int i = 0;
 | 
					    int i = 0;
 | 
				
			||||||
    Bool has_it = FALSE;
 | 
					 | 
				
			||||||
    xcb_xv_adaptor_info_t *cur_host_adaptor = NULL;
 | 
					    xcb_xv_adaptor_info_t *cur_host_adaptor = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    EPHYR_RETURN_VAL_IF_FAIL(a_this, FALSE);
 | 
					    EPHYR_RETURN_VAL_IF_FAIL(a_this, FALSE);
 | 
				
			||||||
| 
						 | 
					@ -528,46 +533,27 @@ ephyrXVPrivSetAdaptorsHooks(EphyrXVPriv * a_this)
 | 
				
			||||||
            EPHYR_LOG_ERROR("failed to get host adaptor at index %d\n", i);
 | 
					            EPHYR_LOG_ERROR("failed to get host adaptor at index %d\n", i);
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        has_it = FALSE;
 | 
					
 | 
				
			||||||
        if (!ephyrHostXVAdaptorHasPutImage(cur_host_adaptor, &has_it)) {
 | 
					        if (adaptor_has_flags(cur_host_adaptor,
 | 
				
			||||||
            EPHYR_LOG_ERROR("error\n");
 | 
					                              XCB_XV_TYPE_IMAGE_MASK | XCB_XV_TYPE_INPUT_MASK))
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (has_it) {
 | 
					 | 
				
			||||||
            a_this->adaptors[i].PutImage = ephyrPutImage;
 | 
					            a_this->adaptors[i].PutImage = ephyrPutImage;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        has_it = FALSE;
 | 
					        if (adaptor_has_flags(cur_host_adaptor,
 | 
				
			||||||
        if (!ephyrHostXVAdaptorHasPutVideo(cur_host_adaptor, &has_it)) {
 | 
					                              XCB_XV_TYPE_VIDEO_MASK | XCB_XV_TYPE_INPUT_MASK))
 | 
				
			||||||
            EPHYR_LOG_ERROR("error\n");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (has_it) {
 | 
					 | 
				
			||||||
            a_this->adaptors[i].PutVideo = ephyrPutVideo;
 | 
					            a_this->adaptors[i].PutVideo = ephyrPutVideo;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        has_it = FALSE;
 | 
					        if (adaptor_has_flags(cur_host_adaptor,
 | 
				
			||||||
        if (!ephyrHostXVAdaptorHasGetVideo(cur_host_adaptor, &has_it)) {
 | 
					                              XCB_XV_TYPE_VIDEO_MASK | XCB_XV_TYPE_OUTPUT_MASK))
 | 
				
			||||||
            EPHYR_LOG_ERROR("error\n");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (has_it) {
 | 
					 | 
				
			||||||
            a_this->adaptors[i].GetVideo = ephyrGetVideo;
 | 
					            a_this->adaptors[i].GetVideo = ephyrGetVideo;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        has_it = FALSE;
 | 
					        if (adaptor_has_flags(cur_host_adaptor,
 | 
				
			||||||
        if (!ephyrHostXVAdaptorHasPutStill(cur_host_adaptor, &has_it)) {
 | 
					                              XCB_XV_TYPE_STILL_MASK | XCB_XV_TYPE_INPUT_MASK))
 | 
				
			||||||
            EPHYR_LOG_ERROR("error\n");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (has_it) {
 | 
					 | 
				
			||||||
            a_this->adaptors[i].PutStill = ephyrPutStill;
 | 
					            a_this->adaptors[i].PutStill = ephyrPutStill;
 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        has_it = FALSE;
 | 
					        if (adaptor_has_flags(cur_host_adaptor,
 | 
				
			||||||
        if (!ephyrHostXVAdaptorHasGetStill(cur_host_adaptor, &has_it)) {
 | 
					                              XCB_XV_TYPE_STILL_MASK | XCB_XV_TYPE_OUTPUT_MASK))
 | 
				
			||||||
            EPHYR_LOG_ERROR("error\n");
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        if (has_it) {
 | 
					 | 
				
			||||||
            a_this->adaptors[i].GetStill = ephyrGetStill;
 | 
					            a_this->adaptors[i].GetStill = ephyrGetStill;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    EPHYR_LOG("leave\n");
 | 
					    EPHYR_LOG("leave\n");
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue