vdpau: add implementation of VdpDecoderGetParameters
authorChristian König <deathsimple@vodafone.de>
Fri, 8 Jul 2011 18:53:39 +0000 (20:53 +0200)
committerChristian König <deathsimple@vodafone.de>
Fri, 8 Jul 2011 18:53:39 +0000 (20:53 +0200)
src/gallium/state_trackers/vdpau/decode.c
src/gallium/state_trackers/vdpau/vdpau_private.h

index 4d01fe6a68edf962d347fe0031b6a19353ab5da0..0696278ac3e4203280b805c107cb86c15d643ba2 100644 (file)
@@ -145,6 +145,18 @@ vlVdpDecoderGetParameters(VdpDecoder decoder,
                           uint32_t *width,
                           uint32_t *height)
 {
+   vlVdpDecoder *vldecoder;
+
+   VDPAU_MSG(VDPAU_TRACE, "[VDPAU] decoder get parameters called\n");
+
+   vldecoder = (vlVdpDecoder *)vlGetDataHTAB(decoder);
+   if (!vldecoder)
+      return VDP_STATUS_INVALID_HANDLE;
+      
+   *profile = PipeToProfile(vldecoder->decoder->profile);
+   *width = vldecoder->decoder->width;
+   *height = vldecoder->decoder->height;
+   
    return VDP_STATUS_OK;
 }
 
index 8a97c99bda9553928460bab09fc0a7aa2db42e60..8cf9ca1f4e59ac1dd09d4165a06fb67bf07a99b7 100644 (file)
@@ -171,6 +171,28 @@ ProfileToPipe(VdpDecoderProfile vdpau_profile)
    }
 }
 
+static inline VdpDecoderProfile
+PipeToProfile(enum pipe_video_profile p_profile)
+{
+   switch (p_profile) {
+      case PIPE_VIDEO_PROFILE_MPEG1:
+         return VDP_DECODER_PROFILE_MPEG1;
+      case PIPE_VIDEO_PROFILE_MPEG2_SIMPLE:
+         return VDP_DECODER_PROFILE_MPEG2_SIMPLE;
+      case PIPE_VIDEO_PROFILE_MPEG2_MAIN:
+         return VDP_DECODER_PROFILE_MPEG2_MAIN;
+      case PIPE_VIDEO_PROFILE_MPEG4_AVC_BASELINE:
+         return VDP_DECODER_PROFILE_H264_BASELINE;
+      case PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN: /* Not defined in p_format.h */
+         return VDP_DECODER_PROFILE_H264_MAIN;
+      case PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH:
+            return VDP_DECODER_PROFILE_H264_HIGH;
+      default:
+         assert(0);
+         return -1;
+   }
+}
+
 typedef struct
 {
    Display *display;