Home | History | Annotate | Download | only in vainfo
      1 /*
      2  * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a
      5  * copy of this software and associated documentation files (the
      6  * "Software"), to deal in the Software without restriction, including
      7  * without limitation the rights to use, copy, modify, merge, publish,
      8  * distribute, sub license, and/or sell copies of the Software, and to
      9  * permit persons to whom the Software is furnished to do so, subject to
     10  * the following conditions:
     11  *
     12  * The above copyright notice and this permission notice (including the
     13  * next paragraph) shall be included in all copies or substantial portions
     14  * of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
     20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     23  */
     24 
     25 #include "sysdeps.h"
     26 #include <stdarg.h>
     27 #include <stdio.h>
     28 #include <string.h>
     29 #include <stdlib.h>
     30 #include "va_display.h"
     31 
     32 #define CHECK_VASTATUS(va_status,func, ret)                             \
     33 if (va_status != VA_STATUS_SUCCESS) {                                   \
     34     fprintf(stderr,"%s failed with error code %d (%s),exit\n",func, va_status, vaErrorStr(va_status)); \
     35     ret_val = ret;                                                      \
     36     goto error;                                                         \
     37 }
     38 
     39 static char * profile_string(VAProfile profile)
     40 {
     41     switch (profile) {
     42             case VAProfileNone: return "VAProfileNone";
     43             case VAProfileMPEG2Simple: return "VAProfileMPEG2Simple";
     44             case VAProfileMPEG2Main: return "VAProfileMPEG2Main";
     45             case VAProfileMPEG4Simple: return "VAProfileMPEG4Simple";
     46             case VAProfileMPEG4AdvancedSimple: return "VAProfileMPEG4AdvancedSimple";
     47             case VAProfileMPEG4Main: return "VAProfileMPEG4Main";
     48             case VAProfileH264Baseline: return "VAProfileH264Baseline";
     49             case VAProfileH264Main: return "VAProfileH264Main";
     50             case VAProfileH264High: return "VAProfileH264High";
     51             case VAProfileVC1Simple: return "VAProfileVC1Simple";
     52             case VAProfileVC1Main: return "VAProfileVC1Main";
     53             case VAProfileVC1Advanced: return "VAProfileVC1Advanced";
     54             case VAProfileH263Baseline: return "VAProfileH263Baseline";
     55             case VAProfileH264ConstrainedBaseline: return "VAProfileH264ConstrainedBaseline";
     56             case VAProfileJPEGBaseline: return "VAProfileJPEGBaseline";
     57             case VAProfileH264MultiviewHigh: return "VAProfileH264MultiviewHigh";
     58             case VAProfileH264StereoHigh: return "VAProfileH264StereoHigh";
     59             case VAProfileVP8Version0_3: return "VAProfileVP8Version0_3";
     60 
     61             default:
     62                 break;
     63     }
     64     return "<unknown profile>";
     65 }
     66 
     67 
     68 static char * entrypoint_string(VAEntrypoint entrypoint)
     69 {
     70     switch (entrypoint) {
     71             case VAEntrypointVLD:return "VAEntrypointVLD";
     72             case VAEntrypointIZZ:return "VAEntrypointIZZ";
     73             case VAEntrypointIDCT:return "VAEntrypointIDCT";
     74             case VAEntrypointMoComp:return "VAEntrypointMoComp";
     75             case VAEntrypointDeblocking:return "VAEntrypointDeblocking";
     76             case VAEntrypointEncSlice:return "VAEntrypointEncSlice";
     77             case VAEntrypointEncPicture:return "VAEntrypointEncPicture";
     78             case VAEntrypointVideoProc:return "VAEntrypointVideoProc";
     79             default:
     80                 break;
     81     }
     82     return "<unknown entrypoint>";
     83 }
     84 
     85 int main(int argc, const char* argv[])
     86 {
     87   VADisplay va_dpy;
     88   VAStatus va_status;
     89   int major_version, minor_version;
     90   const char *driver;
     91   const char *name = strrchr(argv[0], '/');
     92   VAProfile profile, *profile_list = NULL;
     93   int num_profiles, max_num_profiles, i;
     94   VAEntrypoint entrypoint, entrypoints[10];
     95   int num_entrypoint;
     96   int ret_val = 0;
     97 
     98   if (name)
     99       name++;
    100   else
    101       name = argv[0];
    102 
    103   va_dpy = va_open_display();
    104   if (NULL == va_dpy)
    105   {
    106       fprintf(stderr, "%s: vaGetDisplay() failed\n", name);
    107       return 2;
    108   }
    109 
    110   va_status = vaInitialize(va_dpy, &major_version, &minor_version);
    111   CHECK_VASTATUS(va_status, "vaInitialize", 3);
    112 
    113   printf("%s: VA-API version: %d.%d (libva %s)\n",
    114          name, major_version, minor_version, LIBVA_VERSION_S);
    115 
    116   driver = vaQueryVendorString(va_dpy);
    117   printf("%s: Driver version: %s\n", name, driver ? driver : "<unknown>");
    118 
    119   printf("%s: Supported profile and entrypoints\n", name);
    120   max_num_profiles = vaMaxNumProfiles(va_dpy);
    121   profile_list = malloc(max_num_profiles * sizeof(VAProfile));
    122 
    123   if (!profile_list) {
    124       printf("Failed to allocate memory for profile list\n");
    125       ret_val = 5;
    126       goto error;
    127   }
    128 
    129   va_status = vaQueryConfigProfiles(va_dpy, profile_list, &num_profiles);
    130   CHECK_VASTATUS(va_status, "vaQueryConfigProfiles", 6);
    131 
    132   for (i = 0; i < num_profiles; i++) {
    133       char *profile_str;
    134 
    135       profile = profile_list[i];
    136       va_status = vaQueryConfigEntrypoints(va_dpy, profile, entrypoints,
    137                                            &num_entrypoint);
    138       if (va_status == VA_STATUS_ERROR_UNSUPPORTED_PROFILE)
    139 	continue;
    140 
    141       CHECK_VASTATUS(va_status, "vaQueryConfigEntrypoints", 4);
    142 
    143       profile_str = profile_string(profile);
    144       for (entrypoint = 0; entrypoint < num_entrypoint; entrypoint++)
    145           printf("      %-32s:	%s\n", profile_str, entrypoint_string(entrypoints[entrypoint]));
    146   }
    147 
    148 error:
    149   free(profile_list);
    150   vaTerminate(va_dpy);
    151   va_close_display(va_dpy);
    152 
    153   return ret_val;
    154 }
    155