From: Christian König <christian.koe...@amd.com> Signed-off-by: Christian König <christian.koe...@amd.com> --- src/gallium/state_trackers/va/config.c | 12 +++++++++ src/gallium/state_trackers/va/context.c | 2 +- src/gallium/state_trackers/va/va_private.h | 37 ++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/src/gallium/state_trackers/va/config.c b/src/gallium/state_trackers/va/config.c index a9c652b..0060973 100644 --- a/src/gallium/state_trackers/va/config.c +++ b/src/gallium/state_trackers/va/config.c @@ -26,16 +26,28 @@ * **************************************************************************/ +#include "pipe/p_screen.h" + +#include "vl/vl_winsys.h" + #include "va_private.h" VAStatus vlVaQueryConfigProfiles(VADriverContextP ctx, VAProfile *profile_list, int *num_profiles) { + struct pipe_screen *pscreen; + enum pipe_video_profile p; + if (!ctx) return VA_STATUS_ERROR_INVALID_CONTEXT; *num_profiles = 0; + pscreen = VL_VA_PSCREEN(ctx); + for (p = PIPE_VIDEO_PROFILE_MPEG2_SIMPLE; p <= PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH; ++p) + if (pscreen->get_video_param(pscreen, p, PIPE_VIDEO_CAP_SUPPORTED)) + profile_list[(*num_profiles)++] = PipeToProfile(p); + return VA_STATUS_SUCCESS; } diff --git a/src/gallium/state_trackers/va/context.c b/src/gallium/state_trackers/va/context.c index 3e6ca0a..5940422 100644 --- a/src/gallium/state_trackers/va/context.c +++ b/src/gallium/state_trackers/va/context.c @@ -104,7 +104,7 @@ __vaDriverInit_0_32(VADriverContextP ctx) ctx->version_major = 0; ctx->version_minor = 1; *ctx->vtable = vtable; - ctx->max_profiles = 1; + ctx->max_profiles = PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH - PIPE_VIDEO_PROFILE_UNKNOWN; ctx->max_entrypoints = 1; ctx->max_attributes = 1; ctx->max_image_formats = 1; diff --git a/src/gallium/state_trackers/va/va_private.h b/src/gallium/state_trackers/va/va_private.h index adfed8d..5b432a8 100644 --- a/src/gallium/state_trackers/va/va_private.h +++ b/src/gallium/state_trackers/va/va_private.h @@ -29,9 +29,46 @@ #ifndef VA_PRIVATE_H #define VA_PRIVATE_H +#include <assert.h> + #include <va/va.h> #include <va/va_backend.h> +#include "pipe/p_video_enums.h" + +#define VL_VA_DRIVER(ctx) ((vlVaDriver *)ctx->pDriverData) +#define VL_VA_PSCREEN(ctx) (VL_VA_DRIVER(ctx)->vscreen->pscreen) + +static inline VAProfile +PipeToProfile(enum pipe_video_profile profile) +{ + switch (profile) { + case PIPE_VIDEO_PROFILE_MPEG2_SIMPLE: + return VAProfileMPEG2Simple; + case PIPE_VIDEO_PROFILE_MPEG2_MAIN: + return VAProfileMPEG2Main; + case PIPE_VIDEO_PROFILE_MPEG4_SIMPLE: + return VAProfileMPEG4Simple; + case PIPE_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE: + return VAProfileMPEG4AdvancedSimple; + case PIPE_VIDEO_PROFILE_VC1_SIMPLE: + return VAProfileVC1Simple; + case PIPE_VIDEO_PROFILE_VC1_MAIN: + return VAProfileVC1Main; + case PIPE_VIDEO_PROFILE_VC1_ADVANCED: + return VAProfileVC1Advanced; + case PIPE_VIDEO_PROFILE_MPEG4_AVC_BASELINE: + return VAProfileH264Baseline; + case PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN: + return VAProfileH264Main; + case PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH: + return VAProfileH264High; + default: + assert(0); + return -1; + } +} + typedef struct { struct vl_screen *vscreen; } vlVaDriver; -- 1.7.9.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev