summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGwenole Beauchesne <gbeauchesne@splitted-desktop.com>2011-01-27 11:09:31 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2011-01-27 11:36:55 +0800
commit63f851595476ee3b4ad6418bd97672a015750461 (patch)
treee636683c67e556e3124eea5fac347df7f8f79a3b
parentb9c7e24fd79979d7226b0c864c189658dc5c8b8f (diff)
downloadlibva-63f851595476ee3b4ad6418bd97672a015750461.tar.gz
[G45] Fix check for VC-1 decoding support
-rw-r--r--i965_drv_video/i965_drv_video.c31
1 files changed, 15 insertions, 16 deletions
diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c
index f0466ad..1591d68 100644
--- a/i965_drv_video/i965_drv_video.c
+++ b/i965_drv_video/i965_drv_video.c
@@ -48,6 +48,8 @@
#define IMAGE_ID_OFFSET 0x0a000000
#define SUBPIC_ID_OFFSET 0x10000000
+#define HAS_VC1(ctx) (IS_GEN6((ctx)->intel.device_id))
+
enum {
I965_SURFACETYPE_RGBA = 1,
I965_SURFACETYPE_YUV,
@@ -119,7 +121,7 @@ i965_QueryConfigProfiles(VADriverContextP ctx,
VAProfile *profile_list, /* out */
int *num_profiles) /* out */
{
- struct i965_driver_data *i965 = i965_driver_data(ctx);
+ struct i965_driver_data * const i965 = i965_driver_data(ctx);
int i = 0;
profile_list[i++] = VAProfileMPEG2Simple;
@@ -128,7 +130,7 @@ i965_QueryConfigProfiles(VADriverContextP ctx,
profile_list[i++] = VAProfileH264Main;
profile_list[i++] = VAProfileH264High;
- if (IS_GEN6(i965->intel.device_id)) {
+ if (HAS_VC1(i965)) {
profile_list[i++] = VAProfileVC1Simple;
profile_list[i++] = VAProfileVC1Main;
profile_list[i++] = VAProfileVC1Advanced;
@@ -147,39 +149,36 @@ i965_QueryConfigEntrypoints(VADriverContextP ctx,
VAEntrypoint *entrypoint_list, /* out */
int *num_entrypoints) /* out */
{
- VAStatus vaStatus = VA_STATUS_SUCCESS;
+ struct i965_driver_data * const i965 = i965_driver_data(ctx);
+ int n = 0;
switch (profile) {
case VAProfileMPEG2Simple:
case VAProfileMPEG2Main:
- *num_entrypoints = 1;
- entrypoint_list[0] = VAEntrypointVLD;
+ entrypoint_list[n++] = VAEntrypointVLD;
break;
case VAProfileH264Baseline:
case VAProfileH264Main:
case VAProfileH264High:
- *num_entrypoints = 1;
- entrypoint_list[0] = VAEntrypointVLD;
+ entrypoint_list[n++] = VAEntrypointVLD;
break;
case VAProfileVC1Simple:
case VAProfileVC1Main:
case VAProfileVC1Advanced:
- *num_entrypoints = 1;
- entrypoint_list[0] = VAEntrypointVLD;
+ if (HAS_VC1(i965))
+ entrypoint_list[n++] = VAEntrypointVLD;
break;
default:
- vaStatus = VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
- *num_entrypoints = 0;
break;
}
/* If the assert fails then I965_MAX_ENTRYPOINTS needs to be bigger */
- assert(*num_entrypoints <= I965_MAX_ENTRYPOINTS);
-
- return vaStatus;
+ assert(n <= I965_MAX_ENTRYPOINTS);
+ *num_entrypoints = n;
+ return n > 0 ? VA_STATUS_SUCCESS : VA_STATUS_ERROR_UNSUPPORTED_PROFILE;
}
VAStatus
@@ -248,7 +247,7 @@ i965_CreateConfig(VADriverContextP ctx,
int num_attribs,
VAConfigID *config_id) /* out */
{
- struct i965_driver_data *i965 = i965_driver_data(ctx);
+ struct i965_driver_data * const i965 = i965_driver_data(ctx);
struct object_config *obj_config;
int configID;
int i;
@@ -279,7 +278,7 @@ i965_CreateConfig(VADriverContextP ctx,
case VAProfileVC1Simple:
case VAProfileVC1Main:
case VAProfileVC1Advanced:
- if (VAEntrypointVLD == entrypoint) {
+ if (HAS_VC1(i965) && VAEntrypointVLD == entrypoint) {
vaStatus = VA_STATUS_SUCCESS;
} else {
vaStatus = VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT;