From cd4f18089e44872ce9e3c04ac5e808a7204ffc49 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20K=C3=B6nig?= Date: Sun, 10 Jul 2011 14:13:08 +0200 Subject: [PATCH] vdpau: make capabilities query more sane --- src/gallium/state_trackers/vdpau/device.c | 2 - src/gallium/state_trackers/vdpau/query.c | 73 ++++++++----------- .../state_trackers/vdpau/vdpau_private.h | 2 - 3 files changed, 32 insertions(+), 45 deletions(-) diff --git a/src/gallium/state_trackers/vdpau/device.c b/src/gallium/state_trackers/vdpau/device.c index 41248cde705..b032e83dc80 100644 --- a/src/gallium/state_trackers/vdpau/device.c +++ b/src/gallium/state_trackers/vdpau/device.c @@ -55,8 +55,6 @@ vdp_imp_device_create_x11(Display *display, int screen, VdpDevice *device, goto no_dev; } - dev->display = display; - dev->screen = screen; dev->vscreen = vl_screen_create(display, screen); if (!dev->vscreen) { ret = VDP_STATUS_RESOURCES; diff --git a/src/gallium/state_trackers/vdpau/query.c b/src/gallium/state_trackers/vdpau/query.c index 971ac672229..a32fd406bf5 100644 --- a/src/gallium/state_trackers/vdpau/query.c +++ b/src/gallium/state_trackers/vdpau/query.c @@ -58,44 +58,36 @@ VdpStatus vlVdpVideoSurfaceQueryCapabilities(VdpDevice device, VdpChromaType surface_chroma_type, VdpBool *is_supported, uint32_t *max_width, uint32_t *max_height) { - struct vl_screen *vlscreen; + vlVdpDevice *dev; + struct pipe_screen *pscreen; uint32_t max_2d_texture_level; - VdpStatus ret; VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Querying video surfaces\n"); if (!(is_supported && max_width && max_height)) return VDP_STATUS_INVALID_POINTER; - vlVdpDevice *dev = vlGetDataHTAB(device); + dev = vlGetDataHTAB(device); if (!dev) return VDP_STATUS_INVALID_HANDLE; - vlscreen = vl_screen_create(dev->display, dev->screen); - if (!vlscreen) + pscreen = dev->vscreen->pscreen; + if (!pscreen) return VDP_STATUS_RESOURCES; /* XXX: Current limits */ *is_supported = true; - if (surface_chroma_type != VDP_CHROMA_TYPE_420) { - *is_supported = false; - goto no_sup; - } + if (surface_chroma_type != VDP_CHROMA_TYPE_420) + *is_supported = false; - max_2d_texture_level = vlscreen->pscreen->get_param( vlscreen->pscreen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS ); - if (!max_2d_texture_level) { - ret = VDP_STATUS_RESOURCES; - goto no_sup; - } + max_2d_texture_level = pscreen->get_param(pscreen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS); + if (!max_2d_texture_level) + return VDP_STATUS_RESOURCES; /* I am not quite sure if it is max_2d_texture_level-1 or just max_2d_texture_level */ *max_width = *max_height = pow(2,max_2d_texture_level-1); - vl_screen_destroy(vlscreen); - return VDP_STATUS_OK; - no_sup: - return ret; } VdpStatus @@ -103,29 +95,28 @@ vlVdpVideoSurfaceQueryGetPutBitsYCbCrCapabilities(VdpDevice device, VdpChromaTyp VdpYCbCrFormat bits_ycbcr_format, VdpBool *is_supported) { - struct vl_screen *vlscreen; + vlVdpDevice *dev; + struct pipe_screen *pscreen; VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Querying get put video surfaces\n"); if (!is_supported) return VDP_STATUS_INVALID_POINTER; - vlVdpDevice *dev = vlGetDataHTAB(device); + dev = vlGetDataHTAB(device); if (!dev) return VDP_STATUS_INVALID_HANDLE; - vlscreen = vl_screen_create(dev->display, dev->screen); - if (!vlscreen) + pscreen = dev->vscreen->pscreen; + if (!pscreen) return VDP_STATUS_RESOURCES; - if (bits_ycbcr_format != VDP_YCBCR_FORMAT_Y8U8V8A8 && bits_ycbcr_format != VDP_YCBCR_FORMAT_V8U8Y8A8) - *is_supported = vlscreen->pscreen->is_format_supported(vlscreen->pscreen, - FormatYCBCRToPipe(bits_ycbcr_format), - PIPE_TEXTURE_2D, - 1, - PIPE_BIND_RENDER_TARGET); - - vl_screen_destroy(vlscreen); + *is_supported = pscreen->is_video_format_supported + ( + pscreen, + FormatYCBCRToPipe(bits_ycbcr_format), + PIPE_VIDEO_PROFILE_UNKNOWN + ); return VDP_STATUS_OK; } @@ -135,38 +126,40 @@ vlVdpDecoderQueryCapabilities(VdpDevice device, VdpDecoderProfile profile, VdpBool *is_supported, uint32_t *max_level, uint32_t *max_macroblocks, uint32_t *max_width, uint32_t *max_height) { + vlVdpDevice *dev; + struct pipe_screen *pscreen; + enum pipe_video_profile p_profile; uint32_t max_decode_width; uint32_t max_decode_height; uint32_t max_2d_texture_level; - struct vl_screen *vlscreen; VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Querying decoder\n"); if (!(is_supported && max_level && max_macroblocks && max_width && max_height)) return VDP_STATUS_INVALID_POINTER; - vlVdpDevice *dev = vlGetDataHTAB(device); + dev = vlGetDataHTAB(device); if (!dev) return VDP_STATUS_INVALID_HANDLE; - vlscreen = vl_screen_create(dev->display, dev->screen); - if (!vlscreen) + pscreen = dev->vscreen->pscreen; + if (!pscreen) return VDP_STATUS_RESOURCES; p_profile = ProfileToPipe(profile); if (p_profile == PIPE_VIDEO_PROFILE_UNKNOWN) { - *is_supported = false; - return VDP_STATUS_OK; + *is_supported = false; + return VDP_STATUS_OK; } if (p_profile != PIPE_VIDEO_PROFILE_MPEG2_SIMPLE && p_profile != PIPE_VIDEO_PROFILE_MPEG2_MAIN) { - *is_supported = false; - return VDP_STATUS_OK; + *is_supported = false; + return VDP_STATUS_OK; } /* XXX hack, need to implement something more sane when the decoders have been implemented */ - max_2d_texture_level = vlscreen->pscreen->get_param( vlscreen->pscreen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS ); + max_2d_texture_level = pscreen->get_param(pscreen, PIPE_CAP_MAX_TEXTURE_2D_LEVELS); max_decode_width = max_decode_height = pow(2,max_2d_texture_level-2); if (!(max_decode_width && max_decode_height)) return VDP_STATUS_RESOURCES; @@ -177,8 +170,6 @@ vlVdpDecoderQueryCapabilities(VdpDevice device, VdpDecoderProfile profile, *max_level = 16; *max_macroblocks = (max_decode_width/16) * (max_decode_height/16); - vl_screen_destroy(vlscreen); - return VDP_STATUS_OK; } diff --git a/src/gallium/state_trackers/vdpau/vdpau_private.h b/src/gallium/state_trackers/vdpau/vdpau_private.h index bbc426e0e27..e5d945629fb 100644 --- a/src/gallium/state_trackers/vdpau/vdpau_private.h +++ b/src/gallium/state_trackers/vdpau/vdpau_private.h @@ -216,8 +216,6 @@ PipeToProfile(enum pipe_video_profile p_profile) typedef struct { - Display *display; - int screen; struct vl_screen *vscreen; struct vl_context *context; } vlVdpDevice; -- 2.30.2