Mesa (master): state_trackers/vdpau: Test if profile is supported first before trying to create decoder

Christian König deathsimple at kemper.freedesktop.org
Thu Nov 3 13:40:52 UTC 2011


Module: Mesa
Branch: master
Commit: 1eb48c5500e5b3e3319108a1cecf63524fdede0d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1eb48c5500e5b3e3319108a1cecf63524fdede0d

Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date:   Mon Oct 31 10:26:02 2011 +0100

state_trackers/vdpau: Test if profile is supported first before trying to create decoder

So a nicer error message is returned.

Signed-off-by: Maarten Lankhorst <m.b.lankhorst at gmail.com>

---

 src/gallium/state_trackers/vdpau/decode.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/vdpau/decode.c b/src/gallium/state_trackers/vdpau/decode.c
index 7689ce2..2b23dfd 100644
--- a/src/gallium/state_trackers/vdpau/decode.c
+++ b/src/gallium/state_trackers/vdpau/decode.c
@@ -43,15 +43,18 @@ vlVdpDecoderCreate(VdpDevice device,
 {
    enum pipe_video_profile p_profile;
    struct pipe_context *pipe;
+   struct pipe_screen *screen;
    vlVdpDevice *dev;
    vlVdpDecoder *vldecoder;
    VdpStatus ret;
    unsigned i;
+   bool supported;
 
    VDPAU_MSG(VDPAU_TRACE, "[VDPAU] Creating decoder\n");
 
    if (!decoder)
       return VDP_STATUS_INVALID_POINTER;
+   *decoder = 0;
 
    if (!(width && height))
       return VDP_STATUS_INVALID_VALUE;
@@ -65,6 +68,15 @@ vlVdpDecoderCreate(VdpDevice device,
       return VDP_STATUS_INVALID_HANDLE;
 
    pipe = dev->context->pipe;
+   screen = dev->vscreen->pscreen;
+   supported = screen->get_video_param
+   (
+      screen,
+      p_profile,
+      PIPE_VIDEO_CAP_SUPPORTED
+   );
+   if (!supported)
+      return VDP_STATUS_INVALID_DECODER_PROFILE;
 
    vldecoder = CALLOC(1,sizeof(vlVdpDecoder));
    if (!vldecoder)




More information about the mesa-commit mailing list