Mercurial > ~darius > hgwebdir.cgi > simpletv
diff xv_ext_test.c @ 1:769b155a34f9 SIMPETV_0_1
Initial revision
author | darius |
---|---|
date | Tue, 04 Jan 2005 05:17:43 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xv_ext_test.c Tue Jan 04 05:17:43 2005 +0000 @@ -0,0 +1,120 @@ +#include <stdio.h> +#include <X11/Intrinsic.h> +#include <X11/extensions/Xvlib.h> + +char *XvAdaptorTypeMaskToString( int mask ) +{ + static char buf[160]; + + buf[0] = '\0'; + if ( mask & XvInputMask ) sprintf( buf+strlen(buf), "XvInputMask, " ); + if ( mask & XvOutputMask ) sprintf( buf+strlen(buf), "XvOutputMask, " ); + if ( mask & XvVideoMask ) sprintf( buf+strlen(buf), "XvVideoMask, " ); + if ( mask & XvStillMask ) sprintf( buf+strlen(buf), "XvStillMask, " ); + if ( mask & XvImageMask ) sprintf( buf+strlen(buf), "XvImageMask, " ); + + if ( buf[0] ) + buf[ strlen(buf)-2 ] = '\0'; + return buf; +} + +int main() +{ + Display *display; + XvImageFormatValues *formats; + XvAdaptorInfo *adaptors; + int num_adaptors, num_formats; + int i,j; + unsigned int xv_version, xv_release, xv_request_base, + xv_event_base, xv_error_base; + + display = XOpenDisplay(NULL); + + /* XvQueryVersion */ + if ( XvQueryExtension( display, + &xv_version, &xv_release, &xv_request_base, + &xv_event_base, &xv_error_base ) != Success ) { + fprintf( stderr, "XvQueryExtension failed\n" ); + exit(1); + } + printf( "\nXvQueryExtension():\n" ); + printf( " version = %d, release = %d, request_base = %d,\n", + xv_version, xv_release, xv_request_base ); + printf( " event_base = %d, error_base = %d\n", + xv_event_base, xv_error_base ); + + /* XvQueryAdaptors */ + XvQueryAdaptors( display, DefaultRootWindow(display), &num_adaptors, + &adaptors); + + printf( "\nXvQueryAdaptors():\n" ); + for ( i = 0; i < num_adaptors; i++ ) { + printf( " Adaptor %2d:\n", i ); + printf( " base_id = %ld\n", adaptors[i].base_id ); + printf( " num_ports = %ld\n", adaptors[i].num_ports ); + printf( " type = %d (%s)\n", + adaptors[i].type, + XvAdaptorTypeMaskToString( adaptors[i].type ) ); + printf( " name = %s\n", adaptors[i].name ); + printf( " num_adaptors = %ld\n", adaptors[i].num_adaptors); + printf( " num_formats = %ld\n", adaptors[i].num_formats); + printf( " formats =\n" ); + + for ( j = 0; j < adaptors[i].num_formats; j++ ) + printf( " Format %2d: depth = %.2d, visual_id = 0x%.2lx\n", + j, + adaptors[i].formats[j].depth, + adaptors[i].formats[j].visual_id ); + } + + /* XvListImageFormats */ + printf( "\nXvListImageFormats():\n" ); + for ( i = 0; i < num_adaptors; i++ ) { + printf( " Adaptor %2d:\n", i ); + formats = XvListImageFormats( display, adaptors[i].base_id, + &num_formats ); + printf( " num_formats = %d\n", num_formats ); + for ( j = 0; j < num_formats; j++ ) { + printf( " Format %2d:\n", j ); + printf( " id = %d\n", formats[j].id ); + printf( " type = %d (%s)\n", formats[j].type, + formats[j].type == XvRGB ? "XvRGB" : "XvYUV" ); + printf( " byte_order = %d (%s)\n", + formats[j].byte_order, + formats[j].byte_order == LSBFirst ? "LSBFirst" : "MSBFirst" ); + printf( " guid = %.4s\n", formats[j].guid ); + printf( " bits_per_pixel = %d\n", formats[j].bits_per_pixel ); + printf( " format = %d (%s)\n", formats[j].format, + formats[j].format == XvPacked ? "XvPacked" : "XvPlanar" ); + printf( " num_planes = %d\n", formats[j].num_planes ); + + if ( formats[j].type == XvRGB ) { + printf( " depth = %d\n", formats[j].depth ); + printf( " red_mask = %x\n", formats[j].red_mask ); + printf( " green_mask = %x\n", formats[j].green_mask ); + printf( " blue_mask = %x\n", formats[j].blue_mask ); + } + if ( formats[j].type == XvYUV ) { + printf( " sample_bits (yuv) = ( %d, %d, %d )\n", + formats[j].y_sample_bits, + formats[j].u_sample_bits, + formats[j].v_sample_bits ); + printf( " horz_period (yuv) = ( %d, %d, %d )\n", + formats[j].horz_y_period, + formats[j].horz_u_period, + formats[j].horz_v_period ); + printf( " vert_period = ( %d, %d, %d )\n", + formats[j].vert_y_period, + formats[j].vert_u_period, + formats[j].vert_v_period ); + printf( " component_order = %.32s\n", + formats[j].component_order ); + printf( " scanline_order = %d\n", formats[j].scanline_order ); + } + } + } + + XvFreeAdaptorInfo( adaptors ); + return(0); +} +