diff -Nru libva-0.31.0+latest1/configure.ac libva-0.31.0+latest2/configure.ac --- libva-0.31.0+latest1/configure.ac 2010-02-12 14:42:12.000000000 +0000 +++ libva-0.31.0+latest2/configure.ac 2010-03-18 08:39:39.000000000 +0000 @@ -116,9 +116,9 @@ AC_OUTPUT([ Makefile - src/Makefile - src/va_version.h - src/x11/Makefile + va/Makefile + va/va_version.h + va/x11/Makefile dummy_drv_video/Makefile i965_drv_video/Makefile i965_drv_video/shaders/Makefile diff -Nru libva-0.31.0+latest1/debian/changelog libva-0.31.0+latest2/debian/changelog --- libva-0.31.0+latest1/debian/changelog 2010-03-24 02:00:32.000000000 +0000 +++ libva-0.31.0+latest2/debian/changelog 2010-03-24 02:00:33.000000000 +0000 @@ -1,8 +1,23 @@ -libva (0.31.0+latest1-1+sds10~multimediappa1) karmic; urgency=low +libva (0.31.0+latest2-1+sds11~multimediappa1) karmic; urgency=low - * New upstream release. + * New upstream release. Altered packaging scripts once again to enable + Intel i965_drv_video.so. - -- Brandon Snider Mon, 01 Mar 2010 20:58:34 -0500 + -- Brandon Snider Tue, 23 Mar 2010 21:44:57 -0400 + +libva (0.31.0-1+sds11) hardy; urgency=low + + * G45 updates: + - Add vaDeriveImage(). + - Fix YV12 image format. + * OpenGL extensions updates: + - Dynamically allocate VA/GLX vtable. + - Fix display context destruction chain. + * Upgrade to GIT snapshot 2010/03/08: + - Merge SDS patches 010, 320. + - Fix test/encode/h264encode.c issue. + + -- Gwenole Beauchesne Fri, 26 Feb 2010 10:26:13 +0000 libva (0.31.0-1+sds10) hardy; urgency=low diff -Nru libva-0.31.0+latest1/debian/control libva-0.31.0+latest2/debian/control --- libva-0.31.0+latest1/debian/control 2010-03-24 02:00:32.000000000 +0000 +++ libva-0.31.0+latest2/debian/control 2010-03-24 02:00:33.000000000 +0000 @@ -16,7 +16,7 @@ Package: libva-dev Section: libdevel -Architecture: any +Architecture: i386 amd64 Depends: libva1 (= ${binary:Version}), libdrm-dev, pkg-config @@ -41,7 +41,7 @@ Package: libva1-dbg Section: libdevel -Architecture: any +Architecture: i386 amd64 Depends: libva1 (= ${Source-Version}) Description: Video Acceleration (VA) API for Linux -- runtime The libva library implements the Video Acceleration (VA) API for Linux. diff -Nru libva-0.31.0+latest1/debian/patches/010_fix_putsurface_test.patch libva-0.31.0+latest2/debian/patches/010_fix_putsurface_test.patch --- libva-0.31.0+latest1/debian/patches/010_fix_putsurface_test.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/010_fix_putsurface_test.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,19 +0,0 @@ -commit b6e043b47d0bf52000809e335c7493a9d6463ab6 -Author: Gwenole Beauchesne -Date: Fri Feb 12 11:56:02 2010 +0000 - - Add missing libs (pthreads). - -diff --git a/test/putsurface/Makefile.am b/test/putsurface/Makefile.am -index c3aa2d7..b0e20ba 100644 ---- a/test/putsurface/Makefile.am -+++ b/test/putsurface/Makefile.am -@@ -24,7 +24,7 @@ bin_PROGRAMS = putsurface - - AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/x11 -DIN_LIBVA - --TEST_LIBS = $(top_srcdir)/src/$(libvabackendlib) -+TEST_LIBS = $(top_srcdir)/src/$(libvabackendlib) -lpthread - - putsurface_LDADD = $(TEST_LIBS) - putsurface_SOURCES = putsurface.c diff -Nru libva-0.31.0+latest1/debian/patches/032_g45_fix_subpic_formats.patch libva-0.31.0+latest2/debian/patches/032_g45_fix_subpic_formats.patch --- libva-0.31.0+latest1/debian/patches/032_g45_fix_subpic_formats.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/032_g45_fix_subpic_formats.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit 2d35900ba8055ad2d4e80964ea22fa99f42bbdc3 +commit d6e726b80766c669dffe846fcd31fcfe5dc89847 Author: Gwenole Beauchesne Date: Wed Nov 4 12:13:41 2009 +0000 [G45] Fix subpictures formats array terminator. diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c -index 8f4bfc1..943083c 100644 +index 6a60ecc..e476ca2 100644 --- a/i965_drv_video/i965_drv_video.c +++ b/i965_drv_video/i965_drv_video.c @@ -76,7 +76,7 @@ static const i965_subpic_format_map_t * diff -Nru libva-0.31.0+latest1/debian/patches/033_g45_add_rgba_subpic.patch libva-0.31.0+latest2/debian/patches/033_g45_add_rgba_subpic.patch --- libva-0.31.0+latest1/debian/patches/033_g45_add_rgba_subpic.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/033_g45_add_rgba_subpic.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit 541cb7b8c239100ad2a3b86926be8c455a1ec912 +commit 98edda85a2d734763a5f40478a063d3e289e1389 Author: Gwenole Beauchesne Date: Wed Nov 4 10:56:54 2009 +0000 [G45] Add RGBA subpictures. diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c -index 943083c..1f026bc 100644 +index e476ca2..637e304 100644 --- a/i965_drv_video/i965_drv_video.c +++ b/i965_drv_video/i965_drv_video.c @@ -70,6 +70,14 @@ i965_subpic_formats_map[I965_MAX_SUBPIC_FORMATS + 1] = { @@ -48,10 +48,10 @@ goto error; } diff --git a/i965_drv_video/i965_drv_video.h b/i965_drv_video/i965_drv_video.h -index c95c799..4d775da 100644 +index fa09869..2f538c2 100644 --- a/i965_drv_video/i965_drv_video.h +++ b/i965_drv_video/i965_drv_video.h -@@ -42,7 +42,7 @@ +@@ -44,7 +44,7 @@ #define I965_MAX_ENTRYPOINTS 5 #define I965_MAX_CONFIG_ATTRIBUTES 10 #define I965_MAX_IMAGE_FORMATS 10 @@ -60,7 +60,7 @@ #define I965_MAX_DISPLAY_ATTRIBUTES 4 #define I965_STR_VENDOR "i965 Driver 0.1" -@@ -124,6 +124,7 @@ struct object_subpic +@@ -126,6 +126,7 @@ struct object_subpic unsigned int format; int width; int height; @@ -69,10 +69,10 @@ }; diff --git a/i965_drv_video/i965_render.c b/i965_drv_video/i965_render.c -index f3e89c2..7754ee5 100644 +index 4a4f041..c738d22 100644 --- a/i965_drv_video/i965_render.c +++ b/i965_drv_video/i965_render.c -@@ -586,7 +586,7 @@ i965_subpic_render_src_surface_state(VADriverContextP ctx, +@@ -587,7 +587,7 @@ i965_subpic_render_src_surface_state(VADriverContextP ctx, int index, dri_bo *region, unsigned long offset, @@ -81,7 +81,7 @@ { struct i965_driver_data *i965 = i965_driver_data(ctx); struct i965_render_state *render_state = &i965->render_state; -@@ -620,7 +620,7 @@ i965_subpic_render_src_surface_state(VADriverContextP ctx, +@@ -621,7 +621,7 @@ i965_subpic_render_src_surface_state(VADriverContextP ctx, ss->ss2.mip_count = 0; ss->ss2.render_target_rotation = 0; @@ -90,7 +90,7 @@ dri_bo_emit_reloc(ss_bo, I915_GEM_DOMAIN_SAMPLER, 0, -@@ -678,8 +678,8 @@ i965_subpic_render_src_surfaces_state(VADriverContextP ctx, +@@ -679,8 +679,8 @@ i965_subpic_render_src_surfaces_state(VADriverContextP ctx, region = obj_surface->bo; subpic_region = obj_image->bo; /*subpicture surface*/ diff -Nru libva-0.31.0+latest1/debian/patches/034_g45_fix_return_for_unimpl.patch libva-0.31.0+latest2/debian/patches/034_g45_fix_return_for_unimpl.patch --- libva-0.31.0+latest1/debian/patches/034_g45_fix_return_for_unimpl.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/034_g45_fix_return_for_unimpl.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit a4e38a11b8e0398e40025bb1951397b92b26917a +commit ff263433c32aac08574b58b26f3f4be7abe05bdf Author: Gwenole Beauchesne Date: Wed Nov 4 13:23:40 2009 +0000 [G45] Don't return VA_STATUS_SUCCESS for unimplemented functions. diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c -index 1f026bc..5ad9922 100644 +index 637e304..9e8502a 100644 --- a/i965_drv_video/i965_drv_video.c +++ b/i965_drv_video/i965_drv_video.c @@ -496,7 +496,8 @@ i965_SetSubpictureImage(VADriverContextP ctx, diff -Nru libva-0.31.0+latest1/debian/patches/035_g45_add_yv12_image_format.patch libva-0.31.0+latest2/debian/patches/035_g45_add_yv12_image_format.patch --- libva-0.31.0+latest1/debian/patches/035_g45_add_yv12_image_format.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/035_g45_add_yv12_image_format.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit e0dc4a359ee86646de9f536cd3eab5e20628049d +commit c5cb995d6cd49f5f2988b1721cb6b5da8a9b2c09 Author: Gwenole Beauchesne Date: Wed Nov 4 13:01:44 2009 +0000 [G45] Add YV12 image format. diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c -index 5ad9922..270f544 100644 +index 9e8502a..6488570 100644 --- a/i965_drv_video/i965_drv_video.c +++ b/i965_drv_video/i965_drv_video.c @@ -54,6 +54,36 @@ enum { @@ -72,19 +72,19 @@ + image->pitches[0] = width; + image->offsets[0] = 0; + image->pitches[1] = width2; -+ image->offsets[1] = size; ++ image->offsets[1] = size + size2; + image->pitches[2] = width2; -+ image->offsets[2] = size + size2; ++ image->offsets[2] = size; + image->data_size = size + 2 * size2; + break; default: goto error; } diff --git a/i965_drv_video/i965_drv_video.h b/i965_drv_video/i965_drv_video.h -index 4d775da..f512793 100644 +index 2f538c2..be253ed 100644 --- a/i965_drv_video/i965_drv_video.h +++ b/i965_drv_video/i965_drv_video.h -@@ -41,7 +41,7 @@ +@@ -43,7 +43,7 @@ #define I965_MAX_PROFILES 11 #define I965_MAX_ENTRYPOINTS 5 #define I965_MAX_CONFIG_ATTRIBUTES 10 diff -Nru libva-0.31.0+latest1/debian/patches/036_g45_add_vaGetImage.patch libva-0.31.0+latest2/debian/patches/036_g45_add_vaGetImage.patch --- libva-0.31.0+latest1/debian/patches/036_g45_add_vaGetImage.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/036_g45_add_vaGetImage.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit cf8709fcdb0e24bde815b601a047e77118c62b40 +commit c833a4ef4efa20ab8df18d13bdab1e5c5e4671a8 Author: Gwenole Beauchesne Date: Wed Nov 4 13:16:34 2009 +0000 [G45] Implement vaGetImage() for full-sized surface readback. diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c -index 270f544..d8a7bd1 100644 +index ebaf1ae..59ebdd7 100644 --- a/i965_drv_video/i965_drv_video.c +++ b/i965_drv_video/i965_drv_video.c @@ -1392,7 +1392,50 @@ i965_GetImage(VADriverContextP ctx, diff -Nru libva-0.31.0+latest1/debian/patches/037_g45_add_vaPutImage.patch libva-0.31.0+latest2/debian/patches/037_g45_add_vaPutImage.patch --- libva-0.31.0+latest1/debian/patches/037_g45_add_vaPutImage.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/037_g45_add_vaPutImage.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit acc1d0340ec1f4501543caf70305129699267b90 +commit c00ac73b0fa1f5c4ff9cdc76b7556c5db03c5335 Author: Gwenole Beauchesne Date: Wed Nov 4 13:36:39 2009 +0000 [G45] Implement vaPutImage() for full-sized surface uploads. diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c -index d8a7bd1..e8f638c 100644 +index 59ebdd7..5c15439 100644 --- a/i965_drv_video/i965_drv_video.c +++ b/i965_drv_video/i965_drv_video.c @@ -443,22 +443,6 @@ i965_QueryImageFormats(VADriverContextP ctx, diff -Nru libva-0.31.0+latest1/debian/patches/038_g45_vaPutSurface_cliprects.patch libva-0.31.0+latest2/debian/patches/038_g45_vaPutSurface_cliprects.patch --- libva-0.31.0+latest1/debian/patches/038_g45_vaPutSurface_cliprects.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/038_g45_vaPutSurface_cliprects.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit 7b5ec33c784e22fc03ac5365fe29deef6920c287 +commit ab248483d89c6cf7beb7a3a87c9b9a55464023cc Author: Gwenole Beauchesne Date: Wed Nov 4 17:34:53 2009 +0000 [G45] Handle cliprects in vaPutSurface(). diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c -index e8f638c..20d6bab 100644 +index 5c15439..d4ad6e1 100644 --- a/i965_drv_video/i965_drv_video.c +++ b/i965_drv_video/i965_drv_video.c @@ -1507,13 +1507,23 @@ i965_PutSurface(VADriverContextP ctx, @@ -69,10 +69,10 @@ } diff --git a/i965_drv_video/i965_render.c b/i965_drv_video/i965_render.c -index 7754ee5..549e3e8 100644 +index c738d22..301d51d 100644 --- a/i965_drv_video/i965_render.c +++ b/i965_drv_video/i965_render.c -@@ -787,13 +787,81 @@ i965_render_binding_table(VADriverContextP ctx) +@@ -788,13 +788,81 @@ i965_render_binding_table(VADriverContextP ctx) dri_bo_unmap(render_state->wm.binding_table); } @@ -158,7 +158,7 @@ struct object_surface *obj_surface = SURFACE(surface); struct object_subpic *obj_subpic = SUBPIC(obj_surface->subpic); -@@ -803,8 +871,6 @@ i965_subpic_render_upload_vertex(VADriverContextP ctx, +@@ -804,8 +872,6 @@ i965_subpic_render_upload_vertex(VADriverContextP ctx, const float ssy = (float)output_rect->height / (float)obj_surface->height; const float sx = psx * ssx; const float sy = psy * ssy; @@ -167,7 +167,7 @@ VARectangle dst_rect; dst_rect.x = output_rect->x + sx * (float)obj_subpic->dst_rect.x; -@@ -812,106 +878,38 @@ i965_subpic_render_upload_vertex(VADriverContextP ctx, +@@ -813,106 +879,38 @@ i965_subpic_render_upload_vertex(VADriverContextP ctx, dst_rect.width = sx * (float)obj_subpic->dst_rect.width; dst_rect.height = sy * (float)obj_subpic->dst_rect.height; @@ -296,7 +296,7 @@ { i965_render_vs_unit(ctx); i965_render_sf_unit(ctx); -@@ -922,21 +920,17 @@ i965_surface_render_state_setup(VADriverContextP ctx, +@@ -923,21 +921,17 @@ i965_surface_render_state_setup(VADriverContextP ctx, i965_render_cc_viewport(ctx); i965_render_cc_unit(ctx); i965_render_binding_table(ctx); @@ -327,7 +327,7 @@ { i965_render_vs_unit(ctx); i965_render_sf_unit(ctx); -@@ -947,16 +941,10 @@ i965_subpic_render_state_setup(VADriverContextP ctx, +@@ -948,16 +942,10 @@ i965_subpic_render_state_setup(VADriverContextP ctx, i965_render_cc_viewport(ctx); i965_subpic_render_cc_unit(ctx); i965_render_binding_table(ctx); @@ -346,7 +346,7 @@ static void i965_render_pipeline_select(VADriverContextP ctx) { -@@ -1192,7 +1180,7 @@ i965_render_upload_image_palette( +@@ -1193,7 +1181,7 @@ i965_render_upload_image_palette( } static void @@ -355,7 +355,7 @@ { struct i965_driver_data *i965 = i965_driver_data(ctx); struct i965_render_state *render_state = &i965->render_state; -@@ -1203,7 +1191,7 @@ i965_render_startup(VADriverContextP ctx) +@@ -1204,7 +1192,7 @@ i965_render_startup(VADriverContextP ctx) (0 << VB0_BUFFER_INDEX_SHIFT) | VB0_VERTEXDATA | ((4 * 4) << VB0_BUFFER_PITCH_SHIFT)); @@ -364,7 +364,7 @@ if (IS_IGDNG(i965->intel.device_id)) OUT_RELOC(ctx, render_state->vb.vertex_buffer, I915_GEM_DOMAIN_VERTEX, 0, 12 * 4); -@@ -1268,8 +1256,10 @@ i965_clear_dest_region(VADriverContextP ctx) +@@ -1269,8 +1257,10 @@ i965_clear_dest_region(VADriverContextP ctx) } static void @@ -376,7 +376,7 @@ intel_batchbuffer_start_atomic(ctx, 0x1000); intel_batchbuffer_emit_mi_flush(ctx); i965_clear_dest_region(ctx); -@@ -1283,13 +1273,16 @@ i965_surface_render_pipeline_setup(VADriverContextP ctx) +@@ -1284,13 +1274,16 @@ i965_surface_render_pipeline_setup(VADriverContextP ctx) i965_render_cs_urb_layout(ctx); i965_render_drawing_rectangle(ctx); i965_render_vertex_elements(ctx); @@ -395,7 +395,7 @@ intel_batchbuffer_start_atomic(ctx, 0x1000); intel_batchbuffer_emit_mi_flush(ctx); i965_render_pipeline_select(ctx); -@@ -1302,7 +1295,8 @@ i965_subpic_render_pipeline_setup(VADriverContextP ctx) +@@ -1303,7 +1296,8 @@ i965_subpic_render_pipeline_setup(VADriverContextP ctx) i965_render_cs_urb_layout(ctx); i965_render_drawing_rectangle(ctx); i965_render_vertex_elements(ctx); @@ -405,7 +405,7 @@ intel_batchbuffer_end_atomic(ctx); } -@@ -1396,45 +1390,39 @@ i965_render_initialize(VADriverContextP ctx) +@@ -1397,45 +1391,39 @@ i965_render_initialize(VADriverContextP ctx) void i965_render_put_surface(VADriverContextP ctx, VASurfaceID surface, diff -Nru libva-0.31.0+latest1/debian/patches/039_g45_add_vaDeriveImage.patch libva-0.31.0+latest2/debian/patches/039_g45_add_vaDeriveImage.patch --- libva-0.31.0+latest1/debian/patches/039_g45_add_vaDeriveImage.patch 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/debian/patches/039_g45_add_vaDeriveImage.patch 2010-03-24 02:00:33.000000000 +0000 @@ -0,0 +1,305 @@ +commit 962608d194ad59b8dc8d62ac1d69d9d5df033aa4 +Author: Gwenole Beauchesne +Date: Mon Mar 8 17:22:06 2010 +0100 + + [G45] Implement vaDeriveImage(). + +diff --git a/i965_drv_video/i965_drv_video.c b/i965_drv_video/i965_drv_video.c +index eb3b49d..c349895 100644 +--- a/i965_drv_video/i965_drv_video.c ++++ b/i965_drv_video/i965_drv_video.c +@@ -336,12 +336,27 @@ VAStatus i965_QueryConfigAttributes(VADriverContextP ctx, + return vaStatus; + } + ++static struct object_image * ++i965_CreateImage_impl( ++ VADriverContextP ctx, ++ const VAImageFormat *format, ++ unsigned int width, ++ unsigned int height, ++ VASurfaceID surface ++); ++ ++static void ++i965_DestroyImage_impl( ++ VADriverContextP ctx, ++ struct object_image *obj_image, ++ int from_surface ++); ++ + static void + i965_destroy_surface(struct object_heap *heap, struct object_base *obj) + { + struct object_surface *obj_surface = (struct object_surface *)obj; + +- dri_bo_unreference(obj_surface->bo); + obj_surface->bo = NULL; + object_heap_free(heap, obj); + } +@@ -358,6 +373,13 @@ i965_CreateSurfaces(VADriverContextP ctx, + int i; + VAStatus vaStatus = VA_STATUS_SUCCESS; + ++ /* Internal format: linear I420 (compatible with YV12 VA image) */ ++ static const VAImageFormat vaFormat = { ++ .fourcc = VA_FOURCC('Y','V','1','2'), ++ .byte_order = VA_LSB_FIRST, ++ .bits_per_pixel = 12 ++ }; ++ + /* We only support one format */ + if (VA_RT_FORMAT_YUV420 != format) { + return VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT; +@@ -366,28 +388,36 @@ i965_CreateSurfaces(VADriverContextP ctx, + for (i = 0; i < num_surfaces; i++) { + int surfaceID = NEW_SURFACE_ID(); + struct object_surface *obj_surface = SURFACE(surfaceID); ++ struct object_image *obj_image; ++ struct object_buffer *obj_buffer; + + if (NULL == obj_surface) { + vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; + break; + } + ++ obj_image = i965_CreateImage_impl(ctx, &vaFormat, width, height, surfaceID); ++ if (!obj_image) { ++ vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; ++ break; ++ } ++ ++ obj_buffer = BUFFER(obj_image->image.buf); ++ if (!obj_buffer) { ++ vaStatus = VA_STATUS_ERROR_ALLOCATION_FAILED; ++ break; ++ } ++ assert(obj_buffer->buffer_store); ++ + surfaces[i] = surfaceID; + obj_surface->status = VASurfaceReady; + obj_surface->subpic = VA_INVALID_ID; + obj_surface->width = width; + obj_surface->height = height; + obj_surface->size = SIZE_YUV420(width, height); +- obj_surface->bo = dri_bo_alloc(i965->intel.bufmgr, +- "vaapi surface", +- obj_surface->size, +- 64); +- +- assert(obj_surface->bo); +- if (NULL == obj_surface->bo) { +- vaStatus = VA_STATUS_ERROR_UNKNOWN; +- break; +- } ++ obj_surface->image = obj_image->image; ++ obj_surface->is_derived = 0; ++ obj_surface->bo = obj_buffer->buffer_store->bo; + } + + /* Error recovery */ +@@ -417,6 +447,7 @@ i965_DestroySurfaces(VADriverContextP ctx, + struct object_surface *obj_surface = SURFACE(surface_list[i]); + + assert(obj_surface); ++ i965_DestroyImage_impl(ctx, IMAGE(obj_surface->image.image_id), 1); + i965_destroy_surface(&i965->surface_heap, (struct object_base *)obj_surface); + } + +@@ -1200,29 +1231,28 @@ i965_destroy_heap(struct object_heap *heap, + VAStatus + i965_DestroyImage(VADriverContextP ctx, VAImageID image); + +-VAStatus +-i965_CreateImage(VADriverContextP ctx, +- VAImageFormat *format, +- int width, +- int height, +- VAImage *out_image) /* out */ ++static struct object_image * ++i965_CreateImage_impl( ++ VADriverContextP ctx, ++ const VAImageFormat *format, ++ unsigned int width, ++ unsigned int height, ++ VASurfaceID surface ++) + { + struct i965_driver_data *i965 = i965_driver_data(ctx); + struct object_image *obj_image; +- VAStatus va_status = VA_STATUS_ERROR_OPERATION_FAILED; + VAImageID image_id; + unsigned int width2, height2, size2, size; + +- out_image->image_id = VA_INVALID_ID; +- out_image->buf = VA_INVALID_ID; +- + image_id = NEW_IMAGE_ID(); + if (image_id == VA_INVALID_ID) +- return VA_STATUS_ERROR_ALLOCATION_FAILED; ++ return NULL; + + obj_image = IMAGE(image_id); + if (!obj_image) +- return VA_STATUS_ERROR_ALLOCATION_FAILED; ++ return NULL; ++ obj_image->surface = VA_INVALID_ID; + obj_image->bo = NULL; + obj_image->palette = NULL; + +@@ -1275,9 +1305,9 @@ i965_CreateImage(VADriverContextP ctx, + goto error; + } + +- va_status = i965_CreateBuffer(ctx, 0, VAImageBufferType, +- image->data_size, 1, NULL, &image->buf); +- if (va_status != VA_STATUS_SUCCESS) ++ if (i965_CreateBuffer(ctx, 0, VAImageBufferType, ++ image->data_size, 1, NULL, ++ &image->buf) != VA_STATUS_SUCCESS) + goto error; + + obj_image->bo = BUFFER(image->buf)->buffer_store->bo; +@@ -1292,21 +1322,47 @@ i965_CreateImage(VADriverContextP ctx, + image->format = *format; + image->width = width; + image->height = height; +- +- *out_image = *image; +- return VA_STATUS_SUCCESS; ++ return obj_image; + + error: +- i965_DestroyImage(ctx, image_id); +- return va_status; ++ i965_DestroyImage_impl(ctx, obj_image, 0); ++ return NULL; ++} ++ ++VAStatus ++i965_CreateImage(VADriverContextP ctx, ++ VAImageFormat *format, ++ int width, ++ int height, ++ VAImage *out_image) /* out */ ++{ ++ struct object_image *obj_image; ++ ++ obj_image = i965_CreateImage_impl(ctx, format, width, height, VA_INVALID_ID); ++ if (!obj_image) ++ return VA_STATUS_ERROR_ALLOCATION_FAILED; ++ ++ *out_image = obj_image->image; ++ return VA_STATUS_SUCCESS; + } + + VAStatus i965_DeriveImage(VADriverContextP ctx, + VASurfaceID surface, + VAImage *image) /* out */ + { +- /* TODO */ +- return VA_STATUS_ERROR_OPERATION_FAILED; ++ struct i965_driver_data *i965 = i965_driver_data(ctx); ++ ++ struct object_surface *obj_surface = SURFACE(surface); ++ if (!obj_surface) ++ return VA_STATUS_ERROR_INVALID_SURFACE; ++ ++ struct object_image *obj_image = IMAGE(obj_surface->image.image_id); ++ if (!obj_image) ++ return VA_STATUS_ERROR_INVALID_IMAGE; ++ ++ obj_surface->is_derived = 1; ++ *image = obj_surface->image; ++ return VA_STATUS_SUCCESS; + } + + static void +@@ -1315,15 +1371,24 @@ i965_destroy_image(struct object_heap *heap, struct object_base *obj) + object_heap_free(heap, obj); + } + +- +-VAStatus +-i965_DestroyImage(VADriverContextP ctx, VAImageID image) ++static void ++i965_DestroyImage_impl( ++ VADriverContextP ctx, ++ struct object_image *obj_image, ++ int from_surface ++) + { +- struct i965_driver_data *i965 = i965_driver_data(ctx); +- struct object_image *obj_image = IMAGE(image); ++ struct i965_driver_data * const i965 = i965_driver_data(ctx); + + if (!obj_image) +- return VA_STATUS_SUCCESS; ++ return; ++ ++ if (!from_surface && obj_image->surface != VA_INVALID_ID) { ++ /* only destroy when called from vaDestroySurfaces() */ ++ struct object_surface *obj_surface = SURFACE(obj_image->surface); ++ obj_surface->is_derived = 0; ++ return; ++ } + + if (obj_image->image.buf != VA_INVALID_ID) { + i965_DestroyBuffer(ctx, obj_image->image.buf); +@@ -1336,6 +1401,15 @@ i965_DestroyImage(VADriverContextP ctx, VAImageID image) + } + + i965_destroy_image(&i965->image_heap, (struct object_base *)obj_image); ++} ++ ++VAStatus ++i965_DestroyImage(VADriverContextP ctx, VAImageID image) ++{ ++ struct i965_driver_data *i965 = i965_driver_data(ctx); ++ struct object_image *obj_image = IMAGE(image); ++ ++ i965_DestroyImage_impl(ctx, obj_image, 0); + + return VA_STATUS_SUCCESS; + } +@@ -1382,6 +1456,9 @@ i965_GetImage(VADriverContextP ctx, + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + ++ if (obj_surface->is_derived) ++ return VA_STATUS_ERROR_SURFACE_BUSY; ++ + struct object_image *obj_image = IMAGE(image); + if (!obj_image) + return VA_STATUS_ERROR_INVALID_IMAGE; +@@ -1441,6 +1518,9 @@ i965_PutImage(VADriverContextP ctx, + if (!obj_surface) + return VA_STATUS_ERROR_INVALID_SURFACE; + ++ if (obj_surface->is_derived) ++ return VA_STATUS_ERROR_SURFACE_BUSY; ++ + struct object_image *obj_image = IMAGE(image); + if (!obj_image) + return VA_STATUS_ERROR_INVALID_IMAGE; +diff --git a/i965_drv_video/i965_drv_video.h b/i965_drv_video/i965_drv_video.h +index be253ed..7f410ab 100644 +--- a/i965_drv_video/i965_drv_video.h ++++ b/i965_drv_video/i965_drv_video.h +@@ -96,6 +96,8 @@ struct object_surface + int width; + int height; + int size; ++ VAImage image; ++ int is_derived; + dri_bo *bo; + }; + +@@ -113,6 +115,7 @@ struct object_image + { + struct object_base base; + VAImage image; ++ VASurfaceID surface; + dri_bo *bo; + unsigned int *palette; + }; diff -Nru libva-0.31.0+latest1/debian/patches/102_attribute_visibility.patch libva-0.31.0+latest2/debian/patches/102_attribute_visibility.patch --- libva-0.31.0+latest1/debian/patches/102_attribute_visibility.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/102_attribute_visibility.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit 92daf3a3b6b35791391ad30f52bdf51d4395fdc9 +commit 26db277f8e028be83d9ab16ef8e4077e9f745c17 Author: Gwenole Beauchesne Date: Thu Sep 3 15:46:37 2009 +0000 Check for __attribute__((visibility("hidden"))). diff --git a/configure.ac b/configure.ac -index 088415f..94ceefd 100644 +index eedfe4c..f2d0ea4 100644 --- a/configure.ac +++ b/configure.ac @@ -100,6 +100,30 @@ if test x$enable_i965_driver = xyes && ! $PKG_CONFIG --atleast-version=2.4 libdr diff -Nru libva-0.31.0+latest1/debian/patches/103_fix_vainfo_deps.patch libva-0.31.0+latest2/debian/patches/103_fix_vainfo_deps.patch --- libva-0.31.0+latest1/debian/patches/103_fix_vainfo_deps.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/103_fix_vainfo_deps.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,22 +1,22 @@ -commit 2ee4b9353562dda501a130e1426b9f8a6dbaeb61 +commit a07468c4f0e30b5f207a2bdf1b362f5584d748a7 Author: Gwenole Beauchesne Date: Tue Sep 22 12:29:56 2009 +0000 Fix vainfo dependencies (Konstantin Pavlov). diff --git a/test/Makefile.am b/test/Makefile.am -index 5734226..2c61ba8 100644 +index d7e1b1f..8785259 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -25,9 +25,8 @@ bin_PROGRAMS = vainfo - AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/test/basic -I$(top_srcdir)/src/x11 -DIN_LIBVA + AM_CFLAGS = -I$(top_srcdir)/va -I$(top_srcdir)/test/basic -I$(top_srcdir)/src/x11 - --vainfo_LDADD = $(top_srcdir)/src/$(libvabackendlib) --vainfo_DEPENDENCIES = $(top_srcdir)/src/$(libvabackendlib) -+vainfo_LDADD = $(top_srcdir)/src/libva.la $(top_srcdir)/src/$(libvabackendlib) -+vainfo_DEPENDENCIES = $(top_srcdir)/src/libva.la $(top_srcdir)/src/$(libvabackendlib) +-vainfo_LDADD = $(top_srcdir)/va/$(libvabackendlib) +-vainfo_DEPENDENCIES = $(top_srcdir)/va/$(libvabackendlib) ++vainfo_LDADD = $(top_srcdir)/va/libva.la $(top_srcdir)/va/$(libvabackendlib) ++vainfo_DEPENDENCIES = $(top_srcdir)/va/libva.la $(top_srcdir)/va/$(libvabackendlib) vainfo_SOURCES = vainfo.c SUBDIRS = basic decode encode putsurface diff -Nru libva-0.31.0+latest1/debian/patches/104_fix_libva_pkgconfig_deps.patch libva-0.31.0+latest2/debian/patches/104_fix_libva_pkgconfig_deps.patch --- libva-0.31.0+latest1/debian/patches/104_fix_libva_pkgconfig_deps.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/104_fix_libva_pkgconfig_deps.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,4 +1,4 @@ -commit 862fc554eb493bd3659f87f19cd89248da9a0419 +commit 5f1314d188c4ecc2e0d5be54bcd663013e8b0077 Author: Gwenole Beauchesne Date: Tue Sep 22 13:00:34 2009 +0000 diff -Nru libva-0.31.0+latest1/debian/patches/105_dont_search_LIBGL_DRIVERS_PATH.patch libva-0.31.0+latest2/debian/patches/105_dont_search_LIBGL_DRIVERS_PATH.patch --- libva-0.31.0+latest1/debian/patches/105_dont_search_LIBGL_DRIVERS_PATH.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/105_dont_search_LIBGL_DRIVERS_PATH.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,14 +1,14 @@ -commit c3beab6ddae1217ecbcdb4efb9306c61d807ea57 +commit ecc7b5f332674ee57ad11a0d6bb58a252549c762 Author: Gwenole Beauchesne Date: Tue Sep 22 13:03:23 2009 +0000 Don't search LIBGL_DRIVERS_PATH, stick to LIBVA_DRIVERS_PATH only or the default path. -diff --git a/src/va.c b/src/va.c -index bc469a0..c07e10f 100644 ---- a/src/va.c -+++ b/src/va.c -@@ -130,10 +130,6 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) +diff --git a/va/va.c b/va/va.c +index c8e036e..ada70ce 100644 +--- a/va/va.c ++++ b/va/va.c +@@ -127,10 +127,6 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) { /* don't allow setuid apps to use LIBVA_DRIVERS_PATH */ search_path = getenv("LIBVA_DRIVERS_PATH"); diff -Nru libva-0.31.0+latest1/debian/patches/108_drivers_path.patch libva-0.31.0+latest2/debian/patches/108_drivers_path.patch --- libva-0.31.0+latest1/debian/patches/108_drivers_path.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/108_drivers_path.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit b474404c3852bb7b52b43941f532e3a2ab286dff +commit 43becedcfa2b9b040006868a63c686a131c9ba74 Author: Gwenole Beauchesne Date: Wed Jun 24 08:12:13 2009 +0000 Install drivers into pkglibdir/va/. diff --git a/configure.ac b/configure.ac -index 94ceefd..9458a51 100644 +index f2d0ea4..ebe5df6 100644 --- a/configure.ac +++ b/configure.ac @@ -73,7 +73,7 @@ AC_ARG_ENABLE(i965-driver, diff -Nru libva-0.31.0+latest1/debian/patches/201_libva_LIBVA_DRIVER_NAME.patch libva-0.31.0+latest2/debian/patches/201_libva_LIBVA_DRIVER_NAME.patch --- libva-0.31.0+latest1/debian/patches/201_libva_LIBVA_DRIVER_NAME.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/201_libva_LIBVA_DRIVER_NAME.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,14 +1,14 @@ -commit 19fbbb2d9c27d932a2b1c4e30d4d1ff00ec34369 +commit 1f9ee94ab4ac60459048bef5a2aa348cdf88c390 Author: Gwenole Beauchesne Date: Tue Feb 23 09:11:22 2010 +0000 Move LIBVA_DRIVER_NAME check in vaInitialize(). -diff --git a/src/va.c b/src/va.c -index c07e10f..f7df517 100644 ---- a/src/va.c -+++ b/src/va.c -@@ -323,30 +323,42 @@ VAStatus vaInitialize ( +diff --git a/va/va.c b/va/va.c +index ada70ce..b5940e5 100644 +--- a/va/va.c ++++ b/va/va.c +@@ -320,30 +320,42 @@ VAStatus vaInitialize ( int *minor_version /* out */ ) { @@ -71,11 +71,11 @@ } -diff --git a/src/x11/va_x11.c b/src/x11/va_x11.c -index 3e85ba3..ece713f 100644 ---- a/src/x11/va_x11.c -+++ b/src/x11/va_x11.c -@@ -135,19 +135,10 @@ static VAStatus va_DisplayContextGetDriverName ( +diff --git a/va/x11/va_x11.c b/va/x11/va_x11.c +index 29e81c8..78e38de 100644 +--- a/va/x11/va_x11.c ++++ b/va/x11/va_x11.c +@@ -136,19 +136,10 @@ static VAStatus va_DisplayContextGetDriverName ( ) { VAStatus vaStatus; diff -Nru libva-0.31.0+latest1/debian/patches/202_check_crystalhd.patch libva-0.31.0+latest2/debian/patches/202_check_crystalhd.patch --- libva-0.31.0+latest1/debian/patches/202_check_crystalhd.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/202_check_crystalhd.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,14 +1,14 @@ -commit 8169fa5dee60769e42e56a7e838ca9c95c1e5032 +commit 0eeee71bcd334512a6b86702ee612b35feb644b2 Author: Gwenole Beauchesne Date: Tue Feb 23 10:05:25 2010 +0000 Detect Broadcom Crystal HD chip. -diff --git a/src/Makefile.am b/src/Makefile.am -index 2f4210a..491ddfc 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -43,7 +43,7 @@ libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la +diff --git a/va/Makefile.am b/va/Makefile.am +index aeaf82f..f382c0e 100644 +--- a/va/Makefile.am ++++ b/va/Makefile.am +@@ -42,7 +42,7 @@ libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la SUBDIRS = x11 @@ -16,22 +16,22 @@ +libva_la_SOURCES = va.c va_crystalhd.c libvaincludedir = ${includedir}/va - libvainclude_HEADERS = va.h va_backend.h va_version.h -@@ -52,4 +52,5 @@ DISTCLEANFILES = \ + libvainclude_HEADERS = va.h va_x11.h va_backend.h va_version.h +@@ -51,4 +51,5 @@ DISTCLEANFILES = \ va_version.h EXTRA_DIST = \ - va_version.h.in + va_version.h.in \ + va_crystalhd.h -diff --git a/src/va.c b/src/va.c -index f7df517..9f25758 100644 ---- a/src/va.c -+++ b/src/va.c -@@ -23,8 +23,10 @@ - */ +diff --git a/va/va.c b/va/va.c +index b5940e5..fd68481 100644 +--- a/va/va.c ++++ b/va/va.c +@@ -24,8 +24,10 @@ #define _GNU_SOURCE 1 + +#include "config.h" #include "va.h" #include "va_backend.h" @@ -39,7 +39,7 @@ #include #include -@@ -352,6 +354,15 @@ VAStatus vaInitialize ( +@@ -349,6 +351,15 @@ VAStatus vaInitialize ( vaStatus = va_openDriver(dpy, driver_name); va_infoMessage("va_openDriver() returns %d\n", vaStatus); @@ -55,11 +55,11 @@ *major_version = VA_MAJOR_VERSION; *minor_version = VA_MINOR_VERSION; } -diff --git a/src/va_crystalhd.c b/src/va_crystalhd.c +diff --git a/va/va_crystalhd.c b/va/va_crystalhd.c new file mode 100644 index 0000000..1ddd4fe --- /dev/null -+++ b/src/va_crystalhd.c ++++ b/va/va_crystalhd.c @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2010 Splitted-Desktop Systems. All Rights Reserved. @@ -115,11 +115,11 @@ + fclose(fp); + return found; +} -diff --git a/src/va_crystalhd.h b/src/va_crystalhd.h +diff --git a/va/va_crystalhd.h b/va/va_crystalhd.h new file mode 100644 index 0000000..44a39d9 --- /dev/null -+++ b/src/va_crystalhd.h ++++ b/va/va_crystalhd.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2010 Splitted-Desktop Systems. All Rights Reserved. diff -Nru libva-0.31.0+latest1/debian/patches/203_fix_fglrx_detection.patch libva-0.31.0+latest2/debian/patches/203_fix_fglrx_detection.patch --- libva-0.31.0+latest1/debian/patches/203_fix_fglrx_detection.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/203_fix_fglrx_detection.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,14 +1,14 @@ -commit 2facaed9f6930643825f3f1a61187da0c224e04f +commit 02c2bb46ae11a1674927e6e65f990df1dc9ed1ce Author: Gwenole Beauchesne -Date: Wed Sep 9 13:24:46 2009 +0000 +Date: Mon Mar 8 09:17:09 2010 +0100 Don't link against libdrm to workaround XvBA / fglrx >= 8.66-RC1 bugs. -diff --git a/src/Makefile.am b/src/Makefile.am -index 491ddfc..d7f4850 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -37,7 +37,7 @@ libva_la_LDFLAGS = $(LDADD) -no-undefined +diff --git a/va/Makefile.am b/va/Makefile.am +index f382c0e..3b9ccfc 100644 +--- a/va/Makefile.am ++++ b/va/Makefile.am +@@ -36,7 +36,7 @@ libva_la_LDFLAGS = $(LDADD) -no-undefined libva_la_LIBADD = $(LIBVA_LIBS) -ldl libva_x11_la_SOURCES = @@ -17,27 +17,28 @@ libva_x11_la_LDFLAGS = $(LDADD) libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la -diff --git a/src/x11/Makefile.am b/src/x11/Makefile.am -index c70380d..b6916f2 100644 ---- a/src/x11/Makefile.am -+++ b/src/x11/Makefile.am +diff --git a/va/x11/Makefile.am b/va/x11/Makefile.am +index 40346f1..7466fda 100644 +--- a/va/x11/Makefile.am ++++ b/va/x11/Makefile.am @@ -25,6 +25,6 @@ noinst_LTLIBRARIES = libva_x11.la libva_x11includedir = ${includedir}/va - libva_x11include_HEADERS = va_x11.h va_dri.h va_dri2.h va_dricommon.h + libva_x11include_HEADERS = va_dri.h va_dri2.h va_dricommon.h -libva_x11_la_SOURCES = va_x11.c va_dri.c va_dri2.c va_dricommon.c dri2_util.c dri1_util.c va_nvctrl.c +libva_x11_la_SOURCES = va_x11.c va_dri.c va_dri2.c va_dricommon.c dri2_util.c dri1_util.c va_nvctrl.c libdrm_glue.c -EXTRA_DIST = va_dristr.h va_dri2str.h va_dri2tokens.h va_nvctrl.h +EXTRA_DIST = va_dristr.h va_dri2str.h va_dri2tokens.h va_nvctrl.h libdrm_glue.h -diff --git a/src/x11/dri1_util.c b/src/x11/dri1_util.c -index 3e67e2a..3bd490f 100644 ---- a/src/x11/dri1_util.c -+++ b/src/x11/dri1_util.c -@@ -1,10 +1,12 @@ +diff --git a/va/x11/dri1_util.c b/va/x11/dri1_util.c +index 3e67e2a..f6ce1ba 100644 +--- a/va/x11/dri1_util.c ++++ b/va/x11/dri1_util.c +@@ -1,10 +1,13 @@ +#include "config.h" +#include #include ++#include /* strcasecmp() */ #include #include #include @@ -48,7 +49,7 @@ #include "X11/Xlib.h" #include "va.h" -@@ -21,6 +23,75 @@ struct dri1_drawable +@@ -21,6 +24,75 @@ struct dri1_drawable int height; }; @@ -124,7 +125,7 @@ static struct dri_drawable * dri1CreateDrawable(VADriverContextP ctx, XID x_drawable) { -@@ -64,9 +135,9 @@ dri1Close(VADriverContextP ctx) +@@ -64,9 +136,9 @@ dri1Close(VADriverContextP ctx) free_drawable_hashtable(ctx); VA_DRIDestroyContext(ctx->x11_dpy, ctx->x11_screen, dri_state->hwContextID); assert(dri_state->pSAREA != MAP_FAILED); @@ -136,7 +137,7 @@ VA_DRICloseConnection(ctx->x11_dpy, ctx->x11_screen); } -@@ -104,21 +175,20 @@ isDRI1Connected(VADriverContextP ctx, char **driver_name) +@@ -104,21 +176,20 @@ isDRI1Connected(VADriverContextP ctx, char **driver_name) &dri_state->hSAREA, &BusID)) goto err_out0; @@ -161,7 +162,7 @@ goto err_out1; if (!VA_DRICreateContext(ctx->x11_dpy, ctx->x11_screen, -@@ -126,7 +196,8 @@ isDRI1Connected(VADriverContextP ctx, char **driver_name) +@@ -126,7 +197,8 @@ isDRI1Connected(VADriverContextP ctx, char **driver_name) &dri_state->hwContextID, &dri_state->hwContext)) goto err_out1; @@ -171,7 +172,7 @@ dri_state->createDrawable = dri1CreateDrawable; dri_state->destroyDrawable = dri1DestroyDrawable; dri_state->swapBuffer = dri1SwapBuffer; -@@ -137,10 +208,10 @@ isDRI1Connected(VADriverContextP ctx, char **driver_name) +@@ -137,10 +209,10 @@ isDRI1Connected(VADriverContextP ctx, char **driver_name) err_out1: if (dri_state->pSAREA != MAP_FAILED) @@ -184,10 +185,10 @@ VA_DRICloseConnection(ctx->x11_dpy, ctx->x11_screen); -diff --git a/src/x11/dri2_util.c b/src/x11/dri2_util.c +diff --git a/va/x11/dri2_util.c b/va/x11/dri2_util.c index ebe7a2c..b727e97 100644 ---- a/src/x11/dri2_util.c -+++ b/src/x11/dri2_util.c +--- a/va/x11/dri2_util.c ++++ b/va/x11/dri2_util.c @@ -3,7 +3,7 @@ #include #include @@ -206,12 +207,12 @@ goto err_out; if (!VA_DRI2Authenticate(ctx->x11_dpy, RootWindow(ctx->x11_dpy, ctx->x11_screen), -diff --git a/src/x11/libdrm_glue.c b/src/x11/libdrm_glue.c +diff --git a/va/x11/libdrm_glue.c b/va/x11/libdrm_glue.c new file mode 100644 -index 0000000..b72a2d1 +index 0000000..92c7d60 --- /dev/null -+++ b/src/x11/libdrm_glue.c -@@ -0,0 +1,208 @@ ++++ b/va/x11/libdrm_glue.c +@@ -0,0 +1,209 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * @@ -239,6 +240,7 @@ +#define _GNU_SOURCE 1 +#include "libdrm_glue.h" +#include ++#include +#include +#include +#include @@ -420,11 +422,11 @@ + LOAD_FUNC(drmUnmap, int, (drmAddress, drmSize)); + return lib_drmUnmap(address, size); +} -diff --git a/src/x11/libdrm_glue.h b/src/x11/libdrm_glue.h +diff --git a/va/x11/libdrm_glue.h b/va/x11/libdrm_glue.h new file mode 100644 index 0000000..878470b --- /dev/null -+++ b/src/x11/libdrm_glue.h ++++ b/va/x11/libdrm_glue.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. @@ -499,10 +501,10 @@ + ATTRIBUTE_HIDDEN; + +#endif /* LIBDRM_GLUE_H */ -diff --git a/src/x11/va_dricommon.h b/src/x11/va_dricommon.h -index a2a51a6..0da35fe 100644 ---- a/src/x11/va_dricommon.h -+++ b/src/x11/va_dricommon.h +diff --git a/va/x11/va_dricommon.h b/va/x11/va_dricommon.h +index b762bd0..5ed7a6a 100644 +--- a/va/x11/va_dricommon.h ++++ b/va/x11/va_dricommon.h @@ -13,7 +13,8 @@ enum { VA_NONE = 0, @@ -513,19 +515,19 @@ }; union dri_buffer -diff --git a/src/x11/va_x11.c b/src/x11/va_x11.c -index ece713f..a2acd4d 100644 ---- a/src/x11/va_x11.c -+++ b/src/x11/va_x11.c +diff --git a/va/x11/va_x11.c b/va/x11/va_x11.c +index 78e38de..1216093 100644 +--- a/va/x11/va_x11.c ++++ b/va/x11/va_x11.c @@ -31,6 +31,7 @@ #include "va_dri2.h" #include "va_dricommon.h" #include "va_nvctrl.h" +#include "libdrm_glue.h" #include + #include #include - #include -@@ -74,6 +75,8 @@ static void va_DisplayContextDestroy ( +@@ -75,6 +76,8 @@ static void va_DisplayContextDestroy ( } ctx = &((*ctx)->pNext); } diff -Nru libva-0.31.0+latest1/debian/patches/204_check_ATIFGLEXTENSION.patch libva-0.31.0+latest2/debian/patches/204_check_ATIFGLEXTENSION.patch --- libva-0.31.0+latest1/debian/patches/204_check_ATIFGLEXTENSION.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/204_check_ATIFGLEXTENSION.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,14 +1,14 @@ -commit ff6537d7f9676c3c174d29dccf591ce7d05d8017 +commit 595a044901ee32acc3212100966f5a1a9e181515 Author: Gwenole Beauchesne Date: Fri Nov 20 15:51:22 2009 +0000 Fix detection of fglrx. -diff --git a/src/Makefile.am b/src/Makefile.am -index d7f4850..8063d9a 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -37,7 +37,7 @@ libva_la_LDFLAGS = $(LDADD) -no-undefined +diff --git a/va/Makefile.am b/va/Makefile.am +index 3b9ccfc..99f6bbf 100644 +--- a/va/Makefile.am ++++ b/va/Makefile.am +@@ -36,7 +36,7 @@ libva_la_LDFLAGS = $(LDADD) -no-undefined libva_la_LIBADD = $(LIBVA_LIBS) -ldl libva_x11_la_SOURCES = @@ -17,13 +17,13 @@ libva_x11_la_LDFLAGS = $(LDADD) libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la -diff --git a/src/x11/Makefile.am b/src/x11/Makefile.am -index b6916f2..0b61c33 100644 ---- a/src/x11/Makefile.am -+++ b/src/x11/Makefile.am +diff --git a/va/x11/Makefile.am b/va/x11/Makefile.am +index 7466fda..a6d9323 100644 +--- a/va/x11/Makefile.am ++++ b/va/x11/Makefile.am @@ -25,6 +25,23 @@ noinst_LTLIBRARIES = libva_x11.la libva_x11includedir = ${includedir}/va - libva_x11include_HEADERS = va_x11.h va_dri.h va_dri2.h va_dricommon.h + libva_x11include_HEADERS = va_dri.h va_dri2.h va_dricommon.h -libva_x11_la_SOURCES = va_x11.c va_dri.c va_dri2.c va_dricommon.c dri2_util.c dri1_util.c va_nvctrl.c libdrm_glue.c +libva_x11_la_SOURCES = \ @@ -47,11 +47,11 @@ + va_fglext.h \ + va_nvctrl.h \ + $(NULL) -diff --git a/src/x11/va_fglext.c b/src/x11/va_fglext.c +diff --git a/va/x11/va_fglext.c b/va/x11/va_fglext.c new file mode 100644 index 0000000..add1f28 --- /dev/null -+++ b/src/x11/va_fglext.c ++++ b/va/x11/va_fglext.c @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. @@ -228,11 +228,11 @@ + + return True; +} -diff --git a/src/x11/va_fglext.h b/src/x11/va_fglext.h +diff --git a/va/x11/va_fglext.h b/va/x11/va_fglext.h new file mode 100644 index 0000000..f2d87c3 --- /dev/null -+++ b/src/x11/va_fglext.h ++++ b/va/x11/va_fglext.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. @@ -271,10 +271,10 @@ + int *ddxDriverPatchVersion, char **clientDriverName ); + +#endif /* VA_FGLEXTLIB_H */ -diff --git a/src/x11/va_x11.c b/src/x11/va_x11.c -index a2acd4d..297c137 100644 ---- a/src/x11/va_x11.c -+++ b/src/x11/va_x11.c +diff --git a/va/x11/va_x11.c b/va/x11/va_x11.c +index 1216093..71cc36f 100644 +--- a/va/x11/va_x11.c ++++ b/va/x11/va_x11.c @@ -31,6 +31,7 @@ #include "va_dri2.h" #include "va_dricommon.h" @@ -282,8 +282,8 @@ +#include "va_fglext.h" #include "libdrm_glue.h" #include - #include -@@ -132,6 +133,29 @@ static VAStatus va_NVCTRL_GetDriverName ( + #include +@@ -133,6 +134,29 @@ static VAStatus va_NVCTRL_GetDriverName ( return VA_STATUS_SUCCESS; } @@ -313,7 +313,7 @@ static VAStatus va_DisplayContextGetDriverName ( VADisplayContextP pDisplayContext, char **driver_name -@@ -147,7 +171,8 @@ static VAStatus va_DisplayContextGetDriverName ( +@@ -148,7 +172,8 @@ static VAStatus va_DisplayContextGetDriverName ( vaStatus = va_DRIGetDriverName(pDisplayContext, driver_name); if (vaStatus != VA_STATUS_SUCCESS) vaStatus = va_NVCTRL_GetDriverName(pDisplayContext, driver_name); diff -Nru libva-0.31.0+latest1/debian/patches/300_sds_version.patch libva-0.31.0+latest2/debian/patches/300_sds_version.patch --- libva-0.31.0+latest1/debian/patches/300_sds_version.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/300_sds_version.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit 508b22a40f63dcde8986f82dbd663a1c5002e69f +commit 1821919f68487c5e4fec33bd242208f49cb58c1e Author: Gwenole Beauchesne Date: Wed Jun 24 11:32:40 2009 +0000 Explicit API extensions from SDS. diff --git a/configure.ac b/configure.ac -index 9458a51..128510c 100644 +index ebe5df6..95cf992 100644 --- a/configure.ac +++ b/configure.ac @@ -28,6 +28,9 @@ m4_define([libva_micro_version], [0]) @@ -13,7 +13,7 @@ [libva_major_version.libva_minor_version.libva_micro_version]) +# increase this number for each API change -+m4_define([libva_sds_version], [5]) ++m4_define([libva_sds_version], [6]) + # if the library source code has changed, increment revision m4_define([libva_lt_revision], [1]) @@ -46,11 +46,11 @@ Name: libva Description: Userspace Video Acceleration (VA) core interface -diff --git a/src/va.c b/src/va.c -index 9f25758..ca95275 100644 ---- a/src/va.c -+++ b/src/va.c -@@ -165,7 +165,15 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) +diff --git a/va/va.c b/va/va.c +index fd68481..0d208d8 100644 +--- a/va/va.c ++++ b/va/va.c +@@ -162,7 +162,15 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) else { VADriverInit init_func; @@ -67,10 +67,10 @@ if (!init_func) { va_errorMessage("%s has no function %s\n", driver_path, DRIVER_INIT_FUNC); -diff --git a/src/va_version.h.in b/src/va_version.h.in +diff --git a/va/va_version.h.in b/va/va_version.h.in index c9ea97a..197c482 100644 ---- a/src/va_version.h.in -+++ b/src/va_version.h.in +--- a/va/va_version.h.in ++++ b/va/va_version.h.in @@ -47,6 +47,13 @@ #define VA_MICRO_VERSION (@LIBVA_MICRO_VERSION@) diff -Nru libva-0.31.0+latest1/debian/patches/320_move_vaPutSurface_flags_def.patch libva-0.31.0+latest2/debian/patches/320_move_vaPutSurface_flags_def.patch --- libva-0.31.0+latest1/debian/patches/320_move_vaPutSurface_flags_def.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/320_move_vaPutSurface_flags_def.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,60 +0,0 @@ -commit d65dea9293a3720894664709fb60052ed84fe355 -Author: Gwenole Beauchesne -Date: Fri Aug 21 11:34:50 2009 +0000 - - Move vaPutSurface() flags to header. - -diff --git a/src/va.h b/src/va.h -index 0d4c853..f89a5cb 100755 ---- a/src/va.h -+++ b/src/va.h -@@ -131,6 +131,22 @@ typedef int VAStatus; /* Return status type from functions */ - #define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 - #define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF - -+/* De-interlacing flags for vaPutSurface() */ -+#define VA_FRAME_PICTURE 0x00000000 -+#define VA_TOP_FIELD 0x00000001 -+#define VA_BOTTOM_FIELD 0x00000002 -+ -+/* -+ * Clears the drawable with background color. -+ * for hardware overlay based implementation this flag -+ * can be used to turn off the overlay -+ */ -+#define VA_CLEAR_DRAWABLE 0x00000008 -+ -+/* Color space conversion flags for vaPutSurface() */ -+#define VA_SRC_BT601 0x00000010 -+#define VA_SRC_BT709 0x00000020 -+ - /* - * Returns a short english description of error_status - */ -diff --git a/src/x11/va_x11.h b/src/x11/va_x11.h -index 2171ac6..5ab5200 100644 ---- a/src/x11/va_x11.h -+++ b/src/x11/va_x11.h -@@ -27,22 +27,6 @@ VADisplay vaGetDisplay ( - * color space conversion and scaling to the destination - * rectangle - */ --/* de-interlacing flags for vaPutSurface */ --#define VA_FRAME_PICTURE 0x00000000 --#define VA_TOP_FIELD 0x00000001 --#define VA_BOTTOM_FIELD 0x00000002 -- --/* -- * clears the drawable with background color. -- * for hardware overlay based implementation this flag -- * can be used to turn off the overlay -- */ --#define VA_CLEAR_DRAWABLE 0x00000008 -- --/* color space conversion flags for vaPutSurface */ --#define VA_SRC_BT601 0x00000010 --#define VA_SRC_BT709 0x00000020 -- - VAStatus vaPutSurface ( - VADisplay dpy, - VASurfaceID surface, diff -Nru libva-0.31.0+latest1/debian/patches/321_libva_glx.base.patch libva-0.31.0+latest2/debian/patches/321_libva_glx.base.patch --- libva-0.31.0+latest1/debian/patches/321_libva_glx.base.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/321_libva_glx.base.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,11 +1,11 @@ -commit 69474b0e2c2a064b771a81ff16141eb8f7c6d4b2 +commit e69075435675d356c7c9b4ff734a60e8cd031604 Author: Gwenole Beauchesne -Date: Fri Aug 21 11:58:16 2009 +0000 +Date: Mon Mar 8 09:44:25 2010 +0100 Add OpenGL extensions (v3) and generic implementation with TFP and FBO. diff --git a/Makefile.am b/Makefile.am -index 07385e6..6fb4cae 100644 +index 459660b..e75a2db 100644 --- a/Makefile.am +++ b/Makefile.am @@ -32,10 +32,13 @@ endif @@ -24,7 +24,7 @@ CLEANFILES = $(pcfiles) diff --git a/configure.ac b/configure.ac -index 128510c..0ab5a16 100644 +index 95cf992..86366e9 100644 --- a/configure.ac +++ b/configure.ac @@ -66,6 +66,11 @@ LIBVA_LT_LDFLAGS="-version-info $LIBVA_LT_VERSION -release $LIBVA_VERSION.$LIBVA @@ -63,10 +63,10 @@ LIBVA_CFLAGS="$DRM_CFLAGS" AC_SUBST(LIBVA_CFLAGS) @@ -149,6 +170,7 @@ AC_OUTPUT([ - src/Makefile - src/va_version.h - src/x11/Makefile -+ src/glx/Makefile + va/Makefile + va/va_version.h + va/x11/Makefile ++ va/glx/Makefile dummy_drv_video/Makefile i965_drv_video/Makefile i965_drv_video/shaders/Makefile @@ -95,11 +95,11 @@ +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lva-${display} +Cflags: -I${includedir} -diff --git a/src/Makefile.am b/src/Makefile.am -index 8063d9a..9e957b2 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -28,9 +28,17 @@ INCLUDES = \ +diff --git a/va/Makefile.am b/va/Makefile.am +index 99f6bbf..ebff3d5 100644 +--- a/va/Makefile.am ++++ b/va/Makefile.am +@@ -27,9 +27,17 @@ INCLUDES = \ LDADD = \ $(LIBVA_LT_LDFLAGS) @@ -120,7 +120,7 @@ libva_ladir = $(libdir) libva_la_LDFLAGS = $(LDADD) -no-undefined -@@ -41,7 +49,14 @@ libva_x11_la_LIBADD = $(libvacorelib) x11/libva_x11.la $(LIBVA_LIBS) $(X11_LIBS +@@ -40,7 +48,14 @@ libva_x11_la_LIBADD = $(libvacorelib) x11/libva_x11.la $(LIBVA_LIBS) $(X11_LIBS libva_x11_la_LDFLAGS = $(LDADD) libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la @@ -136,54 +136,42 @@ libva_la_SOURCES = va.c va_crystalhd.c -diff --git a/src/glx/Makefile.am b/src/glx/Makefile.am +diff --git a/va/glx/Makefile.am b/va/glx/Makefile.am new file mode 100644 -index 0000000..7783d8c -diff --git a/src/glx/va_backend_glx.h b/src/glx/va_backend_glx.h +index 0000000..337f34e +diff --git a/va/glx/va_backend_glx.h b/va/glx/va_backend_glx.h new file mode 100644 index 0000000..d110485 -diff --git a/src/glx/va_glx.c b/src/glx/va_glx.c +diff --git a/va/glx/va_glx.c b/va/glx/va_glx.c new file mode 100644 -index 0000000..2a06923 -diff --git a/src/glx/va_glx.h b/src/glx/va_glx.h +index 0000000..ec50a0e +diff --git a/va/glx/va_glx.h b/va/glx/va_glx.h new file mode 100644 -index 0000000..25d2965 -diff --git a/src/glx/va_glx_impl.c b/src/glx/va_glx_impl.c +index 0000000..1a0624d +diff --git a/va/glx/va_glx_impl.c b/va/glx/va_glx_impl.c new file mode 100644 -index 0000000..8b1e8c3 -diff --git a/src/glx/va_glx_impl.h b/src/glx/va_glx_impl.h +index 0000000..b0f24bb +diff --git a/va/glx/va_glx_impl.h b/va/glx/va_glx_impl.h new file mode 100644 index 0000000..977bfcc -diff --git a/src/glx/va_glx_private.h b/src/glx/va_glx_private.h +diff --git a/va/glx/va_glx_private.h b/va/glx/va_glx_private.h new file mode 100644 -index 0000000..e1002a6 -diff --git a/src/va_backend.h b/src/va_backend.h -index d514ba0..bdc189d 100644 ---- a/src/va_backend.h -+++ b/src/va_backend.h -@@ -32,9 +32,11 @@ - #ifdef IN_LIBVA - #include "va.h" - #include "x11/va_x11.h" -+#include "glx/va_backend_glx.h" - #else - #include - #include -+#include - #endif - - #include -@@ -372,6 +374,9 @@ struct VADriverVTable +index 0000000..d416729 +diff --git a/va/va_backend.h b/va/va_backend.h +index ff86744..06fef7f 100644 +--- a/va/va_backend.h ++++ b/va/va_backend.h +@@ -365,6 +365,9 @@ struct VADriverVTable unsigned int *chroma_v_offset, void **buffer ); + + /* Optional: GLX support hooks */ -+ struct VADriverVTableGLX glx; ++ struct VADriverVTableGLX *glx; }; struct VADriverContext -@@ -394,6 +399,7 @@ struct VADriverContext +@@ -387,6 +390,7 @@ struct VADriverContext void *handle; /* dlopen handle */ void *dri_state; @@ -191,7 +179,7 @@ }; #define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ -@@ -416,6 +422,8 @@ struct VADisplayContext +@@ -409,6 +413,8 @@ struct VADisplayContext VADisplayContextP ctx, char **driver_name ); @@ -200,11 +188,11 @@ }; typedef VAStatus (*VADriverInit) ( -diff --git a/src/x11/va_x11.c b/src/x11/va_x11.c -index 297c137..d55ee62 100644 ---- a/src/x11/va_x11.c -+++ b/src/x11/va_x11.c -@@ -216,6 +216,7 @@ VADisplay vaGetDisplay ( +diff --git a/va/x11/va_x11.c b/va/x11/va_x11.c +index 71cc36f..6826b31 100644 +--- a/va/x11/va_x11.c ++++ b/va/x11/va_x11.c +@@ -217,6 +217,7 @@ VADisplay vaGetDisplay ( pDisplayContext->vaIsValid = va_DisplayContextIsValid; pDisplayContext->vaDestroy = va_DisplayContextDestroy; pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; diff -Nru libva-0.31.0+latest1/debian/patches/322_libva_glx.patch libva-0.31.0+latest2/debian/patches/322_libva_glx.patch --- libva-0.31.0+latest1/debian/patches/322_libva_glx.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/322_libva_glx.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,23 +1,23 @@ -commit fa0a96f490a068162c4c9d12cad8b736dce7cbba +commit 37f6246890b10be4ee57916c7a028205637c17d6 Author: Gwenole Beauchesne -Date: Thu Feb 18 15:03:16 2010 +0000 - - Fix check for FBO. - -commit e6da92b34aacb1428510a3e1334b8dc7fa9855f6 -Author: Gwenole Beauchesne -Date: Mon Feb 15 09:24:42 2010 +0000 - - Drop VA/GLX 'bind' API. - -commit 6f37dfe4326887f02a4cedb90464930ccb8debb1 -Author: Gwenole Beauchesne -Date: Fri Aug 21 11:58:16 2009 +0000 +Date: Mon Mar 8 09:44:25 2010 +0100 Add OpenGL extensions (v3) and generic implementation with TFP and FBO. +diff --git a/Makefile.am b/Makefile.am +index 459660b..e75a2db 100644 +diff --git a/configure.ac b/configure.ac +index 95cf992..86366e9 100644 +diff --git a/libva-glx.pc.in b/libva-glx.pc.in +new file mode 100644 +index 0000000..2019915 +diff --git a/va/Makefile.am b/va/Makefile.am +index 99f6bbf..ebff3d5 100644 +diff --git a/va/glx/Makefile.am b/va/glx/Makefile.am +new file mode 100644 +index 0000000..337f34e --- /dev/null -+++ b/src/glx/Makefile.am ++++ b/va/glx/Makefile.am @@ -0,0 +1,41 @@ +# Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. +# @@ -41,7 +41,7 @@ +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + -+AM_CFLAGS = -DLINUX -DIN_LIBVA -I$(top_srcdir)/src -I$(top_srcdir)/src/x11 ++AM_CFLAGS = -DLINUX -I$(top_srcdir)/va -I$(top_srcdir)/va/x11 + +source_c = \ + va_glx.c \ @@ -60,8 +60,11 @@ +libva_glxinclude_HEADERS = $(source_h) +libva_glx_la_SOURCES = $(source_c) +noinst_HEADERS = $(source_h_priv) +diff --git a/va/glx/va_backend_glx.h b/va/glx/va_backend_glx.h +new file mode 100644 +index 0000000..d110485 --- /dev/null -+++ b/src/glx/va_backend_glx.h ++++ b/va/glx/va_backend_glx.h @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. @@ -117,9 +120,12 @@ +}; + +#endif /* VA_BACKEND_GLX_H */ +diff --git a/va/glx/va_glx.c b/va/glx/va_glx.c +new file mode 100644 +index 0000000..96efafd --- /dev/null -+++ b/src/glx/va_glx.c -@@ -0,0 +1,200 @@ ++++ b/va/glx/va_glx.c +@@ -0,0 +1,202 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * @@ -144,6 +150,7 @@ + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + ++#include +#include "va_glx_private.h" +#include "va_glx_impl.h" + @@ -209,10 +216,11 @@ + + pDisplayContextGLX = pDisplayContext->opaque; + if (pDisplayContextGLX) { -+ if (pDisplayContextGLX->vaDestroy) -+ pDisplayContextGLX->vaDestroy(pDisplayContext); ++ vaDestroyFunc vaDestroy = pDisplayContextGLX->vaDestroy; + free(pDisplayContextGLX); + pDisplayContext->opaque = NULL; ++ if (vaDestroy) ++ vaDestroy(pDisplayContext); + } +} + @@ -320,9 +328,12 @@ + INVOKE(ctx, CopySurface, (ctx, pSurfaceGLX, surface, flags)); + return status; +} +diff --git a/va/glx/va_glx.h b/va/glx/va_glx.h +new file mode 100644 +index 0000000..1a0624d --- /dev/null -+++ b/src/glx/va_glx.h -@@ -0,0 +1,113 @@ ++++ b/va/glx/va_glx.h +@@ -0,0 +1,109 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * @@ -350,11 +361,7 @@ +#ifndef VA_GLX_H +#define VA_GLX_H + -+#ifdef IN_LIBVA -+#include "va.h" -+#else +#include -+#endif +#include + +#ifdef __cplusplus @@ -436,9 +443,12 @@ +#endif + +#endif /* VA_GLX_H */ +diff --git a/va/glx/va_glx_impl.c b/va/glx/va_glx_impl.c +new file mode 100644 +index 0000000..6fd7057 --- /dev/null -+++ b/src/glx/va_glx_impl.c -@@ -0,0 +1,1015 @@ ++++ b/va/glx/va_glx_impl.c +@@ -0,0 +1,1013 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * @@ -467,6 +477,7 @@ +#include "va_glx_private.h" +#include "va_glx_impl.h" +#include ++#include +#include +#include +#include @@ -1165,7 +1176,7 @@ +/* ========================================================================= */ + +#define INVOKE(ctx, func, args) do { \ -+ VADriverVTableGLXP vtable = &(ctx)->vtable.glx; \ ++ VADriverVTableGLXP vtable = (ctx)->vtable.glx; \ + if (!vtable->va##func##GLX) \ + return VA_STATUS_ERROR_UNIMPLEMENTED; \ + \ @@ -1269,7 +1280,6 @@ +) +{ + VADriverContextGLXP pDriverContextGLX = VA_DRIVER_CONTEXT_GLX(ctx); -+ VADriverVTableGLXP vtable = &pDriverContextGLX->vtable; + VASurfaceGLXP pSurfaceGLX = gl_surface; + VAStatus status; + @@ -1348,7 +1358,6 @@ +{ + VADriverContextGLXP pDriverContextGLX = VA_DRIVER_CONTEXT_GLX(ctx); + VASurfaceGLXP pSurfaceGLX = gl_surface; -+ VAStatus status; + + if (!pDriverContextGLX->use_tfp) + return VA_STATUS_ERROR_UNIMPLEMENTED; @@ -1368,7 +1377,6 @@ +) +{ + VADriverContextGLXP pDriverContextGLX = VA_DRIVER_CONTEXT_GLX(ctx); -+ VADriverVTableGLXP vtable = &pDriverContextGLX->vtable; + VASurfaceGLXP pSurfaceGLX = gl_surface; + VAStatus status; + @@ -1419,7 +1427,7 @@ + if (glx_ctx->is_initialized) + return VA_STATUS_SUCCESS; + -+ if (ctx->vtable.glx.vaCopySurfaceGLX) { ++ if (ctx->vtable.glx && ctx->vtable.glx->vaCopySurfaceGLX) { + vtable->vaCreateSurfaceGLX = vaCreateSurfaceGLX_impl_driver; + vtable->vaDestroySurfaceGLX = vaDestroySurfaceGLX_impl_driver; + vtable->vaCopySurfaceGLX = vaCopySurfaceGLX_impl_driver; @@ -1454,8 +1462,11 @@ + glx_ctx->is_initialized = 1; + return VA_STATUS_SUCCESS; +} +diff --git a/va/glx/va_glx_impl.h b/va/glx/va_glx_impl.h +new file mode 100644 +index 0000000..977bfcc --- /dev/null -+++ b/src/glx/va_glx_impl.h ++++ b/va/glx/va_glx_impl.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. @@ -1503,9 +1514,12 @@ + ATTRIBUTE_HIDDEN; + +#endif /* VA_GLX_IMPL_H */ +diff --git a/va/glx/va_glx_private.h b/va/glx/va_glx_private.h +new file mode 100644 +index 0000000..b2c44e8 --- /dev/null -+++ b/src/glx/va_glx_private.h -@@ -0,0 +1,96 @@ ++++ b/va/glx/va_glx_private.h +@@ -0,0 +1,99 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * @@ -1538,6 +1552,7 @@ +#include "va_backend.h" +#include "va_x11.h" +#include "va_glx.h" ++#include "va_backend_glx.h" + +#if GLX_GLXEXT_VERSION < 18 +typedef void (*PFNGLXBINDTEXIMAGEEXTPROC)(Display *, GLXDrawable, int, const int *); @@ -1566,8 +1581,10 @@ +typedef struct VASurfaceGLX *VASurfaceGLXP; +typedef struct VADriverVTableGLX *VADriverVTableGLXP; + ++typedef void (*vaDestroyFunc)(VADisplayContextP); ++ +struct VADisplayContextGLX { -+ void (*vaDestroy)(VADisplayContextP ctx); ++ vaDestroyFunc vaDestroy; +}; + +#define VA_DRIVER_CONTEXT_GLX(ctx) ((VADriverContextGLXP)((ctx)->glx)) @@ -1602,3 +1619,7 @@ +}; + +#endif /* VA_GLX_PRIVATE_H */ +diff --git a/va/va_backend.h b/va/va_backend.h +index ff86744..06fef7f 100644 +diff --git a/va/x11/va_x11.c b/va/x11/va_x11.c +index 71cc36f..6826b31 100644 diff -Nru libva-0.31.0+latest1/debian/patches/390_compat.base.patch libva-0.31.0+latest2/debian/patches/390_compat.base.patch --- libva-0.31.0+latest1/debian/patches/390_compat.base.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/390_compat.base.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,14 +1,14 @@ -commit 82cea95d0f5a8ed3ab21042cfd58a3903f314b1e +commit 94db34ae392a7787afac9087799bb0421c844b83 Author: Gwenole Beauchesne Date: Wed Jun 24 11:40:56 2009 +0000 Add compatibility layer with original VA-API 0.29 to 0.31. -diff --git a/src/Makefile.am b/src/Makefile.am -index 9e957b2..26727ea 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -58,7 +58,7 @@ SUBDIRS = $(libva_x11_backenddir) $(libva_glx_backenddir) +diff --git a/va/Makefile.am b/va/Makefile.am +index ebff3d5..1752526 100644 +--- a/va/Makefile.am ++++ b/va/Makefile.am +@@ -57,7 +57,7 @@ SUBDIRS = $(libva_x11_backenddir) $(libva_glx_backenddir) DIST_SUBDIRS = x11 glx @@ -16,8 +16,8 @@ +libva_la_SOURCES = va.c va_crystalhd.c va_compat.c libvaincludedir = ${includedir}/va - libvainclude_HEADERS = va.h va_backend.h va_version.h -@@ -68,4 +68,8 @@ DISTCLEANFILES = \ + libvainclude_HEADERS = va.h va_x11.h va_backend.h va_version.h +@@ -67,4 +67,8 @@ DISTCLEANFILES = \ EXTRA_DIST = \ va_version.h.in \ @@ -27,11 +27,11 @@ + va_compat_template.h + +va_compat.c: va_compat_template.h -diff --git a/src/va.c b/src/va.c -index ca95275..3a13bf9 100644 ---- a/src/va.c -+++ b/src/va.c -@@ -27,6 +27,7 @@ +diff --git a/va/va.c b/va/va.c +index 0d208d8..ad201fa 100644 +--- a/va/va.c ++++ b/va/va.c +@@ -28,6 +28,7 @@ #include "va.h" #include "va_backend.h" #include "va_crystalhd.h" @@ -39,7 +39,7 @@ #include #include -@@ -42,6 +43,8 @@ +@@ -39,6 +40,8 @@ #define DRIVER_INIT_FUNC "__vaDriverInit_0_31" @@ -48,7 +48,7 @@ #define DRIVER_EXTENSION "_drv_video.so" -@@ -166,13 +169,24 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) +@@ -163,13 +166,24 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) { VADriverInit init_func; char driver_init_func_sds[32]; @@ -73,7 +73,7 @@ } if (!init_func) { -@@ -181,7 +195,36 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) +@@ -178,7 +192,36 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name) } else { @@ -111,7 +111,7 @@ if (VA_STATUS_SUCCESS == vaStatus) { -@@ -402,6 +445,8 @@ VAStatus vaTerminate ( +@@ -399,6 +442,8 @@ VAStatus vaTerminate ( old_ctx->handle = NULL; } @@ -120,11 +120,11 @@ if (VA_STATUS_SUCCESS == vaStatus) pDisplayContext->vaDestroy(pDisplayContext); return vaStatus; -diff --git a/src/va_backend.h b/src/va_backend.h -index bdc189d..adb11a7 100644 ---- a/src/va_backend.h -+++ b/src/va_backend.h -@@ -400,6 +400,7 @@ struct VADriverContext +diff --git a/va/va_backend.h b/va/va_backend.h +index 06fef7f..9cf8911 100644 +--- a/va/va_backend.h ++++ b/va/va_backend.h +@@ -391,6 +391,7 @@ struct VADriverContext void *dri_state; void *glx; /* opaque for GLX code */ @@ -132,12 +132,12 @@ }; #define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ -diff --git a/src/va_compat.c b/src/va_compat.c +diff --git a/va/va_compat.c b/va/va_compat.c new file mode 100644 -index 0000000..792ac42 -diff --git a/src/va_compat.h b/src/va_compat.h +index 0000000..af43188 +diff --git a/va/va_compat.h b/va/va_compat.h new file mode 100644 index 0000000..2c9d801 -diff --git a/src/va_compat_template.h b/src/va_compat_template.h +diff --git a/va/va_compat_template.h b/va/va_compat_template.h new file mode 100644 index 0000000..18349de diff -Nru libva-0.31.0+latest1/debian/patches/391_compat.patch libva-0.31.0+latest2/debian/patches/391_compat.patch --- libva-0.31.0+latest1/debian/patches/391_compat.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/391_compat.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,6 +1,21 @@ +commit 94db34ae392a7787afac9087799bb0421c844b83 +Author: Gwenole Beauchesne +Date: Wed Jun 24 11:40:56 2009 +0000 + + Add compatibility layer with original VA-API 0.29 to 0.31. + +diff --git a/va/Makefile.am b/va/Makefile.am +index ebff3d5..1752526 100644 +diff --git a/va/va.c b/va/va.c +index 0d208d8..ad201fa 100644 +diff --git a/va/va_backend.h b/va/va_backend.h +index 06fef7f..9cf8911 100644 +diff --git a/va/va_compat.c b/va/va_compat.c +new file mode 100644 +index 0000000..af43188 --- /dev/null -+++ b/src/va_compat.c -@@ -0,0 +1,1177 @@ ++++ b/va/va_compat.c +@@ -0,0 +1,1178 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * @@ -29,6 +44,7 @@ +#include "va.h" +#include "va_compat.h" +#include "va_backend.h" ++#include +#include +#include +#include @@ -1178,8 +1194,11 @@ + ctx->compat = NULL; + return VA_STATUS_SUCCESS; +} +diff --git a/va/va_compat.h b/va/va_compat.h +new file mode 100644 +index 0000000..2c9d801 --- /dev/null -+++ b/src/va_compat.h ++++ b/va/va_compat.h @@ -0,0 +1,1467 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. @@ -2648,8 +2667,11 @@ +#define VADriverContext_0_31 VADriverContext + +#endif /* VA_COMPAT_H */ +diff --git a/va/va_compat_template.h b/va/va_compat_template.h +new file mode 100644 +index 0000000..18349de --- /dev/null -+++ b/src/va_compat_template.h ++++ b/va/va_compat_template.h @@ -0,0 +1,539 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. diff -Nru libva-0.31.0+latest1/debian/patches/392_compat.dso.patch libva-0.31.0+latest2/debian/patches/392_compat.dso.patch --- libva-0.31.0+latest1/debian/patches/392_compat.dso.patch 2010-02-23 14:43:59.000000000 +0000 +++ libva-0.31.0+latest2/debian/patches/392_compat.dso.patch 2010-03-24 02:00:33.000000000 +0000 @@ -1,14 +1,14 @@ -commit 3f5aa1ca191f1f3e4a49d8504d7a6d13d60d22a8 +commit 23dc87f7a37ea245e9797b947df6fbd3c911dd76 Author: Gwenole Beauchesne Date: Fri Oct 16 12:39:06 2009 +0000 Fix compatibility with older programs linked against libva.so.0. -diff --git a/src/Makefile.am b/src/Makefile.am -index 26727ea..52548cc 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -73,3 +73,8 @@ EXTRA_DIST = \ +diff --git a/va/Makefile.am b/va/Makefile.am +index 1752526..f92ba8a 100644 +--- a/va/Makefile.am ++++ b/va/Makefile.am +@@ -72,3 +72,8 @@ EXTRA_DIST = \ va_compat_template.h va_compat.c: va_compat_template.h @@ -17,11 +17,11 @@ +libva_compat_la_SOURCES = va_compat_lib.c +libva_compat_la_LIBADD = libva-x11.la -ldl +libva_compat_la_DEPENDENCIES = libva-x11.la -diff --git a/src/va_compat_lib.c b/src/va_compat_lib.c +diff --git a/va/va_compat_lib.c b/va/va_compat_lib.c new file mode 100644 index 0000000..b7e9ea5 --- /dev/null -+++ b/src/va_compat_lib.c ++++ b/va/va_compat_lib.c @@ -0,0 +1,158 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. diff -Nru libva-0.31.0+latest1/dummy_drv_video/dummy_drv_video.c libva-0.31.0+latest2/dummy_drv_video/dummy_drv_video.c --- libva-0.31.0+latest1/dummy_drv_video/dummy_drv_video.c 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/dummy_drv_video/dummy_drv_video.c 2010-03-18 08:39:37.000000000 +0000 @@ -22,12 +22,13 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "va_backend.h" +#include #include "dummy_drv_video.h" #include "assert.h" #include +#include #include #include diff -Nru libva-0.31.0+latest1/dummy_drv_video/dummy_drv_video.h libva-0.31.0+latest2/dummy_drv_video/dummy_drv_video.h --- libva-0.31.0+latest1/dummy_drv_video/dummy_drv_video.h 2009-01-08 12:55:06.000000000 +0000 +++ libva-0.31.0+latest2/dummy_drv_video/dummy_drv_video.h 2010-03-18 08:39:37.000000000 +0000 @@ -25,7 +25,7 @@ #ifndef _DUMMY_DRV_VIDEO_H_ #define _DUMMY_DRV_VIDEO_H_ -#include "va.h" +#include #include "object_heap.h" #define DUMMY_MAX_PROFILES 11 diff -Nru libva-0.31.0+latest1/dummy_drv_video/Makefile.am libva-0.31.0+latest2/dummy_drv_video/Makefile.am --- libva-0.31.0+latest1/dummy_drv_video/Makefile.am 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/dummy_drv_video/Makefile.am 2010-03-18 08:39:37.000000000 +0000 @@ -23,10 +23,10 @@ dummy_drv_video_la_LTLIBRARIES = dummy_drv_video.la dummy_drv_video_ladir = @LIBVA_DRIVERS_PATH@ dummy_drv_video_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,--no-undefined -dummy_drv_video_la_LIBADD = $(top_srcdir)/src/$(libvabackendlib) -dummy_drv_video_la_DEPENDENCIES = $(top_srcdir)/src/$(libvabackendlib) +dummy_drv_video_la_LIBADD = $(top_srcdir)/va/$(libvabackendlib) +dummy_drv_video_la_DEPENDENCIES = $(top_srcdir)/va/$(libvabackendlib) -AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/../../include/external/ -I$(top_srcdir)/../../include/kmd -DIN_LIBVA +AM_CFLAGS = -I$(top_srcdir)/va -I$(top_srcdir)/../../include/external/ -I$(top_srcdir)/../../include/kmd dummy_drv_video_la_SOURCES = dummy_drv_video.c object_heap.c noinst_HEADERS = dummy_drv_video.h object_heap.h diff -Nru libva-0.31.0+latest1/i965_drv_video/i965_drv_video.c libva-0.31.0+latest2/i965_drv_video/i965_drv_video.c --- libva-0.31.0+latest1/i965_drv_video/i965_drv_video.c 2009-11-20 16:12:42.000000000 +0000 +++ libva-0.31.0+latest2/i965_drv_video/i965_drv_video.c 2010-03-18 08:39:38.000000000 +0000 @@ -27,11 +27,11 @@ * */ +#include #include #include -#include "va_backend.h" -#include "va_dricommon.h" +#include "va/x11/va_dricommon.h" #include "intel_driver.h" #include "intel_memman.h" diff -Nru libva-0.31.0+latest1/i965_drv_video/i965_drv_video.h libva-0.31.0+latest2/i965_drv_video/i965_drv_video.h --- libva-0.31.0+latest1/i965_drv_video/i965_drv_video.h 2009-11-20 16:12:42.000000000 +0000 +++ libva-0.31.0+latest2/i965_drv_video/i965_drv_video.h 2010-03-18 08:39:38.000000000 +0000 @@ -30,7 +30,9 @@ #ifndef _I965_DRV_VIDEO_H_ #define _I965_DRV_VIDEO_H_ -#include "va.h" +#include +#include + #include "object_heap.h" #include "intel_driver.h" diff -Nru libva-0.31.0+latest1/i965_drv_video/i965_media.c libva-0.31.0+latest2/i965_drv_video/i965_media.c --- libva-0.31.0+latest1/i965_drv_video/i965_media.c 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/i965_drv_video/i965_media.c 2010-03-18 08:39:38.000000000 +0000 @@ -31,7 +31,7 @@ #include #include -#include "va_backend.h" +#include #include "intel_batchbuffer.h" #include "intel_driver.h" diff -Nru libva-0.31.0+latest1/i965_drv_video/i965_media_mpeg2.c libva-0.31.0+latest2/i965_drv_video/i965_media_mpeg2.c --- libva-0.31.0+latest1/i965_drv_video/i965_media_mpeg2.c 2009-09-22 14:17:03.000000000 +0100 +++ libva-0.31.0+latest2/i965_drv_video/i965_media_mpeg2.c 2010-03-18 08:39:38.000000000 +0000 @@ -31,7 +31,7 @@ #include #include -#include "va_backend.h" +#include #include "intel_batchbuffer.h" #include "intel_driver.h" diff -Nru libva-0.31.0+latest1/i965_drv_video/i965_render.c libva-0.31.0+latest2/i965_drv_video/i965_render.c --- libva-0.31.0+latest1/i965_drv_video/i965_render.c 2009-11-20 16:12:42.000000000 +0000 +++ libva-0.31.0+latest2/i965_drv_video/i965_render.c 2010-03-18 08:39:38.000000000 +0000 @@ -32,11 +32,12 @@ */ #include +#include #include #include -#include "va_backend.h" -#include "va_dricommon.h" +#include +#include "va/x11/va_dricommon.h" #include "intel_batchbuffer.h" #include "intel_driver.h" diff -Nru libva-0.31.0+latest1/i965_drv_video/intel_batchbuffer.c libva-0.31.0+latest2/i965_drv_video/intel_batchbuffer.c --- libva-0.31.0+latest1/i965_drv_video/intel_batchbuffer.c 2009-07-02 13:39:19.000000000 +0100 +++ libva-0.31.0+latest2/i965_drv_video/intel_batchbuffer.c 2010-03-18 08:39:38.000000000 +0000 @@ -25,10 +25,11 @@ * **************************************************************************/ +#include #include #include -#include "va_backend.h" +#include #include "intel_batchbuffer.h" diff -Nru libva-0.31.0+latest1/i965_drv_video/intel_driver.h libva-0.31.0+latest2/i965_drv_video/intel_driver.h --- libva-0.31.0+latest1/i965_drv_video/intel_driver.h 2009-11-20 16:12:42.000000000 +0000 +++ libva-0.31.0+latest2/i965_drv_video/intel_driver.h 2010-03-18 08:39:38.000000000 +0000 @@ -9,7 +9,7 @@ #include #include -#include "va_backend.h" +#include #if defined(__GNUC__) #define INLINE __inline__ diff -Nru libva-0.31.0+latest1/i965_drv_video/Makefile.am libva-0.31.0+latest2/i965_drv_video/Makefile.am --- libva-0.31.0+latest1/i965_drv_video/Makefile.am 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/i965_drv_video/Makefile.am 2010-03-18 08:39:38.000000000 +0000 @@ -22,12 +22,12 @@ SUBDIRS = shaders -AM_CFLAGS = -Wall -I$(top_srcdir)/src -I$(top_srcdir)/src/x11 @DRM_CFLAGS@ -DIN_LIBVA +AM_CFLAGS = -Wall -I$(top_srcdir)/va -I$(top_srcdir)/va/x11 @DRM_CFLAGS@ i965_drv_video_la_LTLIBRARIES = i965_drv_video.la i965_drv_video_ladir = @LIBVA_DRIVERS_PATH@ i965_drv_video_la_LDFLAGS = -module -avoid-version -no-undefined -Wl,--no-undefined @DRM_LIBS@ -ldrm_intel -i965_drv_video_la_LIBADD = ../src/libva-x11.la -lpthread +i965_drv_video_la_LIBADD = ../va/libva-x11.la -lpthread i965_drv_video_la_SOURCES = \ object_heap.c \ diff -Nru libva-0.31.0+latest1/Makefile.am libva-0.31.0+latest2/Makefile.am --- libva-0.31.0+latest1/Makefile.am 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/Makefile.am 2010-03-18 08:39:39.000000000 +0000 @@ -22,7 +22,7 @@ AUTOMAKE_OPTIONS = foreign -SUBDIRS = src test +SUBDIRS = va test if BUILD_DUMMY_DRIVER SUBDIRS += dummy_drv_video endif diff -Nru libva-0.31.0+latest1/src/Makefile.am libva-0.31.0+latest2/src/Makefile.am --- libva-0.31.0+latest1/src/Makefile.am 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/src/Makefile.am 1970-01-01 01:00:00.000000000 +0100 @@ -1,55 +0,0 @@ -# Copyright (c) 2007 Intel Corporation. All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sub license, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice (including the -# next paragraph) shall be included in all copies or substantial portions -# of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR -# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -INCLUDES = \ - $(LIBVA_CFLAGS) -I$(top_srcdir)/src/x11 \ - -DIN_LIBVA \ - -DVA_DRIVERS_PATH="\"$(LIBVA_DRIVERS_PATH)\"" - -LDADD = \ - $(LIBVA_LT_LDFLAGS) - -lib_LTLIBRARIES = \ - libva.la \ - libva-x11.la - -libva_ladir = $(libdir) -libva_la_LDFLAGS = $(LDADD) -no-undefined -libva_la_LIBADD = $(LIBVA_LIBS) -ldl - -libva_x11_la_SOURCES = -libva_x11_la_LIBADD = $(libvacorelib) x11/libva_x11.la $(LIBVA_LIBS) $(X11_LIBS) $(XEXT_LIBS) $(DRM_LIBS) $(XFIXES_LIBS) -libva_x11_la_LDFLAGS = $(LDADD) -libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la - -SUBDIRS = x11 - -libva_la_SOURCES = va.c - -libvaincludedir = ${includedir}/va -libvainclude_HEADERS = va.h va_backend.h va_version.h - -DISTCLEANFILES = \ - va_version.h - -EXTRA_DIST = \ - va_version.h.in diff -Nru libva-0.31.0+latest1/src/Makefile.in libva-0.31.0+latest2/src/Makefile.in --- libva-0.31.0+latest1/src/Makefile.in 2010-02-12 14:42:12.000000000 +0000 +++ libva-0.31.0+latest2/src/Makefile.in 1970-01-01 01:00:00.000000000 +0100 @@ -1,684 +0,0 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# Copyright (c) 2007 Intel Corporation. All Rights Reserved. -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sub license, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice (including the -# next paragraph) shall be included in all copies or substantial portions -# of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR -# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src -DIST_COMMON = $(libvainclude_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(srcdir)/va_version.h.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = va_version.h -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libvaincludedir)" -libLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(lib_LTLIBRARIES) -am__DEPENDENCIES_1 = -am_libva_x11_la_OBJECTS = -libva_x11_la_OBJECTS = $(am_libva_x11_la_OBJECTS) -libva_x11_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(libva_x11_la_LDFLAGS) $(LDFLAGS) -o $@ -libva_la_DEPENDENCIES = $(am__DEPENDENCIES_1) -am_libva_la_OBJECTS = va.lo -libva_la_OBJECTS = $(am_libva_la_OBJECTS) -libva_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(libva_la_LDFLAGS) \ - $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libva_x11_la_SOURCES) $(libva_la_SOURCES) -DIST_SOURCES = $(libva_x11_la_SOURCES) $(libva_la_SOURCES) -RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ - html-recursive info-recursive install-data-recursive \ - install-dvi-recursive install-exec-recursive \ - install-html-recursive install-info-recursive \ - install-pdf-recursive install-ps-recursive install-recursive \ - installcheck-recursive installdirs-recursive pdf-recursive \ - ps-recursive uninstall-recursive -libvaincludeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(libvainclude_HEADERS) -RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ - distclean-recursive maintainer-clean-recursive -ETAGS = etags -CTAGS = ctags -DIST_SUBDIRS = $(SUBDIRS) -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DRM_CFLAGS = @DRM_CFLAGS@ -DRM_LIBS = @DRM_LIBS@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ -GEN4ASM_LIBS = @GEN4ASM_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVA_CFLAGS = @LIBVA_CFLAGS@ -LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ -LIBVA_LIBS = @LIBVA_LIBS@ -LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ -LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ -LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ -LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ -LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ -LIBVA_VERSION = @LIBVA_VERSION@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -X11_CFLAGS = @X11_CFLAGS@ -X11_LIBS = @X11_LIBS@ -XEXT_CFLAGS = @XEXT_CFLAGS@ -XEXT_LIBS = @XEXT_LIBS@ -XFIXES_CFLAGS = @XFIXES_CFLAGS@ -XFIXES_LIBS = @XFIXES_LIBS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -libvabackendlib = @libvabackendlib@ -libvacorelib = @libvacorelib@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -INCLUDES = \ - $(LIBVA_CFLAGS) -I$(top_srcdir)/src/x11 \ - -DIN_LIBVA \ - -DVA_DRIVERS_PATH="\"$(LIBVA_DRIVERS_PATH)\"" - -LDADD = \ - $(LIBVA_LT_LDFLAGS) - -lib_LTLIBRARIES = \ - libva.la \ - libva-x11.la - -libva_ladir = $(libdir) -libva_la_LDFLAGS = $(LDADD) -no-undefined -libva_la_LIBADD = $(LIBVA_LIBS) -ldl -libva_x11_la_SOURCES = -libva_x11_la_LIBADD = $(libvacorelib) x11/libva_x11.la $(LIBVA_LIBS) $(X11_LIBS) $(XEXT_LIBS) $(DRM_LIBS) $(XFIXES_LIBS) -libva_x11_la_LDFLAGS = $(LDADD) -libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la -SUBDIRS = x11 -libva_la_SOURCES = va.c -libvaincludedir = ${includedir}/va -libvainclude_HEADERS = va.h va_backend.h va_version.h -DISTCLEANFILES = \ - va_version.h - -EXTRA_DIST = \ - va_version.h.in - -all: all-recursive - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -va_version.h: $(top_builddir)/config.status $(srcdir)/va_version.h.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libva-x11.la: $(libva_x11_la_OBJECTS) $(libva_x11_la_DEPENDENCIES) - $(libva_x11_la_LINK) -rpath $(libdir) $(libva_x11_la_OBJECTS) $(libva_x11_la_LIBADD) $(LIBS) -libva.la: $(libva_la_OBJECTS) $(libva_la_DEPENDENCIES) - $(libva_la_LINK) -rpath $(libdir) $(libva_la_OBJECTS) $(libva_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-libvaincludeHEADERS: $(libvainclude_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(libvaincludedir)" || $(MKDIR_P) "$(DESTDIR)$(libvaincludedir)" - @list='$(libvainclude_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(libvaincludeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libvaincludedir)/$$f'"; \ - $(libvaincludeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libvaincludedir)/$$f"; \ - done - -uninstall-libvaincludeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libvainclude_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(libvaincludedir)/$$f'"; \ - rm -f "$(DESTDIR)$(libvaincludedir)/$$f"; \ - done - -# This directory's subdirectories are mostly independent; you can cd -# into them and run `make' without going through this Makefile. -# To change the values of `make' variables: instead of editing Makefiles, -# (1) if the variable is set in `config.status', edit `config.status' -# (which will cause the Makefiles to be regenerated when you run `make'); -# (2) otherwise, pass the desired values on the `make' command line. -$(RECURSIVE_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - -$(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - case "$@" in \ - distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ - *) list='$(SUBDIRS)' ;; \ - esac; \ - rev=''; for subdir in $$list; do \ - if test "$$subdir" = "."; then :; else \ - rev="$$subdir $$rev"; \ - fi; \ - done; \ - rev="$$rev ."; \ - target=`echo $@ | sed s/-recursive//`; \ - for subdir in $$rev; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done && test -z "$$fail" -tags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ - done -ctags-recursive: - list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ - include_option=--etags-include; \ - empty_fix=.; \ - else \ - include_option=--include; \ - empty_fix=; \ - fi; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ - fi; \ - done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ - if test "$$subdir" = .; then :; else \ - test -d "$(distdir)/$$subdir" \ - || $(MKDIR_P) "$(distdir)/$$subdir" \ - || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ - $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ - am__remove_distdir=: \ - am__skip_length_check=: \ - distdir) \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-recursive -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: installdirs-recursive -installdirs-am: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(libvaincludedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-recursive -install-exec: install-exec-recursive -install-data: install-data-recursive -uninstall: uninstall-recursive - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-recursive -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-recursive - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-recursive - -dvi-am: - -html: html-recursive - -info: info-recursive - -info-am: - -install-data-am: install-libvaincludeHEADERS - -install-dvi: install-dvi-recursive - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-recursive - -install-info: install-info-recursive - -install-man: - -install-pdf: install-pdf-recursive - -install-ps: install-ps-recursive - -installcheck-am: - -maintainer-clean: maintainer-clean-recursive - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-recursive - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-recursive - -pdf-am: - -ps: ps-recursive - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES uninstall-libvaincludeHEADERS - -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \ - install-strip - -.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ - all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags ctags-recursive \ - distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-libLTLIBRARIES \ - install-libvaincludeHEADERS install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ - uninstall-libLTLIBRARIES uninstall-libvaincludeHEADERS - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru libva-0.31.0+latest1/src/va_backend.h libva-0.31.0+latest2/src/va_backend.h --- libva-0.31.0+latest1/src/va_backend.h 2010-02-12 14:42:12.000000000 +0000 +++ libva-0.31.0+latest2/src/va_backend.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,426 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/* - * Video Decode Acceleration -Backend API - */ - -#ifndef _VA_BACKEND_H_ -#define _VA_BACKEND_H_ - -#ifdef IN_LIBVA -#include "va.h" -#include "x11/va_x11.h" -#else -#include -#include -#endif - -#include -#include - - -typedef struct VADriverContext *VADriverContextP; -typedef struct VADisplayContext *VADisplayContextP; - -struct VADriverVTable -{ - VAStatus (*vaTerminate) ( VADriverContextP ctx ); - - VAStatus (*vaQueryConfigProfiles) ( - VADriverContextP ctx, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ - ); - - VAStatus (*vaQueryConfigEntrypoints) ( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ - ); - - VAStatus (*vaGetConfigAttributes) ( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs - ); - - VAStatus (*vaCreateConfig) ( - VADriverContextP ctx, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ - ); - - VAStatus (*vaDestroyConfig) ( - VADriverContextP ctx, - VAConfigID config_id - ); - - VAStatus (*vaQueryConfigAttributes) ( - VADriverContextP ctx, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list, /* out */ - int *num_attribs /* out */ - ); - - VAStatus (*vaCreateSurfaces) ( - VADriverContextP ctx, - int width, - int height, - int format, - int num_surfaces, - VASurfaceID *surfaces /* out */ - ); - - VAStatus (*vaDestroySurfaces) ( - VADriverContextP ctx, - VASurfaceID *surface_list, - int num_surfaces - ); - - VAStatus (*vaCreateContext) ( - VADriverContextP ctx, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ - ); - - VAStatus (*vaDestroyContext) ( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus (*vaCreateBuffer) ( - VADriverContextP ctx, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id /* out */ - ); - - VAStatus (*vaBufferSetNumElements) ( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ - ); - - VAStatus (*vaMapBuffer) ( - VADriverContextP ctx, - VABufferID buf_id, /* in */ - void **pbuf /* out */ - ); - - VAStatus (*vaUnmapBuffer) ( - VADriverContextP ctx, - VABufferID buf_id /* in */ - ); - - VAStatus (*vaDestroyBuffer) ( - VADriverContextP ctx, - VABufferID buffer_id - ); - - VAStatus (*vaBeginPicture) ( - VADriverContextP ctx, - VAContextID context, - VASurfaceID render_target - ); - - VAStatus (*vaRenderPicture) ( - VADriverContextP ctx, - VAContextID context, - VABufferID *buffers, - int num_buffers - ); - - VAStatus (*vaEndPicture) ( - VADriverContextP ctx, - VAContextID context - ); - - VAStatus (*vaSyncSurface) ( - VADriverContextP ctx, - VASurfaceID render_target - ); - - VAStatus (*vaQuerySurfaceStatus) ( - VADriverContextP ctx, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ - ); - - VAStatus (*vaPutSurface) ( - VADriverContextP ctx, - VASurfaceID surface, - Drawable draw, /* X Drawable */ - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - VARectangle *cliprects, /* client supplied clip list */ - unsigned int number_cliprects, /* number of clip rects in the clip list */ - unsigned int flags /* de-interlacing flags */ - ); - - VAStatus (*vaQueryImageFormats) ( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ - ); - - VAStatus (*vaCreateImage) ( - VADriverContextP ctx, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ - ); - - VAStatus (*vaDeriveImage) ( - VADriverContextP ctx, - VASurfaceID surface, - VAImage *image /* out */ - ); - - VAStatus (*vaDestroyImage) ( - VADriverContextP ctx, - VAImageID image - ); - - VAStatus (*vaSetImagePalette) ( - VADriverContextP ctx, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette - ); - - VAStatus (*vaGetImage) ( - VADriverContextP ctx, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image - ); - - VAStatus (*vaPutImage) ( - VADriverContextP ctx, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height - ); - - VAStatus (*vaQuerySubpictureFormats) ( - VADriverContextP ctx, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ - ); - - VAStatus (*vaCreateSubpicture) ( - VADriverContextP ctx, - VAImageID image, - VASubpictureID *subpicture /* out */ - ); - - VAStatus (*vaDestroySubpicture) ( - VADriverContextP ctx, - VASubpictureID subpicture - ); - - VAStatus (*vaSetSubpictureImage) ( - VADriverContextP ctx, - VASubpictureID subpicture, - VAImageID image - ); - - VAStatus (*vaSetSubpictureChromakey) ( - VADriverContextP ctx, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask - ); - - VAStatus (*vaSetSubpictureGlobalAlpha) ( - VADriverContextP ctx, - VASubpictureID subpicture, - float global_alpha - ); - - VAStatus (*vaAssociateSubpicture) ( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - short src_x, /* upper left offset in subpicture */ - short src_y, - unsigned short src_width, - unsigned short src_height, - short dest_x, /* upper left offset in surface */ - short dest_y, - unsigned short dest_width, - unsigned short dest_height, - /* - * whether to enable chroma-keying or global-alpha - * see VA_SUBPICTURE_XXX values - */ - unsigned int flags - ); - - VAStatus (*vaDeassociateSubpicture) ( - VADriverContextP ctx, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces - ); - - VAStatus (*vaQueryDisplayAttributes) ( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* out */ - int *num_attributes /* out */ - ); - - VAStatus (*vaGetDisplayAttributes) ( - VADriverContextP ctx, - VADisplayAttribute *attr_list, /* in/out */ - int num_attributes - ); - - VAStatus (*vaSetDisplayAttributes) ( - VADriverContextP ctx, - VADisplayAttribute *attr_list, - int num_attributes - ); - - /* device specific */ - VAStatus (*vaCreateSurfaceFromCIFrame) ( - VADriverContextP ctx, - unsigned long frame_id, - VASurfaceID *surface /* out */ - ); - - - VAStatus (*vaCreateSurfaceFromV4L2Buf) ( - VADriverContextP ctx, - int v4l2_fd, /* file descriptor of V4L2 device */ - struct v4l2_format *v4l2_fmt, /* format of V4L2 */ - struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */ - VASurfaceID *surface /* out */ - ); - - VAStatus (*vaCopySurfaceToBuffer) ( - VADriverContextP ctx, - VASurfaceID surface, - unsigned int *fourcc, /* out for follow argument */ - unsigned int *luma_stride, - unsigned int *chroma_u_stride, - unsigned int *chroma_v_stride, - unsigned int *luma_offset, - unsigned int *chroma_u_offset, - unsigned int *chroma_v_offset, - void **buffer - ); -}; - -struct VADriverContext -{ - void *pDriverData; - struct VADriverVTable vtable; - - Display *x11_dpy; - int x11_screen; - int version_major; - int version_minor; - int max_profiles; - int max_entrypoints; - int max_attributes; - int max_image_formats; - int max_subpic_formats; - int max_display_attributes; - const char *str_vendor; - - void *handle; /* dlopen handle */ - - void *dri_state; -}; - -#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ -struct VADisplayContext -{ - int vadpy_magic; - - VADisplayContextP pNext; - VADriverContextP pDriverContext; - - int (*vaIsValid) ( - VADisplayContextP ctx - ); - - void (*vaDestroy) ( - VADisplayContextP ctx - ); - - VAStatus (*vaGetDriverName) ( - VADisplayContextP ctx, - char **driver_name - ); -}; - -typedef VAStatus (*VADriverInit) ( - VADriverContextP driver_context -); - - -#endif /* _VA_BACKEND_H_ */ diff -Nru libva-0.31.0+latest1/src/va.c libva-0.31.0+latest2/src/va.c --- libva-0.31.0+latest1/src/va.c 2010-02-12 14:42:12.000000000 +0000 +++ libva-0.31.0+latest2/src/va.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,1266 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define _GNU_SOURCE 1 -#include "va.h" -#include "va_backend.h" - -#include -#include -#include -#include -#include -#include - -#include -#include "va_dri.h" -#include "va_dri2.h" -#include "va_dricommon.h" - - -#define DRIVER_INIT_FUNC "__vaDriverInit_0_31" - -#define DRIVER_EXTENSION "_drv_video.so" - -#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) -#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } - -#define ASSERT assert -#define CHECK_VTABLE(s, ctx, func) if (!va_checkVtable(ctx->vtable.va##func, #func)) s = VA_STATUS_ERROR_UNKNOWN; -#define CHECK_MAXIMUM(s, ctx, var) if (!va_checkMaximum(ctx->max_##var, #var)) s = VA_STATUS_ERROR_UNKNOWN; -#define CHECK_STRING(s, ctx, var) if (!va_checkString(ctx->str_##var, #var)) s = VA_STATUS_ERROR_UNKNOWN; - -#define TRACE(func) if (va_debug_trace) va_infoMessage("[TR] %s\n", #func); - -static int va_debug_trace = 0; - -static int vaDisplayIsValid(VADisplay dpy) -{ - VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; - return pDisplayContext && (pDisplayContext->vadpy_magic == VA_DISPLAY_MAGIC) && pDisplayContext->vaIsValid(pDisplayContext); -} - -static void va_errorMessage(const char *msg, ...) -{ - va_list args; - - fprintf(stderr, "libva error: "); - va_start(args, msg); - vfprintf(stderr, msg, args); - va_end(args); -} - -static void va_infoMessage(const char *msg, ...) -{ - va_list args; - - fprintf(stderr, "libva: "); - va_start(args, msg); - vfprintf(stderr, msg, args); - va_end(args); -} - -static Bool va_checkVtable(void *ptr, char *function) -{ - if (!ptr) - { - va_errorMessage("No valid vtable entry for va%s\n", function); - return False; - } - return True; -} - -static Bool va_checkMaximum(int value, char *variable) -{ - if (!value) - { - va_errorMessage("Failed to define max_%s in init\n", variable); - return False; - } - return True; -} - -static Bool va_checkString(const char* value, char *variable) -{ - if (!value) - { - va_errorMessage("Failed to define str_%s in init\n", variable); - return False; - } - return True; -} - -static VAStatus va_getDriverName(VADisplay dpy, char **driver_name) -{ - VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; - - return pDisplayContext->vaGetDriverName(pDisplayContext, driver_name); -} - -static VAStatus va_openDriver(VADisplay dpy, char *driver_name) -{ - VADriverContextP ctx = CTX(dpy); - VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; - char *search_path = NULL; - char *saveptr; - char *driver_dir; - - if (geteuid() == getuid()) - { - /* don't allow setuid apps to use LIBVA_DRIVERS_PATH */ - search_path = getenv("LIBVA_DRIVERS_PATH"); - if (!search_path) - { - search_path = getenv("LIBGL_DRIVERS_PATH"); - } - } - if (!search_path) - { - search_path = VA_DRIVERS_PATH; - } - - search_path = strdup((const char *)search_path); - driver_dir = strtok_r((const char *)search_path, ":", &saveptr); - while(driver_dir) - { - void *handle = NULL; - char *driver_path = (char *) malloc( strlen(driver_dir) + - strlen(driver_name) + - strlen(DRIVER_EXTENSION) + 2 ); - strncpy( driver_path, driver_dir, strlen(driver_dir) + 1); - strncat( driver_path, "/", strlen("/") ); - strncat( driver_path, driver_name, strlen(driver_name) ); - strncat( driver_path, DRIVER_EXTENSION, strlen(DRIVER_EXTENSION) ); - - va_infoMessage("Trying to open %s\n", driver_path); - - handle = dlopen( driver_path, RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE ); - if (!handle) - { - /* Don't give errors for non-existing files */ - if (0 == access( driver_path, F_OK)) - { - va_errorMessage("dlopen of %s failed: %s\n", driver_path, dlerror()); - } - } - else - { - VADriverInit init_func; - init_func = (VADriverInit) dlsym(handle, DRIVER_INIT_FUNC); - if (!init_func) - { - va_errorMessage("%s has no function %s\n", driver_path, DRIVER_INIT_FUNC); - dlclose(handle); - } - else - { - vaStatus = (*init_func)(ctx); - - if (VA_STATUS_SUCCESS == vaStatus) - { - CHECK_MAXIMUM(vaStatus, ctx, profiles); - CHECK_MAXIMUM(vaStatus, ctx, entrypoints); - CHECK_MAXIMUM(vaStatus, ctx, attributes); - CHECK_MAXIMUM(vaStatus, ctx, image_formats); - CHECK_MAXIMUM(vaStatus, ctx, subpic_formats); - CHECK_MAXIMUM(vaStatus, ctx, display_attributes); - CHECK_STRING(vaStatus, ctx, vendor); - CHECK_VTABLE(vaStatus, ctx, Terminate); - CHECK_VTABLE(vaStatus, ctx, QueryConfigProfiles); - CHECK_VTABLE(vaStatus, ctx, QueryConfigEntrypoints); - CHECK_VTABLE(vaStatus, ctx, QueryConfigAttributes); - CHECK_VTABLE(vaStatus, ctx, CreateConfig); - CHECK_VTABLE(vaStatus, ctx, DestroyConfig); - CHECK_VTABLE(vaStatus, ctx, GetConfigAttributes); - CHECK_VTABLE(vaStatus, ctx, CreateSurfaces); - CHECK_VTABLE(vaStatus, ctx, DestroySurfaces); - CHECK_VTABLE(vaStatus, ctx, CreateContext); - CHECK_VTABLE(vaStatus, ctx, DestroyContext); - CHECK_VTABLE(vaStatus, ctx, CreateBuffer); - CHECK_VTABLE(vaStatus, ctx, BufferSetNumElements); - CHECK_VTABLE(vaStatus, ctx, MapBuffer); - CHECK_VTABLE(vaStatus, ctx, UnmapBuffer); - CHECK_VTABLE(vaStatus, ctx, DestroyBuffer); - CHECK_VTABLE(vaStatus, ctx, BeginPicture); - CHECK_VTABLE(vaStatus, ctx, RenderPicture); - CHECK_VTABLE(vaStatus, ctx, EndPicture); - CHECK_VTABLE(vaStatus, ctx, SyncSurface); - CHECK_VTABLE(vaStatus, ctx, QuerySurfaceStatus); - CHECK_VTABLE(vaStatus, ctx, PutSurface); - CHECK_VTABLE(vaStatus, ctx, QueryImageFormats); - CHECK_VTABLE(vaStatus, ctx, CreateImage); - CHECK_VTABLE(vaStatus, ctx, DeriveImage); - CHECK_VTABLE(vaStatus, ctx, DestroyImage); - CHECK_VTABLE(vaStatus, ctx, SetImagePalette); - CHECK_VTABLE(vaStatus, ctx, GetImage); - CHECK_VTABLE(vaStatus, ctx, PutImage); - CHECK_VTABLE(vaStatus, ctx, QuerySubpictureFormats); - CHECK_VTABLE(vaStatus, ctx, CreateSubpicture); - CHECK_VTABLE(vaStatus, ctx, DestroySubpicture); - CHECK_VTABLE(vaStatus, ctx, SetSubpictureImage); - CHECK_VTABLE(vaStatus, ctx, SetSubpictureChromakey); - CHECK_VTABLE(vaStatus, ctx, SetSubpictureGlobalAlpha); - CHECK_VTABLE(vaStatus, ctx, AssociateSubpicture); - CHECK_VTABLE(vaStatus, ctx, DeassociateSubpicture); - CHECK_VTABLE(vaStatus, ctx, QueryDisplayAttributes); - CHECK_VTABLE(vaStatus, ctx, GetDisplayAttributes); - CHECK_VTABLE(vaStatus, ctx, SetDisplayAttributes); - } - if (VA_STATUS_SUCCESS != vaStatus) - { - va_errorMessage("%s init failed\n", driver_path); - dlclose(handle); - } - if (VA_STATUS_SUCCESS == vaStatus) - { - ctx->handle = handle; - } - free(driver_path); - break; - } - } - free(driver_path); - - driver_dir = strtok_r(NULL, ":", &saveptr); - } - - free(search_path); - - return vaStatus; -} - -VAPrivFunc vaGetLibFunc(VADisplay dpy, const char *func) -{ - VADriverContextP ctx; - if( !vaDisplayIsValid(dpy) ) - return NULL; - ctx = CTX(dpy); - - if (NULL == ctx->handle) - return NULL; - - return (VAPrivFunc) dlsym(ctx->handle, func); -} - - -/* - * Returns a short english description of error_status - */ -const char *vaErrorStr(VAStatus error_status) -{ - switch(error_status) - { - case VA_STATUS_SUCCESS: - return "success (no error)"; - case VA_STATUS_ERROR_OPERATION_FAILED: - return "operation failed"; - case VA_STATUS_ERROR_ALLOCATION_FAILED: - return "resource allocation failed"; - case VA_STATUS_ERROR_INVALID_DISPLAY: - return "invalid VADisplay"; - case VA_STATUS_ERROR_INVALID_CONFIG: - return "invalid VAConfigID"; - case VA_STATUS_ERROR_INVALID_CONTEXT: - return "invalid VAContextID"; - case VA_STATUS_ERROR_INVALID_SURFACE: - return "invalid VASurfaceID"; - case VA_STATUS_ERROR_INVALID_BUFFER: - return "invalid VABufferID"; - case VA_STATUS_ERROR_INVALID_IMAGE: - return "invalid VAImageID"; - case VA_STATUS_ERROR_INVALID_SUBPICTURE: - return "invalid VASubpictureID"; - case VA_STATUS_ERROR_ATTR_NOT_SUPPORTED: - return "attribute not supported"; - case VA_STATUS_ERROR_MAX_NUM_EXCEEDED: - return "list argument exceeds maximum number"; - case VA_STATUS_ERROR_UNSUPPORTED_PROFILE: - return "the requested VAProfile is not supported"; - case VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT: - return "the requested VAEntryPoint is not supported"; - case VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT: - return "the requested RT Format is not supported"; - case VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: - return "the requested VABufferType is not supported"; - case VA_STATUS_ERROR_SURFACE_BUSY: - return "surface is in use"; - case VA_STATUS_ERROR_FLAG_NOT_SUPPORTED: - return "flag not supported"; - case VA_STATUS_ERROR_INVALID_PARAMETER: - return "invalid parameter"; - case VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED: - return "resolution not supported"; - case VA_STATUS_ERROR_UNIMPLEMENTED: - return "the requested function is not implemented"; - case VA_STATUS_ERROR_SURFACE_IN_DISPLAYING: - return "surface is in displaying (may by overlay)" ; - case VA_STATUS_ERROR_UNKNOWN: - return "unknown libva error"; - } - return "unknown libva error / description missing"; -} - -VAStatus vaInitialize ( - VADisplay dpy, - int *major_version, /* out */ - int *minor_version /* out */ -) -{ - char *driver_name = NULL; - VAStatus vaStatus; - - CHECK_DISPLAY(dpy); - - va_debug_trace = (getenv("LIBVA_DEBUG_TRACE") != NULL); - - va_infoMessage("libva version %s\n", VA_VERSION_S); - - vaStatus = va_getDriverName(dpy, &driver_name); - va_infoMessage("va_getDriverName() returns %d\n", vaStatus); - - if (VA_STATUS_SUCCESS == vaStatus) - { - vaStatus = va_openDriver(dpy, driver_name); - va_infoMessage("va_openDriver() returns %d\n", vaStatus); - - *major_version = VA_MAJOR_VERSION; - *minor_version = VA_MINOR_VERSION; - } - - if (driver_name) - free(driver_name); - return vaStatus; -} - - -/* - * After this call, all library internal resources will be cleaned up - */ -VAStatus vaTerminate ( - VADisplay dpy -) -{ - VAStatus vaStatus = VA_STATUS_SUCCESS; - VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; - VADriverContextP old_ctx; - - CHECK_DISPLAY(dpy); - old_ctx = CTX(dpy); - - if (old_ctx->handle) - { - vaStatus = old_ctx->vtable.vaTerminate(old_ctx); - dlclose(old_ctx->handle); - old_ctx->handle = NULL; - } - - if (VA_STATUS_SUCCESS == vaStatus) - pDisplayContext->vaDestroy(pDisplayContext); - return vaStatus; -} - -/* - * vaQueryVendorString returns a pointer to a zero-terminated string - * describing some aspects of the VA implemenation on a specific - * hardware accelerator. The format of the returned string is: - * --- - * e.g. for the Intel GMA500 implementation, an example would be: - * "IntelGMA500-1.0-0.2-patch3 - */ -const char *vaQueryVendorString ( - VADisplay dpy -) -{ - if( !vaDisplayIsValid(dpy) ) - return NULL; - - return CTX(dpy)->str_vendor; -} - - -/* Get maximum number of profiles supported by the implementation */ -int vaMaxNumProfiles ( - VADisplay dpy -) -{ - if( !vaDisplayIsValid(dpy) ) - return 0; - - return CTX(dpy)->max_profiles; -} - -/* Get maximum number of entrypoints supported by the implementation */ -int vaMaxNumEntrypoints ( - VADisplay dpy -) -{ - if( !vaDisplayIsValid(dpy) ) - return 0; - - return CTX(dpy)->max_entrypoints; -} - - -/* Get maximum number of attributs supported by the implementation */ -int vaMaxNumConfigAttributes ( - VADisplay dpy -) -{ - if( !vaDisplayIsValid(dpy) ) - return 0; - - return CTX(dpy)->max_attributes; -} - -VAStatus vaQueryConfigEntrypoints ( - VADisplay dpy, - VAProfile profile, - VAEntrypoint *entrypoints, /* out */ - int *num_entrypoints /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaQueryConfigEntrypoints); - return ctx->vtable.vaQueryConfigEntrypoints ( ctx, profile, entrypoints, num_entrypoints); -} - -VAStatus vaGetConfigAttributes ( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaGetConfigAttributes); - return ctx->vtable.vaGetConfigAttributes ( ctx, profile, entrypoint, attrib_list, num_attribs ); -} - -VAStatus vaQueryConfigProfiles ( - VADisplay dpy, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaQueryConfigProfiles); - return ctx->vtable.vaQueryConfigProfiles ( ctx, profile_list, num_profiles ); -} - -VAStatus vaCreateConfig ( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaCreateConfig); - return ctx->vtable.vaCreateConfig ( ctx, profile, entrypoint, attrib_list, num_attribs, config_id ); -} - -VAStatus vaDestroyConfig ( - VADisplay dpy, - VAConfigID config_id -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaDestroyConfig); - return ctx->vtable.vaDestroyConfig ( ctx, config_id ); -} - -VAStatus vaQueryConfigAttributes ( - VADisplay dpy, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list,/* out */ - int *num_attribs /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaQueryConfigAttributes); - return ctx->vtable.vaQueryConfigAttributes( ctx, config_id, profile, entrypoint, attrib_list, num_attribs); -} - -VAStatus vaCreateSurfaces ( - VADisplay dpy, - int width, - int height, - int format, - int num_surfaces, - VASurfaceID *surfaces /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaCreateSurfaces); - return ctx->vtable.vaCreateSurfaces( ctx, width, height, format, num_surfaces, surfaces ); -} - - -VAStatus vaDestroySurfaces ( - VADisplay dpy, - VASurfaceID *surface_list, - int num_surfaces -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaDestroySurfaces); - return ctx->vtable.vaDestroySurfaces( ctx, surface_list, num_surfaces ); -} - -VAStatus vaCreateContext ( - VADisplay dpy, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaCreateContext); - return ctx->vtable.vaCreateContext( ctx, config_id, picture_width, picture_height, - flag, render_targets, num_render_targets, context ); -} - -VAStatus vaDestroyContext ( - VADisplay dpy, - VAContextID context -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaDestroyContext); - return ctx->vtable.vaDestroyContext( ctx, context ); -} - -VAStatus vaCreateBuffer ( - VADisplay dpy, - VAContextID context, /* in */ - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaCreateBuffer); - return ctx->vtable.vaCreateBuffer( ctx, context, type, size, num_elements, data, buf_id); -} - -VAStatus vaBufferSetNumElements ( - VADisplay dpy, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaBufferSetNumElements); - return ctx->vtable.vaBufferSetNumElements( ctx, buf_id, num_elements ); -} - - -VAStatus vaMapBuffer ( - VADisplay dpy, - VABufferID buf_id, /* in */ - void **pbuf /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaMapBuffer); - return ctx->vtable.vaMapBuffer( ctx, buf_id, pbuf ); -} - -VAStatus vaUnmapBuffer ( - VADisplay dpy, - VABufferID buf_id /* in */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaUnmapBuffer); - return ctx->vtable.vaUnmapBuffer( ctx, buf_id ); -} - -VAStatus vaDestroyBuffer ( - VADisplay dpy, - VABufferID buffer_id -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaDestroyBuffer); - return ctx->vtable.vaDestroyBuffer( ctx, buffer_id ); -} - -VAStatus vaBeginPicture ( - VADisplay dpy, - VAContextID context, - VASurfaceID render_target -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaBeginPicture); - return ctx->vtable.vaBeginPicture( ctx, context, render_target ); -} - -VAStatus vaRenderPicture ( - VADisplay dpy, - VAContextID context, - VABufferID *buffers, - int num_buffers -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaRenderPicture); - return ctx->vtable.vaRenderPicture( ctx, context, buffers, num_buffers ); -} - -VAStatus vaEndPicture ( - VADisplay dpy, - VAContextID context -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaEndPicture); - return ctx->vtable.vaEndPicture( ctx, context ); -} - -VAStatus vaSyncSurface ( - VADisplay dpy, - VASurfaceID render_target -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaSyncSurface); - return ctx->vtable.vaSyncSurface( ctx, render_target ); -} - -VAStatus vaQuerySurfaceStatus ( - VADisplay dpy, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaQuerySurfaceStatus); - return ctx->vtable.vaQuerySurfaceStatus( ctx, render_target, status ); -} - -VAStatus vaPutSurface ( - VADisplay dpy, - VASurfaceID surface, - Drawable draw, /* X Drawable */ - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - VARectangle *cliprects, /* client supplied clip list */ - unsigned int number_cliprects, /* number of clip rects in the clip list */ - unsigned int flags /* de-interlacing flags */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaPutSurface); - return ctx->vtable.vaPutSurface( ctx, surface, draw, srcx, srcy, srcw, srch, - destx, desty, destw, desth, - cliprects, number_cliprects, flags ); -} - -/* Get maximum number of image formats supported by the implementation */ -int vaMaxNumImageFormats ( - VADisplay dpy -) -{ - if( !vaDisplayIsValid(dpy) ) - return 0; - - return CTX(dpy)->max_image_formats; -} - -VAStatus vaQueryImageFormats ( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaQueryImageFormats); - return ctx->vtable.vaQueryImageFormats ( ctx, format_list, num_formats); -} - -/* - * The width and height fields returned in the VAImage structure may get - * enlarged for some YUV formats. The size of the data buffer that needs - * to be allocated will be given in the "data_size" field in VAImage. - * Image data is not allocated by this function. The client should - * allocate the memory and fill in the VAImage structure's data field - * after looking at "data_size" returned from the library. - */ -VAStatus vaCreateImage ( - VADisplay dpy, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaCreateImage); - return ctx->vtable.vaCreateImage ( ctx, format, width, height, image); -} - -/* - * Should call DestroyImage before destroying the surface it is bound to - */ -VAStatus vaDestroyImage ( - VADisplay dpy, - VAImageID image -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaDestroyImage); - return ctx->vtable.vaDestroyImage ( ctx, image); -} - -VAStatus vaSetImagePalette ( - VADisplay dpy, - VAImageID image, - unsigned char *palette -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaSetImagePalette); - return ctx->vtable.vaSetImagePalette ( ctx, image, palette); -} - -/* - * Retrieve surface data into a VAImage - * Image must be in a format supported by the implementation - */ -VAStatus vaGetImage ( - VADisplay dpy, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaGetImage); - return ctx->vtable.vaGetImage ( ctx, surface, x, y, width, height, image); -} - -/* - * Copy data from a VAImage to a surface - * Image must be in a format supported by the implementation - */ -VAStatus vaPutImage ( - VADisplay dpy, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaPutImage); - return ctx->vtable.vaPutImage ( ctx, surface, image, src_x, src_y, src_width, src_height, dest_x, dest_y, dest_width, dest_height ); -} - -/* - * Derive an VAImage from an existing surface. - * This interface will derive a VAImage and corresponding image buffer from - * an existing VA Surface. The image buffer can then be mapped/unmapped for - * direct CPU access. This operation is only possible on implementations with - * direct rendering capabilities and internal surface formats that can be - * represented with a VAImage. When the operation is not possible this interface - * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back - * to using vaCreateImage + vaPutImage to accomplish the same task in an - * indirect manner. - * - * Implementations should only return success when the resulting image buffer - * would be useable with vaMap/Unmap. - * - * When directly accessing a surface special care must be taken to insure - * proper synchronization with the graphics hardware. Clients should call - * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent - * rendering or currently being displayed by an overlay. - * - * Additionally nothing about the contents of a surface should be assumed - * following a vaPutSurface. Implementations are free to modify the surface for - * scaling or subpicture blending within a call to vaPutImage. - * - * Calls to vaPutImage or vaGetImage using the same surface from which the image - * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or - * vaGetImage with other surfaces is supported. - * - * An image created with vaDeriveImage should be freed with vaDestroyImage. The - * image and image buffer structures will be destroyed; however, the underlying - * surface will remain unchanged until freed with vaDestroySurfaces. - */ -VAStatus vaDeriveImage ( - VADisplay dpy, - VASurfaceID surface, - VAImage *image /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaDeriveImage); - return ctx->vtable.vaDeriveImage ( ctx, surface, image ); -} - - -/* Get maximum number of subpicture formats supported by the implementation */ -int vaMaxNumSubpictureFormats ( - VADisplay dpy -) -{ - if( !vaDisplayIsValid(dpy) ) - return 0; - - return CTX(dpy)->max_subpic_formats; -} - -/* - * Query supported subpicture formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag - * for each format to indicate additional capabilities for that format. The actual - * number of formats returned in "format_list" is returned in "num_formats". - */ -VAStatus vaQuerySubpictureFormats ( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaQuerySubpictureFormats); - return ctx->vtable.vaQuerySubpictureFormats ( ctx, format_list, flags, num_formats); -} - -/* - * Subpictures are created with an image associated. - */ -VAStatus vaCreateSubpicture ( - VADisplay dpy, - VAImageID image, - VASubpictureID *subpicture /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaCreateSubpicture); - return ctx->vtable.vaCreateSubpicture ( ctx, image, subpicture ); -} - -/* - * Destroy the subpicture before destroying the image it is assocated to - */ -VAStatus vaDestroySubpicture ( - VADisplay dpy, - VASubpictureID subpicture -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaDestroySubpicture); - return ctx->vtable.vaDestroySubpicture ( ctx, subpicture); -} - -VAStatus vaSetSubpictureImage ( - VADisplay dpy, - VASubpictureID subpicture, - VAImageID image -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaSetSubpictureImage); - return ctx->vtable.vaSetSubpictureImage ( ctx, subpicture, image); -} - - -/* - * If chromakey is enabled, then the area where the source value falls within - * the chromakey [min, max] range is transparent - */ -VAStatus vaSetSubpictureChromakey ( - VADisplay dpy, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaSetSubpictureChromakey); - return ctx->vtable.vaSetSubpictureChromakey ( ctx, subpicture, chromakey_min, chromakey_max, chromakey_mask ); -} - - -/* - * Global alpha value is between 0 and 1. A value of 1 means fully opaque and - * a value of 0 means fully transparent. If per-pixel alpha is also specified then - * the overall alpha is per-pixel alpha multiplied by the global alpha - */ -VAStatus vaSetSubpictureGlobalAlpha ( - VADisplay dpy, - VASubpictureID subpicture, - float global_alpha -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaSetSubpictureGlobalAlpha); - return ctx->vtable.vaSetSubpictureGlobalAlpha ( ctx, subpicture, global_alpha ); -} - -/* - vaAssociateSubpicture associates the subpicture with the target_surface. - It defines the region mapping between the subpicture and the target - surface through source and destination rectangles (with the same width and height). - Both will be displayed at the next call to vaPutSurface. Additional - associations before the call to vaPutSurface simply overrides the association. -*/ -VAStatus vaAssociateSubpicture ( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - short src_x, /* upper left offset in subpicture */ - short src_y, - unsigned short src_width, - unsigned short src_height, - short dest_x, /* upper left offset in surface */ - short dest_y, - unsigned short dest_width, - unsigned short dest_height, - /* - * whether to enable chroma-keying or global-alpha - * see VA_SUBPICTURE_XXX values - */ - unsigned int flags -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaAssociateSubpicture); - return ctx->vtable.vaAssociateSubpicture ( ctx, subpicture, target_surfaces, num_surfaces, src_x, src_y, src_width, src_height, dest_x, dest_y, dest_width, dest_height, flags ); -} - -/* - * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. - */ -VAStatus vaDeassociateSubpicture ( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaDeassociateSubpicture); - return ctx->vtable.vaDeassociateSubpicture ( ctx, subpicture, target_surfaces, num_surfaces ); -} - - -/* Get maximum number of display attributes supported by the implementation */ -int vaMaxNumDisplayAttributes ( - VADisplay dpy -) -{ - if( !vaDisplayIsValid(dpy) ) - return 0; - - return CTX(dpy)->max_display_attributes; -} - -/* - * Query display attributes - * The caller must provide a "attr_list" array that can hold at - * least vaMaxNumDisplayAttributes() entries. The actual number of attributes - * returned in "attr_list" is returned in "num_attributes". - */ -VAStatus vaQueryDisplayAttributes ( - VADisplay dpy, - VADisplayAttribute *attr_list, /* out */ - int *num_attributes /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaQueryDisplayAttributes); - return ctx->vtable.vaQueryDisplayAttributes ( ctx, attr_list, num_attributes ); -} - -/* - * Get display attributes - * This function returns the current attribute values in "attr_list". - * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field - * from vaQueryDisplayAttributes() can have their values retrieved. - */ -VAStatus vaGetDisplayAttributes ( - VADisplay dpy, - VADisplayAttribute *attr_list, /* in/out */ - int num_attributes -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaGetDisplayAttributes); - return ctx->vtable.vaGetDisplayAttributes ( ctx, attr_list, num_attributes ); -} - -/* - * Set display attributes - * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field - * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or - * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED - */ -VAStatus vaSetDisplayAttributes ( - VADisplay dpy, - VADisplayAttribute *attr_list, - int num_attributes -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaSetDisplayAttributes); - return ctx->vtable.vaSetDisplayAttributes ( ctx, attr_list, num_attributes ); -} - -/* Wrap a CI (camera imaging) frame as a VA surface to share captured video between camear - * and VA encode. With frame_id, VA driver need to call CI interfaces to get the information - * of the frame, and to determine if the frame can be wrapped as a VA surface - * - * Application should make sure the frame is idle before the frame is passed into VA stack - * and also a vaSyncSurface should be called before application tries to access the frame - * from CI stack - */ -VAStatus vaCreateSurfaceFromCIFrame ( - VADisplay dpy, - unsigned long frame_id, - VASurfaceID *surface /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaCreateSurfacesFromCIFrame); - - if (ctx->vtable.vaCreateSurfaceFromCIFrame) - return ctx->vtable.vaCreateSurfaceFromCIFrame( ctx, frame_id, surface ); - else - return VA_STATUS_ERROR_UNKNOWN; -} - - -/* Wrap a V4L2 buffer as a VA surface, so that V4L2 camera, VA encode - * can share the data without copy - * The VA driver should query the camera device from v4l2_fd to see - * if camera device memory/buffer can be wrapped into a VA surface - * Buffer information is passed in by v4l2_fmt and v4l2_buf structure, - * VA driver also needs do further check if the buffer can meet encode - * hardware requirement, such as dimension, fourcc, stride, etc - * - * Application should make sure the buffer is idle before the frame into VA stack - * and also a vaSyncSurface should be called before application tries to access the frame - * from V4L2 stack - */ -VAStatus vaCreateSurfaceFromV4L2Buf( - VADisplay dpy, - int v4l2_fd, /* file descriptor of V4L2 device */ - struct v4l2_format *v4l2_fmt, /* format of V4L2 */ - struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */ - VASurfaceID *surface /* out */ -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vtable.vaCreateSurfaceFromV4L2Buf); - - if (ctx->vtable.vaCreateSurfaceFromV4L2Buf) - return ctx->vtable.vaCreateSurfaceFromV4L2Buf( ctx, v4l2_fd, v4l2_fmt, v4l2_buf, surface ); - else - return VA_STATUS_ERROR_UNKNOWN; -} - -/* It is a debug interface, and isn't exported in core VAAPI - * It is used to dump surface data into system memory - * Application should explicitly call free to release the buffer memory - */ - -VAStatus vaCopySurfaceToBuffer(VADisplay dpy, - VASurfaceID surface, - unsigned int *fourcc, /* following are output argument */ - unsigned int *luma_stride, - unsigned int *chroma_u_stride, - unsigned int *chroma_v_stride, - unsigned int *luma_offset, - unsigned int *chroma_u_offset, - unsigned int *chroma_v_offset, - void **buffer -) -{ - VADriverContextP ctx; - CHECK_DISPLAY(dpy); - ctx = CTX(dpy); - - TRACE(vaCopySurfaceToBuffer); - if (ctx->vtable.vaCopySurfaceToBuffer) - return ctx->vtable.vaCopySurfaceToBuffer( ctx, surface, fourcc, luma_stride, chroma_u_stride, chroma_v_stride, luma_offset, chroma_u_offset, chroma_v_offset, buffer); - else - return VA_STATUS_ERROR_UNKNOWN; -} diff -Nru libva-0.31.0+latest1/src/va.h libva-0.31.0+latest2/src/va.h --- libva-0.31.0+latest1/src/va.h 2010-02-12 14:42:12.000000000 +0000 +++ libva-0.31.0+latest2/src/va.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,1717 +0,0 @@ -/* - * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -/* - * Video Acceleration (VA) API Specification - * - * Rev. 0.30 - * - * - * Revision History: - * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft - * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors - * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode - * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() - * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs. - * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management - * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration - * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode. - * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode - * and MPEG-2 motion compensation. - * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. - * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure. - * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. - * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha. - * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures. - * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. - * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. - * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics - * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage - * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture - * to enable scaling - * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, - * added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED - * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes - * for ISO C conformance. - * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend - * Application needs to relink with the new library. - * - * Acknowledgements: - * Some concepts borrowed from XvMC and XvImage. - * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenole Beauchesne (SDS) - * contributed to various aspects of the API. - */ - -#ifndef _VA_H_ -#define _VA_H_ - -#ifdef IN_LIBVA -#include "va_version.h" -#else -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* -Overview - -The VA API is intended to provide an interface between a video decode/encode/display -application (client) and a hardware accelerator (server), to off-load -video decode/encode/display operations from the host to the hardware accelerator at various -entry-points. - -The basic operation steps are: - -- Negotiate a mutually acceptable configuration with the server to lock - down profile, entrypoints, and other attributes that will not change on - a frame-by-frame basis. -- Create a decode context which represents a "virtualized" hardware decode - device -- Get and fill decode buffers with picture level, slice level and macroblock - level data (depending on entrypoints) -- Pass the decode buffers to the server to decode the current frame - -Initialization & Configuration Management - -- Find out supported profiles -- Find out entrypoints for a given profile -- Find out configuration attributes for a given profile/entrypoint pair -- Create a configuration for use by the decoder - -*/ - -typedef void* VADisplay; /* window system dependent */ - -typedef int VAStatus; /* Return status type from functions */ -/* Values for the return status */ -#define VA_STATUS_SUCCESS 0x00000000 -#define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 -#define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 -#define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 -#define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 -#define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 -#define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 -#define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 -#define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 -#define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 -#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a -#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b -#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c -#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d -#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e -#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f -#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 -#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 -#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 -#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 -#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 -#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 -#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF - -/* - * Returns a short english description of error_status - */ -const char *vaErrorStr(VAStatus error_status); - -/* - * Initialization: - * A display must be obtained by calling vaGetDisplay() before calling - * vaInitialize() and other functions. This connects the API to the - * native window system. - * For X Windows, native_dpy would be from XOpenDisplay() - */ -typedef void* NativeDisplay; /* window system dependent */ - -/* - * Initialize the library - */ -VAStatus vaInitialize ( - VADisplay dpy, - int *major_version, /* out */ - int *minor_version /* out */ -); - -/* - * After this call, all library internal resources will be cleaned up - */ -VAStatus vaTerminate ( - VADisplay dpy -); - -/* - * vaQueryVendorString returns a pointer to a zero-terminated string - * describing some aspects of the VA implemenation on a specific - * hardware accelerator. The format of the returned string is vendor - * specific and at the discretion of the implementer. - * e.g. for the Intel GMA500 implementation, an example would be: - * "Intel GMA500 - 2.0.0.32L.0005" - */ -const char *vaQueryVendorString ( - VADisplay dpy -); - -typedef int (*VAPrivFunc)(); - -/* - * Return a function pointer given a function name in the library. - * This allows private interfaces into the library - */ -VAPrivFunc vaGetLibFunc ( - VADisplay dpy, - const char *func -); - -/* Currently defined profiles */ -typedef enum -{ - VAProfileMPEG2Simple = 0, - VAProfileMPEG2Main = 1, - VAProfileMPEG4Simple = 2, - VAProfileMPEG4AdvancedSimple = 3, - VAProfileMPEG4Main = 4, - VAProfileH264Baseline = 5, - VAProfileH264Main = 6, - VAProfileH264High = 7, - VAProfileVC1Simple = 8, - VAProfileVC1Main = 9, - VAProfileVC1Advanced = 10, - VAProfileH263Baseline = 11 -} VAProfile; - -/* - * Currently defined entrypoints - */ -typedef enum -{ - VAEntrypointVLD = 1, - VAEntrypointIZZ = 2, - VAEntrypointIDCT = 3, - VAEntrypointMoComp = 4, - VAEntrypointDeblocking = 5, - VAEntrypointEncSlice = 6 /* slice level encode */ -} VAEntrypoint; - -/* Currently defined configuration attribute types */ -typedef enum -{ - VAConfigAttribRTFormat = 0, - VAConfigAttribSpatialResidual = 1, - VAConfigAttribSpatialClipping = 2, - VAConfigAttribIntraResidual = 3, - VAConfigAttribEncryption = 4, - VAConfigAttribRateControl = 5 -} VAConfigAttribType; - -/* - * Configuration attributes - * If there is more than one value for an attribute, a default - * value will be assigned to the attribute if the client does not - * specify the attribute when creating a configuration - */ -typedef struct _VAConfigAttrib { - VAConfigAttribType type; - unsigned int value; /* OR'd flags (bits) for this attribute */ -} VAConfigAttrib; - -/* attribute value for VAConfigAttribRTFormat */ -#define VA_RT_FORMAT_YUV420 0x00000001 -#define VA_RT_FORMAT_YUV422 0x00000002 -#define VA_RT_FORMAT_YUV444 0x00000004 -#define VA_RT_FORMAT_PROTECTED 0x80000000 - -/* attribute value for VAConfigAttribRateControl */ -#define VA_RC_NONE 0x00000001 -#define VA_RC_CBR 0x00000002 -#define VA_RC_VBR 0x00000004 - -/* - * if an attribute is not applicable for a given - * profile/entrypoint pair, then set the value to the following - */ -#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 - -/* Get maximum number of profiles supported by the implementation */ -int vaMaxNumProfiles ( - VADisplay dpy -); - -/* Get maximum number of entrypoints supported by the implementation */ -int vaMaxNumEntrypoints ( - VADisplay dpy -); - -/* Get maximum number of attributs supported by the implementation */ -int vaMaxNumConfigAttributes ( - VADisplay dpy -); - -/* - * Query supported profiles - * The caller must provide a "profile_list" array that can hold at - * least vaMaxNumProfile() entries. The actual number of profiles - * returned in "profile_list" is returned in "num_profile". - */ -VAStatus vaQueryConfigProfiles ( - VADisplay dpy, - VAProfile *profile_list, /* out */ - int *num_profiles /* out */ -); - -/* - * Query supported entrypoints for a given profile - * The caller must provide an "entrypoint_list" array that can hold at - * least vaMaxNumEntrypoints() entries. The actual number of entrypoints - * returned in "entrypoint_list" is returned in "num_entrypoints". - */ -VAStatus vaQueryConfigEntrypoints ( - VADisplay dpy, - VAProfile profile, - VAEntrypoint *entrypoint_list, /* out */ - int *num_entrypoints /* out */ -); - -/* - * Get attributes for a given profile/entrypoint pair - * The caller must provide an "attrib_list" with all attributes to be - * retrieved. Upon return, the attributes in "attrib_list" have been - * updated with their value. Unknown attributes or attributes that are - * not supported for the given profile/entrypoint pair will have their - * value set to VA_ATTRIB_NOT_SUPPORTED - */ -VAStatus vaGetConfigAttributes ( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, /* in/out */ - int num_attribs -); - -/* Generic ID type, can be re-typed for specific implementation */ -typedef unsigned int VAGenericID; - -typedef VAGenericID VAConfigID; - -/* - * Create a configuration for the decode pipeline - * it passes in the attribute list that specifies the attributes it cares - * about, with the rest taking default values. - */ -VAStatus vaCreateConfig ( - VADisplay dpy, - VAProfile profile, - VAEntrypoint entrypoint, - VAConfigAttrib *attrib_list, - int num_attribs, - VAConfigID *config_id /* out */ -); - -/* - * Free resources associdated with a given config - */ -VAStatus vaDestroyConfig ( - VADisplay dpy, - VAConfigID config_id -); - -/* - * Query all attributes for a given configuration - * The profile of the configuration is returned in "profile" - * The entrypoint of the configuration is returned in "entrypoint" - * The caller must provide an "attrib_list" array that can hold at least - * vaMaxNumConfigAttributes() entries. The actual number of attributes - * returned in "attrib_list" is returned in "num_attribs" - */ -VAStatus vaQueryConfigAttributes ( - VADisplay dpy, - VAConfigID config_id, - VAProfile *profile, /* out */ - VAEntrypoint *entrypoint, /* out */ - VAConfigAttrib *attrib_list,/* out */ - int *num_attribs /* out */ -); - - -/* - * Contexts and Surfaces - * - * Context represents a "virtual" video decode pipeline. Surfaces are render - * targets for a given context. The data in the surfaces are not accessible - * to the client and the internal data format of the surface is implementatin - * specific. - * - * Surfaces will be bound to a context when the context is created. Once - * a surface is bound to a given context, it can not be used to create - * another context. The association is removed when the context is destroyed - * - * Both contexts and surfaces are identified by unique IDs and its - * implementation specific internals are kept opaque to the clients - */ - -typedef VAGenericID VAContextID; - -typedef VAGenericID VASurfaceID; - -#define VA_INVALID_ID 0xffffffff -#define VA_INVALID_SURFACE VA_INVALID_ID - -/* - * vaCreateSurfaces - Create an array of surfaces used for decode and display - * dpy: display - * width: surface width - * height: surface height - * format: VA_RT_FORMAT_YUV420, VA_RT_FORMAT_YUV422 or VA_RT_FORMAT_YUV444 - * num_surfaces: number of surfaces to be created - * surfaces: array of surfaces created upon return - */ -VAStatus vaCreateSurfaces ( - VADisplay dpy, - int width, - int height, - int format, - int num_surfaces, - VASurfaceID *surfaces /* out */ -); - -/* Wrap a CI (camera imaging) frame as a VA surface to share captured video between camear - * and VA encode. With frame_id, VA driver need to call CI interfaces to get the information - * of the frame, and to determine if the frame can be wrapped as a VA surface - * - * Application should make sure the frame is idle before the frame is passed into VA stack - * and also a vaSyncSurface should be called before application tries to access the frame - * from CI stack - */ -VAStatus vaCreateSurfaceFromCIFrame ( - VADisplay dpy, - unsigned long frame_id, - VASurfaceID *surface /* out */ -); - - -/* - * vaDestroySurfaces - Destroy resources associated with surfaces. - * Surfaces can only be destroyed after the context associated has been - * destroyed. - * dpy: display - * surfaces: array of surfaces to destroy - * num_surfaces: number of surfaces in the array to be destroyed. - */ -VAStatus vaDestroySurfaces ( - VADisplay dpy, - VASurfaceID *surfaces, - int num_surfaces -); - -#define VA_PROGRESSIVE 0x1 -/* - * vaCreateContext - Create a context - * dpy: display - * config_id: configuration for the context - * picture_width: coded picture width - * picture_height: coded picture height - * flag: any combination of the following: - * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) - * render_targets: render targets (surfaces) tied to the context - * num_render_targets: number of render targets in the above array - * context: created context id upon return - */ -VAStatus vaCreateContext ( - VADisplay dpy, - VAConfigID config_id, - int picture_width, - int picture_height, - int flag, - VASurfaceID *render_targets, - int num_render_targets, - VAContextID *context /* out */ -); - -/* - * vaDestroyContext - Destroy a context - * dpy: display - * context: context to be destroyed - */ -VAStatus vaDestroyContext ( - VADisplay dpy, - VAContextID context -); - -/* - * Buffers - * Buffers are used to pass various types of data from the - * client to the server. The server maintains a data store - * for each buffer created, and the client idenfies a buffer - * through a unique buffer id assigned by the server. - */ - -typedef VAGenericID VABufferID; - -typedef enum -{ - VAPictureParameterBufferType = 0, - VAIQMatrixBufferType = 1, - VABitPlaneBufferType = 2, - VASliceGroupMapBufferType = 3, - VASliceParameterBufferType = 4, - VASliceDataBufferType = 5, - VAMacroblockParameterBufferType = 6, - VAResidualDataBufferType = 7, - VADeblockingParameterBufferType = 8, - VAImageBufferType = 9, - VAProtectedSliceDataBufferType = 10, -/* Following are encode buffer types */ - VAEncCodedBufferType = 21, - VAEncSequenceParameterBufferType = 22, - VAEncPictureParameterBufferType = 23, - VAEncSliceParameterBufferType = 24, - VAEncH264VUIBufferType = 25, - VAEncH264SEIBufferType = 26, -} VABufferType; - - -/* - * There will be cases where the bitstream buffer will not have enough room to hold - * the data for the entire slice, and the following flags will be used in the slice - * parameter to signal to the server for the possible cases. - * If a slice parameter buffer and slice data buffer pair is sent to the server with - * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below), - * then a slice parameter and data buffer needs to be sent again to complete this slice. - */ -#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is in the buffer but the end if not */ -#define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of the slice is in the buffer */ -#define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the buffer */ - -/* Codec-independent Slice Parameter Buffer base */ -typedef struct _VASliceParameterBufferBase -{ - unsigned int slice_data_size; /* number of bytes in the slice data buffer for this slice */ - unsigned int slice_data_offset; /* the offset to the first byte of slice data */ - unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */ -} VASliceParameterBufferBase; - -/**************************** - * MPEG-2 data structures - ****************************/ - -/* MPEG-2 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG2 -{ - unsigned short horizontal_size; - unsigned short vertical_size; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* meanings of the following fields are the same as in the standard */ - int picture_coding_type; - int f_code; /* pack all four fcode into this */ - union { - struct { - unsigned int intra_dc_precision : 2; - unsigned int picture_structure : 2; - unsigned int top_field_first : 1; - unsigned int frame_pred_frame_dct : 1; - unsigned int concealment_motion_vectors : 1; - unsigned int q_scale_type : 1; - unsigned int intra_vlc_format : 1; - unsigned int alternate_scan : 1; - unsigned int repeat_first_field : 1; - unsigned int progressive_frame : 1; - unsigned int is_first_field : 1; /* indicate whether the current field - * is the first field for field picture - */ - } bits; - unsigned int value; - } picture_coding_extension; -} VAPictureParameterBufferMPEG2; - -/* MPEG-2 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG2 -{ - int load_intra_quantiser_matrix; - int load_non_intra_quantiser_matrix; - int load_chroma_intra_quantiser_matrix; - int load_chroma_non_intra_quantiser_matrix; - unsigned char intra_quantiser_matrix[64]; - unsigned char non_intra_quantiser_matrix[64]; - unsigned char chroma_intra_quantiser_matrix[64]; - unsigned char chroma_non_intra_quantiser_matrix[64]; -} VAIQMatrixBufferMPEG2; - -/* MPEG-2 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG2 -{ - unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ - unsigned int slice_data_offset;/* the offset to the first byte of slice data */ - unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - unsigned int slice_horizontal_position; - unsigned int slice_vertical_position; - int quantiser_scale_code; - int intra_slice_flag; -} VASliceParameterBufferMPEG2; - -/* MPEG-2 Macroblock Parameter Buffer */ -typedef struct _VAMacroblockParameterBufferMPEG2 -{ - unsigned short macroblock_address; - /* - * macroblock_address (in raster scan order) - * top-left: 0 - * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 - */ - unsigned char macroblock_type; /* see definition below */ - union { - struct { - unsigned int frame_motion_type : 2; - unsigned int field_motion_type : 2; - unsigned int dct_type : 1; - } bits; - unsigned int value; - } macroblock_modes; - unsigned char motion_vertical_field_select; - /* - * motion_vertical_field_select: - * see section 6.3.17.2 in the spec - * only the lower 4 bits are used - * bit 0: first vector forward - * bit 1: first vector backward - * bit 2: second vector forward - * bit 3: second vector backward - */ - short PMV[2][2][2]; /* see Table 7-7 in the spec */ - unsigned short coded_block_pattern; - /* - * The bitplanes for coded_block_pattern are described - * in Figure 6.10-12 in the spec - */ - - /* Number of skipped macroblocks after this macroblock */ - unsigned short num_skipped_macroblocks; -} VAMacroblockParameterBufferMPEG2; - -/* - * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) - */ -#define VA_MB_TYPE_MOTION_FORWARD 0x02 -#define VA_MB_TYPE_MOTION_BACKWARD 0x04 -#define VA_MB_TYPE_MOTION_PATTERN 0x08 -#define VA_MB_TYPE_MOTION_INTRA 0x10 - -/* - * MPEG-2 Residual Data Buffer - * For each macroblock, there wil be 64 shorts (16-bit) in the - * residual data buffer - */ - -/**************************** - * MPEG-4 Part 2 data structures - ****************************/ - -/* MPEG-4 Picture Parameter Buffer */ -/* - * For each frame or field, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferMPEG4 -{ - unsigned short vop_width; - unsigned short vop_height; - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - union { - struct { - unsigned int short_video_header : 1; - unsigned int chroma_format : 2; - unsigned int interlaced : 1; - unsigned int obmc_disable : 1; - unsigned int sprite_enable : 2; - unsigned int sprite_warping_accuracy : 2; - unsigned int quant_type : 1; - unsigned int quarter_sample : 1; - unsigned int data_partitioned : 1; - unsigned int reversible_vlc : 1; - unsigned int resync_marker_disable : 1; - } bits; - unsigned int value; - } vol_fields; - unsigned char no_of_sprite_warping_points; - short sprite_trajectory_du[3]; - short sprite_trajectory_dv[3]; - unsigned char quant_precision; - union { - struct { - unsigned int vop_coding_type : 2; - unsigned int backward_reference_vop_coding_type : 2; - unsigned int vop_rounding_type : 1; - unsigned int intra_dc_vlc_thr : 3; - unsigned int top_field_first : 1; - unsigned int alternate_vertical_scan_flag : 1; - } bits; - unsigned int value; - } vop_fields; - unsigned char vop_fcode_forward; - unsigned char vop_fcode_backward; - unsigned short vop_time_increment_resolution; - /* short header related */ - unsigned char num_gobs_in_vop; - unsigned char num_macroblocks_in_gob; - /* for direct mode prediction */ - short TRB; - short TRD; -} VAPictureParameterBufferMPEG4; - -/* MPEG-4 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferMPEG4 -{ - int load_intra_quant_mat; - int load_non_intra_quant_mat; - unsigned char intra_quant_mat[64]; - unsigned char non_intra_quant_mat[64]; -} VAIQMatrixBufferMPEG4; - -/* MPEG-4 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferMPEG4 -{ - unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ - unsigned int slice_data_offset;/* the offset to the first byte of slice data */ - unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - unsigned int macroblock_number; - int quant_scale; -} VASliceParameterBufferMPEG4; - -/* - VC-1 data structures -*/ - -typedef enum /* see 7.1.1.32 */ -{ - VAMvMode1Mv = 0, - VAMvMode1MvHalfPel = 1, - VAMvMode1MvHalfPelBilinear = 2, - VAMvModeMixedMv = 3, - VAMvModeIntensityCompensation = 4 -} VAMvModeVC1; - -/* VC-1 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a picture parameter - * buffer must be send. Multiple picture parameter buffers may be - * sent for a single picture. In that case picture parameters will - * apply to all slice data that follow it until a new picture - * parameter buffer is sent. - * - * Notes: - * pic_quantizer_type should be set to the applicable quantizer - * type as defined by QUANTIZER (J.1.19) and either - * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) - */ -typedef struct _VAPictureParameterBufferVC1 -{ - VASurfaceID forward_reference_picture; - VASurfaceID backward_reference_picture; - /* if out-of-loop post-processing is done on the render - target, then we need to keep the in-loop decoded - picture as a reference picture */ - VASurfaceID inloop_decoded_picture; - - /* sequence layer for AP or meta data for SP and MP */ - union { - struct { - unsigned int pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ - unsigned int interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ - unsigned int tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ - unsigned int finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ - unsigned int psf : 1; /* SEQUENCE_LAYER::PSF */ - unsigned int multires : 1; /* METADATA::MULTIRES */ - unsigned int overlap : 1; /* METADATA::OVERLAP */ - unsigned int syncmarker : 1; /* METADATA::SYNCMARKER */ - unsigned int rangered : 1; /* METADATA::RANGERED */ - unsigned int max_b_frames : 3; /* METADATA::MAXBFRAMES */ - } bits; - unsigned int value; - } sequence_fields; - - unsigned short coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ - unsigned short coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ - union { - struct { - unsigned int broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */ - unsigned int closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */ - unsigned int panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */ - unsigned int loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ - } bits; - unsigned int value; - } entrypoint_fields; - unsigned char conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ - unsigned char fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ - union { - struct { - unsigned int luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */ - unsigned int luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ - unsigned int chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */ - unsigned int chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */ - } bits; - unsigned int value; - } range_mapping_fields; - - unsigned char b_picture_fraction; /* PICTURE_LAYER::BFRACTION */ - unsigned char cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ - unsigned char mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ - unsigned char range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ - unsigned char rounding_control; /* PICTURE_LAYER::RNDCTRL */ - unsigned char post_processing; /* PICTURE_LAYER::POSTPROC */ - unsigned char picture_resolution_index; /* PICTURE_LAYER::RESPIC */ - unsigned char luma_scale; /* PICTURE_LAYER::LUMSCALE */ - unsigned char luma_shift; /* PICTURE_LAYER::LUMSHIFT */ - union { - struct { - unsigned int picture_type : 3; /* PICTURE_LAYER::PTYPE */ - unsigned int frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ - unsigned int top_field_first : 1; /* PICTURE_LAYER::TFF */ - unsigned int is_first_field : 1; /* set to 1 if it is the first field */ - unsigned int intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */ - } bits; - unsigned int value; - } picture_fields; - union { - struct { - unsigned int mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - unsigned int direct_mb : 1; /* PICTURE::DIRECTMB */ - unsigned int skip_mb : 1; /* PICTURE::SKIPMB */ - unsigned int field_tx : 1; /* PICTURE::FIELDTX */ - unsigned int forward_mb : 1; /* PICTURE::FORWARDMB */ - unsigned int ac_pred : 1; /* PICTURE::ACPRED */ - unsigned int overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - unsigned int value; - } raw_coding; - union { - struct { - unsigned int bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ - unsigned int bp_direct_mb : 1; /* PICTURE::DIRECTMB */ - unsigned int bp_skip_mb : 1; /* PICTURE::SKIPMB */ - unsigned int bp_field_tx : 1; /* PICTURE::FIELDTX */ - unsigned int bp_forward_mb : 1; /* PICTURE::FORWARDMB */ - unsigned int bp_ac_pred : 1; /* PICTURE::ACPRED */ - unsigned int bp_overflags : 1; /* PICTURE::OVERFLAGS */ - } flags; - unsigned int value; - } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */ - union { - struct { - unsigned int reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */ - unsigned int reference_distance : 5;/* PICTURE_LAYER::REFDIST */ - unsigned int num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ - unsigned int reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */ - } bits; - unsigned int value; - } reference_fields; - union { - struct { - unsigned int mv_mode : 3; /* PICTURE_LAYER::MVMODE */ - unsigned int mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */ - unsigned int mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */ - unsigned int two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */ - unsigned int four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */ - unsigned int four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */ - unsigned int extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */ - unsigned int extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */ - unsigned int extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */ - unsigned int extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */ - } bits; - unsigned int value; - } mv_fields; - union { - struct { - unsigned int dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ - unsigned int quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */ - unsigned int half_qp : 1; /* PICTURE_LAYER::HALFQP */ - unsigned int pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ - unsigned int pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ - unsigned int dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ - unsigned int dq_profile : 2; /* VOPDQUANT::DQPROFILE */ - unsigned int dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ - unsigned int dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ - unsigned int dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ - unsigned int alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ - } bits; - unsigned int value; - } pic_quantizer_fields; - union { - struct { - unsigned int variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */ - unsigned int mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */ - unsigned int frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */ - unsigned int transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */ - unsigned int transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */ - unsigned int intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */ - } bits; - unsigned int value; - } transform_fields; -} VAPictureParameterBufferVC1; - -/* VC-1 Bitplane Buffer -There will be at most three bitplanes coded in any picture header. To send -the bitplane data more efficiently, each byte is divided in two nibbles, with -each nibble carrying three bitplanes for one macroblock. The following table -shows the bitplane data arrangement within each nibble based on the picture -type. - -Picture Type Bit3 Bit2 Bit1 Bit0 -I or BI OVERFLAGS ACPRED FIELDTX -P MYTYPEMB SKIPMB DIRECTMB -B FORWARDMB SKIPMB DIRECTMB - -Within each byte, the lower nibble is for the first MB and the upper nibble is -for the second MB. E.g. the lower nibble of the first byte in the bitplane -buffer is for Macroblock #1 and the upper nibble of the first byte is for -Macroblock #2 in the first row. -*/ - -/* VC-1 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferVC1 -{ - unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ - unsigned int slice_data_offset;/* the offset to the first byte of slice data */ - unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ - unsigned int slice_vertical_position; -} VASliceParameterBufferVC1; - -/* VC-1 Slice Data Buffer */ -/* -This is simplely a buffer containing raw bit-stream bytes -*/ - -/**************************** - * H.264/AVC data structures - ****************************/ - -typedef struct _VAPictureH264 -{ - VASurfaceID picture_id; - unsigned int frame_idx; - unsigned int flags; - unsigned int TopFieldOrderCnt; - unsigned int BottomFieldOrderCnt; -} VAPictureH264; -/* flags in VAPictureH264 could be OR of the following */ -#define VA_PICTURE_H264_INVALID 0x00000001 -#define VA_PICTURE_H264_TOP_FIELD 0x00000002 -#define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 -#define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 -#define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 - -/* H.264 Picture Parameter Buffer */ -/* - * For each picture, and before any slice data, a single - * picture parameter buffer must be send. - */ -typedef struct _VAPictureParameterBufferH264 -{ - VAPictureH264 CurrPic; - VAPictureH264 ReferenceFrames[16]; /* in DPB */ - unsigned short picture_width_in_mbs_minus1; - unsigned short picture_height_in_mbs_minus1; - unsigned char bit_depth_luma_minus8; - unsigned char bit_depth_chroma_minus8; - unsigned char num_ref_frames; - union { - struct { - unsigned int chroma_format_idc : 2; - unsigned int residual_colour_transform_flag : 1; - unsigned int gaps_in_frame_num_value_allowed_flag : 1; - unsigned int frame_mbs_only_flag : 1; - unsigned int mb_adaptive_frame_field_flag : 1; - unsigned int direct_8x8_inference_flag : 1; - unsigned int MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */ - unsigned int log2_max_frame_num_minus4 : 4; - unsigned int pic_order_cnt_type : 2; - unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4; - unsigned int delta_pic_order_always_zero_flag : 1; - } bits; - unsigned int value; - } seq_fields; - unsigned char num_slice_groups_minus1; - unsigned char slice_group_map_type; - unsigned short slice_group_change_rate_minus1; - signed char pic_init_qp_minus26; - signed char pic_init_qs_minus26; - signed char chroma_qp_index_offset; - signed char second_chroma_qp_index_offset; - union { - struct { - unsigned int entropy_coding_mode_flag : 1; - unsigned int weighted_pred_flag : 1; - unsigned int weighted_bipred_idc : 2; - unsigned int transform_8x8_mode_flag : 1; - unsigned int field_pic_flag : 1; - unsigned int constrained_intra_pred_flag : 1; - unsigned int pic_order_present_flag : 1; - unsigned int deblocking_filter_control_present_flag : 1; - unsigned int redundant_pic_cnt_present_flag : 1; - unsigned int reference_pic_flag : 1; /* nal_ref_idc != 0 */ - } bits; - unsigned int value; - } pic_fields; - unsigned short frame_num; -} VAPictureParameterBufferH264; - -/* H.264 Inverse Quantization Matrix Buffer */ -typedef struct _VAIQMatrixBufferH264 -{ - unsigned char ScalingList4x4[6][16]; - unsigned char ScalingList8x8[2][64]; -} VAIQMatrixBufferH264; - -/* - * H.264 Slice Group Map Buffer - * When VAPictureParameterBufferH264::num_slice_group_minus1 is not equal to 0, - * A slice group map buffer should be sent for each picture if required. The buffer - * is sent only when there is a change in the mapping values. - * The slice group map buffer map "map units" to slice groups as specified in - * section 8.2.2 of the H.264 spec. The buffer will contain one byte for each macroblock - * in raster scan order - */ - -/* H.264 Slice Parameter Buffer */ -typedef struct _VASliceParameterBufferH264 -{ - unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ - unsigned int slice_data_offset;/* the offset to the NAL start code for this slice */ - unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ - unsigned short slice_data_bit_offset; /* bit offset from NAL start code to the beginning of slice data */ - unsigned short first_mb_in_slice; - unsigned char slice_type; - unsigned char direct_spatial_mv_pred_flag; - unsigned char num_ref_idx_l0_active_minus1; - unsigned char num_ref_idx_l1_active_minus1; - unsigned char cabac_init_idc; - char slice_qp_delta; - unsigned char disable_deblocking_filter_idc; - char slice_alpha_c0_offset_div2; - char slice_beta_offset_div2; - VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ - VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ - unsigned char luma_log2_weight_denom; - unsigned char chroma_log2_weight_denom; - unsigned char luma_weight_l0_flag; - short luma_weight_l0[32]; - short luma_offset_l0[32]; - unsigned char chroma_weight_l0_flag; - short chroma_weight_l0[32][2]; - short chroma_offset_l0[32][2]; - unsigned char luma_weight_l1_flag; - short luma_weight_l1[32]; - short luma_offset_l1[32]; - unsigned char chroma_weight_l1_flag; - short chroma_weight_l1[32][2]; - short chroma_offset_l1[32][2]; -} VASliceParameterBufferH264; - -/**************************** - * Common encode data structures - ****************************/ -typedef enum -{ - VAEncPictureTypeIntra = 0, - VAEncPictureTypePredictive = 1, - VAEncPictureTypeBidirectional = 2, -} VAEncPictureType; - -/* Encode Slice Parameter Buffer */ -typedef struct _VAEncSliceParameterBuffer -{ - unsigned int start_row_number; /* starting MB row number for this slice */ - unsigned int slice_height; /* slice height measured in MB */ - union { - struct { - unsigned int is_intra : 1; - unsigned int disable_deblocking_filter_idc : 2; - } bits; - unsigned int value; - } slice_flags; -} VAEncSliceParameterBuffer; - -/**************************** - * H.264 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferH264 -{ - unsigned char seq_parameter_set_id; - unsigned char level_idc; - unsigned int intra_period; - unsigned int picture_width_in_mbs; - unsigned int picture_height_in_mbs; - unsigned int bits_per_second; - unsigned int frame_rate; - unsigned int initial_qp; - unsigned int min_qp; - unsigned int basic_unit_size; - unsigned char vui_flag; -} VAEncSequenceParameterBufferH264; - -typedef struct _VAEncPictureParameterBufferH264 -{ - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - unsigned short picture_width; - unsigned short picture_height; - unsigned char last_picture; /* if set to 1 it indicates the last picture in the sequence */ -} VAEncPictureParameterBufferH264; - -/**************************** - * H.263 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferH263 -{ - unsigned int intra_period; - unsigned int bits_per_second; - unsigned int frame_rate; - unsigned int initial_qp; - unsigned int min_qp; -} VAEncSequenceParameterBufferH263; - -typedef struct _VAEncPictureParameterBufferH263 -{ - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - unsigned short picture_width; - unsigned short picture_height; - VAEncPictureType picture_type; -} VAEncPictureParameterBufferH263; - -/**************************** - * MPEG-4 specific encode data structures - ****************************/ - -typedef struct _VAEncSequenceParameterBufferMPEG4 -{ - unsigned char profile_and_level_indication; - unsigned int intra_period; - unsigned int video_object_layer_width; - unsigned int video_object_layer_height; - unsigned int vop_time_increment_resolution; - unsigned int fixed_vop_rate; - unsigned int fixed_vop_time_increment; - unsigned int bits_per_second; - unsigned int frame_rate; - unsigned int initial_qp; - unsigned int min_qp; -} VAEncSequenceParameterBufferMPEG4; - -typedef struct _VAEncPictureParameterBufferMPEG4 -{ - VASurfaceID reference_picture; - VASurfaceID reconstructed_picture; - VABufferID coded_buf; - unsigned short picture_width; - unsigned short picture_height; - unsigned int modulo_time_base; /* number of 1s */ - unsigned int vop_time_increment; - VAEncPictureType picture_type; -} VAEncPictureParameterBufferMPEG4; - - - -/* Buffer functions */ - -/* - * Creates a buffer for "num_elements" elements of "size" bytes and - * initalize with "data". - * if "data" is null, then the contents of the buffer data store - * are undefined. - * Basically there are two ways to get buffer data to the server side. One is - * to call vaCreateBuffer() with a non-null "data", which results the data being - * copied to the data store on the server side. A different method that - * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), - * and then use vaMapBuffer() to map the data store from the server side to the - * client address space for access. - * Note: image buffers are created by the library, not the client. Please see - * vaCreateImage on how image buffers are managed. - */ -VAStatus vaCreateBuffer ( - VADisplay dpy, - VAContextID context, - VABufferType type, /* in */ - unsigned int size, /* in */ - unsigned int num_elements, /* in */ - void *data, /* in */ - VABufferID *buf_id /* out */ -); - -/* - * Convey to the server how many valid elements are in the buffer. - * e.g. if multiple slice parameters are being held in a single buffer, - * this will communicate to the server the number of slice parameters - * that are valid in the buffer. - */ -VAStatus vaBufferSetNumElements ( - VADisplay dpy, - VABufferID buf_id, /* in */ - unsigned int num_elements /* in */ -); - -/* - * Map data store of the buffer into the client's address space - * vaCreateBuffer() needs to be called with "data" set to NULL before - * calling vaMapBuffer() - */ -VAStatus vaMapBuffer ( - VADisplay dpy, - VABufferID buf_id, /* in */ - void **pbuf /* out */ -); - -/* - * After client making changes to a mapped data store, it needs to - * "Unmap" it to let the server know that the data is ready to be - * consumed by the server - */ -VAStatus vaUnmapBuffer ( - VADisplay dpy, - VABufferID buf_id /* in */ -); - -/* - * After this call, the buffer is deleted and this buffer_id is no longer valid - * Only call this if the buffer is not going to be passed to vaRenderBuffer - */ -VAStatus vaDestroyBuffer ( - VADisplay dpy, - VABufferID buffer_id -); - -/* -Render (Decode) Pictures - -A picture represents either a frame or a field. - -The Begin/Render/End sequence sends the decode buffers to the server -*/ - -/* - * Get ready to decode a picture to a target surface - */ -VAStatus vaBeginPicture ( - VADisplay dpy, - VAContextID context, - VASurfaceID render_target -); - -/* - * Send decode buffers to the server. - * Buffers are automatically destroyed afterwards - */ -VAStatus vaRenderPicture ( - VADisplay dpy, - VAContextID context, - VABufferID *buffers, - int num_buffers -); - -/* - * Make the end of rendering for a picture. - * The server should start processing all pending operations for this - * surface. This call is non-blocking. The client can start another - * Begin/Render/End sequence on a different render target. - */ -VAStatus vaEndPicture ( - VADisplay dpy, - VAContextID context -); - -/* - -Synchronization - -*/ - -/* - * This function blocks until all pending operations on the render target - * have been completed. Upon return it is safe to use the render target for a - * different picture. - */ -VAStatus vaSyncSurface ( - VADisplay dpy, - VASurfaceID render_target -); - -typedef enum -{ - VASurfaceRendering = 1, /* Rendering in progress */ - VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */ - /* this status is useful if surface is used as the source */ - /* of an overlay */ - VASurfaceReady = 4, /* not being rendered or displayed */ - VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ -} VASurfaceStatus; - -/* - * Find out any pending ops on the render target - */ -VAStatus vaQuerySurfaceStatus ( - VADisplay dpy, - VASurfaceID render_target, - VASurfaceStatus *status /* out */ -); - -/* - * Images and Subpictures - * VAImage is used to either get the surface data to client memory, or - * to copy image data in client memory to a surface. - * Both images, subpictures and surfaces follow the same 2D coordinate system where origin - * is at the upper left corner with positive X to the right and positive Y down - */ -#define VA_FOURCC(ch0, ch1, ch2, ch3) \ - ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ - ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 )) - -/* a few common FourCCs */ -#define VA_FOURCC_NV12 0x3231564E -#define VA_FOURCC_AI44 0x34344149 -#define VA_FOURCC_RGBA 0x41424752 -#define VA_FOURCC_UYVY 0x59565955 -#define VA_FOURCC_YUY2 0x32595559 -#define VA_FOURCC_AYUV 0x56555941 -#define VA_FOURCC_NV11 0x3131564e -#define VA_FOURCC_YV12 0x32315659 -#define VA_FOURCC_P208 0x38303250 -#define VA_FOURCC_IYUV 0x56555949 - -/* byte order */ -#define VA_LSB_FIRST 1 -#define VA_MSB_FIRST 2 - -typedef struct _VAImageFormat -{ - unsigned int fourcc; - unsigned int byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ - unsigned int bits_per_pixel; - /* for RGB formats */ - unsigned int depth; /* significant bits per pixel */ - unsigned int red_mask; - unsigned int green_mask; - unsigned int blue_mask; - unsigned int alpha_mask; -} VAImageFormat; - -typedef VAGenericID VAImageID; - -typedef struct _VAImage -{ - VAImageID image_id; /* uniquely identify this image */ - VAImageFormat format; - VABufferID buf; /* image data buffer */ - /* - * Image data will be stored in a buffer of type VAImageBufferType to facilitate - * data store on the server side for optimal performance. The buffer will be - * created by the CreateImage function, and proper storage allocated based on the image - * size and format. This buffer is managed by the library implementation, and - * accessed by the client through the buffer Map/Unmap functions. - */ - unsigned short width; - unsigned short height; - unsigned int data_size; - unsigned int num_planes; /* can not be greater than 3 */ - /* - * An array indicating the scanline pitch in bytes for each plane. - * Each plane may have a different pitch. Maximum 3 planes for planar formats - */ - unsigned int pitches[3]; - /* - * An array indicating the byte offset from the beginning of the image data - * to the start of each plane. - */ - unsigned int offsets[3]; - - /* The following fields are only needed for paletted formats */ - int num_palette_entries; /* set to zero for non-palette images */ - /* - * Each component is one byte and entry_bytes indicates the number of components in - * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images - */ - int entry_bytes; - /* - * An array of ascii characters describing the order of the components within the bytes. - * Only entry_bytes characters of the string are used. - */ - char component_order[4]; -} VAImage; - -/* Get maximum number of image formats supported by the implementation */ -int vaMaxNumImageFormats ( - VADisplay dpy -); - -/* - * Query supported image formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumImageFormats() entries. The actual number of formats - * returned in "format_list" is returned in "num_formats". - */ -VAStatus vaQueryImageFormats ( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - int *num_formats /* out */ -); - -/* - * Create a VAImage structure - * The width and height fields returned in the VAImage structure may get - * enlarged for some YUV formats. Upon return from this function, - * image->buf has been created and proper storage allocated by the library. - * The client can access the image through the Map/Unmap calls. - */ -VAStatus vaCreateImage ( - VADisplay dpy, - VAImageFormat *format, - int width, - int height, - VAImage *image /* out */ -); - -/* - * Should call DestroyImage before destroying the surface it is bound to - */ -VAStatus vaDestroyImage ( - VADisplay dpy, - VAImageID image -); - -VAStatus vaSetImagePalette ( - VADisplay dpy, - VAImageID image, - /* - * pointer to an array holding the palette data. The size of the array is - * num_palette_entries * entry_bytes in size. The order of the components - * in the palette is described by the component_order in VAImage struct - */ - unsigned char *palette -); - -/* - * Retrive surface data into a VAImage - * Image must be in a format supported by the implementation - */ -VAStatus vaGetImage ( - VADisplay dpy, - VASurfaceID surface, - int x, /* coordinates of the upper left source pixel */ - int y, - unsigned int width, /* width and height of the region */ - unsigned int height, - VAImageID image -); - -/* - * Copy data from a VAImage to a surface - * Image must be in a format supported by the implementation - * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface - * shouldn't be rendered into when this is called - */ -VAStatus vaPutImage ( - VADisplay dpy, - VASurfaceID surface, - VAImageID image, - int src_x, - int src_y, - unsigned int src_width, - unsigned int src_height, - int dest_x, - int dest_y, - unsigned int dest_width, - unsigned int dest_height -); - -/* - * Derive an VAImage from an existing surface. - * This interface will derive a VAImage and corresponding image buffer from - * an existing VA Surface. The image buffer can then be mapped/unmapped for - * direct CPU access. This operation is only possible on implementations with - * direct rendering capabilities and internal surface formats that can be - * represented with a VAImage. When the operation is not possible this interface - * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back - * to using vaCreateImage + vaPutImage to accomplish the same task in an - * indirect manner. - * - * Implementations should only return success when the resulting image buffer - * would be useable with vaMap/Unmap. - * - * When directly accessing a surface special care must be taken to insure - * proper synchronization with the graphics hardware. Clients should call - * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent - * rendering or currently being displayed by an overlay. - * - * Additionally nothing about the contents of a surface should be assumed - * following a vaPutSurface. Implementations are free to modify the surface for - * scaling or subpicture blending within a call to vaPutImage. - * - * Calls to vaPutImage or vaGetImage using the same surface from which the image - * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or - * vaGetImage with other surfaces is supported. - * - * An image created with vaDeriveImage should be freed with vaDestroyImage. The - * image and image buffer structures will be destroyed; however, the underlying - * surface will remain unchanged until freed with vaDestroySurfaces. - */ -VAStatus vaDeriveImage ( - VADisplay dpy, - VASurfaceID surface, - VAImage *image /* out */ -); - -/* - * Subpictures - * Subpicture is a special type of image that can be blended - * with a surface during vaPutSurface(). Subpicture can be used to render - * DVD sub-titles or closed captioning text etc. - */ - -typedef VAGenericID VASubpictureID; - -/* Get maximum number of subpicture formats supported by the implementation */ -int vaMaxNumSubpictureFormats ( - VADisplay dpy -); - -/* flags for subpictures */ -#define VA_SUBPICTURE_CHROMA_KEYING 0x0001 -#define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 -/* - * Query supported subpicture formats - * The caller must provide a "format_list" array that can hold at - * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag - * for each format to indicate additional capabilities for that format. The actual - * number of formats returned in "format_list" is returned in "num_formats". - * flags: returned value to indicate addtional capabilities - * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying - * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha - */ -VAStatus vaQuerySubpictureFormats ( - VADisplay dpy, - VAImageFormat *format_list, /* out */ - unsigned int *flags, /* out */ - unsigned int *num_formats /* out */ -); - -/* - * Subpictures are created with an image associated. - */ -VAStatus vaCreateSubpicture ( - VADisplay dpy, - VAImageID image, - VASubpictureID *subpicture /* out */ -); - -/* - * Destroy the subpicture before destroying the image it is assocated to - */ -VAStatus vaDestroySubpicture ( - VADisplay dpy, - VASubpictureID subpicture -); - -/* - * Bind an image to the subpicture. This image will now be associated with - * the subpicture instead of the one at creation. - */ -VAStatus vaSetSubpictureImage ( - VADisplay dpy, - VASubpictureID subpicture, - VAImageID image -); - -/* - * If chromakey is enabled, then the area where the source value falls within - * the chromakey [min, max] range is transparent - * The chromakey component format is the following: - * For RGB: [0:7] Red [8:15] Blue [16:23] Green - * For YUV: [0:7] V [8:15] U [16:23] Y - * The chromakey mask can be used to mask out certain components for chromakey - * comparision - */ -VAStatus vaSetSubpictureChromakey ( - VADisplay dpy, - VASubpictureID subpicture, - unsigned int chromakey_min, - unsigned int chromakey_max, - unsigned int chromakey_mask -); - -/* - * Global alpha value is between 0 and 1. A value of 1 means fully opaque and - * a value of 0 means fully transparent. If per-pixel alpha is also specified then - * the overall alpha is per-pixel alpha multiplied by the global alpha - */ -VAStatus vaSetSubpictureGlobalAlpha ( - VADisplay dpy, - VASubpictureID subpicture, - float global_alpha -); - -/* - * vaAssociateSubpicture associates the subpicture with target_surfaces. - * It defines the region mapping between the subpicture and the target - * surfaces through source and destination rectangles (with the same width and height). - * Both will be displayed at the next call to vaPutSurface. Additional - * associations before the call to vaPutSurface simply overrides the association. - */ -VAStatus vaAssociateSubpicture ( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces, - short src_x, /* upper left offset in subpicture */ - short src_y, - unsigned short src_width, - unsigned short src_height, - short dest_x, /* upper left offset in surface */ - short dest_y, - unsigned short dest_width, - unsigned short dest_height, - /* - * whether to enable chroma-keying or global-alpha - * see VA_SUBPICTURE_XXX values - */ - unsigned int flags -); - -/* - * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. - */ -VAStatus vaDeassociateSubpicture ( - VADisplay dpy, - VASubpictureID subpicture, - VASurfaceID *target_surfaces, - int num_surfaces -); - -typedef struct _VARectangle -{ - short x; - short y; - unsigned short width; - unsigned short height; -} VARectangle; - -/* - * Display attributes - * Display attributes are used to control things such as contrast, hue, saturation, - * brightness etc. in the rendering process. The application can query what - * attributes are supported by the driver, and then set the appropriate attributes - * before calling vaPutSurface() - */ - -/* Currently defined display attribute types */ -typedef enum -{ - VADisplayAttribBrightness = 0, - VADisplayAttribContrast = 1, - VADisplayAttribHue = 2, - VADisplayAttribSaturation = 3, - /* client can specifiy a background color for the target window */ - VADisplayAttribBackgroundColor = 4, - /* - * this is a gettable only attribute. For some implementations that use the - * hardware overlay, after PutSurface is called, the surface can not be - * re-used until after the subsequent PutSurface call. If this is the case - * then the value for this attribute will be set to 1 so that the client - * will not attempt to re-use the surface right after returning from a call - * to PutSurface. - */ - VADisplayAttribDirectSurface = 5, -} VADisplayAttribType; - -/* flags for VADisplayAttribute */ -#define VA_DISPLAY_ATTRIB_NOT_SUPPORTED 0x0000 -#define VA_DISPLAY_ATTRIB_GETTABLE 0x0001 -#define VA_DISPLAY_ATTRIB_SETTABLE 0x0002 - -typedef struct _VADisplayAttribute -{ - VADisplayAttribType type; - int min_value; - int max_value; - int value; /* used by the set/get attribute functions */ -/* flags can be VA_DISPLAY_ATTRIB_GETTABLE or VA_DISPLAY_ATTRIB_SETTABLE or OR'd together */ - unsigned int flags; -} VADisplayAttribute; - -/* Get maximum number of display attributs supported by the implementation */ -int vaMaxNumDisplayAttributes ( - VADisplay dpy -); - -/* - * Query display attributes - * The caller must provide a "attr_list" array that can hold at - * least vaMaxNumDisplayAttributes() entries. The actual number of attributes - * returned in "attr_list" is returned in "num_attributes". - */ -VAStatus vaQueryDisplayAttributes ( - VADisplay dpy, - VADisplayAttribute *attr_list, /* out */ - int *num_attributes /* out */ -); - -/* - * Get display attributes - * This function returns the current attribute values in "attr_list". - * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field - * from vaQueryDisplayAttributes() can have their values retrieved. - */ -VAStatus vaGetDisplayAttributes ( - VADisplay dpy, - VADisplayAttribute *attr_list, /* in/out */ - int num_attributes -); - -/* - * Set display attributes - * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field - * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or - * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED - */ -VAStatus vaSetDisplayAttributes ( - VADisplay dpy, - VADisplayAttribute *attr_list, - int num_attributes -); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_H_ */ diff -Nru libva-0.31.0+latest1/src/va_version.h libva-0.31.0+latest2/src/va_version.h --- libva-0.31.0+latest1/src/va_version.h 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/src/va_version.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_VERSION_H -#define VA_VERSION_H - -/** - * VA_MAJOR_VERSION: - * - * The major version of the VA library (1, if %VA_VERSION is 1.2.3) - */ -#define VA_MAJOR_VERSION (0) - -/** - * VA_MINOR_VERSION: - * - * The minor version of the VA library (2, if %VA_VERSION is 1.2.3) - */ -#define VA_MINOR_VERSION (31) - -/** - * VA_MICRO_VERSION: - * - * The micro version of the VA library (3, if %VA_VERSION is 1.2.3) - */ -#define VA_MICRO_VERSION (0) - -/** - * VA_VERSION: - * - * The full version of the VA library, like 1.2.3 - */ -#define VA_VERSION 0.31.0 - -/** - * VA_VERSION_S: - * - * The full version of the VA library, in string form (suited for - * string concatenation) - */ -#define VA_VERSION_S "0.31.0" - -/** - * VA_VERSION_HEX: - * - * Numerically encoded version of the VA library, like 0x010203 - */ -#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ - (VA_MINOR_VERSION << 16) | \ - (VA_MICRO_VERSION << 8)) - -/** - * VA_CHECK_VERSION: - * @major: major version, like 1 in 1.2.3 - * @minor: minor version, like 2 in 1.2.3 - * @micro: micro version, like 3 in 1.2.3 - * - * Evaluates to %TRUE if the version of the VA library is greater - * than @major, @minor and @micro - */ -#define VA_CHECK_VERSION(major,minor,micro) \ - (VA_MAJOR_VERSION > (major) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) - -#endif /* VA_VERSION_H */ diff -Nru libva-0.31.0+latest1/src/va_version.h.in libva-0.31.0+latest2/src/va_version.h.in --- libva-0.31.0+latest1/src/va_version.h.in 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/src/va_version.h.in 1970-01-01 01:00:00.000000000 +0100 @@ -1,87 +0,0 @@ -/* - * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#ifndef VA_VERSION_H -#define VA_VERSION_H - -/** - * VA_MAJOR_VERSION: - * - * The major version of the VA library (1, if %VA_VERSION is 1.2.3) - */ -#define VA_MAJOR_VERSION (@LIBVA_MAJOR_VERSION@) - -/** - * VA_MINOR_VERSION: - * - * The minor version of the VA library (2, if %VA_VERSION is 1.2.3) - */ -#define VA_MINOR_VERSION (@LIBVA_MINOR_VERSION@) - -/** - * VA_MICRO_VERSION: - * - * The micro version of the VA library (3, if %VA_VERSION is 1.2.3) - */ -#define VA_MICRO_VERSION (@LIBVA_MICRO_VERSION@) - -/** - * VA_VERSION: - * - * The full version of the VA library, like 1.2.3 - */ -#define VA_VERSION @LIBVA_VERSION@ - -/** - * VA_VERSION_S: - * - * The full version of the VA library, in string form (suited for - * string concatenation) - */ -#define VA_VERSION_S "@LIBVA_VERSION@" - -/** - * VA_VERSION_HEX: - * - * Numerically encoded version of the VA library, like 0x010203 - */ -#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ - (VA_MINOR_VERSION << 16) | \ - (VA_MICRO_VERSION << 8)) - -/** - * VA_CHECK_VERSION: - * @major: major version, like 1 in 1.2.3 - * @minor: minor version, like 2 in 1.2.3 - * @micro: micro version, like 3 in 1.2.3 - * - * Evaluates to %TRUE if the version of the VA library is greater - * than @major, @minor and @micro - */ -#define VA_CHECK_VERSION(major,minor,micro) \ - (VA_MAJOR_VERSION > (major) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ - (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) - -#endif /* VA_VERSION_H */ diff -Nru libva-0.31.0+latest1/src/x11/dri1_util.c libva-0.31.0+latest2/src/x11/dri1_util.c --- libva-0.31.0+latest1/src/x11/dri1_util.c 2009-09-22 14:17:03.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/dri1_util.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,157 +0,0 @@ -#include -#include -#include -#include -#include - -#include - -#include "X11/Xlib.h" -#include "va.h" -#include "va_backend.h" - -#include "va_dri.h" -#include "va_dricommon.h" - -struct dri1_drawable -{ - struct dri_drawable base; - union dri_buffer buffer; - int width; - int height; -}; - -static struct dri_drawable * -dri1CreateDrawable(VADriverContextP ctx, XID x_drawable) -{ - struct dri1_drawable *dri1_drawable; - - dri1_drawable = calloc(1, sizeof(*dri1_drawable)); - - if (!dri1_drawable) - return NULL; - - dri1_drawable->base.x_drawable = x_drawable; - - return &dri1_drawable->base; -} - -static void -dri1DestroyDrawable(VADriverContextP ctx, struct dri_drawable *dri_drawable) -{ - free(dri_drawable); -} - -static void -dri1SwapBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) -{ - -} - -static union dri_buffer * -dri1GetRenderingBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) -{ - struct dri1_drawable *dri1_drawable = (struct dri1_drawable *)dri_drawable; - - return &dri1_drawable->buffer; -} - -static void -dri1Close(VADriverContextP ctx) -{ - struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; - - free_drawable_hashtable(ctx); - VA_DRIDestroyContext(ctx->x11_dpy, ctx->x11_screen, dri_state->hwContextID); - assert(dri_state->pSAREA != MAP_FAILED); - drmUnmap(dri_state->pSAREA, SAREA_MAX); - assert(dri_state->fd >= 0); - drmCloseOnce(dri_state->fd); - VA_DRICloseConnection(ctx->x11_dpy, ctx->x11_screen); -} - -Bool -isDRI1Connected(VADriverContextP ctx, char **driver_name) -{ - struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; - int direct_capable; - int driver_major; - int driver_minor; - int driver_patch; - int newlyopened; - char *BusID; - drm_magic_t magic; - - *driver_name = NULL; - dri_state->fd = -1; - dri_state->pSAREA = MAP_FAILED; - dri_state->driConnectedFlag = VA_NONE; - - if (!VA_DRIQueryDirectRenderingCapable(ctx->x11_dpy, - ctx->x11_screen, - &direct_capable)) - goto err_out0; - - if (!direct_capable) - goto err_out0; - - if (!VA_DRIGetClientDriverName(ctx->x11_dpy, ctx->x11_screen, - &driver_major, &driver_minor, - &driver_patch, driver_name)) - goto err_out0; - - if (!VA_DRIOpenConnection(ctx->x11_dpy, ctx->x11_screen, - &dri_state->hSAREA, &BusID)) - goto err_out0; - - - dri_state->fd = drmOpenOnce(NULL, BusID, &newlyopened); - XFree(BusID); - - if (dri_state->fd < 0) - goto err_out1; - - - if (drmGetMagic(dri_state->fd, &magic)) - goto err_out1; - - if (newlyopened && !VA_DRIAuthConnection(ctx->x11_dpy, ctx->x11_screen, magic)) - goto err_out1; - - if (drmMap(dri_state->fd, dri_state->hSAREA, SAREA_MAX, &dri_state->pSAREA)) - goto err_out1; - - if (!VA_DRICreateContext(ctx->x11_dpy, ctx->x11_screen, - DefaultVisual(ctx->x11_dpy, ctx->x11_screen), - &dri_state->hwContextID, &dri_state->hwContext)) - goto err_out1; - - dri_state->driConnectedFlag = VA_DRI1; - dri_state->createDrawable = dri1CreateDrawable; - dri_state->destroyDrawable = dri1DestroyDrawable; - dri_state->swapBuffer = dri1SwapBuffer; - dri_state->getRenderingBuffer = dri1GetRenderingBuffer; - dri_state->close = dri1Close; - - return True; - -err_out1: - if (dri_state->pSAREA != MAP_FAILED) - drmUnmap(dri_state->pSAREA, SAREA_MAX); - - if (dri_state->fd >= 0) - drmCloseOnce(dri_state->fd); - - VA_DRICloseConnection(ctx->x11_dpy, ctx->x11_screen); - -err_out0: - if (*driver_name) - XFree(*driver_name); - - dri_state->pSAREA = MAP_FAILED; - dri_state->fd = -1; - *driver_name = NULL; - - return False; -} - diff -Nru libva-0.31.0+latest1/src/x11/dri2_util.c libva-0.31.0+latest2/src/x11/dri2_util.c --- libva-0.31.0+latest1/src/x11/dri2_util.c 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/dri2_util.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,200 +0,0 @@ -#include -#include -#include -#include - -#include - -#include -#include -#include "va.h" -#include "va_backend.h" - -#include "va_dri2.h" -#include "va_dri2tokens.h" -#include "va_dricommon.h" - -#define __DRI_BUFFER_FRONT_LEFT 0 -#define __DRI_BUFFER_BACK_LEFT 1 -#define __DRI_BUFFER_FRONT_RIGHT 2 -#define __DRI_BUFFER_BACK_RIGHT 3 -#define __DRI_BUFFER_DEPTH 4 -#define __DRI_BUFFER_STENCIL 5 -#define __DRI_BUFFER_ACCUM 6 -#define __DRI_BUFFER_FAKE_FRONT_LEFT 7 -#define __DRI_BUFFER_FAKE_FRONT_RIGHT 8 - -struct dri2_drawable -{ - struct dri_drawable base; - union dri_buffer buffers[5]; - int width; - int height; - int has_backbuffer; - int back_index; - int front_index; -}; - -static struct dri_drawable * -dri2CreateDrawable(VADriverContextP ctx, XID x_drawable) -{ - struct dri2_drawable *dri2_drawable; - - dri2_drawable = calloc(1, sizeof(*dri2_drawable)); - - if (!dri2_drawable) - return NULL; - - dri2_drawable->base.x_drawable = x_drawable; - dri2_drawable->base.x = 0; - dri2_drawable->base.y = 0; - VA_DRI2CreateDrawable(ctx->x11_dpy, x_drawable); - - return &dri2_drawable->base; -} - -static void -dri2DestroyDrawable(VADriverContextP ctx, struct dri_drawable *dri_drawable) -{ - VA_DRI2DestroyDrawable(ctx->x11_dpy, dri_drawable->x_drawable); - free(dri_drawable); -} - -static void -dri2SwapBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) -{ - struct dri2_drawable *dri2_drawable = (struct dri2_drawable *)dri_drawable; - XRectangle xrect; - XserverRegion region; - - if (dri2_drawable->has_backbuffer) { - xrect.x = 0; - xrect.y = 0; - xrect.width = dri2_drawable->width; - xrect.height = dri2_drawable->height; - - region = XFixesCreateRegion(ctx->x11_dpy, &xrect, 1); - VA_DRI2CopyRegion(ctx->x11_dpy, dri_drawable->x_drawable, region, - DRI2BufferFrontLeft, DRI2BufferBackLeft); - XFixesDestroyRegion(ctx->x11_dpy, region); - } -} - -static union dri_buffer * -dri2GetRenderingBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) -{ - struct dri2_drawable *dri2_drawable = (struct dri2_drawable *)dri_drawable; - int i; - int count; - unsigned int attachments[5]; - VA_DRI2Buffer *buffers; - - i = 0; - attachments[i++] = __DRI_BUFFER_BACK_LEFT; - attachments[i++] = __DRI_BUFFER_FRONT_LEFT; - buffers = VA_DRI2GetBuffers(ctx->x11_dpy, dri_drawable->x_drawable, - &dri2_drawable->width, &dri2_drawable->height, - attachments, i, &count); - assert(buffers); - if (buffers == NULL) - return NULL; - - dri2_drawable->has_backbuffer = 0; - - for (i = 0; i < count; i++) { - dri2_drawable->buffers[i].dri2.attachment = buffers[i].attachment; - dri2_drawable->buffers[i].dri2.name = buffers[i].name; - dri2_drawable->buffers[i].dri2.pitch = buffers[i].pitch; - dri2_drawable->buffers[i].dri2.cpp = buffers[i].cpp; - dri2_drawable->buffers[i].dri2.flags = buffers[i].flags; - - if (buffers[i].attachment == __DRI_BUFFER_BACK_LEFT) { - dri2_drawable->has_backbuffer = 1; - dri2_drawable->back_index = i; - } - - if (buffers[i].attachment == __DRI_BUFFER_FRONT_LEFT) - dri2_drawable->front_index = i; - } - - dri_drawable->width = dri2_drawable->width; - dri_drawable->height = dri2_drawable->height; - Xfree(buffers); - - if (dri2_drawable->has_backbuffer) - return &dri2_drawable->buffers[dri2_drawable->back_index]; - - return &dri2_drawable->buffers[dri2_drawable->front_index]; -} - -static void -dri2Close(VADriverContextP ctx) -{ - struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; - - free_drawable_hashtable(ctx); - assert(dri_state->fd >= 0); - close(dri_state->fd); -} - -Bool -isDRI2Connected(VADriverContextP ctx, char **driver_name) -{ - struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; - int major, minor; - int error_base; - int event_base; - char *device_name = NULL; - drm_magic_t magic; - *driver_name = NULL; - dri_state->fd = -1; - dri_state->driConnectedFlag = VA_NONE; - if (!VA_DRI2QueryExtension(ctx->x11_dpy, &event_base, &error_base)) - goto err_out; - - if (!VA_DRI2QueryVersion(ctx->x11_dpy, &major, &minor)) - goto err_out; - - - if (!VA_DRI2Connect(ctx->x11_dpy, RootWindow(ctx->x11_dpy, ctx->x11_screen), - driver_name, &device_name)) - goto err_out; - - dri_state->fd = open(device_name, O_RDWR); - assert(dri_state->fd >= 0); - - if (dri_state->fd < 0) - goto err_out; - - if (drmGetMagic(dri_state->fd, &magic)) - goto err_out; - - if (!VA_DRI2Authenticate(ctx->x11_dpy, RootWindow(ctx->x11_dpy, ctx->x11_screen), - magic)) - goto err_out; - - dri_state->driConnectedFlag = VA_DRI2; - dri_state->createDrawable = dri2CreateDrawable; - dri_state->destroyDrawable = dri2DestroyDrawable; - dri_state->swapBuffer = dri2SwapBuffer; - dri_state->getRenderingBuffer = dri2GetRenderingBuffer; - dri_state->close = dri2Close; - - return True; - -err_out: - if (device_name) - Xfree(device_name); - - if (*driver_name) - Xfree(*driver_name); - - if (dri_state->fd >= 0) - close(dri_state->fd); - - *driver_name = NULL; - dri_state->fd = -1; - - return False; -} - diff -Nru libva-0.31.0+latest1/src/x11/Makefile.am libva-0.31.0+latest2/src/x11/Makefile.am --- libva-0.31.0+latest1/src/x11/Makefile.am 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/Makefile.am 1970-01-01 01:00:00.000000000 +0100 @@ -1,30 +0,0 @@ -# INTEL CONFIDENTIAL -# Copyright 2007 Intel Corporation. All Rights Reserved. -# -# The source code contained or described herein and all documents related to -# the source code ("Material") are owned by Intel Corporation or its suppliers -# or licensors. Title to the Material remains with Intel Corporation or its -# suppliers and licensors. The Material may contain trade secrets and -# proprietary and confidential information of Intel Corporation and its -# suppliers and licensors, and is protected by worldwide copyright and trade -# secret laws and treaty provisions. No part of the Material may be used, -# copied, reproduced, modified, published, uploaded, posted, transmitted, -# distributed, or disclosed in any way without Intel's prior express written -# permission. -# -# No license under any patent, copyright, trade secret or other intellectual -# property right is granted to or conferred upon you by disclosure or delivery -# of the Materials, either expressly, by implication, inducement, estoppel or -# otherwise. Any license under such intellectual property rights must be -# express and approved by Intel in writing. - -AM_CFLAGS = -DLINUX -DIN_LIBVA -I$(top_srcdir)/src $(DRM_CFLAGS) - -noinst_LTLIBRARIES = libva_x11.la - -libva_x11includedir = ${includedir}/va -libva_x11include_HEADERS = va_x11.h va_dri.h va_dri2.h va_dricommon.h - -libva_x11_la_SOURCES = va_x11.c va_dri.c va_dri2.c va_dricommon.c dri2_util.c dri1_util.c va_nvctrl.c - -EXTRA_DIST = va_dristr.h va_dri2str.h va_dri2tokens.h va_nvctrl.h diff -Nru libva-0.31.0+latest1/src/x11/Makefile.in libva-0.31.0+latest2/src/x11/Makefile.in --- libva-0.31.0+latest1/src/x11/Makefile.in 2010-02-12 14:42:12.000000000 +0000 +++ libva-0.31.0+latest2/src/x11/Makefile.in 1970-01-01 01:00:00.000000000 +0100 @@ -1,518 +0,0 @@ -# Makefile.in generated by automake 1.10.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# INTEL CONFIDENTIAL -# Copyright 2007 Intel Corporation. All Rights Reserved. -# -# The source code contained or described herein and all documents related to -# the source code ("Material") are owned by Intel Corporation or its suppliers -# or licensors. Title to the Material remains with Intel Corporation or its -# suppliers and licensors. The Material may contain trade secrets and -# proprietary and confidential information of Intel Corporation and its -# suppliers and licensors, and is protected by worldwide copyright and trade -# secret laws and treaty provisions. No part of the Material may be used, -# copied, reproduced, modified, published, uploaded, posted, transmitted, -# distributed, or disclosed in any way without Intel's prior express written -# permission. -# -# No license under any patent, copyright, trade secret or other intellectual -# property right is granted to or conferred upon you by disclosure or delivery -# of the Materials, either expressly, by implication, inducement, estoppel or -# otherwise. Any license under such intellectual property rights must be -# express and approved by Intel in writing. - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src/x11 -DIST_COMMON = $(libva_x11include_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -LTLIBRARIES = $(noinst_LTLIBRARIES) -libva_x11_la_LIBADD = -am_libva_x11_la_OBJECTS = va_x11.lo va_dri.lo va_dri2.lo \ - va_dricommon.lo dri2_util.lo dri1_util.lo va_nvctrl.lo -libva_x11_la_OBJECTS = $(am_libva_x11_la_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libva_x11_la_SOURCES) -DIST_SOURCES = $(libva_x11_la_SOURCES) -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(libva_x11includedir)" -libva_x11includeHEADERS_INSTALL = $(INSTALL_HEADER) -HEADERS = $(libva_x11include_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DRM_CFLAGS = @DRM_CFLAGS@ -DRM_LIBS = @DRM_LIBS@ -DSYMUTIL = @DSYMUTIL@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GEN4ASM_CFLAGS = @GEN4ASM_CFLAGS@ -GEN4ASM_LIBS = @GEN4ASM_LIBS@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIBVA_CFLAGS = @LIBVA_CFLAGS@ -LIBVA_DRIVERS_PATH = @LIBVA_DRIVERS_PATH@ -LIBVA_LIBS = @LIBVA_LIBS@ -LIBVA_LT_LDFLAGS = @LIBVA_LT_LDFLAGS@ -LIBVA_LT_VERSION = @LIBVA_LT_VERSION@ -LIBVA_MAJOR_VERSION = @LIBVA_MAJOR_VERSION@ -LIBVA_MICRO_VERSION = @LIBVA_MICRO_VERSION@ -LIBVA_MINOR_VERSION = @LIBVA_MINOR_VERSION@ -LIBVA_VERSION = @LIBVA_VERSION@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -NMEDIT = @NMEDIT@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PKG_CONFIG = @PKG_CONFIG@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -X11_CFLAGS = @X11_CFLAGS@ -X11_LIBS = @X11_LIBS@ -XEXT_CFLAGS = @XEXT_CFLAGS@ -XEXT_LIBS = @XEXT_LIBS@ -XFIXES_CFLAGS = @XFIXES_CFLAGS@ -XFIXES_LIBS = @XFIXES_LIBS@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -libvabackendlib = @libvabackendlib@ -libvacorelib = @libvacorelib@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgconfigdir = @pkgconfigdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -AM_CFLAGS = -DLINUX -DIN_LIBVA -I$(top_srcdir)/src $(DRM_CFLAGS) -noinst_LTLIBRARIES = libva_x11.la -libva_x11includedir = ${includedir}/va -libva_x11include_HEADERS = va_x11.h va_dri.h va_dri2.h va_dricommon.h -libva_x11_la_SOURCES = va_x11.c va_dri.c va_dri2.c va_dricommon.c dri2_util.c dri1_util.c va_nvctrl.c -EXTRA_DIST = va_dristr.h va_dri2str.h va_dri2tokens.h va_nvctrl.h -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/x11/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/x11/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLTLIBRARIES: - -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) - @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -libva_x11.la: $(libva_x11_la_OBJECTS) $(libva_x11_la_DEPENDENCIES) - $(LINK) $(libva_x11_la_OBJECTS) $(libva_x11_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dri1_util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dri2_util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_dri.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_dri2.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_dricommon.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_nvctrl.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/va_x11.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-libva_x11includeHEADERS: $(libva_x11include_HEADERS) - @$(NORMAL_INSTALL) - test -z "$(libva_x11includedir)" || $(MKDIR_P) "$(DESTDIR)$(libva_x11includedir)" - @list='$(libva_x11include_HEADERS)'; for p in $$list; do \ - if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - f=$(am__strip_dir) \ - echo " $(libva_x11includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(libva_x11includedir)/$$f'"; \ - $(libva_x11includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(libva_x11includedir)/$$f"; \ - done - -uninstall-libva_x11includeHEADERS: - @$(NORMAL_UNINSTALL) - @list='$(libva_x11include_HEADERS)'; for p in $$list; do \ - f=$(am__strip_dir) \ - echo " rm -f '$(DESTDIR)$(libva_x11includedir)/$$f'"; \ - rm -f "$(DESTDIR)$(libva_x11includedir)/$$f"; \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libva_x11includedir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: install-libva_x11includeHEADERS - -install-dvi: install-dvi-am - -install-exec-am: - -install-html: install-html-am - -install-info: install-info-am - -install-man: - -install-pdf: install-pdf-am - -install-ps: install-ps-am - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libva_x11includeHEADERS - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libva_x11includeHEADERS install-man install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-libva_x11includeHEADERS - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff -Nru libva-0.31.0+latest1/src/x11/va_dri2.c libva-0.31.0+latest2/src/x11/va_dri2.c --- libva-0.31.0+latest1/src/x11/va_dri2.c 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dri2.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,307 +0,0 @@ -/* - * Copyright © 2008 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Soft- - * ware"), to deal in the Software without restriction, including without - * limitation the rights to use, copy, modify, merge, publish, distribute, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, provided that the above copyright - * notice(s) and this permission notice appear in all copies of the Soft- - * ware and that both the above copyright notice(s) and this permission - * notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- - * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY - * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN - * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- - * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- - * MANCE OF THIS SOFTWARE. - * - * Except as contained in this notice, the name of a copyright holder shall - * not be used in advertising or otherwise to promote the sale, use or - * other dealings in this Software without prior written authorization of - * the copyright holder. - * - * Authors: - * Kristian Høgsberg (krh@redhat.com) - */ - - -#define NEED_REPLIES -#include -#include -#include -#include "xf86drm.h" -#include "va_dri2.h" -#include "va_dri2str.h" -#include "va_dri2tokens.h" - -#ifndef DRI2DriverDRI -#define DRI2DriverDRI 0 -#endif - -static char va_dri2ExtensionName[] = DRI2_NAME; -static XExtensionInfo _va_dri2_info_data; -static XExtensionInfo *va_dri2Info = &_va_dri2_info_data; -static XEXT_GENERATE_CLOSE_DISPLAY (VA_DRI2CloseDisplay, va_dri2Info) -static /* const */ XExtensionHooks va_dri2ExtensionHooks = { - NULL, /* create_gc */ - NULL, /* copy_gc */ - NULL, /* flush_gc */ - NULL, /* free_gc */ - NULL, /* create_font */ - NULL, /* free_font */ - VA_DRI2CloseDisplay, /* close_display */ - NULL, /* wire_to_event */ - NULL, /* event_to_wire */ - NULL, /* error */ - NULL, /* error_string */ -}; - -static XEXT_GENERATE_FIND_DISPLAY (DRI2FindDisplay, va_dri2Info, - va_dri2ExtensionName, - &va_dri2ExtensionHooks, - 0, NULL) - -Bool VA_DRI2QueryExtension(Display *dpy, int *eventBase, int *errorBase) -{ - XExtDisplayInfo *info = DRI2FindDisplay(dpy); - - if (XextHasExtension(info)) { - *eventBase = info->codes->first_event; - *errorBase = info->codes->first_error; - return True; - } - - return False; -} - -Bool VA_DRI2QueryVersion(Display *dpy, int *major, int *minor) -{ - XExtDisplayInfo *info = DRI2FindDisplay (dpy); - xDRI2QueryVersionReply rep; - xDRI2QueryVersionReq *req; - - XextCheckExtension (dpy, info, va_dri2ExtensionName, False); - - LockDisplay(dpy); - GetReq(DRI2QueryVersion, req); - req->reqType = info->codes->major_opcode; - req->dri2ReqType = X_DRI2QueryVersion; - req->majorVersion = DRI2_MAJOR; - req->minorVersion = DRI2_MINOR; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - *major = rep.majorVersion; - *minor = rep.minorVersion; - UnlockDisplay(dpy); - SyncHandle(); - - return True; -} - -Bool VA_DRI2Connect(Display *dpy, XID window, - char **driverName, char **deviceName) -{ - XExtDisplayInfo *info = DRI2FindDisplay(dpy); - xDRI2ConnectReply rep; - xDRI2ConnectReq *req; - - XextCheckExtension (dpy, info, va_dri2ExtensionName, False); - - LockDisplay(dpy); - GetReq(DRI2Connect, req); - req->reqType = info->codes->major_opcode; - req->dri2ReqType = X_DRI2Connect; - req->window = window; - req->driverType = DRI2DriverDRI; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - - if (rep.driverNameLength == 0 && rep.deviceNameLength == 0) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - - *driverName = Xmalloc(rep.driverNameLength + 1); - if (*driverName == NULL) { - _XEatData(dpy, - ((rep.driverNameLength + 3) & ~3) + - ((rep.deviceNameLength + 3) & ~3)); - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - _XReadPad(dpy, *driverName, rep.driverNameLength); - (*driverName)[rep.driverNameLength] = '\0'; - - *deviceName = Xmalloc(rep.deviceNameLength + 1); - if (*deviceName == NULL) { - Xfree(*driverName); - _XEatData(dpy, ((rep.deviceNameLength + 3) & ~3)); - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - _XReadPad(dpy, *deviceName, rep.deviceNameLength); - (*deviceName)[rep.deviceNameLength] = '\0'; - - UnlockDisplay(dpy); - SyncHandle(); - - return True; -} - -Bool VA_DRI2Authenticate(Display *dpy, XID window, drm_magic_t magic) -{ - XExtDisplayInfo *info = DRI2FindDisplay(dpy); - xDRI2AuthenticateReq *req; - xDRI2AuthenticateReply rep; - - XextCheckExtension (dpy, info, va_dri2ExtensionName, False); - - LockDisplay(dpy); - GetReq(DRI2Authenticate, req); - req->reqType = info->codes->major_opcode; - req->dri2ReqType = X_DRI2Authenticate; - req->window = window; - req->magic = magic; - - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return False; - } - - UnlockDisplay(dpy); - SyncHandle(); - - return rep.authenticated; -} - -void VA_DRI2CreateDrawable(Display *dpy, XID drawable) -{ - XExtDisplayInfo *info = DRI2FindDisplay(dpy); - xDRI2CreateDrawableReq *req; - - XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); - - LockDisplay(dpy); - GetReq(DRI2CreateDrawable, req); - req->reqType = info->codes->major_opcode; - req->dri2ReqType = X_DRI2CreateDrawable; - req->drawable = drawable; - UnlockDisplay(dpy); - SyncHandle(); -} - -void VA_DRI2DestroyDrawable(Display *dpy, XID drawable) -{ - XExtDisplayInfo *info = DRI2FindDisplay(dpy); - xDRI2DestroyDrawableReq *req; - - XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); - - XSync(dpy, False); - - LockDisplay(dpy); - GetReq(DRI2DestroyDrawable, req); - req->reqType = info->codes->major_opcode; - req->dri2ReqType = X_DRI2DestroyDrawable; - req->drawable = drawable; - UnlockDisplay(dpy); - SyncHandle(); -} - -VA_DRI2Buffer *VA_DRI2GetBuffers(Display *dpy, XID drawable, - int *width, int *height, - unsigned int *attachments, int count, - int *outCount) -{ - XExtDisplayInfo *info = DRI2FindDisplay(dpy); - xDRI2GetBuffersReply rep; - xDRI2GetBuffersReq *req; - VA_DRI2Buffer *buffers; - xDRI2Buffer repBuffer; - CARD32 *p; - int i; - - XextCheckExtension (dpy, info, va_dri2ExtensionName, False); - - LockDisplay(dpy); - GetReqExtra(DRI2GetBuffers, count * 4, req); - req->reqType = info->codes->major_opcode; - req->dri2ReqType = X_DRI2GetBuffers; - req->drawable = drawable; - req->count = count; - p = (CARD32 *) &req[1]; - for (i = 0; i < count; i++) - p[i] = attachments[i]; - - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - return NULL; - } - - *width = rep.width; - *height = rep.height; - *outCount = rep.count; - - buffers = Xmalloc(rep.count * sizeof buffers[0]); - if (buffers == NULL) { - _XEatData(dpy, rep.count * sizeof repBuffer); - UnlockDisplay(dpy); - SyncHandle(); - return NULL; - } - - for (i = 0; i < rep.count; i++) { - _XReadPad(dpy, (char *) &repBuffer, sizeof repBuffer); - buffers[i].attachment = repBuffer.attachment; - buffers[i].name = repBuffer.name; - buffers[i].pitch = repBuffer.pitch; - buffers[i].cpp = repBuffer.cpp; - buffers[i].flags = repBuffer.flags; - } - - UnlockDisplay(dpy); - SyncHandle(); - - return buffers; -} - -void VA_DRI2CopyRegion(Display *dpy, XID drawable, XserverRegion region, - CARD32 dest, CARD32 src) -{ - XExtDisplayInfo *info = DRI2FindDisplay(dpy); - xDRI2CopyRegionReq *req; - xDRI2CopyRegionReply rep; - - XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); - - LockDisplay(dpy); - GetReq(DRI2CopyRegion, req); - req->reqType = info->codes->major_opcode; - req->dri2ReqType = X_DRI2CopyRegion; - req->drawable = drawable; - req->region = region; - req->dest = dest; - req->src = src; - - _XReply(dpy, (xReply *)&rep, 0, xFalse); - - UnlockDisplay(dpy); - SyncHandle(); -} diff -Nru libva-0.31.0+latest1/src/x11/va_dri2.h libva-0.31.0+latest2/src/x11/va_dri2.h --- libva-0.31.0+latest1/src/x11/va_dri2.h 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dri2.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,71 +0,0 @@ -/* - * Copyright © 2007,2008 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Soft- - * ware"), to deal in the Software without restriction, including without - * limitation the rights to use, copy, modify, merge, publish, distribute, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, provided that the above copyright - * notice(s) and this permission notice appear in all copies of the Soft- - * ware and that both the above copyright notice(s) and this permission - * notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- - * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY - * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN - * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- - * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- - * MANCE OF THIS SOFTWARE. - * - * Except as contained in this notice, the name of a copyright holder shall - * not be used in advertising or otherwise to promote the sale, use or - * other dealings in this Software without prior written authorization of - * the copyright holder. - * - * Authors: - * Kristian Høgsberg (krh@redhat.com) - */ - -#ifndef _VA_DRI2_H_ -#define _VA_DRI2_H_ - -#include -#include -#include - -typedef struct { - unsigned int attachment; - unsigned int name; - unsigned int pitch; - unsigned int cpp; - unsigned int flags; -} VA_DRI2Buffer; - -extern Bool -VA_DRI2QueryExtension(Display *display, int *eventBase, int *errorBase); -extern Bool -VA_DRI2QueryVersion(Display *display, int *major, int *minor); -extern Bool -VA_DRI2Connect(Display *display, XID window, - char **driverName, char **deviceName); -extern Bool -VA_DRI2Authenticate(Display *display, XID window, drm_magic_t magic); -extern void -VA_DRI2CreateDrawable(Display *display, XID drawable); -extern void -VA_DRI2DestroyDrawable(Display *display, XID handle); -extern VA_DRI2Buffer * -VA_DRI2GetBuffers(Display *dpy, XID drawable, - int *width, int *height, - unsigned int *attachments, int count, - int *outCount); -#if 0 -extern void -VA_DRI2CopyRegion(Display *dpy, XID drawable, XserverRegion region, - CARD32 dest, CARD32 src); -#endif -#endif diff -Nru libva-0.31.0+latest1/src/x11/va_dri2str.h libva-0.31.0+latest2/src/x11/va_dri2str.h --- libva-0.31.0+latest1/src/x11/va_dri2str.h 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dri2str.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,193 +0,0 @@ -/* - * Copyright © 2008 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Soft- - * ware"), to deal in the Software without restriction, including without - * limitation the rights to use, copy, modify, merge, publish, distribute, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, provided that the above copyright - * notice(s) and this permission notice appear in all copies of the Soft- - * ware and that both the above copyright notice(s) and this permission - * notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- - * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY - * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN - * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- - * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- - * MANCE OF THIS SOFTWARE. - * - * Except as contained in this notice, the name of a copyright holder shall - * not be used in advertising or otherwise to promote the sale, use or - * other dealings in this Software without prior written authorization of - * the copyright holder. - * - * Authors: - * Kristian Høgsberg (krh@redhat.com) - */ - -#ifndef _DRI2_PROTO_H_ -#define _DRI2_PROTO_H_ - -#define DRI2_NAME "DRI2" -#define DRI2_MAJOR 1 -#define DRI2_MINOR 0 - -#define DRI2NumberErrors 0 -#define DRI2NumberEvents 0 -#define DRI2NumberRequests 7 - -#define X_DRI2QueryVersion 0 -#define X_DRI2Connect 1 -#define X_DRI2Authenticate 2 -#define X_DRI2CreateDrawable 3 -#define X_DRI2DestroyDrawable 4 -#define X_DRI2GetBuffers 5 -#define X_DRI2CopyRegion 6 - -typedef struct { - CARD32 attachment B32; - CARD32 name B32; - CARD32 pitch B32; - CARD32 cpp B32; - CARD32 flags B32; -} xDRI2Buffer; - -typedef struct { - CARD8 reqType; - CARD8 dri2ReqType; - CARD16 length B16; - CARD32 majorVersion B32; - CARD32 minorVersion B32; -} xDRI2QueryVersionReq; -#define sz_xDRI2QueryVersionReq 12 - -typedef struct { - BYTE type; /* X_Reply */ - BYTE pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 majorVersion B32; - CARD32 minorVersion B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; -} xDRI2QueryVersionReply; -#define sz_xDRI2QueryVersionReply 32 - -typedef struct { - CARD8 reqType; - CARD8 dri2ReqType; - CARD16 length B16; - CARD32 window B32; - CARD32 driverType B32; -} xDRI2ConnectReq; -#define sz_xDRI2ConnectReq 12 - -typedef struct { - BYTE type; /* X_Reply */ - BYTE pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 driverNameLength B32; - CARD32 deviceNameLength B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; -} xDRI2ConnectReply; -#define sz_xDRI2ConnectReply 32 - -typedef struct { - CARD8 reqType; - CARD8 dri2ReqType; - CARD16 length B16; - CARD32 window B32; - CARD32 magic B32; -} xDRI2AuthenticateReq; -#define sz_xDRI2AuthenticateReq 12 - -typedef struct { - BYTE type; /* X_Reply */ - BYTE pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 authenticated B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; -} xDRI2AuthenticateReply; -#define sz_xDRI2AuthenticateReply 32 - -typedef struct { - CARD8 reqType; - CARD8 dri2ReqType; - CARD16 length B16; - CARD32 drawable B32; -} xDRI2CreateDrawableReq; -#define sz_xDRI2CreateDrawableReq 8 - -typedef struct { - CARD8 reqType; - CARD8 dri2ReqType; - CARD16 length B16; - CARD32 drawable B32; -} xDRI2DestroyDrawableReq; -#define sz_xDRI2DestroyDrawableReq 8 - -typedef struct { - CARD8 reqType; - CARD8 dri2ReqType; - CARD16 length B16; - CARD32 drawable B32; - CARD32 count B32; -} xDRI2GetBuffersReq; -#define sz_xDRI2GetBuffersReq 12 - -typedef struct { - BYTE type; /* X_Reply */ - BYTE pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 width B32; - CARD32 height B32; - CARD32 count B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; -} xDRI2GetBuffersReply; -#define sz_xDRI2GetBuffersReply 32 - -typedef struct { - CARD8 reqType; - CARD8 dri2ReqType; - CARD16 length B16; - CARD32 drawable B32; - CARD32 region B32; - CARD32 dest B32; - CARD32 src B32; -} xDRI2CopyRegionReq; -#define sz_xDRI2CopyRegionReq 20 - -typedef struct { - BYTE type; /* X_Reply */ - BYTE pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; - CARD32 pad7 B32; -} xDRI2CopyRegionReply; -#define sz_xDRI2CopyRegionReply 32 - -#endif diff -Nru libva-0.31.0+latest1/src/x11/va_dri2tokens.h libva-0.31.0+latest2/src/x11/va_dri2tokens.h --- libva-0.31.0+latest1/src/x11/va_dri2tokens.h 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dri2tokens.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,48 +0,0 @@ -/* - * Copyright © 2008 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Soft- - * ware"), to deal in the Software without restriction, including without - * limitation the rights to use, copy, modify, merge, publish, distribute, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, provided that the above copyright - * notice(s) and this permission notice appear in all copies of the Soft- - * ware and that both the above copyright notice(s) and this permission - * notice appear in supporting documentation. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- - * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY - * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN - * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- - * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- - * MANCE OF THIS SOFTWARE. - * - * Except as contained in this notice, the name of a copyright holder shall - * not be used in advertising or otherwise to promote the sale, use or - * other dealings in this Software without prior written authorization of - * the copyright holder. - * - * Authors: - * Kristian Høgsberg (krh@redhat.com) - */ - -#ifndef _DRI2_TOKENS_H_ -#define _DRI2_TOKENS_H_ - -#define DRI2BufferFrontLeft 0 -#define DRI2BufferBackLeft 1 -#define DRI2BufferFrontRight 2 -#define DRI2BufferBackRight 3 -#define DRI2BufferDepth 4 -#define DRI2BufferStencil 5 -#define DRI2BufferAccum 6 -#define DRI2BufferFakeFrontLeft 7 -#define DRI2BufferFakeFrontRight 8 - -#define DRI2DriverDRI 0 - -#endif diff -Nru libva-0.31.0+latest1/src/x11/va_dri.c libva-0.31.0+latest2/src/x11/va_dri.c --- libva-0.31.0+latest1/src/x11/va_dri.c 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dri.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,624 +0,0 @@ -/* $XFree86: xc/lib/GL/dri/XF86dri.c,v 1.13 2002/10/30 12:51:25 alanh Exp $ */ -/************************************************************************** - -Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. -Copyright 2000 VA Linux Systems, Inc. -Copyright 2007 Intel Corporation -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sub license, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -**************************************************************************/ - -/* - * Authors: - * Kevin E. Martin - * Jens Owen - * Rickard E. (Rik) Faith - * - */ - -/* THIS IS NOT AN X CONSORTIUM STANDARD */ - -#define NEED_REPLIES -#include -#include -#include -#include "va_dristr.h" - -#define PUBLIC - -static XExtensionInfo _va_dri_info_data; -static XExtensionInfo *va_dri_info = &_va_dri_info_data; -static char va_dri_extension_name[] = VA_DRINAME; - -#define VA_DRICheckExtension(dpy,i,val) \ - XextCheckExtension (dpy, i, va_dri_extension_name, val) - -/***************************************************************************** - * * - * private utility routines * - * * - *****************************************************************************/ - -static int close_display(Display *dpy, XExtCodes *extCodes); -static /* const */ XExtensionHooks va_dri_extension_hooks = { - NULL, /* create_gc */ - NULL, /* copy_gc */ - NULL, /* flush_gc */ - NULL, /* free_gc */ - NULL, /* create_font */ - NULL, /* free_font */ - close_display, /* close_display */ - NULL, /* wire_to_event */ - NULL, /* event_to_wire */ - NULL, /* error */ - NULL, /* error_string */ -}; - -static XEXT_GENERATE_FIND_DISPLAY (find_display, va_dri_info, - va_dri_extension_name, - &va_dri_extension_hooks, - 0, NULL) - -static XEXT_GENERATE_CLOSE_DISPLAY (close_display, va_dri_info) - - -/***************************************************************************** - * * - * public XFree86-DRI Extension routines * - * * - *****************************************************************************/ - -#if 0 -#include -#define TRACE(msg) fprintf(stderr,"XF86DRI%s\n", msg); -#else -#define TRACE(msg) -#endif - - -PUBLIC Bool VA_DRIQueryExtension (dpy, event_basep, error_basep) - Display *dpy; - int *event_basep, *error_basep; -{ - XExtDisplayInfo *info = find_display (dpy); - - TRACE("QueryExtension..."); - if (XextHasExtension(info)) { - *event_basep = info->codes->first_event; - *error_basep = info->codes->first_error; - TRACE("QueryExtension... return True"); - return True; - } else { - TRACE("QueryExtension... return False"); - return False; - } -} - -PUBLIC Bool VA_DRIQueryVersion(dpy, majorVersion, minorVersion, patchVersion) - Display* dpy; - int* majorVersion; - int* minorVersion; - int* patchVersion; -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIQueryVersionReply rep; - xVA_DRIQueryVersionReq *req; - - TRACE("QueryVersion..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIQueryVersion, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIQueryVersion; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("QueryVersion... return False"); - return False; - } - *majorVersion = rep.majorVersion; - *minorVersion = rep.minorVersion; - *patchVersion = rep.patchVersion; - UnlockDisplay(dpy); - SyncHandle(); - TRACE("QueryVersion... return True"); - return True; -} - -PUBLIC Bool VA_DRIQueryDirectRenderingCapable(dpy, screen, isCapable) - Display* dpy; - int screen; - Bool* isCapable; -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIQueryDirectRenderingCapableReply rep; - xVA_DRIQueryDirectRenderingCapableReq *req; - - TRACE("QueryDirectRenderingCapable..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIQueryDirectRenderingCapable, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIQueryDirectRenderingCapable; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("QueryDirectRenderingCapable... return False"); - return False; - } - *isCapable = rep.isCapable; - UnlockDisplay(dpy); - SyncHandle(); - TRACE("QueryDirectRenderingCapable... return True"); - return True; -} - -PUBLIC Bool VA_DRIOpenConnection(dpy, screen, hSAREA, busIdString) - Display* dpy; - int screen; - drm_handle_t * hSAREA; - char **busIdString; -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIOpenConnectionReply rep; - xVA_DRIOpenConnectionReq *req; - - TRACE("OpenConnection..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIOpenConnection, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIOpenConnection; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("OpenConnection... return False"); - return False; - } - - *hSAREA = rep.hSAREALow; - if (sizeof(drm_handle_t) == 8) { - int shift = 32; /* var to prevent warning on next line */ - *hSAREA |= ((drm_handle_t) rep.hSAREAHigh) << shift; - } - - if (rep.length) { - if (!(*busIdString = (char *)Xcalloc(rep.busIdStringLength + 1, 1))) { - _XEatData(dpy, ((rep.busIdStringLength+3) & ~3)); - UnlockDisplay(dpy); - SyncHandle(); - TRACE("OpenConnection... return False"); - return False; - } - _XReadPad(dpy, *busIdString, rep.busIdStringLength); - } else { - *busIdString = NULL; - } - UnlockDisplay(dpy); - SyncHandle(); - TRACE("OpenConnection... return True"); - return True; -} - -PUBLIC Bool VA_DRIAuthConnection(dpy, screen, magic) - Display* dpy; - int screen; - drm_magic_t magic; -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIAuthConnectionReq *req; - xVA_DRIAuthConnectionReply rep; - - TRACE("AuthConnection..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIAuthConnection, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIAuthConnection; - req->screen = screen; - req->magic = magic; - rep.authenticated = 0; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse) || !rep.authenticated) { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("AuthConnection... return False"); - return False; - } - UnlockDisplay(dpy); - SyncHandle(); - TRACE("AuthConnection... return True"); - return True; -} - -PUBLIC Bool VA_DRICloseConnection(dpy, screen) - Display* dpy; - int screen; -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRICloseConnectionReq *req; - - TRACE("CloseConnection..."); - - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRICloseConnection, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRICloseConnection; - req->screen = screen; - UnlockDisplay(dpy); - SyncHandle(); - TRACE("CloseConnection... return True"); - return True; -} - -PUBLIC Bool VA_DRIGetClientDriverName(dpy, screen, ddxDriverMajorVersion, - ddxDriverMinorVersion, ddxDriverPatchVersion, clientDriverName) - Display* dpy; - int screen; - int* ddxDriverMajorVersion; - int* ddxDriverMinorVersion; - int* ddxDriverPatchVersion; - char** clientDriverName; -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIGetClientDriverNameReply rep; - xVA_DRIGetClientDriverNameReq *req; - - TRACE("GetClientDriverName..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIGetClientDriverName, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIGetClientDriverName; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetClientDriverName... return False"); - return False; - } - - *ddxDriverMajorVersion = rep.ddxDriverMajorVersion; - *ddxDriverMinorVersion = rep.ddxDriverMinorVersion; - *ddxDriverPatchVersion = rep.ddxDriverPatchVersion; - - if (rep.length) { - if (!(*clientDriverName = (char *)Xcalloc(rep.clientDriverNameLength + 1, 1))) { - _XEatData(dpy, ((rep.clientDriverNameLength+3) & ~3)); - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetClientDriverName... return False"); - return False; - } - _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength); - } else { - *clientDriverName = NULL; - } - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetClientDriverName... return True"); - return True; -} - -PUBLIC Bool VA_DRICreateContextWithConfig(dpy, screen, configID, context, - hHWContext) - Display* dpy; - int screen; - int configID; - XID* context; - drm_context_t * hHWContext; -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRICreateContextReply rep; - xVA_DRICreateContextReq *req; - - TRACE("CreateContext..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRICreateContext, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRICreateContext; - req->visual = configID; - req->screen = screen; - *context = XAllocID(dpy); - req->context = *context; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("CreateContext... return False"); - return False; - } - *hHWContext = rep.hHWContext; - UnlockDisplay(dpy); - SyncHandle(); - TRACE("CreateContext... return True"); - return True; -} - -PUBLIC Bool VA_DRICreateContext(dpy, screen, visual, context, hHWContext) - Display* dpy; - int screen; - Visual* visual; - XID* context; - drm_context_t * hHWContext; -{ - return VA_DRICreateContextWithConfig( dpy, screen, visual->visualid, - context, hHWContext ); -} - -PUBLIC Bool VA_DRIDestroyContext( __DRInativeDisplay * ndpy, int screen, - __DRIid context ) -{ - Display * const dpy = (Display *) ndpy; - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIDestroyContextReq *req; - - TRACE("DestroyContext..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIDestroyContext, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIDestroyContext; - req->screen = screen; - req->context = context; - UnlockDisplay(dpy); - SyncHandle(); - TRACE("DestroyContext... return True"); - return True; -} - -PUBLIC Bool VA_DRICreateDrawable( __DRInativeDisplay * ndpy, int screen, - __DRIid drawable, drm_drawable_t * hHWDrawable ) -{ - Display * const dpy = (Display *) ndpy; - XExtDisplayInfo *info = find_display (dpy); - xVA_DRICreateDrawableReply rep; - xVA_DRICreateDrawableReq *req; - - TRACE("CreateDrawable..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRICreateDrawable, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRICreateDrawable; - req->screen = screen; - req->drawable = drawable; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("CreateDrawable... return False"); - return False; - } - *hHWDrawable = rep.hHWDrawable; - UnlockDisplay(dpy); - SyncHandle(); - TRACE("CreateDrawable... return True"); - return True; -} - -PUBLIC Bool VA_DRIDestroyDrawable( __DRInativeDisplay * ndpy, int screen, - __DRIid drawable ) -{ - Display * const dpy = (Display *) ndpy; - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIDestroyDrawableReq *req; - - TRACE("DestroyDrawable..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIDestroyDrawable, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIDestroyDrawable; - req->screen = screen; - req->drawable = drawable; - UnlockDisplay(dpy); - SyncHandle(); - TRACE("DestroyDrawable... return True"); - return True; -} - -PUBLIC Bool VA_DRIGetDrawableInfo(Display* dpy, int screen, Drawable drawable, - unsigned int* index, unsigned int* stamp, - int* X, int* Y, int* W, int* H, - int* numClipRects, drm_clip_rect_t ** pClipRects, - int* backX, int* backY, - int* numBackClipRects, drm_clip_rect_t ** pBackClipRects ) -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIGetDrawableInfoReply rep; - xVA_DRIGetDrawableInfoReq *req; - int total_rects; - - TRACE("GetDrawableInfo..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIGetDrawableInfo, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIGetDrawableInfo; - req->screen = screen; - req->drawable = drawable; - - if (!_XReply(dpy, (xReply *)&rep, 1, xFalse)) - { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetDrawableInfo... return False"); - return False; - } - *index = rep.drawableTableIndex; - *stamp = rep.drawableTableStamp; - *X = (int)rep.drawableX; - *Y = (int)rep.drawableY; - *W = (int)rep.drawableWidth; - *H = (int)rep.drawableHeight; - *numClipRects = rep.numClipRects; - total_rects = *numClipRects; - - *backX = rep.backX; - *backY = rep.backY; - *numBackClipRects = rep.numBackClipRects; - total_rects += *numBackClipRects; - -#if 0 - /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks - * backwards compatibility (Because of the >> 2 shift) but the fix - * enables multi-threaded apps to work. - */ - if (rep.length != ((((SIZEOF(xVA_DRIGetDrawableInfoReply) - - SIZEOF(xGenericReply) + - total_rects * sizeof(drm_clip_rect_t)) + 3) & ~3) >> 2)) { - _XEatData(dpy, rep.length); - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetDrawableInfo... return False"); - return False; - } -#endif - - if (*numClipRects) { - int len = sizeof(drm_clip_rect_t) * (*numClipRects); - - *pClipRects = (drm_clip_rect_t *)Xcalloc(len, 1); - if (*pClipRects) - _XRead(dpy, (char*)*pClipRects, len); - } else { - *pClipRects = NULL; - } - - if (*numBackClipRects) { - int len = sizeof(drm_clip_rect_t) * (*numBackClipRects); - - *pBackClipRects = (drm_clip_rect_t *)Xcalloc(len, 1); - if (*pBackClipRects) - _XRead(dpy, (char*)*pBackClipRects, len); - } else { - *pBackClipRects = NULL; - } - - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetDrawableInfo... return True"); - return True; -} - -PUBLIC Bool VA_DRIGetDeviceInfo(dpy, screen, hFrameBuffer, - fbOrigin, fbSize, fbStride, devPrivateSize, pDevPrivate) - Display* dpy; - int screen; - drm_handle_t * hFrameBuffer; - int* fbOrigin; - int* fbSize; - int* fbStride; - int* devPrivateSize; - void** pDevPrivate; -{ - XExtDisplayInfo *info = find_display (dpy); - xVA_DRIGetDeviceInfoReply rep; - xVA_DRIGetDeviceInfoReq *req; - - TRACE("GetDeviceInfo..."); - VA_DRICheckExtension (dpy, info, False); - - LockDisplay(dpy); - GetReq(VA_DRIGetDeviceInfo, req); - req->reqType = info->codes->major_opcode; - req->driReqType = X_VA_DRIGetDeviceInfo; - req->screen = screen; - if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetDeviceInfo... return False"); - return False; - } - - *hFrameBuffer = rep.hFrameBufferLow; - if (sizeof(drm_handle_t) == 8) { - int shift = 32; /* var to prevent warning on next line */ - *hFrameBuffer |= ((drm_handle_t) rep.hFrameBufferHigh) << shift; - } - - *fbOrigin = rep.framebufferOrigin; - *fbSize = rep.framebufferSize; - *fbStride = rep.framebufferStride; - *devPrivateSize = rep.devPrivateSize; - - if (rep.length) { - if (!(*pDevPrivate = (void *)Xcalloc(rep.devPrivateSize, 1))) { - _XEatData(dpy, ((rep.devPrivateSize+3) & ~3)); - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetDeviceInfo... return False"); - return False; - } - _XRead(dpy, (char*)*pDevPrivate, rep.devPrivateSize); - } else { - *pDevPrivate = NULL; - } - - UnlockDisplay(dpy); - SyncHandle(); - TRACE("GetDeviceInfo... return True"); - return True; -} - -PUBLIC Bool VA_DRIOpenFullScreen(dpy, screen, drawable) - Display* dpy; - int screen; - Drawable drawable; -{ - /* This function and the underlying X protocol are deprecated. - */ - (void) dpy; - (void) screen; - (void) drawable; - return False; -} - -PUBLIC Bool VA_DRICloseFullScreen(dpy, screen, drawable) - Display* dpy; - int screen; - Drawable drawable; -{ - /* This function and the underlying X protocol are deprecated. - */ - (void) dpy; - (void) screen; - (void) drawable; - return True; -} - -#undef TRACE - diff -Nru libva-0.31.0+latest1/src/x11/va_dricommon.c libva-0.31.0+latest2/src/x11/va_dricommon.c --- libva-0.31.0+latest1/src/x11/va_dricommon.c 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dricommon.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,62 +0,0 @@ -#include "va_dricommon.h" - -static struct dri_drawable * -do_drawable_hash(VADriverContextP ctx, XID drawable) -{ - struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; - int index = drawable % DRAWABLE_HASH_SZ; - struct dri_drawable *dri_drawable = dri_state->drawable_hash[index]; - - while (dri_drawable) { - if (dri_drawable->x_drawable == drawable) - return dri_drawable; - dri_drawable = dri_drawable->next; - } - - dri_drawable = dri_state->createDrawable(ctx, drawable); - dri_drawable->x_drawable = drawable; - dri_drawable->next = dri_state->drawable_hash[index]; - dri_state->drawable_hash[index] = dri_drawable; - - return dri_drawable; -} - -void -free_drawable_hashtable(VADriverContextP ctx) -{ - struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; - int i; - struct dri_drawable *dri_drawable, *prev; - - for (i = 0; i < DRAWABLE_HASH_SZ; i++) { - dri_drawable = dri_state->drawable_hash[i]; - - while (dri_drawable) { - prev = dri_drawable; - dri_drawable = prev->next; - dri_state->destroyDrawable(ctx, prev); - } - } -} - -struct dri_drawable * -dri_get_drawable(VADriverContextP ctx, XID drawable) -{ - return do_drawable_hash(ctx, drawable); -} - -void -dri_swap_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) -{ - struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; - - dri_state->swapBuffer(ctx, dri_drawable); -} - -union dri_buffer * -dri_get_rendering_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) -{ - struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; - - return dri_state->getRenderingBuffer(ctx, dri_drawable); -} diff -Nru libva-0.31.0+latest1/src/x11/va_dricommon.h libva-0.31.0+latest2/src/x11/va_dricommon.h --- libva-0.31.0+latest1/src/x11/va_dricommon.h 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dricommon.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,68 +0,0 @@ -#ifndef _VA_DRICOMMON_H_ -#define _VA_DRICOMMON_H_ - -#include - -#include -#include -#include - -#include "va_backend.h" - -enum -{ - VA_NONE = 0, - VA_DRI1 = 1, - VA_DRI2 = 2 -}; - -union dri_buffer -{ - struct { - unsigned int attachment; - unsigned int name; - unsigned int pitch; - unsigned int cpp; - unsigned int flags; - } dri2; - - struct { - } dri1; -}; - -struct dri_drawable -{ - XID x_drawable; - int x; - int y; - unsigned int width; - unsigned int height; - struct dri_drawable *next; -}; - -#define DRAWABLE_HASH_SZ 32 -struct dri_state -{ - int fd; - int driConnectedFlag; /* 0: disconnected, 1: DRI, 2: DRI2 */ - drm_handle_t hSAREA; - drm_context_t hwContext; - drmAddress pSAREA; - XID hwContextID; - struct dri_drawable *drawable_hash[DRAWABLE_HASH_SZ]; - - struct dri_drawable *(*createDrawable)(VADriverContextP ctx, XID x_drawable); - void (*destroyDrawable)(VADriverContextP ctx, struct dri_drawable *dri_drawable); - void (*swapBuffer)(VADriverContextP ctx, struct dri_drawable *dri_drawable); - union dri_buffer *(*getRenderingBuffer)(VADriverContextP ctx, struct dri_drawable *dri_drawable); - void (*close)(VADriverContextP ctx); -}; - -Bool isDRI2Connected(VADriverContextP ctx, char **driver_name); -Bool isDRI1Connected(VADriverContextP ctx, char **driver_name); -void free_drawable_hashtable(VADriverContextP ctx); -struct dri_drawable *dri_get_drawable(VADriverContextP ctx, XID drawable); -void dri_swap_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable); -union dri_buffer *dri_get_rendering_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable); - -#endif /* _VA_DRICOMMON_H_ */ diff -Nru libva-0.31.0+latest1/src/x11/va_dri.h libva-0.31.0+latest2/src/x11/va_dri.h --- libva-0.31.0+latest1/src/x11/va_dri.h 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dri.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,120 +0,0 @@ -/* $XFree86: xc/lib/GL/dri/xf86dri.h,v 1.8 2002/10/30 12:51:25 alanh Exp $ */ -/************************************************************************** - -Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. -Copyright 2000 VA Linux Systems, Inc. -Copyright 2007 Intel Corporation -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sub license, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -**************************************************************************/ - -/** - * \file xf86dri.h - * Protocol numbers and function prototypes for DRI X protocol. - * - * \author Kevin E. Martin - * \author Jens Owen - * \author Rickard E. (Rik) Faith - */ - -#ifndef _VA_DRI_H_ -#define _VA_DRI_H_ - -#include -#include - -#define X_VA_DRIQueryVersion 0 -#define X_VA_DRIQueryDirectRenderingCapable 1 -#define X_VA_DRIOpenConnection 2 -#define X_VA_DRICloseConnection 3 -#define X_VA_DRIGetClientDriverName 4 -#define X_VA_DRICreateContext 5 -#define X_VA_DRIDestroyContext 6 -#define X_VA_DRICreateDrawable 7 -#define X_VA_DRIDestroyDrawable 8 -#define X_VA_DRIGetDrawableInfo 9 -#define X_VA_DRIGetDeviceInfo 10 -#define X_VA_DRIAuthConnection 11 -#define X_VA_DRIOpenFullScreen 12 /* Deprecated */ -#define X_VA_DRICloseFullScreen 13 /* Deprecated */ - -#define VA_DRINumberEvents 0 - -#define VA_DRIClientNotLocal 0 -#define VA_DRIOperationNotSupported 1 -#define VA_DRINumberErrors (VA_DRIOperationNotSupported + 1) - -typedef unsigned long __DRIid; -typedef void __DRInativeDisplay; - -_XFUNCPROTOBEGIN - -Bool VA_DRIQueryExtension( Display *dpy, int *event_base, int *error_base ); - -Bool VA_DRIQueryVersion( Display *dpy, int *majorVersion, int *minorVersion, - int *patchVersion ); - -Bool VA_DRIQueryDirectRenderingCapable( Display *dpy, int screen, - Bool *isCapable ); - -Bool VA_DRIOpenConnection( Display *dpy, int screen, drm_handle_t *hSAREA, - char **busIDString ); - -Bool VA_DRIAuthConnection( Display *dpy, int screen, drm_magic_t magic ); - -Bool VA_DRICloseConnection( Display *dpy, int screen ); - -Bool VA_DRIGetClientDriverName( Display *dpy, int screen, - int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, - int *ddxDriverPatchVersion, char **clientDriverName ); - -Bool VA_DRICreateContext( Display *dpy, int screen, Visual *visual, - XID *ptr_to_returned_context_id, drm_context_t *hHWContext ); - -Bool VA_DRICreateContextWithConfig( Display *dpy, int screen, int configID, - XID *ptr_to_returned_context_id, drm_context_t *hHWContext ); - -Bool VA_DRIDestroyContext( __DRInativeDisplay *dpy, int screen, - __DRIid context_id ); - -Bool VA_DRICreateDrawable( __DRInativeDisplay *dpy, int screen, - __DRIid drawable, drm_drawable_t *hHWDrawable ); - -Bool VA_DRIDestroyDrawable( __DRInativeDisplay *dpy, int screen, - __DRIid drawable); - -Bool VA_DRIGetDrawableInfo( Display *dpy, int screen, Drawable drawable, - unsigned int *index, unsigned int *stamp, - int *X, int *Y, int *W, int *H, - int *numClipRects, drm_clip_rect_t ** pClipRects, - int *backX, int *backY, - int *numBackClipRects, drm_clip_rect_t **pBackClipRects ); - -Bool VA_DRIGetDeviceInfo( Display *dpy, int screen, - drm_handle_t *hFrameBuffer, int *fbOrigin, int *fbSize, - int *fbStride, int *devPrivateSize, void **pDevPrivate ); - -_XFUNCPROTOEND - -#endif /* _VA_DRI_H_ */ - diff -Nru libva-0.31.0+latest1/src/x11/va_dristr.h libva-0.31.0+latest2/src/x11/va_dristr.h --- libva-0.31.0+latest1/src/x11/va_dristr.h 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_dristr.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,344 +0,0 @@ -/* $XFree86: xc/lib/GL/dri/xf86dristr.h,v 1.10 2002/10/30 12:51:25 alanh Exp $ */ -/************************************************************************** - -Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. -Copyright 2000 VA Linux Systems, Inc. -Copyright 2007 Intel Corporation -All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sub license, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice (including the -next paragraph) shall be included in all copies or substantial portions -of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. -IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -**************************************************************************/ - -/* - * Authors: - * Kevin E. Martin - * Jens Owen - * Rickard E. (Rik) Fiath - * - */ - -#ifndef _VA_DRISTR_H_ -#define _VA_DRISTR_H_ - -#include "va_dri.h" - -#define VA_DRINAME "XFree86-DRI" - -/* The DRI version number. This was originally set to be the same of the - * XFree86 version number. However, this version is really indepedent of - * the XFree86 version. - * - * Version History: - * 4.0.0: Original - * 4.0.1: Patch to bump clipstamp when windows are destroyed, 28 May 02 - * 4.1.0: Add transition from single to multi in DRMInfo rec, 24 Jun 02 - */ -#define VA_DRI_MAJOR_VERSION 4 -#define VA_DRI_MINOR_VERSION 1 -#define VA_DRI_PATCH_VERSION 0 - -typedef struct _VA_DRIQueryVersion { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRIQueryVersion */ - CARD16 length B16; -} xVA_DRIQueryVersionReq; -#define sz_xVA_DRIQueryVersionReq 4 - -typedef struct { - BYTE type; /* X_Reply */ - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD16 majorVersion B16; /* major version of DRI protocol */ - CARD16 minorVersion B16; /* minor version of DRI protocol */ - CARD32 patchVersion B32; /* patch version of DRI protocol */ - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; -} xVA_DRIQueryVersionReply; -#define sz_xVA_DRIQueryVersionReply 32 - -typedef struct _VA_DRIQueryDirectRenderingCapable { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* X_DRIQueryDirectRenderingCapable */ - CARD16 length B16; - CARD32 screen B32; -} xVA_DRIQueryDirectRenderingCapableReq; -#define sz_xVA_DRIQueryDirectRenderingCapableReq 8 - -typedef struct { - BYTE type; /* X_Reply */ - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - BOOL isCapable; - BOOL pad2; - BOOL pad3; - BOOL pad4; - CARD32 pad5 B32; - CARD32 pad6 B32; - CARD32 pad7 B32; - CARD32 pad8 B32; - CARD32 pad9 B32; -} xVA_DRIQueryDirectRenderingCapableReply; -#define sz_xVA_DRIQueryDirectRenderingCapableReply 32 - -typedef struct _VA_DRIOpenConnection { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRIOpenConnection */ - CARD16 length B16; - CARD32 screen B32; -} xVA_DRIOpenConnectionReq; -#define sz_xVA_DRIOpenConnectionReq 8 - -typedef struct { - BYTE type; /* X_Reply */ - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 hSAREALow B32; - CARD32 hSAREAHigh B32; - CARD32 busIdStringLength B32; - CARD32 pad6 B32; - CARD32 pad7 B32; - CARD32 pad8 B32; -} xVA_DRIOpenConnectionReply; -#define sz_xVA_DRIOpenConnectionReply 32 - -typedef struct _VA_DRIAuthConnection { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRICloseConnection */ - CARD16 length B16; - CARD32 screen B32; - CARD32 magic B32; -} xVA_DRIAuthConnectionReq; -#define sz_xVA_DRIAuthConnectionReq 12 - -typedef struct { - BYTE type; - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 authenticated B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; -} xVA_DRIAuthConnectionReply; -#define zx_xVA_DRIAuthConnectionReply 32 - -typedef struct _VA_DRICloseConnection { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRICloseConnection */ - CARD16 length B16; - CARD32 screen B32; -} xVA_DRICloseConnectionReq; -#define sz_xVA_DRICloseConnectionReq 8 - -typedef struct _VA_DRIGetClientDriverName { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRIGetClientDriverName */ - CARD16 length B16; - CARD32 screen B32; -} xVA_DRIGetClientDriverNameReq; -#define sz_xVA_DRIGetClientDriverNameReq 8 - -typedef struct { - BYTE type; /* X_Reply */ - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 ddxDriverMajorVersion B32; - CARD32 ddxDriverMinorVersion B32; - CARD32 ddxDriverPatchVersion B32; - CARD32 clientDriverNameLength B32; - CARD32 pad5 B32; - CARD32 pad6 B32; -} xVA_DRIGetClientDriverNameReply; -#define sz_xVA_DRIGetClientDriverNameReply 32 - -typedef struct _VA_DRICreateContext { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRICreateContext */ - CARD16 length B16; - CARD32 screen B32; - CARD32 visual B32; - CARD32 context B32; -} xVA_DRICreateContextReq; -#define sz_xVA_DRICreateContextReq 16 - -typedef struct { - BYTE type; /* X_Reply */ - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 hHWContext B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; -} xVA_DRICreateContextReply; -#define sz_xVA_DRICreateContextReply 32 - -typedef struct _VA_DRIDestroyContext { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRIDestroyContext */ - CARD16 length B16; - CARD32 screen B32; - CARD32 context B32; -} xVA_DRIDestroyContextReq; -#define sz_xVA_DRIDestroyContextReq 12 - -typedef struct _VA_DRICreateDrawable { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRICreateDrawable */ - CARD16 length B16; - CARD32 screen B32; - CARD32 drawable B32; -} xVA_DRICreateDrawableReq; -#define sz_xVA_DRICreateDrawableReq 12 - -typedef struct { - BYTE type; /* X_Reply */ - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 hHWDrawable B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; -} xVA_DRICreateDrawableReply; -#define sz_xVA_DRICreateDrawableReply 32 - -typedef struct _VA_DRIDestroyDrawable { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRIDestroyDrawable */ - CARD16 length B16; - CARD32 screen B32; - CARD32 drawable B32; -} xVA_DRIDestroyDrawableReq; -#define sz_xVA_DRIDestroyDrawableReq 12 - -typedef struct _VA_DRIGetDrawableInfo { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRIGetDrawableInfo */ - CARD16 length B16; - CARD32 screen B32; - CARD32 drawable B32; -} xVA_DRIGetDrawableInfoReq; -#define sz_xVA_DRIGetDrawableInfoReq 12 - -typedef struct { - BYTE type; /* X_Reply */ - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 drawableTableIndex B32; - CARD32 drawableTableStamp B32; - INT16 drawableX B16; - INT16 drawableY B16; - INT16 drawableWidth B16; - INT16 drawableHeight B16; - CARD32 numClipRects B32; - INT16 backX B16; - INT16 backY B16; - CARD32 numBackClipRects B32; -} xVA_DRIGetDrawableInfoReply; - -#define sz_xVA_DRIGetDrawableInfoReply 36 - - -typedef struct _VA_DRIGetDeviceInfo { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRIGetDeviceInfo */ - CARD16 length B16; - CARD32 screen B32; -} xVA_DRIGetDeviceInfoReq; -#define sz_xVA_DRIGetDeviceInfoReq 8 - -typedef struct { - BYTE type; /* X_Reply */ - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 hFrameBufferLow B32; - CARD32 hFrameBufferHigh B32; - CARD32 framebufferOrigin B32; - CARD32 framebufferSize B32; - CARD32 framebufferStride B32; - CARD32 devPrivateSize B32; -} xVA_DRIGetDeviceInfoReply; -#define sz_xVA_DRIGetDeviceInfoReply 32 - -typedef struct _VA_DRIOpenFullScreen { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRIOpenFullScreen */ - CARD16 length B16; - CARD32 screen B32; - CARD32 drawable B32; -} xVA_DRIOpenFullScreenReq; -#define sz_xVA_DRIOpenFullScreenReq 12 - -typedef struct { - BYTE type; - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 isFullScreen B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; -} xVA_DRIOpenFullScreenReply; -#define sz_xVA_DRIOpenFullScreenReply 32 - -typedef struct _VA_DRICloseFullScreen { - CARD8 reqType; /* always DRIReqCode */ - CARD8 driReqType; /* always X_DRICloseFullScreen */ - CARD16 length B16; - CARD32 screen B32; - CARD32 drawable B32; -} xVA_DRICloseFullScreenReq; -#define sz_xVA_DRICloseFullScreenReq 12 - -typedef struct { - BYTE type; - BOOL pad1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 pad2 B32; - CARD32 pad3 B32; - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; - CARD32 pad7 B32; -} xVA_DRICloseFullScreenReply; -#define sz_xVA_DRICloseFullScreenReply 32 - - -#endif /* _VA_DRISTR_H_ */ diff -Nru libva-0.31.0+latest1/src/x11/va_nvctrl.c libva-0.31.0+latest2/src/x11/va_nvctrl.c --- libva-0.31.0+latest1/src/x11/va_nvctrl.c 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_nvctrl.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,399 +0,0 @@ -/* - * Copyright (c) 2008 NVIDIA, Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#define _GNU_SOURCE 1 -#include - -#define NEED_REPLIES -#include -#include -#include -#include -#include -#include "va_nvctrl.h" - -#define NV_CONTROL_ERRORS 0 -#define NV_CONTROL_EVENTS 5 -#define NV_CONTROL_NAME "NV-CONTROL" - -#define NV_CTRL_TARGET_TYPE_X_SCREEN 0 -#define NV_CTRL_TARGET_TYPE_GPU 1 -#define NV_CTRL_TARGET_TYPE_FRAMELOCK 2 -#define NV_CTRL_TARGET_TYPE_VCSC 3 /* Visual Computing System */ - -#define NV_CTRL_STRING_NVIDIA_DRIVER_VERSION 3 /* R--G */ - -#define X_nvCtrlQueryExtension 0 -#define X_nvCtrlIsNv 1 -#define X_nvCtrlQueryStringAttribute 4 - -typedef struct { - CARD8 reqType; - CARD8 nvReqType; - CARD16 length B16; -} xnvCtrlQueryExtensionReq; -#define sz_xnvCtrlQueryExtensionReq 4 - -typedef struct { - BYTE type; /* X_Reply */ - CARD8 padb1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD16 major B16; - CARD16 minor B16; - CARD32 padl4 B32; - CARD32 padl5 B32; - CARD32 padl6 B32; - CARD32 padl7 B32; - CARD32 padl8 B32; -} xnvCtrlQueryExtensionReply; -#define sz_xnvCtrlQueryExtensionReply 32 - -typedef struct { - CARD8 reqType; - CARD8 nvReqType; - CARD16 length B16; - CARD32 screen B32; -} xnvCtrlIsNvReq; -#define sz_xnvCtrlIsNvReq 8 - -typedef struct { - BYTE type; /* X_Reply */ - CARD8 padb1; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 isnv B32; - CARD32 padl4 B32; - CARD32 padl5 B32; - CARD32 padl6 B32; - CARD32 padl7 B32; - CARD32 padl8 B32; -} xnvCtrlIsNvReply; -#define sz_xnvCtrlIsNvReply 32 - -typedef struct { - CARD8 reqType; - CARD8 nvReqType; - CARD16 length B16; - CARD16 target_id B16; /* X screen number or GPU number */ - CARD16 target_type B16; /* X screen or GPU */ - CARD32 display_mask B32; - CARD32 attribute B32; -} xnvCtrlQueryStringAttributeReq; -#define sz_xnvCtrlQueryStringAttributeReq 16 - -typedef struct { - BYTE type; - BYTE pad0; - CARD16 sequenceNumber B16; - CARD32 length B32; - CARD32 flags B32; - CARD32 n B32; /* Length of string */ - CARD32 pad4 B32; - CARD32 pad5 B32; - CARD32 pad6 B32; - CARD32 pad7 B32; -} xnvCtrlQueryStringAttributeReply; -#define sz_xnvCtrlQueryStringAttributeReply 32 - -#define NVCTRL_EXT_NEED_CHECK (XPointer)(~0) -#define NVCTRL_EXT_NEED_NOTHING (XPointer)(0) -#define NVCTRL_EXT_NEED_TARGET_SWAP (XPointer)(1) - -static XExtensionInfo _nvctrl_ext_info_data; -static XExtensionInfo *nvctrl_ext_info = &_nvctrl_ext_info_data; -static /* const */ char *nvctrl_extension_name = NV_CONTROL_NAME; - -#define XNVCTRLCheckExtension(dpy,i,val) \ - XextCheckExtension (dpy, i, nvctrl_extension_name, val) -#define XNVCTRLSimpleCheckExtension(dpy,i) \ - XextSimpleCheckExtension (dpy, i, nvctrl_extension_name) - -static int close_display(); -static /* const */ XExtensionHooks nvctrl_extension_hooks = { - NULL, /* create_gc */ - NULL, /* copy_gc */ - NULL, /* flush_gc */ - NULL, /* free_gc */ - NULL, /* create_font */ - NULL, /* free_font */ - close_display, /* close_display */ - NULL, /* wire_to_event */ - NULL, /* event_to_wire */ - NULL, /* error */ - NULL, /* error_string */ -}; - -static XEXT_GENERATE_FIND_DISPLAY (find_display, nvctrl_ext_info, - nvctrl_extension_name, - &nvctrl_extension_hooks, - NV_CONTROL_EVENTS, NVCTRL_EXT_NEED_CHECK) - -static XEXT_GENERATE_CLOSE_DISPLAY (close_display, nvctrl_ext_info) - -static Bool XNVCTRLQueryVersion (Display *dpy, int *major, int *minor); - -/* - * NV-CONTROL versions 1.8 and 1.9 pack the target_type and target_id - * fields in reversed order. In order to talk to one of these servers, - * we need to swap these fields. - */ -static void XNVCTRLCheckTargetData(Display *dpy, XExtDisplayInfo *info, - int *target_type, int *target_id) -{ - /* Find out what the server's NV-CONTROL version is and - * setup for swapping if we need to. - */ - if (info->data == NVCTRL_EXT_NEED_CHECK) { - int major, minor; - - if (XNVCTRLQueryVersion(dpy, &major, &minor)) { - if (major == 1 && - (minor == 8 || minor == 9)) { - info->data = NVCTRL_EXT_NEED_TARGET_SWAP; - } else { - info->data = NVCTRL_EXT_NEED_NOTHING; - } - } else { - info->data = NVCTRL_EXT_NEED_NOTHING; - } - } - - /* We need to swap the target_type and target_id */ - if (info->data == NVCTRL_EXT_NEED_TARGET_SWAP) { - int tmp; - tmp = *target_type; - *target_type = *target_id; - *target_id = tmp; - } -} - - -static Bool XNVCTRLQueryExtension ( - Display *dpy, - int *event_basep, - int *error_basep -){ - XExtDisplayInfo *info = find_display (dpy); - - if (XextHasExtension(info)) { - if (event_basep) *event_basep = info->codes->first_event; - if (error_basep) *error_basep = info->codes->first_error; - return True; - } else { - return False; - } -} - - -static Bool XNVCTRLQueryVersion ( - Display *dpy, - int *major, - int *minor -){ - XExtDisplayInfo *info = find_display (dpy); - xnvCtrlQueryExtensionReply rep; - xnvCtrlQueryExtensionReq *req; - - if(!XextHasExtension(info)) - return False; - - XNVCTRLCheckExtension (dpy, info, False); - - LockDisplay (dpy); - GetReq (nvCtrlQueryExtension, req); - req->reqType = info->codes->major_opcode; - req->nvReqType = X_nvCtrlQueryExtension; - if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { - UnlockDisplay (dpy); - SyncHandle (); - return False; - } - if (major) *major = rep.major; - if (minor) *minor = rep.minor; - UnlockDisplay (dpy); - SyncHandle (); - return True; -} - - -static Bool XNVCTRLIsNvScreen ( - Display *dpy, - int screen -){ - XExtDisplayInfo *info = find_display (dpy); - xnvCtrlIsNvReply rep; - xnvCtrlIsNvReq *req; - Bool isnv; - - if(!XextHasExtension(info)) - return False; - - XNVCTRLCheckExtension (dpy, info, False); - - LockDisplay (dpy); - GetReq (nvCtrlIsNv, req); - req->reqType = info->codes->major_opcode; - req->nvReqType = X_nvCtrlIsNv; - req->screen = screen; - if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { - UnlockDisplay (dpy); - SyncHandle (); - return False; - } - isnv = rep.isnv; - UnlockDisplay (dpy); - SyncHandle (); - return isnv; -} - - -static Bool XNVCTRLQueryTargetStringAttribute ( - Display *dpy, - int target_type, - int target_id, - unsigned int display_mask, - unsigned int attribute, - char **ptr -){ - XExtDisplayInfo *info = find_display (dpy); - xnvCtrlQueryStringAttributeReply rep; - xnvCtrlQueryStringAttributeReq *req; - Bool exists; - int length, numbytes, slop; - - if (!ptr) return False; - - if(!XextHasExtension(info)) - return False; - - XNVCTRLCheckExtension (dpy, info, False); - XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); - - LockDisplay (dpy); - GetReq (nvCtrlQueryStringAttribute, req); - req->reqType = info->codes->major_opcode; - req->nvReqType = X_nvCtrlQueryStringAttribute; - req->target_type = target_type; - req->target_id = target_id; - req->display_mask = display_mask; - req->attribute = attribute; - if (!_XReply (dpy, (xReply *) &rep, 0, False)) { - UnlockDisplay (dpy); - SyncHandle (); - return False; - } - length = rep.length; - numbytes = rep.n; - slop = numbytes & 3; - *ptr = (char *) Xmalloc(numbytes); - if (! *ptr) { - _XEatData(dpy, length); - UnlockDisplay (dpy); - SyncHandle (); - return False; - } else { - _XRead(dpy, (char *) *ptr, numbytes); - if (slop) _XEatData(dpy, 4-slop); - } - exists = rep.flags; - UnlockDisplay (dpy); - SyncHandle (); - return exists; -} - -static Bool XNVCTRLQueryStringAttribute ( - Display *dpy, - int screen, - unsigned int display_mask, - unsigned int attribute, - char **ptr -){ - return XNVCTRLQueryTargetStringAttribute(dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, - screen, display_mask, - attribute, ptr); -} - - -Bool VA_NVCTRLQueryDirectRenderingCapable( Display *dpy, int screen, - Bool *isCapable ) -{ - int event_base; - int error_base; - - if (isCapable) - *isCapable = False; - - if (!XNVCTRLQueryExtension(dpy, &event_base, &error_base)) - return False; - - if (isCapable && XNVCTRLIsNvScreen(dpy, screen)) - *isCapable = True; - - return True; -} - -Bool VA_NVCTRLGetClientDriverName( Display *dpy, int screen, - int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, - int *ddxDriverPatchVersion, char **clientDriverName ) -{ - if (ddxDriverMajorVersion) - *ddxDriverMajorVersion = 0; - if (ddxDriverMinorVersion) - *ddxDriverMinorVersion = 0; - if (ddxDriverPatchVersion) - *ddxDriverPatchVersion = 0; - if (clientDriverName) - *clientDriverName = NULL; - - char *nvidia_driver_version = NULL; - if (!XNVCTRLQueryStringAttribute(dpy, screen, 0, NV_CTRL_STRING_NVIDIA_DRIVER_VERSION, &nvidia_driver_version)) - return False; - - char *end, *str = nvidia_driver_version; - unsigned long v = strtoul(str, &end, 10); - if (end && end != str) { - if (ddxDriverMajorVersion) - *ddxDriverMajorVersion = v; - if (*(str = end) == '.') { - v = strtoul(str + 1, &end, 10); - if (end && end != str && (*end == '.' || *end == '\0')) { - if (ddxDriverMinorVersion) - *ddxDriverMinorVersion = v; - if (*(str = end) == '.') { - v = strtoul(str + 1, &end, 10); - if (end && end != str && *end == '\0') { - if (ddxDriverPatchVersion) - *ddxDriverPatchVersion = v; - } - } - } - } - } - Xfree(nvidia_driver_version); - - if (clientDriverName) - *clientDriverName = strdup("nvidia"); - - return True; -} diff -Nru libva-0.31.0+latest1/src/x11/va_nvctrl.h libva-0.31.0+latest2/src/x11/va_nvctrl.h --- libva-0.31.0+latest1/src/x11/va_nvctrl.h 2009-09-10 16:18:49.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_nvctrl.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2008 NVIDIA, Corporation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#ifndef VA_NVCTRLLIB_H -#define VA_NVCTRLLIB_H - -#include - -Bool VA_NVCTRLQueryDirectRenderingCapable( Display *dpy, int screen, - Bool *isCapable ); - -Bool VA_NVCTRLGetClientDriverName( Display *dpy, int screen, - int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, - int *ddxDriverPatchVersion, char **clientDriverName ); - -#endif /* VA_NVCTRLLIB_H */ diff -Nru libva-0.31.0+latest1/src/x11/va_x11.c libva-0.31.0+latest2/src/x11/va_x11.c --- libva-0.31.0+latest1/src/x11/va_x11.c 2010-02-12 14:42:12.000000000 +0000 +++ libva-0.31.0+latest2/src/x11/va_x11.c 1970-01-01 01:00:00.000000000 +0100 @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2007 Intel Corporation. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sub license, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice (including the - * next paragraph) shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS - * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR - * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -#define _GNU_SOURCE 1 -#include "config.h" -#include "va.h" -#include "va_backend.h" -#include "va_x11.h" -#include "va_dri.h" -#include "va_dri2.h" -#include "va_dricommon.h" -#include "va_nvctrl.h" -#include -#include -#include -#include -#include -#include -#include -#include - -static VADisplayContextP pDisplayContexts = NULL; - -static int va_DisplayContextIsValid ( - VADisplayContextP pDisplayContext -) -{ - VADisplayContextP ctx = pDisplayContexts; - - while (ctx) - { - if (ctx == pDisplayContext && pDisplayContext->pDriverContext) - return 1; - ctx = ctx->pNext; - } - return 0; -} - -static void va_DisplayContextDestroy ( - VADisplayContextP pDisplayContext -) -{ - VADisplayContextP *ctx = &pDisplayContexts; - - /* Throw away pDisplayContext */ - while (*ctx) - { - if (*ctx == pDisplayContext) - { - *ctx = pDisplayContext->pNext; - pDisplayContext->pNext = NULL; - break; - } - ctx = &((*ctx)->pNext); - } - free(pDisplayContext->pDriverContext->dri_state); - free(pDisplayContext->pDriverContext); - free(pDisplayContext); -} - - -static VAStatus va_DRI2GetDriverName ( - VADisplayContextP pDisplayContext, - char **driver_name -) -{ - VADriverContextP ctx = pDisplayContext->pDriverContext; - - if (!isDRI2Connected(ctx, driver_name)) - return VA_STATUS_ERROR_UNKNOWN; - - return VA_STATUS_SUCCESS; -} - -static VAStatus va_DRIGetDriverName ( - VADisplayContextP pDisplayContext, - char **driver_name -) -{ - VADriverContextP ctx = pDisplayContext->pDriverContext; - - if (!isDRI1Connected(ctx, driver_name)) - return VA_STATUS_ERROR_UNKNOWN; - - return VA_STATUS_SUCCESS; -} - -static VAStatus va_NVCTRL_GetDriverName ( - VADisplayContextP pDisplayContext, - char **driver_name -) -{ - VADriverContextP ctx = pDisplayContext->pDriverContext; - int direct_capable, driver_major, driver_minor, driver_patch; - Bool result; - - result = VA_NVCTRLQueryDirectRenderingCapable(ctx->x11_dpy, ctx->x11_screen, - &direct_capable); - if (!result || !direct_capable) - return VA_STATUS_ERROR_UNKNOWN; - - result = VA_NVCTRLGetClientDriverName(ctx->x11_dpy, ctx->x11_screen, - &driver_major, &driver_minor, - &driver_patch, driver_name); - if (!result) - return VA_STATUS_ERROR_UNKNOWN; - - return VA_STATUS_SUCCESS; -} - -static VAStatus va_DisplayContextGetDriverName ( - VADisplayContextP pDisplayContext, - char **driver_name -) -{ - VAStatus vaStatus; - char *driver_name_env; - - if (driver_name) - *driver_name = NULL; - - if ((driver_name_env = getenv("LIBVA_DRIVER_NAME")) != NULL - && geteuid() == getuid()) - { - /* don't allow setuid apps to use LIBVA_DRIVER_NAME */ - *driver_name = strdup(driver_name_env); - return VA_STATUS_SUCCESS; - } - - vaStatus = va_DRI2GetDriverName(pDisplayContext, driver_name); - if (vaStatus != VA_STATUS_SUCCESS) - vaStatus = va_DRIGetDriverName(pDisplayContext, driver_name); - if (vaStatus != VA_STATUS_SUCCESS) - vaStatus = va_NVCTRL_GetDriverName(pDisplayContext, driver_name); - - return vaStatus; -} - - -VADisplay vaGetDisplay ( - Display *native_dpy /* implementation specific */ -) -{ - VADisplay dpy = NULL; - VADisplayContextP pDisplayContext = pDisplayContexts; - - if (!native_dpy) - return NULL; - - while (pDisplayContext) - { - if (pDisplayContext->pDriverContext && - pDisplayContext->pDriverContext->x11_dpy == native_dpy) - { - dpy = (VADisplay)pDisplayContext; - break; - } - pDisplayContext = pDisplayContext->pNext; - } - - if (!dpy) - { - /* create new entry */ - VADriverContextP pDriverContext; - struct dri_state *dri_state; - pDisplayContext = calloc(1, sizeof(*pDisplayContext)); - pDriverContext = calloc(1, sizeof(*pDriverContext)); - dri_state = calloc(1, sizeof(*dri_state)); - if (pDisplayContext && pDriverContext && dri_state) - { - pDisplayContext->vadpy_magic = VA_DISPLAY_MAGIC; - - pDriverContext->x11_dpy = native_dpy; - pDisplayContext->pNext = pDisplayContexts; - pDisplayContext->pDriverContext = pDriverContext; - pDisplayContext->vaIsValid = va_DisplayContextIsValid; - pDisplayContext->vaDestroy = va_DisplayContextDestroy; - pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; - pDisplayContexts = pDisplayContext; - pDriverContext->dri_state = dri_state; - dpy = (VADisplay)pDisplayContext; - } - else - { - if (pDisplayContext) - free(pDisplayContext); - if (pDriverContext) - free(pDriverContext); - if (dri_state) - free(dri_state); - } - } - - return dpy; -} diff -Nru libva-0.31.0+latest1/src/x11/va_x11.h libva-0.31.0+latest2/src/x11/va_x11.h --- libva-0.31.0+latest1/src/x11/va_x11.h 2009-07-06 11:44:10.000000000 +0100 +++ libva-0.31.0+latest2/src/x11/va_x11.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,67 +0,0 @@ -#ifndef _VA_X11_H_ -#define _VA_X11_H_ - -#ifdef IN_LIBVA -#include "va.h" -#else -#include -#endif -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Returns a suitable VADisplay for VA API - */ -VADisplay vaGetDisplay ( - Display *dpy -); - -/* - * Output rendering - * Following is the rendering interface for X windows, - * to get the decode output surface to a X drawable - * It basically performs a de-interlacing (if needed), - * color space conversion and scaling to the destination - * rectangle - */ -/* de-interlacing flags for vaPutSurface */ -#define VA_FRAME_PICTURE 0x00000000 -#define VA_TOP_FIELD 0x00000001 -#define VA_BOTTOM_FIELD 0x00000002 - -/* - * clears the drawable with background color. - * for hardware overlay based implementation this flag - * can be used to turn off the overlay - */ -#define VA_CLEAR_DRAWABLE 0x00000008 - -/* color space conversion flags for vaPutSurface */ -#define VA_SRC_BT601 0x00000010 -#define VA_SRC_BT709 0x00000020 - -VAStatus vaPutSurface ( - VADisplay dpy, - VASurfaceID surface, - Drawable draw, /* X Drawable */ - short srcx, - short srcy, - unsigned short srcw, - unsigned short srch, - short destx, - short desty, - unsigned short destw, - unsigned short desth, - VARectangle *cliprects, /* client supplied destination clip list */ - unsigned int number_cliprects, /* number of clip rects in the clip list */ - unsigned int flags /* PutSurface flags */ -); - -#ifdef __cplusplus -} -#endif - -#endif /* _VA_X11_H_ */ diff -Nru libva-0.31.0+latest1/test/basic/Makefile.am libva-0.31.0+latest2/test/basic/Makefile.am --- libva-0.31.0+latest1/test/basic/Makefile.am 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/basic/Makefile.am 2010-03-18 08:39:36.000000000 +0000 @@ -23,9 +23,9 @@ bin_PROGRAMS = test_01 test_02 test_03 test_04 test_05 test_06 \ test_07 test_08 test_09 test_10 test_11 -AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/x11 -DIN_LIBVA +AM_CFLAGS = -I$(top_srcdir)/va -I$(top_srcdir)/src/x11 -TEST_LIBS = $(top_srcdir)/src/$(libvabackendlib) +TEST_LIBS = $(top_srcdir)/va/$(libvabackendlib) test_01_LDADD = $(TEST_LIBS) test_01_SOURCES = test_01.c diff -Nru libva-0.31.0+latest1/test/basic/test_common.c libva-0.31.0+latest2/test/basic/test_common.c --- libva-0.31.0+latest1/test/basic/test_common.c 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/basic/test_common.c 2010-03-18 08:39:36.000000000 +0000 @@ -22,11 +22,7 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifdef IN_LIBVA -#include -#else #include -#endif #include "assert.h" #include diff -Nru libva-0.31.0+latest1/test/decode/Makefile.am libva-0.31.0+latest2/test/decode/Makefile.am --- libva-0.31.0+latest1/test/decode/Makefile.am 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/decode/Makefile.am 2010-03-18 08:39:37.000000000 +0000 @@ -22,9 +22,9 @@ bin_PROGRAMS = mpeg2vldemo -AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/x11 -DIN_LIBVA +AM_CFLAGS = -I$(top_srcdir)/va -I$(top_srcdir)/src/x11 -TEST_LIBS = $(top_srcdir)/src/$(libvabackendlib) +TEST_LIBS = $(top_srcdir)/va/$(libvabackendlib) mpeg2vldemo_LDADD = $(TEST_LIBS) mpeg2vldemo_SOURCES = mpeg2vldemo.c diff -Nru libva-0.31.0+latest1/test/decode/mpeg2vldemo.c libva-0.31.0+latest2/test/decode/mpeg2vldemo.c --- libva-0.31.0+latest1/test/decode/mpeg2vldemo.c 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/decode/mpeg2vldemo.c 2010-03-18 08:39:37.000000000 +0000 @@ -47,8 +47,8 @@ #include -#include "va.h" -#include "va_x11.h" +#include +#include #define CHECK_VASTATUS(va_status,func) \ if (va_status != VA_STATUS_SUCCESS) { \ diff -Nru libva-0.31.0+latest1/test/encode/h264encode.c libva-0.31.0+latest2/test/encode/h264encode.c --- libva-0.31.0+latest1/test/encode/h264encode.c 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/encode/h264encode.c 2010-03-18 08:39:37.000000000 +0000 @@ -26,7 +26,7 @@ * it is a real program to show how VAAPI encoding work, * It does H264 element stream level encoding on auto-generated YUV data * - * gcc -o h264encode h264encode -lva -lva-x11 -I/usr/include/va + * gcc -o h264encode h264encode -lva -lva-x11 * ./h264encode -w -h -n * */ @@ -44,9 +44,8 @@ #include -#include "va.h" -#include "va_x11.h" - +#include +#include #define CHECK_VASTATUS(va_status,func) \ if (va_status != VA_STATUS_SUCCESS) { \ @@ -212,10 +211,11 @@ VAEncPictureParameterBufferH264 pic_h264; VAEncSliceParameterBuffer slice_h264; VAStatus va_status; - VABufferID coded_buf, seq_param_buf, pic_param_buf, slice_param_buf; + VABufferID seq_param_buf, pic_param_buf, slice_param_buf; int codedbuf_size; VASurfaceStatus surface_status; int src_surface, dst_surface, ref_surface; + int codedbuf_idx = 0; int frame_skipped = 0; int i; @@ -229,12 +229,24 @@ codedbuf_size = (frame_width * frame_height * 400) / (16*16); + for (i = 0; i < CODEDBUF_NUM; i++) { + /* create coded buffer once for all + * other VA buffers which won't be used again after vaRenderPicture. + * so APP can always vaCreateBuffer for every frame + * but coded buffer need to be mapped and accessed after vaRenderPicture/vaEndPicture + * so VA won't maintain the coded buffer + */ + va_status = vaCreateBuffer(va_dpy,context_id,VAEncCodedBufferType, + codedbuf_size, 1, NULL, &coded_buf[i]); + CHECK_VASTATUS(va_status,"vaBeginPicture"); + } + src_surface = 0; /* the last two frames are reference/reconstructed frame */ dst_surface = SURFACE_NUM - 1; ref_surface = SURFACE_NUM - 2; - for (i=0; i < frame_count; i++) { + for (i = 0; i < frame_count; i++) { va_status = vaBeginPicture(va_dpy, context_id, surface_id[src_surface]); CHECK_VASTATUS(va_status,"vaBeginPicture"); @@ -249,7 +261,7 @@ seq_h264.frame_rate = frame_rate; seq_h264.initial_qp = initial_qp; seq_h264.min_qp = minimal_qp; - seq_h264.basic_unit_size = 6; + seq_h264.basic_unit_size = 0; seq_h264.intra_period = intra_count; va_status = vaCreateBuffer(va_dpy, context_id, @@ -261,12 +273,10 @@ CHECK_VASTATUS(va_status,"vaRenderPicture");; } - va_status = vaCreateBuffer(va_dpy,context_id,VAEncCodedBufferType, - codedbuf_size, 1, NULL, &coded_buf); pic_h264.reference_picture = surface_id[ref_surface]; pic_h264.reconstructed_picture= surface_id[dst_surface]; - pic_h264.coded_buf = coded_buf; + pic_h264.coded_buf = coded_buf[codedbuf_idx]; pic_h264.picture_width = frame_width; pic_h264.picture_height = frame_height; pic_h264.last_picture = (i==frame_count); @@ -300,7 +310,7 @@ va_status = vaQuerySurfaceStatus(va_dpy, surface_id[src_surface],&surface_status); frame_skipped = (surface_status & VASurfaceSkipped); - save_coded_buf(coded_buf, i, frame_skipped); + save_coded_buf(coded_buf[codedbuf_idx], i, frame_skipped); /* should display reconstructed frame, but just diplay source frame */ if (frame_display) { @@ -316,6 +326,11 @@ if (src_surface == (SURFACE_NUM - 2)) src_surface = 0; + /* use next codedbuf */ + codedbuf_idx++; + if (codedbuf_idx == (CODEDBUF_NUM - 1)) + codedbuf_idx = 0; + /* if a frame is skipped, current frame still use last reference frame */ if (frame_skipped == 0) { /* swap ref/dst */ @@ -375,7 +390,8 @@ case '?': printf("./h264encode \n"); printf(" -w -h: resolution\n"); - printf(" -n frame number\n"); + printf(" -n frame number\n"); + printf(" -d display the source frame\n"); printf(" -p P frame count between two I frames\n"); printf(" -f frame rate\n"); printf(" -r bit rate\n"); diff -Nru libva-0.31.0+latest1/test/encode/Makefile.am libva-0.31.0+latest2/test/encode/Makefile.am --- libva-0.31.0+latest1/test/encode/Makefile.am 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/encode/Makefile.am 2010-03-18 08:39:37.000000000 +0000 @@ -22,9 +22,9 @@ bin_PROGRAMS = h264encode -AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/x11 -DIN_LIBVA +AM_CFLAGS = -I$(top_srcdir)/va -I$(top_srcdir)/src/x11 -TEST_LIBS = $(top_srcdir)/src/$(libvabackendlib) +TEST_LIBS = $(top_srcdir)/va/$(libvabackendlib) h264encode_LDADD = $(TEST_LIBS) h264encode_SOURCES = h264encode.c diff -Nru libva-0.31.0+latest1/test/Makefile.am libva-0.31.0+latest2/test/Makefile.am --- libva-0.31.0+latest1/test/Makefile.am 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/Makefile.am 2010-03-18 08:39:37.000000000 +0000 @@ -23,11 +23,11 @@ bin_PROGRAMS = vainfo -AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/test/basic -I$(top_srcdir)/src/x11 -DIN_LIBVA +AM_CFLAGS = -I$(top_srcdir)/va -I$(top_srcdir)/test/basic -I$(top_srcdir)/src/x11 -vainfo_LDADD = $(top_srcdir)/src/$(libvabackendlib) -vainfo_DEPENDENCIES = $(top_srcdir)/src/$(libvabackendlib) +vainfo_LDADD = $(top_srcdir)/va/$(libvabackendlib) +vainfo_DEPENDENCIES = $(top_srcdir)/va/$(libvabackendlib) vainfo_SOURCES = vainfo.c SUBDIRS = basic decode encode putsurface diff -Nru libva-0.31.0+latest1/test/putsurface/Makefile.am libva-0.31.0+latest2/test/putsurface/Makefile.am --- libva-0.31.0+latest1/test/putsurface/Makefile.am 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/putsurface/Makefile.am 2010-03-18 08:39:36.000000000 +0000 @@ -22,13 +22,15 @@ bin_PROGRAMS = putsurface -AM_CFLAGS = -I$(top_srcdir)/src -I$(top_srcdir)/src/x11 -DIN_LIBVA +AM_CFLAGS = -I$(top_srcdir)/va -I$(top_srcdir)/src/x11 -TEST_LIBS = $(top_srcdir)/src/$(libvabackendlib) +TEST_LIBS = $(top_srcdir)/va/$(libvabackendlib) -lpthread putsurface_LDADD = $(TEST_LIBS) putsurface_SOURCES = putsurface.c +EXTRA_DIST = loadsurface.h + valgrind: $(bin_PROGRAMS) for a in $(bin_PROGRAMS); do \ diff -Nru libva-0.31.0+latest1/test/putsurface/putsurface.c libva-0.31.0+latest2/test/putsurface/putsurface.c --- libva-0.31.0+latest1/test/putsurface/putsurface.c 2010-02-12 14:42:10.000000000 +0000 +++ libva-0.31.0+latest2/test/putsurface/putsurface.c 2010-03-18 08:39:36.000000000 +0000 @@ -23,7 +23,7 @@ */ -/* gcc -o putsurface putsurface.c -lva -lva-x11 -I/usr/include/va */ +/* gcc -o putsurface putsurface.c -lva -lva-x11 */ #include #include @@ -39,8 +39,8 @@ #include #include -#include "va.h" -#include "va_x11.h" +#include +#include #include diff -Nru libva-0.31.0+latest1/test/vainfo.c libva-0.31.0+latest2/test/vainfo.c --- libva-0.31.0+latest1/test/vainfo.c 2009-09-10 16:18:48.000000000 +0100 +++ libva-0.31.0+latest2/test/vainfo.c 2010-03-18 08:39:37.000000000 +0000 @@ -22,11 +22,7 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifdef IN_LIBVA -#include -#else #include -#endif #include #include diff -Nru libva-0.31.0+latest1/va/Makefile.am libva-0.31.0+latest2/va/Makefile.am --- libva-0.31.0+latest1/va/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/Makefile.am 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,54 @@ +# Copyright (c) 2007 Intel Corporation. All Rights Reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sub license, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice (including the +# next paragraph) shall be included in all copies or substantial portions +# of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +# IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +INCLUDES = \ + $(LIBVA_CFLAGS) -I$(top_srcdir)/va/x11 \ + -DVA_DRIVERS_PATH="\"$(LIBVA_DRIVERS_PATH)\"" + +LDADD = \ + $(LIBVA_LT_LDFLAGS) + +lib_LTLIBRARIES = \ + libva.la \ + libva-x11.la + +libva_ladir = $(libdir) +libva_la_LDFLAGS = $(LDADD) -no-undefined +libva_la_LIBADD = $(LIBVA_LIBS) -ldl + +libva_x11_la_SOURCES = +libva_x11_la_LIBADD = $(libvacorelib) x11/libva_x11.la $(LIBVA_LIBS) $(X11_LIBS) $(XEXT_LIBS) $(DRM_LIBS) $(XFIXES_LIBS) +libva_x11_la_LDFLAGS = $(LDADD) +libva_x11_la_DEPENDENCIES = $(libvacorelib) x11/libva_x11.la + +SUBDIRS = x11 + +libva_la_SOURCES = va.c + +libvaincludedir = ${includedir}/va +libvainclude_HEADERS = va.h va_x11.h va_backend.h va_version.h + +DISTCLEANFILES = \ + va_version.h + +EXTRA_DIST = \ + va_version.h.in diff -Nru libva-0.31.0+latest1/va/va_backend.h libva-0.31.0+latest2/va/va_backend.h --- libva-0.31.0+latest1/va/va_backend.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/va_backend.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,419 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/* + * Video Decode Acceleration -Backend API + */ + +#ifndef _VA_BACKEND_H_ +#define _VA_BACKEND_H_ + +#include +#include +#include + + +typedef struct VADriverContext *VADriverContextP; +typedef struct VADisplayContext *VADisplayContextP; + +struct VADriverVTable +{ + VAStatus (*vaTerminate) ( VADriverContextP ctx ); + + VAStatus (*vaQueryConfigProfiles) ( + VADriverContextP ctx, + VAProfile *profile_list, /* out */ + int *num_profiles /* out */ + ); + + VAStatus (*vaQueryConfigEntrypoints) ( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint *entrypoint_list, /* out */ + int *num_entrypoints /* out */ + ); + + VAStatus (*vaGetConfigAttributes) ( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, /* in/out */ + int num_attribs + ); + + VAStatus (*vaCreateConfig) ( + VADriverContextP ctx, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ + ); + + VAStatus (*vaDestroyConfig) ( + VADriverContextP ctx, + VAConfigID config_id + ); + + VAStatus (*vaQueryConfigAttributes) ( + VADriverContextP ctx, + VAConfigID config_id, + VAProfile *profile, /* out */ + VAEntrypoint *entrypoint, /* out */ + VAConfigAttrib *attrib_list, /* out */ + int *num_attribs /* out */ + ); + + VAStatus (*vaCreateSurfaces) ( + VADriverContextP ctx, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces /* out */ + ); + + VAStatus (*vaDestroySurfaces) ( + VADriverContextP ctx, + VASurfaceID *surface_list, + int num_surfaces + ); + + VAStatus (*vaCreateContext) ( + VADriverContextP ctx, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context /* out */ + ); + + VAStatus (*vaDestroyContext) ( + VADriverContextP ctx, + VAContextID context + ); + + VAStatus (*vaCreateBuffer) ( + VADriverContextP ctx, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ + ); + + VAStatus (*vaBufferSetNumElements) ( + VADriverContextP ctx, + VABufferID buf_id, /* in */ + unsigned int num_elements /* in */ + ); + + VAStatus (*vaMapBuffer) ( + VADriverContextP ctx, + VABufferID buf_id, /* in */ + void **pbuf /* out */ + ); + + VAStatus (*vaUnmapBuffer) ( + VADriverContextP ctx, + VABufferID buf_id /* in */ + ); + + VAStatus (*vaDestroyBuffer) ( + VADriverContextP ctx, + VABufferID buffer_id + ); + + VAStatus (*vaBeginPicture) ( + VADriverContextP ctx, + VAContextID context, + VASurfaceID render_target + ); + + VAStatus (*vaRenderPicture) ( + VADriverContextP ctx, + VAContextID context, + VABufferID *buffers, + int num_buffers + ); + + VAStatus (*vaEndPicture) ( + VADriverContextP ctx, + VAContextID context + ); + + VAStatus (*vaSyncSurface) ( + VADriverContextP ctx, + VASurfaceID render_target + ); + + VAStatus (*vaQuerySurfaceStatus) ( + VADriverContextP ctx, + VASurfaceID render_target, + VASurfaceStatus *status /* out */ + ); + + VAStatus (*vaPutSurface) ( + VADriverContextP ctx, + VASurfaceID surface, + Drawable draw, /* X Drawable */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ + ); + + VAStatus (*vaQueryImageFormats) ( + VADriverContextP ctx, + VAImageFormat *format_list, /* out */ + int *num_formats /* out */ + ); + + VAStatus (*vaCreateImage) ( + VADriverContextP ctx, + VAImageFormat *format, + int width, + int height, + VAImage *image /* out */ + ); + + VAStatus (*vaDeriveImage) ( + VADriverContextP ctx, + VASurfaceID surface, + VAImage *image /* out */ + ); + + VAStatus (*vaDestroyImage) ( + VADriverContextP ctx, + VAImageID image + ); + + VAStatus (*vaSetImagePalette) ( + VADriverContextP ctx, + VAImageID image, + /* + * pointer to an array holding the palette data. The size of the array is + * num_palette_entries * entry_bytes in size. The order of the components + * in the palette is described by the component_order in VAImage struct + */ + unsigned char *palette + ); + + VAStatus (*vaGetImage) ( + VADriverContextP ctx, + VASurfaceID surface, + int x, /* coordinates of the upper left source pixel */ + int y, + unsigned int width, /* width and height of the region */ + unsigned int height, + VAImageID image + ); + + VAStatus (*vaPutImage) ( + VADriverContextP ctx, + VASurfaceID surface, + VAImageID image, + int src_x, + int src_y, + unsigned int src_width, + unsigned int src_height, + int dest_x, + int dest_y, + unsigned int dest_width, + unsigned int dest_height + ); + + VAStatus (*vaQuerySubpictureFormats) ( + VADriverContextP ctx, + VAImageFormat *format_list, /* out */ + unsigned int *flags, /* out */ + unsigned int *num_formats /* out */ + ); + + VAStatus (*vaCreateSubpicture) ( + VADriverContextP ctx, + VAImageID image, + VASubpictureID *subpicture /* out */ + ); + + VAStatus (*vaDestroySubpicture) ( + VADriverContextP ctx, + VASubpictureID subpicture + ); + + VAStatus (*vaSetSubpictureImage) ( + VADriverContextP ctx, + VASubpictureID subpicture, + VAImageID image + ); + + VAStatus (*vaSetSubpictureChromakey) ( + VADriverContextP ctx, + VASubpictureID subpicture, + unsigned int chromakey_min, + unsigned int chromakey_max, + unsigned int chromakey_mask + ); + + VAStatus (*vaSetSubpictureGlobalAlpha) ( + VADriverContextP ctx, + VASubpictureID subpicture, + float global_alpha + ); + + VAStatus (*vaAssociateSubpicture) ( + VADriverContextP ctx, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces, + short src_x, /* upper left offset in subpicture */ + short src_y, + unsigned short src_width, + unsigned short src_height, + short dest_x, /* upper left offset in surface */ + short dest_y, + unsigned short dest_width, + unsigned short dest_height, + /* + * whether to enable chroma-keying or global-alpha + * see VA_SUBPICTURE_XXX values + */ + unsigned int flags + ); + + VAStatus (*vaDeassociateSubpicture) ( + VADriverContextP ctx, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces + ); + + VAStatus (*vaQueryDisplayAttributes) ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, /* out */ + int *num_attributes /* out */ + ); + + VAStatus (*vaGetDisplayAttributes) ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, /* in/out */ + int num_attributes + ); + + VAStatus (*vaSetDisplayAttributes) ( + VADriverContextP ctx, + VADisplayAttribute *attr_list, + int num_attributes + ); + + /* device specific */ + VAStatus (*vaCreateSurfaceFromCIFrame) ( + VADriverContextP ctx, + unsigned long frame_id, + VASurfaceID *surface /* out */ + ); + + + VAStatus (*vaCreateSurfaceFromV4L2Buf) ( + VADriverContextP ctx, + int v4l2_fd, /* file descriptor of V4L2 device */ + struct v4l2_format *v4l2_fmt, /* format of V4L2 */ + struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */ + VASurfaceID *surface /* out */ + ); + + VAStatus (*vaCopySurfaceToBuffer) ( + VADriverContextP ctx, + VASurfaceID surface, + unsigned int *fourcc, /* out for follow argument */ + unsigned int *luma_stride, + unsigned int *chroma_u_stride, + unsigned int *chroma_v_stride, + unsigned int *luma_offset, + unsigned int *chroma_u_offset, + unsigned int *chroma_v_offset, + void **buffer + ); +}; + +struct VADriverContext +{ + void *pDriverData; + struct VADriverVTable vtable; + + Display *x11_dpy; + int x11_screen; + int version_major; + int version_minor; + int max_profiles; + int max_entrypoints; + int max_attributes; + int max_image_formats; + int max_subpic_formats; + int max_display_attributes; + const char *str_vendor; + + void *handle; /* dlopen handle */ + + void *dri_state; +}; + +#define VA_DISPLAY_MAGIC 0x56414430 /* VAD0 */ +struct VADisplayContext +{ + int vadpy_magic; + + VADisplayContextP pNext; + VADriverContextP pDriverContext; + + int (*vaIsValid) ( + VADisplayContextP ctx + ); + + void (*vaDestroy) ( + VADisplayContextP ctx + ); + + VAStatus (*vaGetDriverName) ( + VADisplayContextP ctx, + char **driver_name + ); +}; + +typedef VAStatus (*VADriverInit) ( + VADriverContextP driver_context +); + + +#endif /* _VA_BACKEND_H_ */ diff -Nru libva-0.31.0+latest1/va/va.c libva-0.31.0+latest2/va/va.c --- libva-0.31.0+latest1/va/va.c 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/va.c 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,1263 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 + +#include "va.h" +#include "va_backend.h" + +#include +#include +#include +#include +#include +#include +#include + + +#define DRIVER_INIT_FUNC "__vaDriverInit_0_31" + +#define DRIVER_EXTENSION "_drv_video.so" + +#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext) +#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; } + +#define ASSERT assert +#define CHECK_VTABLE(s, ctx, func) if (!va_checkVtable(ctx->vtable.va##func, #func)) s = VA_STATUS_ERROR_UNKNOWN; +#define CHECK_MAXIMUM(s, ctx, var) if (!va_checkMaximum(ctx->max_##var, #var)) s = VA_STATUS_ERROR_UNKNOWN; +#define CHECK_STRING(s, ctx, var) if (!va_checkString(ctx->str_##var, #var)) s = VA_STATUS_ERROR_UNKNOWN; + +#define TRACE(func) if (va_debug_trace) va_infoMessage("[TR] %s\n", #func); + +static int va_debug_trace = 0; + +static int vaDisplayIsValid(VADisplay dpy) +{ + VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; + return pDisplayContext && (pDisplayContext->vadpy_magic == VA_DISPLAY_MAGIC) && pDisplayContext->vaIsValid(pDisplayContext); +} + +static void va_errorMessage(const char *msg, ...) +{ + va_list args; + + fprintf(stderr, "libva error: "); + va_start(args, msg); + vfprintf(stderr, msg, args); + va_end(args); +} + +static void va_infoMessage(const char *msg, ...) +{ + va_list args; + + fprintf(stderr, "libva: "); + va_start(args, msg); + vfprintf(stderr, msg, args); + va_end(args); +} + +static Bool va_checkVtable(void *ptr, char *function) +{ + if (!ptr) + { + va_errorMessage("No valid vtable entry for va%s\n", function); + return False; + } + return True; +} + +static Bool va_checkMaximum(int value, char *variable) +{ + if (!value) + { + va_errorMessage("Failed to define max_%s in init\n", variable); + return False; + } + return True; +} + +static Bool va_checkString(const char* value, char *variable) +{ + if (!value) + { + va_errorMessage("Failed to define str_%s in init\n", variable); + return False; + } + return True; +} + +static VAStatus va_getDriverName(VADisplay dpy, char **driver_name) +{ + VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; + + return pDisplayContext->vaGetDriverName(pDisplayContext, driver_name); +} + +static VAStatus va_openDriver(VADisplay dpy, char *driver_name) +{ + VADriverContextP ctx = CTX(dpy); + VAStatus vaStatus = VA_STATUS_ERROR_UNKNOWN; + char *search_path = NULL; + char *saveptr; + char *driver_dir; + + if (geteuid() == getuid()) + { + /* don't allow setuid apps to use LIBVA_DRIVERS_PATH */ + search_path = getenv("LIBVA_DRIVERS_PATH"); + if (!search_path) + { + search_path = getenv("LIBGL_DRIVERS_PATH"); + } + } + if (!search_path) + { + search_path = VA_DRIVERS_PATH; + } + + search_path = strdup((const char *)search_path); + driver_dir = strtok_r((const char *)search_path, ":", &saveptr); + while(driver_dir) + { + void *handle = NULL; + char *driver_path = (char *) malloc( strlen(driver_dir) + + strlen(driver_name) + + strlen(DRIVER_EXTENSION) + 2 ); + strncpy( driver_path, driver_dir, strlen(driver_dir) + 1); + strncat( driver_path, "/", strlen("/") ); + strncat( driver_path, driver_name, strlen(driver_name) ); + strncat( driver_path, DRIVER_EXTENSION, strlen(DRIVER_EXTENSION) ); + + va_infoMessage("Trying to open %s\n", driver_path); + + handle = dlopen( driver_path, RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE ); + if (!handle) + { + /* Don't give errors for non-existing files */ + if (0 == access( driver_path, F_OK)) + { + va_errorMessage("dlopen of %s failed: %s\n", driver_path, dlerror()); + } + } + else + { + VADriverInit init_func; + init_func = (VADriverInit) dlsym(handle, DRIVER_INIT_FUNC); + if (!init_func) + { + va_errorMessage("%s has no function %s\n", driver_path, DRIVER_INIT_FUNC); + dlclose(handle); + } + else + { + vaStatus = (*init_func)(ctx); + + if (VA_STATUS_SUCCESS == vaStatus) + { + CHECK_MAXIMUM(vaStatus, ctx, profiles); + CHECK_MAXIMUM(vaStatus, ctx, entrypoints); + CHECK_MAXIMUM(vaStatus, ctx, attributes); + CHECK_MAXIMUM(vaStatus, ctx, image_formats); + CHECK_MAXIMUM(vaStatus, ctx, subpic_formats); + CHECK_MAXIMUM(vaStatus, ctx, display_attributes); + CHECK_STRING(vaStatus, ctx, vendor); + CHECK_VTABLE(vaStatus, ctx, Terminate); + CHECK_VTABLE(vaStatus, ctx, QueryConfigProfiles); + CHECK_VTABLE(vaStatus, ctx, QueryConfigEntrypoints); + CHECK_VTABLE(vaStatus, ctx, QueryConfigAttributes); + CHECK_VTABLE(vaStatus, ctx, CreateConfig); + CHECK_VTABLE(vaStatus, ctx, DestroyConfig); + CHECK_VTABLE(vaStatus, ctx, GetConfigAttributes); + CHECK_VTABLE(vaStatus, ctx, CreateSurfaces); + CHECK_VTABLE(vaStatus, ctx, DestroySurfaces); + CHECK_VTABLE(vaStatus, ctx, CreateContext); + CHECK_VTABLE(vaStatus, ctx, DestroyContext); + CHECK_VTABLE(vaStatus, ctx, CreateBuffer); + CHECK_VTABLE(vaStatus, ctx, BufferSetNumElements); + CHECK_VTABLE(vaStatus, ctx, MapBuffer); + CHECK_VTABLE(vaStatus, ctx, UnmapBuffer); + CHECK_VTABLE(vaStatus, ctx, DestroyBuffer); + CHECK_VTABLE(vaStatus, ctx, BeginPicture); + CHECK_VTABLE(vaStatus, ctx, RenderPicture); + CHECK_VTABLE(vaStatus, ctx, EndPicture); + CHECK_VTABLE(vaStatus, ctx, SyncSurface); + CHECK_VTABLE(vaStatus, ctx, QuerySurfaceStatus); + CHECK_VTABLE(vaStatus, ctx, PutSurface); + CHECK_VTABLE(vaStatus, ctx, QueryImageFormats); + CHECK_VTABLE(vaStatus, ctx, CreateImage); + CHECK_VTABLE(vaStatus, ctx, DeriveImage); + CHECK_VTABLE(vaStatus, ctx, DestroyImage); + CHECK_VTABLE(vaStatus, ctx, SetImagePalette); + CHECK_VTABLE(vaStatus, ctx, GetImage); + CHECK_VTABLE(vaStatus, ctx, PutImage); + CHECK_VTABLE(vaStatus, ctx, QuerySubpictureFormats); + CHECK_VTABLE(vaStatus, ctx, CreateSubpicture); + CHECK_VTABLE(vaStatus, ctx, DestroySubpicture); + CHECK_VTABLE(vaStatus, ctx, SetSubpictureImage); + CHECK_VTABLE(vaStatus, ctx, SetSubpictureChromakey); + CHECK_VTABLE(vaStatus, ctx, SetSubpictureGlobalAlpha); + CHECK_VTABLE(vaStatus, ctx, AssociateSubpicture); + CHECK_VTABLE(vaStatus, ctx, DeassociateSubpicture); + CHECK_VTABLE(vaStatus, ctx, QueryDisplayAttributes); + CHECK_VTABLE(vaStatus, ctx, GetDisplayAttributes); + CHECK_VTABLE(vaStatus, ctx, SetDisplayAttributes); + } + if (VA_STATUS_SUCCESS != vaStatus) + { + va_errorMessage("%s init failed\n", driver_path); + dlclose(handle); + } + if (VA_STATUS_SUCCESS == vaStatus) + { + ctx->handle = handle; + } + free(driver_path); + break; + } + } + free(driver_path); + + driver_dir = strtok_r(NULL, ":", &saveptr); + } + + free(search_path); + + return vaStatus; +} + +VAPrivFunc vaGetLibFunc(VADisplay dpy, const char *func) +{ + VADriverContextP ctx; + if( !vaDisplayIsValid(dpy) ) + return NULL; + ctx = CTX(dpy); + + if (NULL == ctx->handle) + return NULL; + + return (VAPrivFunc) dlsym(ctx->handle, func); +} + + +/* + * Returns a short english description of error_status + */ +const char *vaErrorStr(VAStatus error_status) +{ + switch(error_status) + { + case VA_STATUS_SUCCESS: + return "success (no error)"; + case VA_STATUS_ERROR_OPERATION_FAILED: + return "operation failed"; + case VA_STATUS_ERROR_ALLOCATION_FAILED: + return "resource allocation failed"; + case VA_STATUS_ERROR_INVALID_DISPLAY: + return "invalid VADisplay"; + case VA_STATUS_ERROR_INVALID_CONFIG: + return "invalid VAConfigID"; + case VA_STATUS_ERROR_INVALID_CONTEXT: + return "invalid VAContextID"; + case VA_STATUS_ERROR_INVALID_SURFACE: + return "invalid VASurfaceID"; + case VA_STATUS_ERROR_INVALID_BUFFER: + return "invalid VABufferID"; + case VA_STATUS_ERROR_INVALID_IMAGE: + return "invalid VAImageID"; + case VA_STATUS_ERROR_INVALID_SUBPICTURE: + return "invalid VASubpictureID"; + case VA_STATUS_ERROR_ATTR_NOT_SUPPORTED: + return "attribute not supported"; + case VA_STATUS_ERROR_MAX_NUM_EXCEEDED: + return "list argument exceeds maximum number"; + case VA_STATUS_ERROR_UNSUPPORTED_PROFILE: + return "the requested VAProfile is not supported"; + case VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT: + return "the requested VAEntryPoint is not supported"; + case VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT: + return "the requested RT Format is not supported"; + case VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: + return "the requested VABufferType is not supported"; + case VA_STATUS_ERROR_SURFACE_BUSY: + return "surface is in use"; + case VA_STATUS_ERROR_FLAG_NOT_SUPPORTED: + return "flag not supported"; + case VA_STATUS_ERROR_INVALID_PARAMETER: + return "invalid parameter"; + case VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED: + return "resolution not supported"; + case VA_STATUS_ERROR_UNIMPLEMENTED: + return "the requested function is not implemented"; + case VA_STATUS_ERROR_SURFACE_IN_DISPLAYING: + return "surface is in displaying (may by overlay)" ; + case VA_STATUS_ERROR_UNKNOWN: + return "unknown libva error"; + } + return "unknown libva error / description missing"; +} + +VAStatus vaInitialize ( + VADisplay dpy, + int *major_version, /* out */ + int *minor_version /* out */ +) +{ + char *driver_name = NULL; + VAStatus vaStatus; + + CHECK_DISPLAY(dpy); + + va_debug_trace = (getenv("LIBVA_DEBUG_TRACE") != NULL); + + va_infoMessage("libva version %s\n", VA_VERSION_S); + + vaStatus = va_getDriverName(dpy, &driver_name); + va_infoMessage("va_getDriverName() returns %d\n", vaStatus); + + if (VA_STATUS_SUCCESS == vaStatus) + { + vaStatus = va_openDriver(dpy, driver_name); + va_infoMessage("va_openDriver() returns %d\n", vaStatus); + + *major_version = VA_MAJOR_VERSION; + *minor_version = VA_MINOR_VERSION; + } + + if (driver_name) + free(driver_name); + return vaStatus; +} + + +/* + * After this call, all library internal resources will be cleaned up + */ +VAStatus vaTerminate ( + VADisplay dpy +) +{ + VAStatus vaStatus = VA_STATUS_SUCCESS; + VADisplayContextP pDisplayContext = (VADisplayContextP)dpy; + VADriverContextP old_ctx; + + CHECK_DISPLAY(dpy); + old_ctx = CTX(dpy); + + if (old_ctx->handle) + { + vaStatus = old_ctx->vtable.vaTerminate(old_ctx); + dlclose(old_ctx->handle); + old_ctx->handle = NULL; + } + + if (VA_STATUS_SUCCESS == vaStatus) + pDisplayContext->vaDestroy(pDisplayContext); + return vaStatus; +} + +/* + * vaQueryVendorString returns a pointer to a zero-terminated string + * describing some aspects of the VA implemenation on a specific + * hardware accelerator. The format of the returned string is: + * --- + * e.g. for the Intel GMA500 implementation, an example would be: + * "IntelGMA500-1.0-0.2-patch3 + */ +const char *vaQueryVendorString ( + VADisplay dpy +) +{ + if( !vaDisplayIsValid(dpy) ) + return NULL; + + return CTX(dpy)->str_vendor; +} + + +/* Get maximum number of profiles supported by the implementation */ +int vaMaxNumProfiles ( + VADisplay dpy +) +{ + if( !vaDisplayIsValid(dpy) ) + return 0; + + return CTX(dpy)->max_profiles; +} + +/* Get maximum number of entrypoints supported by the implementation */ +int vaMaxNumEntrypoints ( + VADisplay dpy +) +{ + if( !vaDisplayIsValid(dpy) ) + return 0; + + return CTX(dpy)->max_entrypoints; +} + + +/* Get maximum number of attributs supported by the implementation */ +int vaMaxNumConfigAttributes ( + VADisplay dpy +) +{ + if( !vaDisplayIsValid(dpy) ) + return 0; + + return CTX(dpy)->max_attributes; +} + +VAStatus vaQueryConfigEntrypoints ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint *entrypoints, /* out */ + int *num_entrypoints /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaQueryConfigEntrypoints); + return ctx->vtable.vaQueryConfigEntrypoints ( ctx, profile, entrypoints, num_entrypoints); +} + +VAStatus vaGetConfigAttributes ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, /* in/out */ + int num_attribs +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaGetConfigAttributes); + return ctx->vtable.vaGetConfigAttributes ( ctx, profile, entrypoint, attrib_list, num_attribs ); +} + +VAStatus vaQueryConfigProfiles ( + VADisplay dpy, + VAProfile *profile_list, /* out */ + int *num_profiles /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaQueryConfigProfiles); + return ctx->vtable.vaQueryConfigProfiles ( ctx, profile_list, num_profiles ); +} + +VAStatus vaCreateConfig ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaCreateConfig); + return ctx->vtable.vaCreateConfig ( ctx, profile, entrypoint, attrib_list, num_attribs, config_id ); +} + +VAStatus vaDestroyConfig ( + VADisplay dpy, + VAConfigID config_id +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaDestroyConfig); + return ctx->vtable.vaDestroyConfig ( ctx, config_id ); +} + +VAStatus vaQueryConfigAttributes ( + VADisplay dpy, + VAConfigID config_id, + VAProfile *profile, /* out */ + VAEntrypoint *entrypoint, /* out */ + VAConfigAttrib *attrib_list,/* out */ + int *num_attribs /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaQueryConfigAttributes); + return ctx->vtable.vaQueryConfigAttributes( ctx, config_id, profile, entrypoint, attrib_list, num_attribs); +} + +VAStatus vaCreateSurfaces ( + VADisplay dpy, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaCreateSurfaces); + return ctx->vtable.vaCreateSurfaces( ctx, width, height, format, num_surfaces, surfaces ); +} + + +VAStatus vaDestroySurfaces ( + VADisplay dpy, + VASurfaceID *surface_list, + int num_surfaces +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaDestroySurfaces); + return ctx->vtable.vaDestroySurfaces( ctx, surface_list, num_surfaces ); +} + +VAStatus vaCreateContext ( + VADisplay dpy, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaCreateContext); + return ctx->vtable.vaCreateContext( ctx, config_id, picture_width, picture_height, + flag, render_targets, num_render_targets, context ); +} + +VAStatus vaDestroyContext ( + VADisplay dpy, + VAContextID context +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaDestroyContext); + return ctx->vtable.vaDestroyContext( ctx, context ); +} + +VAStatus vaCreateBuffer ( + VADisplay dpy, + VAContextID context, /* in */ + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaCreateBuffer); + return ctx->vtable.vaCreateBuffer( ctx, context, type, size, num_elements, data, buf_id); +} + +VAStatus vaBufferSetNumElements ( + VADisplay dpy, + VABufferID buf_id, /* in */ + unsigned int num_elements /* in */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaBufferSetNumElements); + return ctx->vtable.vaBufferSetNumElements( ctx, buf_id, num_elements ); +} + + +VAStatus vaMapBuffer ( + VADisplay dpy, + VABufferID buf_id, /* in */ + void **pbuf /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaMapBuffer); + return ctx->vtable.vaMapBuffer( ctx, buf_id, pbuf ); +} + +VAStatus vaUnmapBuffer ( + VADisplay dpy, + VABufferID buf_id /* in */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaUnmapBuffer); + return ctx->vtable.vaUnmapBuffer( ctx, buf_id ); +} + +VAStatus vaDestroyBuffer ( + VADisplay dpy, + VABufferID buffer_id +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaDestroyBuffer); + return ctx->vtable.vaDestroyBuffer( ctx, buffer_id ); +} + +VAStatus vaBeginPicture ( + VADisplay dpy, + VAContextID context, + VASurfaceID render_target +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaBeginPicture); + return ctx->vtable.vaBeginPicture( ctx, context, render_target ); +} + +VAStatus vaRenderPicture ( + VADisplay dpy, + VAContextID context, + VABufferID *buffers, + int num_buffers +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaRenderPicture); + return ctx->vtable.vaRenderPicture( ctx, context, buffers, num_buffers ); +} + +VAStatus vaEndPicture ( + VADisplay dpy, + VAContextID context +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaEndPicture); + return ctx->vtable.vaEndPicture( ctx, context ); +} + +VAStatus vaSyncSurface ( + VADisplay dpy, + VASurfaceID render_target +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaSyncSurface); + return ctx->vtable.vaSyncSurface( ctx, render_target ); +} + +VAStatus vaQuerySurfaceStatus ( + VADisplay dpy, + VASurfaceID render_target, + VASurfaceStatus *status /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaQuerySurfaceStatus); + return ctx->vtable.vaQuerySurfaceStatus( ctx, render_target, status ); +} + +VAStatus vaPutSurface ( + VADisplay dpy, + VASurfaceID surface, + Drawable draw, /* X Drawable */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* de-interlacing flags */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaPutSurface); + return ctx->vtable.vaPutSurface( ctx, surface, draw, srcx, srcy, srcw, srch, + destx, desty, destw, desth, + cliprects, number_cliprects, flags ); +} + +/* Get maximum number of image formats supported by the implementation */ +int vaMaxNumImageFormats ( + VADisplay dpy +) +{ + if( !vaDisplayIsValid(dpy) ) + return 0; + + return CTX(dpy)->max_image_formats; +} + +VAStatus vaQueryImageFormats ( + VADisplay dpy, + VAImageFormat *format_list, /* out */ + int *num_formats /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaQueryImageFormats); + return ctx->vtable.vaQueryImageFormats ( ctx, format_list, num_formats); +} + +/* + * The width and height fields returned in the VAImage structure may get + * enlarged for some YUV formats. The size of the data buffer that needs + * to be allocated will be given in the "data_size" field in VAImage. + * Image data is not allocated by this function. The client should + * allocate the memory and fill in the VAImage structure's data field + * after looking at "data_size" returned from the library. + */ +VAStatus vaCreateImage ( + VADisplay dpy, + VAImageFormat *format, + int width, + int height, + VAImage *image /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaCreateImage); + return ctx->vtable.vaCreateImage ( ctx, format, width, height, image); +} + +/* + * Should call DestroyImage before destroying the surface it is bound to + */ +VAStatus vaDestroyImage ( + VADisplay dpy, + VAImageID image +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaDestroyImage); + return ctx->vtable.vaDestroyImage ( ctx, image); +} + +VAStatus vaSetImagePalette ( + VADisplay dpy, + VAImageID image, + unsigned char *palette +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaSetImagePalette); + return ctx->vtable.vaSetImagePalette ( ctx, image, palette); +} + +/* + * Retrieve surface data into a VAImage + * Image must be in a format supported by the implementation + */ +VAStatus vaGetImage ( + VADisplay dpy, + VASurfaceID surface, + int x, /* coordinates of the upper left source pixel */ + int y, + unsigned int width, /* width and height of the region */ + unsigned int height, + VAImageID image +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaGetImage); + return ctx->vtable.vaGetImage ( ctx, surface, x, y, width, height, image); +} + +/* + * Copy data from a VAImage to a surface + * Image must be in a format supported by the implementation + */ +VAStatus vaPutImage ( + VADisplay dpy, + VASurfaceID surface, + VAImageID image, + int src_x, + int src_y, + unsigned int src_width, + unsigned int src_height, + int dest_x, + int dest_y, + unsigned int dest_width, + unsigned int dest_height +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaPutImage); + return ctx->vtable.vaPutImage ( ctx, surface, image, src_x, src_y, src_width, src_height, dest_x, dest_y, dest_width, dest_height ); +} + +/* + * Derive an VAImage from an existing surface. + * This interface will derive a VAImage and corresponding image buffer from + * an existing VA Surface. The image buffer can then be mapped/unmapped for + * direct CPU access. This operation is only possible on implementations with + * direct rendering capabilities and internal surface formats that can be + * represented with a VAImage. When the operation is not possible this interface + * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back + * to using vaCreateImage + vaPutImage to accomplish the same task in an + * indirect manner. + * + * Implementations should only return success when the resulting image buffer + * would be useable with vaMap/Unmap. + * + * When directly accessing a surface special care must be taken to insure + * proper synchronization with the graphics hardware. Clients should call + * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent + * rendering or currently being displayed by an overlay. + * + * Additionally nothing about the contents of a surface should be assumed + * following a vaPutSurface. Implementations are free to modify the surface for + * scaling or subpicture blending within a call to vaPutImage. + * + * Calls to vaPutImage or vaGetImage using the same surface from which the image + * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or + * vaGetImage with other surfaces is supported. + * + * An image created with vaDeriveImage should be freed with vaDestroyImage. The + * image and image buffer structures will be destroyed; however, the underlying + * surface will remain unchanged until freed with vaDestroySurfaces. + */ +VAStatus vaDeriveImage ( + VADisplay dpy, + VASurfaceID surface, + VAImage *image /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaDeriveImage); + return ctx->vtable.vaDeriveImage ( ctx, surface, image ); +} + + +/* Get maximum number of subpicture formats supported by the implementation */ +int vaMaxNumSubpictureFormats ( + VADisplay dpy +) +{ + if( !vaDisplayIsValid(dpy) ) + return 0; + + return CTX(dpy)->max_subpic_formats; +} + +/* + * Query supported subpicture formats + * The caller must provide a "format_list" array that can hold at + * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag + * for each format to indicate additional capabilities for that format. The actual + * number of formats returned in "format_list" is returned in "num_formats". + */ +VAStatus vaQuerySubpictureFormats ( + VADisplay dpy, + VAImageFormat *format_list, /* out */ + unsigned int *flags, /* out */ + unsigned int *num_formats /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaQuerySubpictureFormats); + return ctx->vtable.vaQuerySubpictureFormats ( ctx, format_list, flags, num_formats); +} + +/* + * Subpictures are created with an image associated. + */ +VAStatus vaCreateSubpicture ( + VADisplay dpy, + VAImageID image, + VASubpictureID *subpicture /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaCreateSubpicture); + return ctx->vtable.vaCreateSubpicture ( ctx, image, subpicture ); +} + +/* + * Destroy the subpicture before destroying the image it is assocated to + */ +VAStatus vaDestroySubpicture ( + VADisplay dpy, + VASubpictureID subpicture +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaDestroySubpicture); + return ctx->vtable.vaDestroySubpicture ( ctx, subpicture); +} + +VAStatus vaSetSubpictureImage ( + VADisplay dpy, + VASubpictureID subpicture, + VAImageID image +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaSetSubpictureImage); + return ctx->vtable.vaSetSubpictureImage ( ctx, subpicture, image); +} + + +/* + * If chromakey is enabled, then the area where the source value falls within + * the chromakey [min, max] range is transparent + */ +VAStatus vaSetSubpictureChromakey ( + VADisplay dpy, + VASubpictureID subpicture, + unsigned int chromakey_min, + unsigned int chromakey_max, + unsigned int chromakey_mask +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaSetSubpictureChromakey); + return ctx->vtable.vaSetSubpictureChromakey ( ctx, subpicture, chromakey_min, chromakey_max, chromakey_mask ); +} + + +/* + * Global alpha value is between 0 and 1. A value of 1 means fully opaque and + * a value of 0 means fully transparent. If per-pixel alpha is also specified then + * the overall alpha is per-pixel alpha multiplied by the global alpha + */ +VAStatus vaSetSubpictureGlobalAlpha ( + VADisplay dpy, + VASubpictureID subpicture, + float global_alpha +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaSetSubpictureGlobalAlpha); + return ctx->vtable.vaSetSubpictureGlobalAlpha ( ctx, subpicture, global_alpha ); +} + +/* + vaAssociateSubpicture associates the subpicture with the target_surface. + It defines the region mapping between the subpicture and the target + surface through source and destination rectangles (with the same width and height). + Both will be displayed at the next call to vaPutSurface. Additional + associations before the call to vaPutSurface simply overrides the association. +*/ +VAStatus vaAssociateSubpicture ( + VADisplay dpy, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces, + short src_x, /* upper left offset in subpicture */ + short src_y, + unsigned short src_width, + unsigned short src_height, + short dest_x, /* upper left offset in surface */ + short dest_y, + unsigned short dest_width, + unsigned short dest_height, + /* + * whether to enable chroma-keying or global-alpha + * see VA_SUBPICTURE_XXX values + */ + unsigned int flags +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaAssociateSubpicture); + return ctx->vtable.vaAssociateSubpicture ( ctx, subpicture, target_surfaces, num_surfaces, src_x, src_y, src_width, src_height, dest_x, dest_y, dest_width, dest_height, flags ); +} + +/* + * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. + */ +VAStatus vaDeassociateSubpicture ( + VADisplay dpy, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaDeassociateSubpicture); + return ctx->vtable.vaDeassociateSubpicture ( ctx, subpicture, target_surfaces, num_surfaces ); +} + + +/* Get maximum number of display attributes supported by the implementation */ +int vaMaxNumDisplayAttributes ( + VADisplay dpy +) +{ + if( !vaDisplayIsValid(dpy) ) + return 0; + + return CTX(dpy)->max_display_attributes; +} + +/* + * Query display attributes + * The caller must provide a "attr_list" array that can hold at + * least vaMaxNumDisplayAttributes() entries. The actual number of attributes + * returned in "attr_list" is returned in "num_attributes". + */ +VAStatus vaQueryDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* out */ + int *num_attributes /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaQueryDisplayAttributes); + return ctx->vtable.vaQueryDisplayAttributes ( ctx, attr_list, num_attributes ); +} + +/* + * Get display attributes + * This function returns the current attribute values in "attr_list". + * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can have their values retrieved. + */ +VAStatus vaGetDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* in/out */ + int num_attributes +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaGetDisplayAttributes); + return ctx->vtable.vaGetDisplayAttributes ( ctx, attr_list, num_attributes ); +} + +/* + * Set display attributes + * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or + * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED + */ +VAStatus vaSetDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, + int num_attributes +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaSetDisplayAttributes); + return ctx->vtable.vaSetDisplayAttributes ( ctx, attr_list, num_attributes ); +} + +/* Wrap a CI (camera imaging) frame as a VA surface to share captured video between camear + * and VA encode. With frame_id, VA driver need to call CI interfaces to get the information + * of the frame, and to determine if the frame can be wrapped as a VA surface + * + * Application should make sure the frame is idle before the frame is passed into VA stack + * and also a vaSyncSurface should be called before application tries to access the frame + * from CI stack + */ +VAStatus vaCreateSurfaceFromCIFrame ( + VADisplay dpy, + unsigned long frame_id, + VASurfaceID *surface /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaCreateSurfacesFromCIFrame); + + if (ctx->vtable.vaCreateSurfaceFromCIFrame) + return ctx->vtable.vaCreateSurfaceFromCIFrame( ctx, frame_id, surface ); + else + return VA_STATUS_ERROR_UNKNOWN; +} + + +/* Wrap a V4L2 buffer as a VA surface, so that V4L2 camera, VA encode + * can share the data without copy + * The VA driver should query the camera device from v4l2_fd to see + * if camera device memory/buffer can be wrapped into a VA surface + * Buffer information is passed in by v4l2_fmt and v4l2_buf structure, + * VA driver also needs do further check if the buffer can meet encode + * hardware requirement, such as dimension, fourcc, stride, etc + * + * Application should make sure the buffer is idle before the frame into VA stack + * and also a vaSyncSurface should be called before application tries to access the frame + * from V4L2 stack + */ +VAStatus vaCreateSurfaceFromV4L2Buf( + VADisplay dpy, + int v4l2_fd, /* file descriptor of V4L2 device */ + struct v4l2_format *v4l2_fmt, /* format of V4L2 */ + struct v4l2_buffer *v4l2_buf, /* V4L2 buffer */ + VASurfaceID *surface /* out */ +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vtable.vaCreateSurfaceFromV4L2Buf); + + if (ctx->vtable.vaCreateSurfaceFromV4L2Buf) + return ctx->vtable.vaCreateSurfaceFromV4L2Buf( ctx, v4l2_fd, v4l2_fmt, v4l2_buf, surface ); + else + return VA_STATUS_ERROR_UNKNOWN; +} + +/* It is a debug interface, and isn't exported in core VAAPI + * It is used to dump surface data into system memory + * Application should explicitly call free to release the buffer memory + */ + +VAStatus vaCopySurfaceToBuffer(VADisplay dpy, + VASurfaceID surface, + unsigned int *fourcc, /* following are output argument */ + unsigned int *luma_stride, + unsigned int *chroma_u_stride, + unsigned int *chroma_v_stride, + unsigned int *luma_offset, + unsigned int *chroma_u_offset, + unsigned int *chroma_v_offset, + void **buffer +) +{ + VADriverContextP ctx; + CHECK_DISPLAY(dpy); + ctx = CTX(dpy); + + TRACE(vaCopySurfaceToBuffer); + if (ctx->vtable.vaCopySurfaceToBuffer) + return ctx->vtable.vaCopySurfaceToBuffer( ctx, surface, fourcc, luma_stride, chroma_u_stride, chroma_v_stride, luma_offset, chroma_u_offset, chroma_v_offset, buffer); + else + return VA_STATUS_ERROR_UNKNOWN; +} diff -Nru libva-0.31.0+latest1/va/va.h libva-0.31.0+latest2/va/va.h --- libva-0.31.0+latest1/va/va.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/va.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,1729 @@ +/* + * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +/* + * Video Acceleration (VA) API Specification + * + * Rev. 0.30 + * + * + * Revision History: + * rev 0.10 (12/10/2006 Jonathan Bian) - Initial draft + * rev 0.11 (12/15/2006 Jonathan Bian) - Fixed some errors + * rev 0.12 (02/05/2007 Jonathan Bian) - Added VC-1 data structures for slice level decode + * rev 0.13 (02/28/2007 Jonathan Bian) - Added GetDisplay() + * rev 0.14 (04/13/2007 Jonathan Bian) - Fixed MPEG-2 PictureParameter structure, cleaned up a few funcs. + * rev 0.15 (04/20/2007 Jonathan Bian) - Overhauled buffer management + * rev 0.16 (05/02/2007 Jonathan Bian) - Added error codes and fixed some issues with configuration + * rev 0.17 (05/07/2007 Jonathan Bian) - Added H.264/AVC data structures for slice level decode. + * rev 0.18 (05/14/2007 Jonathan Bian) - Added data structures for MPEG-4 slice level decode + * and MPEG-2 motion compensation. + * rev 0.19 (08/06/2007 Jonathan Bian) - Removed extra type for bitplane data. + * rev 0.20 (08/08/2007 Jonathan Bian) - Added missing fields to VC-1 PictureParameter structure. + * rev 0.21 (08/20/2007 Jonathan Bian) - Added image and subpicture support. + * rev 0.22 (08/27/2007 Jonathan Bian) - Added support for chroma-keying and global alpha. + * rev 0.23 (09/11/2007 Jonathan Bian) - Fixed some issues with images and subpictures. + * rev 0.24 (09/18/2007 Jonathan Bian) - Added display attributes. + * rev 0.25 (10/18/2007 Jonathan Bian) - Changed to use IDs only for some types. + * rev 0.26 (11/07/2007 Waldo Bastian) - Change vaCreateBuffer semantics + * rev 0.27 (11/19/2007 Matt Sottek) - Added DeriveImage + * rev 0.28 (12/06/2007 Jonathan Bian) - Added new versions of PutImage and AssociateSubpicture + * to enable scaling + * rev 0.29 (02/07/2008 Jonathan Bian) - VC1 parameter fixes, + * added VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED + * rev 0.30 (03/01/2009 Jonathan Bian) - Added encoding support for H.264 BP and MPEG-4 SP and fixes + * for ISO C conformance. + * rev 0.31 (09/02/2009 Gwenole Beauchesne) - VC-1/H264 fields change for VDPAU and XvBA backend + * Application needs to relink with the new library. + * + * Acknowledgements: + * Some concepts borrowed from XvMC and XvImage. + * Waldo Bastian (Intel), Matt Sottek (Intel), Austin Yuan (Intel), and Gwenole Beauchesne (SDS) + * contributed to various aspects of the API. + */ + +#ifndef _VA_H_ +#define _VA_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* +Overview + +The VA API is intended to provide an interface between a video decode/encode/display +application (client) and a hardware accelerator (server), to off-load +video decode/encode/display operations from the host to the hardware accelerator at various +entry-points. + +The basic operation steps are: + +- Negotiate a mutually acceptable configuration with the server to lock + down profile, entrypoints, and other attributes that will not change on + a frame-by-frame basis. +- Create a decode context which represents a "virtualized" hardware decode + device +- Get and fill decode buffers with picture level, slice level and macroblock + level data (depending on entrypoints) +- Pass the decode buffers to the server to decode the current frame + +Initialization & Configuration Management + +- Find out supported profiles +- Find out entrypoints for a given profile +- Find out configuration attributes for a given profile/entrypoint pair +- Create a configuration for use by the decoder + +*/ + +typedef void* VADisplay; /* window system dependent */ + +typedef int VAStatus; /* Return status type from functions */ +/* Values for the return status */ +#define VA_STATUS_SUCCESS 0x00000000 +#define VA_STATUS_ERROR_OPERATION_FAILED 0x00000001 +#define VA_STATUS_ERROR_ALLOCATION_FAILED 0x00000002 +#define VA_STATUS_ERROR_INVALID_DISPLAY 0x00000003 +#define VA_STATUS_ERROR_INVALID_CONFIG 0x00000004 +#define VA_STATUS_ERROR_INVALID_CONTEXT 0x00000005 +#define VA_STATUS_ERROR_INVALID_SURFACE 0x00000006 +#define VA_STATUS_ERROR_INVALID_BUFFER 0x00000007 +#define VA_STATUS_ERROR_INVALID_IMAGE 0x00000008 +#define VA_STATUS_ERROR_INVALID_SUBPICTURE 0x00000009 +#define VA_STATUS_ERROR_ATTR_NOT_SUPPORTED 0x0000000a +#define VA_STATUS_ERROR_MAX_NUM_EXCEEDED 0x0000000b +#define VA_STATUS_ERROR_UNSUPPORTED_PROFILE 0x0000000c +#define VA_STATUS_ERROR_UNSUPPORTED_ENTRYPOINT 0x0000000d +#define VA_STATUS_ERROR_UNSUPPORTED_RT_FORMAT 0x0000000e +#define VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE 0x0000000f +#define VA_STATUS_ERROR_SURFACE_BUSY 0x00000010 +#define VA_STATUS_ERROR_FLAG_NOT_SUPPORTED 0x00000011 +#define VA_STATUS_ERROR_INVALID_PARAMETER 0x00000012 +#define VA_STATUS_ERROR_RESOLUTION_NOT_SUPPORTED 0x00000013 +#define VA_STATUS_ERROR_UNIMPLEMENTED 0x00000014 +#define VA_STATUS_ERROR_SURFACE_IN_DISPLAYING 0x00000015 +#define VA_STATUS_ERROR_UNKNOWN 0xFFFFFFFF + +/* De-interlacing flags for vaPutSurface() */ +#define VA_FRAME_PICTURE 0x00000000 +#define VA_TOP_FIELD 0x00000001 +#define VA_BOTTOM_FIELD 0x00000002 + +/* + * Clears the drawable with background color. + * for hardware overlay based implementation this flag + * can be used to turn off the overlay + */ +#define VA_CLEAR_DRAWABLE 0x00000008 + +/* Color space conversion flags for vaPutSurface() */ +#define VA_SRC_BT601 0x00000010 +#define VA_SRC_BT709 0x00000020 + +/* + * Returns a short english description of error_status + */ +const char *vaErrorStr(VAStatus error_status); + +/* + * Initialization: + * A display must be obtained by calling vaGetDisplay() before calling + * vaInitialize() and other functions. This connects the API to the + * native window system. + * For X Windows, native_dpy would be from XOpenDisplay() + */ +typedef void* NativeDisplay; /* window system dependent */ + +/* + * Initialize the library + */ +VAStatus vaInitialize ( + VADisplay dpy, + int *major_version, /* out */ + int *minor_version /* out */ +); + +/* + * After this call, all library internal resources will be cleaned up + */ +VAStatus vaTerminate ( + VADisplay dpy +); + +/* + * vaQueryVendorString returns a pointer to a zero-terminated string + * describing some aspects of the VA implemenation on a specific + * hardware accelerator. The format of the returned string is vendor + * specific and at the discretion of the implementer. + * e.g. for the Intel GMA500 implementation, an example would be: + * "Intel GMA500 - 2.0.0.32L.0005" + */ +const char *vaQueryVendorString ( + VADisplay dpy +); + +typedef int (*VAPrivFunc)(); + +/* + * Return a function pointer given a function name in the library. + * This allows private interfaces into the library + */ +VAPrivFunc vaGetLibFunc ( + VADisplay dpy, + const char *func +); + +/* Currently defined profiles */ +typedef enum +{ + VAProfileMPEG2Simple = 0, + VAProfileMPEG2Main = 1, + VAProfileMPEG4Simple = 2, + VAProfileMPEG4AdvancedSimple = 3, + VAProfileMPEG4Main = 4, + VAProfileH264Baseline = 5, + VAProfileH264Main = 6, + VAProfileH264High = 7, + VAProfileVC1Simple = 8, + VAProfileVC1Main = 9, + VAProfileVC1Advanced = 10, + VAProfileH263Baseline = 11 +} VAProfile; + +/* + * Currently defined entrypoints + */ +typedef enum +{ + VAEntrypointVLD = 1, + VAEntrypointIZZ = 2, + VAEntrypointIDCT = 3, + VAEntrypointMoComp = 4, + VAEntrypointDeblocking = 5, + VAEntrypointEncSlice = 6 /* slice level encode */ +} VAEntrypoint; + +/* Currently defined configuration attribute types */ +typedef enum +{ + VAConfigAttribRTFormat = 0, + VAConfigAttribSpatialResidual = 1, + VAConfigAttribSpatialClipping = 2, + VAConfigAttribIntraResidual = 3, + VAConfigAttribEncryption = 4, + VAConfigAttribRateControl = 5 +} VAConfigAttribType; + +/* + * Configuration attributes + * If there is more than one value for an attribute, a default + * value will be assigned to the attribute if the client does not + * specify the attribute when creating a configuration + */ +typedef struct _VAConfigAttrib { + VAConfigAttribType type; + unsigned int value; /* OR'd flags (bits) for this attribute */ +} VAConfigAttrib; + +/* attribute value for VAConfigAttribRTFormat */ +#define VA_RT_FORMAT_YUV420 0x00000001 +#define VA_RT_FORMAT_YUV422 0x00000002 +#define VA_RT_FORMAT_YUV444 0x00000004 +#define VA_RT_FORMAT_PROTECTED 0x80000000 + +/* attribute value for VAConfigAttribRateControl */ +#define VA_RC_NONE 0x00000001 +#define VA_RC_CBR 0x00000002 +#define VA_RC_VBR 0x00000004 + +/* + * if an attribute is not applicable for a given + * profile/entrypoint pair, then set the value to the following + */ +#define VA_ATTRIB_NOT_SUPPORTED 0x80000000 + +/* Get maximum number of profiles supported by the implementation */ +int vaMaxNumProfiles ( + VADisplay dpy +); + +/* Get maximum number of entrypoints supported by the implementation */ +int vaMaxNumEntrypoints ( + VADisplay dpy +); + +/* Get maximum number of attributs supported by the implementation */ +int vaMaxNumConfigAttributes ( + VADisplay dpy +); + +/* + * Query supported profiles + * The caller must provide a "profile_list" array that can hold at + * least vaMaxNumProfile() entries. The actual number of profiles + * returned in "profile_list" is returned in "num_profile". + */ +VAStatus vaQueryConfigProfiles ( + VADisplay dpy, + VAProfile *profile_list, /* out */ + int *num_profiles /* out */ +); + +/* + * Query supported entrypoints for a given profile + * The caller must provide an "entrypoint_list" array that can hold at + * least vaMaxNumEntrypoints() entries. The actual number of entrypoints + * returned in "entrypoint_list" is returned in "num_entrypoints". + */ +VAStatus vaQueryConfigEntrypoints ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint *entrypoint_list, /* out */ + int *num_entrypoints /* out */ +); + +/* + * Get attributes for a given profile/entrypoint pair + * The caller must provide an "attrib_list" with all attributes to be + * retrieved. Upon return, the attributes in "attrib_list" have been + * updated with their value. Unknown attributes or attributes that are + * not supported for the given profile/entrypoint pair will have their + * value set to VA_ATTRIB_NOT_SUPPORTED + */ +VAStatus vaGetConfigAttributes ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, /* in/out */ + int num_attribs +); + +/* Generic ID type, can be re-typed for specific implementation */ +typedef unsigned int VAGenericID; + +typedef VAGenericID VAConfigID; + +/* + * Create a configuration for the decode pipeline + * it passes in the attribute list that specifies the attributes it cares + * about, with the rest taking default values. + */ +VAStatus vaCreateConfig ( + VADisplay dpy, + VAProfile profile, + VAEntrypoint entrypoint, + VAConfigAttrib *attrib_list, + int num_attribs, + VAConfigID *config_id /* out */ +); + +/* + * Free resources associdated with a given config + */ +VAStatus vaDestroyConfig ( + VADisplay dpy, + VAConfigID config_id +); + +/* + * Query all attributes for a given configuration + * The profile of the configuration is returned in "profile" + * The entrypoint of the configuration is returned in "entrypoint" + * The caller must provide an "attrib_list" array that can hold at least + * vaMaxNumConfigAttributes() entries. The actual number of attributes + * returned in "attrib_list" is returned in "num_attribs" + */ +VAStatus vaQueryConfigAttributes ( + VADisplay dpy, + VAConfigID config_id, + VAProfile *profile, /* out */ + VAEntrypoint *entrypoint, /* out */ + VAConfigAttrib *attrib_list,/* out */ + int *num_attribs /* out */ +); + + +/* + * Contexts and Surfaces + * + * Context represents a "virtual" video decode pipeline. Surfaces are render + * targets for a given context. The data in the surfaces are not accessible + * to the client and the internal data format of the surface is implementatin + * specific. + * + * Surfaces will be bound to a context when the context is created. Once + * a surface is bound to a given context, it can not be used to create + * another context. The association is removed when the context is destroyed + * + * Both contexts and surfaces are identified by unique IDs and its + * implementation specific internals are kept opaque to the clients + */ + +typedef VAGenericID VAContextID; + +typedef VAGenericID VASurfaceID; + +#define VA_INVALID_ID 0xffffffff +#define VA_INVALID_SURFACE VA_INVALID_ID + +/* + * vaCreateSurfaces - Create an array of surfaces used for decode and display + * dpy: display + * width: surface width + * height: surface height + * format: VA_RT_FORMAT_YUV420, VA_RT_FORMAT_YUV422 or VA_RT_FORMAT_YUV444 + * num_surfaces: number of surfaces to be created + * surfaces: array of surfaces created upon return + */ +VAStatus vaCreateSurfaces ( + VADisplay dpy, + int width, + int height, + int format, + int num_surfaces, + VASurfaceID *surfaces /* out */ +); + +/* Wrap a CI (camera imaging) frame as a VA surface to share captured video between camear + * and VA encode. With frame_id, VA driver need to call CI interfaces to get the information + * of the frame, and to determine if the frame can be wrapped as a VA surface + * + * Application should make sure the frame is idle before the frame is passed into VA stack + * and also a vaSyncSurface should be called before application tries to access the frame + * from CI stack + */ +VAStatus vaCreateSurfaceFromCIFrame ( + VADisplay dpy, + unsigned long frame_id, + VASurfaceID *surface /* out */ +); + + +/* + * vaDestroySurfaces - Destroy resources associated with surfaces. + * Surfaces can only be destroyed after the context associated has been + * destroyed. + * dpy: display + * surfaces: array of surfaces to destroy + * num_surfaces: number of surfaces in the array to be destroyed. + */ +VAStatus vaDestroySurfaces ( + VADisplay dpy, + VASurfaceID *surfaces, + int num_surfaces +); + +#define VA_PROGRESSIVE 0x1 +/* + * vaCreateContext - Create a context + * dpy: display + * config_id: configuration for the context + * picture_width: coded picture width + * picture_height: coded picture height + * flag: any combination of the following: + * VA_PROGRESSIVE (only progressive frame pictures in the sequence when set) + * render_targets: render targets (surfaces) tied to the context + * num_render_targets: number of render targets in the above array + * context: created context id upon return + */ +VAStatus vaCreateContext ( + VADisplay dpy, + VAConfigID config_id, + int picture_width, + int picture_height, + int flag, + VASurfaceID *render_targets, + int num_render_targets, + VAContextID *context /* out */ +); + +/* + * vaDestroyContext - Destroy a context + * dpy: display + * context: context to be destroyed + */ +VAStatus vaDestroyContext ( + VADisplay dpy, + VAContextID context +); + +/* + * Buffers + * Buffers are used to pass various types of data from the + * client to the server. The server maintains a data store + * for each buffer created, and the client idenfies a buffer + * through a unique buffer id assigned by the server. + */ + +typedef VAGenericID VABufferID; + +typedef enum +{ + VAPictureParameterBufferType = 0, + VAIQMatrixBufferType = 1, + VABitPlaneBufferType = 2, + VASliceGroupMapBufferType = 3, + VASliceParameterBufferType = 4, + VASliceDataBufferType = 5, + VAMacroblockParameterBufferType = 6, + VAResidualDataBufferType = 7, + VADeblockingParameterBufferType = 8, + VAImageBufferType = 9, + VAProtectedSliceDataBufferType = 10, +/* Following are encode buffer types */ + VAEncCodedBufferType = 21, + VAEncSequenceParameterBufferType = 22, + VAEncPictureParameterBufferType = 23, + VAEncSliceParameterBufferType = 24, + VAEncH264VUIBufferType = 25, + VAEncH264SEIBufferType = 26, +} VABufferType; + + +/* + * There will be cases where the bitstream buffer will not have enough room to hold + * the data for the entire slice, and the following flags will be used in the slice + * parameter to signal to the server for the possible cases. + * If a slice parameter buffer and slice data buffer pair is sent to the server with + * the slice data partially in the slice data buffer (BEGIN and MIDDLE cases below), + * then a slice parameter and data buffer needs to be sent again to complete this slice. + */ +#define VA_SLICE_DATA_FLAG_ALL 0x00 /* whole slice is in the buffer */ +#define VA_SLICE_DATA_FLAG_BEGIN 0x01 /* The beginning of the slice is in the buffer but the end if not */ +#define VA_SLICE_DATA_FLAG_MIDDLE 0x02 /* Neither beginning nor end of the slice is in the buffer */ +#define VA_SLICE_DATA_FLAG_END 0x04 /* end of the slice is in the buffer */ + +/* Codec-independent Slice Parameter Buffer base */ +typedef struct _VASliceParameterBufferBase +{ + unsigned int slice_data_size; /* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset; /* the offset to the first byte of slice data */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX definitions */ +} VASliceParameterBufferBase; + +/**************************** + * MPEG-2 data structures + ****************************/ + +/* MPEG-2 Picture Parameter Buffer */ +/* + * For each frame or field, and before any slice data, a single + * picture parameter buffer must be send. + */ +typedef struct _VAPictureParameterBufferMPEG2 +{ + unsigned short horizontal_size; + unsigned short vertical_size; + VASurfaceID forward_reference_picture; + VASurfaceID backward_reference_picture; + /* meanings of the following fields are the same as in the standard */ + int picture_coding_type; + int f_code; /* pack all four fcode into this */ + union { + struct { + unsigned int intra_dc_precision : 2; + unsigned int picture_structure : 2; + unsigned int top_field_first : 1; + unsigned int frame_pred_frame_dct : 1; + unsigned int concealment_motion_vectors : 1; + unsigned int q_scale_type : 1; + unsigned int intra_vlc_format : 1; + unsigned int alternate_scan : 1; + unsigned int repeat_first_field : 1; + unsigned int progressive_frame : 1; + unsigned int is_first_field : 1; /* indicate whether the current field + * is the first field for field picture + */ + } bits; + unsigned int value; + } picture_coding_extension; +} VAPictureParameterBufferMPEG2; + +/* MPEG-2 Inverse Quantization Matrix Buffer */ +typedef struct _VAIQMatrixBufferMPEG2 +{ + int load_intra_quantiser_matrix; + int load_non_intra_quantiser_matrix; + int load_chroma_intra_quantiser_matrix; + int load_chroma_non_intra_quantiser_matrix; + unsigned char intra_quantiser_matrix[64]; + unsigned char non_intra_quantiser_matrix[64]; + unsigned char chroma_intra_quantiser_matrix[64]; + unsigned char chroma_non_intra_quantiser_matrix[64]; +} VAIQMatrixBufferMPEG2; + +/* MPEG-2 Slice Parameter Buffer */ +typedef struct _VASliceParameterBufferMPEG2 +{ + unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset;/* the offset to the first byte of slice data */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ + unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ + unsigned int slice_horizontal_position; + unsigned int slice_vertical_position; + int quantiser_scale_code; + int intra_slice_flag; +} VASliceParameterBufferMPEG2; + +/* MPEG-2 Macroblock Parameter Buffer */ +typedef struct _VAMacroblockParameterBufferMPEG2 +{ + unsigned short macroblock_address; + /* + * macroblock_address (in raster scan order) + * top-left: 0 + * bottom-right: picture-height-in-mb*picture-width-in-mb - 1 + */ + unsigned char macroblock_type; /* see definition below */ + union { + struct { + unsigned int frame_motion_type : 2; + unsigned int field_motion_type : 2; + unsigned int dct_type : 1; + } bits; + unsigned int value; + } macroblock_modes; + unsigned char motion_vertical_field_select; + /* + * motion_vertical_field_select: + * see section 6.3.17.2 in the spec + * only the lower 4 bits are used + * bit 0: first vector forward + * bit 1: first vector backward + * bit 2: second vector forward + * bit 3: second vector backward + */ + short PMV[2][2][2]; /* see Table 7-7 in the spec */ + unsigned short coded_block_pattern; + /* + * The bitplanes for coded_block_pattern are described + * in Figure 6.10-12 in the spec + */ + + /* Number of skipped macroblocks after this macroblock */ + unsigned short num_skipped_macroblocks; +} VAMacroblockParameterBufferMPEG2; + +/* + * OR'd flags for macroblock_type (section 6.3.17.1 in the spec) + */ +#define VA_MB_TYPE_MOTION_FORWARD 0x02 +#define VA_MB_TYPE_MOTION_BACKWARD 0x04 +#define VA_MB_TYPE_MOTION_PATTERN 0x08 +#define VA_MB_TYPE_MOTION_INTRA 0x10 + +/* + * MPEG-2 Residual Data Buffer + * For each macroblock, there wil be 64 shorts (16-bit) in the + * residual data buffer + */ + +/**************************** + * MPEG-4 Part 2 data structures + ****************************/ + +/* MPEG-4 Picture Parameter Buffer */ +/* + * For each frame or field, and before any slice data, a single + * picture parameter buffer must be send. + */ +typedef struct _VAPictureParameterBufferMPEG4 +{ + unsigned short vop_width; + unsigned short vop_height; + VASurfaceID forward_reference_picture; + VASurfaceID backward_reference_picture; + union { + struct { + unsigned int short_video_header : 1; + unsigned int chroma_format : 2; + unsigned int interlaced : 1; + unsigned int obmc_disable : 1; + unsigned int sprite_enable : 2; + unsigned int sprite_warping_accuracy : 2; + unsigned int quant_type : 1; + unsigned int quarter_sample : 1; + unsigned int data_partitioned : 1; + unsigned int reversible_vlc : 1; + unsigned int resync_marker_disable : 1; + } bits; + unsigned int value; + } vol_fields; + unsigned char no_of_sprite_warping_points; + short sprite_trajectory_du[3]; + short sprite_trajectory_dv[3]; + unsigned char quant_precision; + union { + struct { + unsigned int vop_coding_type : 2; + unsigned int backward_reference_vop_coding_type : 2; + unsigned int vop_rounding_type : 1; + unsigned int intra_dc_vlc_thr : 3; + unsigned int top_field_first : 1; + unsigned int alternate_vertical_scan_flag : 1; + } bits; + unsigned int value; + } vop_fields; + unsigned char vop_fcode_forward; + unsigned char vop_fcode_backward; + unsigned short vop_time_increment_resolution; + /* short header related */ + unsigned char num_gobs_in_vop; + unsigned char num_macroblocks_in_gob; + /* for direct mode prediction */ + short TRB; + short TRD; +} VAPictureParameterBufferMPEG4; + +/* MPEG-4 Inverse Quantization Matrix Buffer */ +typedef struct _VAIQMatrixBufferMPEG4 +{ + int load_intra_quant_mat; + int load_non_intra_quant_mat; + unsigned char intra_quant_mat[64]; + unsigned char non_intra_quant_mat[64]; +} VAIQMatrixBufferMPEG4; + +/* MPEG-4 Slice Parameter Buffer */ +typedef struct _VASliceParameterBufferMPEG4 +{ + unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset;/* the offset to the first byte of slice data */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ + unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ + unsigned int macroblock_number; + int quant_scale; +} VASliceParameterBufferMPEG4; + +/* + VC-1 data structures +*/ + +typedef enum /* see 7.1.1.32 */ +{ + VAMvMode1Mv = 0, + VAMvMode1MvHalfPel = 1, + VAMvMode1MvHalfPelBilinear = 2, + VAMvModeMixedMv = 3, + VAMvModeIntensityCompensation = 4 +} VAMvModeVC1; + +/* VC-1 Picture Parameter Buffer */ +/* + * For each picture, and before any slice data, a picture parameter + * buffer must be send. Multiple picture parameter buffers may be + * sent for a single picture. In that case picture parameters will + * apply to all slice data that follow it until a new picture + * parameter buffer is sent. + * + * Notes: + * pic_quantizer_type should be set to the applicable quantizer + * type as defined by QUANTIZER (J.1.19) and either + * PQUANTIZER (7.1.1.8) or PQINDEX (7.1.1.6) + */ +typedef struct _VAPictureParameterBufferVC1 +{ + VASurfaceID forward_reference_picture; + VASurfaceID backward_reference_picture; + /* if out-of-loop post-processing is done on the render + target, then we need to keep the in-loop decoded + picture as a reference picture */ + VASurfaceID inloop_decoded_picture; + + /* sequence layer for AP or meta data for SP and MP */ + union { + struct { + unsigned int pulldown : 1; /* SEQUENCE_LAYER::PULLDOWN */ + unsigned int interlace : 1; /* SEQUENCE_LAYER::INTERLACE */ + unsigned int tfcntrflag : 1; /* SEQUENCE_LAYER::TFCNTRFLAG */ + unsigned int finterpflag : 1; /* SEQUENCE_LAYER::FINTERPFLAG */ + unsigned int psf : 1; /* SEQUENCE_LAYER::PSF */ + unsigned int multires : 1; /* METADATA::MULTIRES */ + unsigned int overlap : 1; /* METADATA::OVERLAP */ + unsigned int syncmarker : 1; /* METADATA::SYNCMARKER */ + unsigned int rangered : 1; /* METADATA::RANGERED */ + unsigned int max_b_frames : 3; /* METADATA::MAXBFRAMES */ + } bits; + unsigned int value; + } sequence_fields; + + unsigned short coded_width; /* ENTRY_POINT_LAYER::CODED_WIDTH */ + unsigned short coded_height; /* ENTRY_POINT_LAYER::CODED_HEIGHT */ + union { + struct { + unsigned int broken_link : 1; /* ENTRY_POINT_LAYER::BROKEN_LINK */ + unsigned int closed_entry : 1; /* ENTRY_POINT_LAYER::CLOSED_ENTRY */ + unsigned int panscan_flag : 1; /* ENTRY_POINT_LAYER::PANSCAN_FLAG */ + unsigned int loopfilter : 1; /* ENTRY_POINT_LAYER::LOOPFILTER */ + } bits; + unsigned int value; + } entrypoint_fields; + unsigned char conditional_overlap_flag; /* ENTRY_POINT_LAYER::CONDOVER */ + unsigned char fast_uvmc_flag; /* ENTRY_POINT_LAYER::FASTUVMC */ + union { + struct { + unsigned int luma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPY_FLAG */ + unsigned int luma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPY */ + unsigned int chroma_flag : 1; /* ENTRY_POINT_LAYER::RANGE_MAPUV_FLAG */ + unsigned int chroma : 3; /* ENTRY_POINT_LAYER::RANGE_MAPUV */ + } bits; + unsigned int value; + } range_mapping_fields; + + unsigned char b_picture_fraction; /* PICTURE_LAYER::BFRACTION */ + unsigned char cbp_table; /* PICTURE_LAYER::CBPTAB/ICBPTAB */ + unsigned char mb_mode_table; /* PICTURE_LAYER::MBMODETAB */ + unsigned char range_reduction_frame;/* PICTURE_LAYER::RANGEREDFRM */ + unsigned char rounding_control; /* PICTURE_LAYER::RNDCTRL */ + unsigned char post_processing; /* PICTURE_LAYER::POSTPROC */ + unsigned char picture_resolution_index; /* PICTURE_LAYER::RESPIC */ + unsigned char luma_scale; /* PICTURE_LAYER::LUMSCALE */ + unsigned char luma_shift; /* PICTURE_LAYER::LUMSHIFT */ + union { + struct { + unsigned int picture_type : 3; /* PICTURE_LAYER::PTYPE */ + unsigned int frame_coding_mode : 3; /* PICTURE_LAYER::FCM */ + unsigned int top_field_first : 1; /* PICTURE_LAYER::TFF */ + unsigned int is_first_field : 1; /* set to 1 if it is the first field */ + unsigned int intensity_compensation : 1; /* PICTURE_LAYER::INTCOMP */ + } bits; + unsigned int value; + } picture_fields; + union { + struct { + unsigned int mv_type_mb : 1; /* PICTURE::MVTYPEMB */ + unsigned int direct_mb : 1; /* PICTURE::DIRECTMB */ + unsigned int skip_mb : 1; /* PICTURE::SKIPMB */ + unsigned int field_tx : 1; /* PICTURE::FIELDTX */ + unsigned int forward_mb : 1; /* PICTURE::FORWARDMB */ + unsigned int ac_pred : 1; /* PICTURE::ACPRED */ + unsigned int overflags : 1; /* PICTURE::OVERFLAGS */ + } flags; + unsigned int value; + } raw_coding; + union { + struct { + unsigned int bp_mv_type_mb : 1; /* PICTURE::MVTYPEMB */ + unsigned int bp_direct_mb : 1; /* PICTURE::DIRECTMB */ + unsigned int bp_skip_mb : 1; /* PICTURE::SKIPMB */ + unsigned int bp_field_tx : 1; /* PICTURE::FIELDTX */ + unsigned int bp_forward_mb : 1; /* PICTURE::FORWARDMB */ + unsigned int bp_ac_pred : 1; /* PICTURE::ACPRED */ + unsigned int bp_overflags : 1; /* PICTURE::OVERFLAGS */ + } flags; + unsigned int value; + } bitplane_present; /* signal what bitplane is being passed via the bitplane buffer */ + union { + struct { + unsigned int reference_distance_flag : 1;/* PICTURE_LAYER::REFDIST_FLAG */ + unsigned int reference_distance : 5;/* PICTURE_LAYER::REFDIST */ + unsigned int num_reference_pictures: 1;/* PICTURE_LAYER::NUMREF */ + unsigned int reference_field_pic_indicator : 1;/* PICTURE_LAYER::REFFIELD */ + } bits; + unsigned int value; + } reference_fields; + union { + struct { + unsigned int mv_mode : 3; /* PICTURE_LAYER::MVMODE */ + unsigned int mv_mode2 : 3; /* PICTURE_LAYER::MVMODE2 */ + unsigned int mv_table : 3; /* PICTURE_LAYER::MVTAB/IMVTAB */ + unsigned int two_mv_block_pattern_table: 2; /* PICTURE_LAYER::2MVBPTAB */ + unsigned int four_mv_switch : 1; /* PICTURE_LAYER::4MVSWITCH */ + unsigned int four_mv_block_pattern_table : 2; /* PICTURE_LAYER::4MVBPTAB */ + unsigned int extended_mv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_MV */ + unsigned int extended_mv_range : 2; /* PICTURE_LAYER::MVRANGE */ + unsigned int extended_dmv_flag : 1; /* ENTRY_POINT_LAYER::EXTENDED_DMV */ + unsigned int extended_dmv_range : 2; /* PICTURE_LAYER::DMVRANGE */ + } bits; + unsigned int value; + } mv_fields; + union { + struct { + unsigned int dquant : 2; /* ENTRY_POINT_LAYER::DQUANT */ + unsigned int quantizer : 2; /* ENTRY_POINT_LAYER::QUANTIZER */ + unsigned int half_qp : 1; /* PICTURE_LAYER::HALFQP */ + unsigned int pic_quantizer_scale : 5;/* PICTURE_LAYER::PQUANT */ + unsigned int pic_quantizer_type : 1;/* PICTURE_LAYER::PQUANTIZER */ + unsigned int dq_frame : 1; /* VOPDQUANT::DQUANTFRM */ + unsigned int dq_profile : 2; /* VOPDQUANT::DQPROFILE */ + unsigned int dq_sb_edge : 2; /* VOPDQUANT::DQSBEDGE */ + unsigned int dq_db_edge : 2; /* VOPDQUANT::DQDBEDGE */ + unsigned int dq_binary_level : 1; /* VOPDQUANT::DQBILEVEL */ + unsigned int alt_pic_quantizer : 5;/* VOPDQUANT::ALTPQUANT */ + } bits; + unsigned int value; + } pic_quantizer_fields; + union { + struct { + unsigned int variable_sized_transform_flag : 1;/* ENTRY_POINT_LAYER::VSTRANSFORM */ + unsigned int mb_level_transform_type_flag : 1;/* PICTURE_LAYER::TTMBF */ + unsigned int frame_level_transform_type : 2;/* PICTURE_LAYER::TTFRM */ + unsigned int transform_ac_codingset_idx1 : 2;/* PICTURE_LAYER::TRANSACFRM */ + unsigned int transform_ac_codingset_idx2 : 2;/* PICTURE_LAYER::TRANSACFRM2 */ + unsigned int intra_transform_dc_table : 1;/* PICTURE_LAYER::TRANSDCTAB */ + } bits; + unsigned int value; + } transform_fields; +} VAPictureParameterBufferVC1; + +/* VC-1 Bitplane Buffer +There will be at most three bitplanes coded in any picture header. To send +the bitplane data more efficiently, each byte is divided in two nibbles, with +each nibble carrying three bitplanes for one macroblock. The following table +shows the bitplane data arrangement within each nibble based on the picture +type. + +Picture Type Bit3 Bit2 Bit1 Bit0 +I or BI OVERFLAGS ACPRED FIELDTX +P MYTYPEMB SKIPMB DIRECTMB +B FORWARDMB SKIPMB DIRECTMB + +Within each byte, the lower nibble is for the first MB and the upper nibble is +for the second MB. E.g. the lower nibble of the first byte in the bitplane +buffer is for Macroblock #1 and the upper nibble of the first byte is for +Macroblock #2 in the first row. +*/ + +/* VC-1 Slice Parameter Buffer */ +typedef struct _VASliceParameterBufferVC1 +{ + unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset;/* the offset to the first byte of slice data */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ + unsigned int macroblock_offset;/* the offset to the first bit of MB from the first byte of slice data */ + unsigned int slice_vertical_position; +} VASliceParameterBufferVC1; + +/* VC-1 Slice Data Buffer */ +/* +This is simplely a buffer containing raw bit-stream bytes +*/ + +/**************************** + * H.264/AVC data structures + ****************************/ + +typedef struct _VAPictureH264 +{ + VASurfaceID picture_id; + unsigned int frame_idx; + unsigned int flags; + unsigned int TopFieldOrderCnt; + unsigned int BottomFieldOrderCnt; +} VAPictureH264; +/* flags in VAPictureH264 could be OR of the following */ +#define VA_PICTURE_H264_INVALID 0x00000001 +#define VA_PICTURE_H264_TOP_FIELD 0x00000002 +#define VA_PICTURE_H264_BOTTOM_FIELD 0x00000004 +#define VA_PICTURE_H264_SHORT_TERM_REFERENCE 0x00000008 +#define VA_PICTURE_H264_LONG_TERM_REFERENCE 0x00000010 + +/* H.264 Picture Parameter Buffer */ +/* + * For each picture, and before any slice data, a single + * picture parameter buffer must be send. + */ +typedef struct _VAPictureParameterBufferH264 +{ + VAPictureH264 CurrPic; + VAPictureH264 ReferenceFrames[16]; /* in DPB */ + unsigned short picture_width_in_mbs_minus1; + unsigned short picture_height_in_mbs_minus1; + unsigned char bit_depth_luma_minus8; + unsigned char bit_depth_chroma_minus8; + unsigned char num_ref_frames; + union { + struct { + unsigned int chroma_format_idc : 2; + unsigned int residual_colour_transform_flag : 1; + unsigned int gaps_in_frame_num_value_allowed_flag : 1; + unsigned int frame_mbs_only_flag : 1; + unsigned int mb_adaptive_frame_field_flag : 1; + unsigned int direct_8x8_inference_flag : 1; + unsigned int MinLumaBiPredSize8x8 : 1; /* see A.3.3.2 */ + unsigned int log2_max_frame_num_minus4 : 4; + unsigned int pic_order_cnt_type : 2; + unsigned int log2_max_pic_order_cnt_lsb_minus4 : 4; + unsigned int delta_pic_order_always_zero_flag : 1; + } bits; + unsigned int value; + } seq_fields; + unsigned char num_slice_groups_minus1; + unsigned char slice_group_map_type; + unsigned short slice_group_change_rate_minus1; + signed char pic_init_qp_minus26; + signed char pic_init_qs_minus26; + signed char chroma_qp_index_offset; + signed char second_chroma_qp_index_offset; + union { + struct { + unsigned int entropy_coding_mode_flag : 1; + unsigned int weighted_pred_flag : 1; + unsigned int weighted_bipred_idc : 2; + unsigned int transform_8x8_mode_flag : 1; + unsigned int field_pic_flag : 1; + unsigned int constrained_intra_pred_flag : 1; + unsigned int pic_order_present_flag : 1; + unsigned int deblocking_filter_control_present_flag : 1; + unsigned int redundant_pic_cnt_present_flag : 1; + unsigned int reference_pic_flag : 1; /* nal_ref_idc != 0 */ + } bits; + unsigned int value; + } pic_fields; + unsigned short frame_num; +} VAPictureParameterBufferH264; + +/* H.264 Inverse Quantization Matrix Buffer */ +typedef struct _VAIQMatrixBufferH264 +{ + unsigned char ScalingList4x4[6][16]; + unsigned char ScalingList8x8[2][64]; +} VAIQMatrixBufferH264; + +/* + * H.264 Slice Group Map Buffer + * When VAPictureParameterBufferH264::num_slice_group_minus1 is not equal to 0, + * A slice group map buffer should be sent for each picture if required. The buffer + * is sent only when there is a change in the mapping values. + * The slice group map buffer map "map units" to slice groups as specified in + * section 8.2.2 of the H.264 spec. The buffer will contain one byte for each macroblock + * in raster scan order + */ + +/* H.264 Slice Parameter Buffer */ +typedef struct _VASliceParameterBufferH264 +{ + unsigned int slice_data_size;/* number of bytes in the slice data buffer for this slice */ + unsigned int slice_data_offset;/* the offset to the NAL start code for this slice */ + unsigned int slice_data_flag; /* see VA_SLICE_DATA_FLAG_XXX defintions */ + unsigned short slice_data_bit_offset; /* bit offset from NAL start code to the beginning of slice data */ + unsigned short first_mb_in_slice; + unsigned char slice_type; + unsigned char direct_spatial_mv_pred_flag; + unsigned char num_ref_idx_l0_active_minus1; + unsigned char num_ref_idx_l1_active_minus1; + unsigned char cabac_init_idc; + char slice_qp_delta; + unsigned char disable_deblocking_filter_idc; + char slice_alpha_c0_offset_div2; + char slice_beta_offset_div2; + VAPictureH264 RefPicList0[32]; /* See 8.2.4.2 */ + VAPictureH264 RefPicList1[32]; /* See 8.2.4.2 */ + unsigned char luma_log2_weight_denom; + unsigned char chroma_log2_weight_denom; + unsigned char luma_weight_l0_flag; + short luma_weight_l0[32]; + short luma_offset_l0[32]; + unsigned char chroma_weight_l0_flag; + short chroma_weight_l0[32][2]; + short chroma_offset_l0[32][2]; + unsigned char luma_weight_l1_flag; + short luma_weight_l1[32]; + short luma_offset_l1[32]; + unsigned char chroma_weight_l1_flag; + short chroma_weight_l1[32][2]; + short chroma_offset_l1[32][2]; +} VASliceParameterBufferH264; + +/**************************** + * Common encode data structures + ****************************/ +typedef enum +{ + VAEncPictureTypeIntra = 0, + VAEncPictureTypePredictive = 1, + VAEncPictureTypeBidirectional = 2, +} VAEncPictureType; + +/* Encode Slice Parameter Buffer */ +typedef struct _VAEncSliceParameterBuffer +{ + unsigned int start_row_number; /* starting MB row number for this slice */ + unsigned int slice_height; /* slice height measured in MB */ + union { + struct { + unsigned int is_intra : 1; + unsigned int disable_deblocking_filter_idc : 2; + } bits; + unsigned int value; + } slice_flags; +} VAEncSliceParameterBuffer; + +/**************************** + * H.264 specific encode data structures + ****************************/ + +typedef struct _VAEncSequenceParameterBufferH264 +{ + unsigned char seq_parameter_set_id; + unsigned char level_idc; + unsigned int intra_period; + unsigned int picture_width_in_mbs; + unsigned int picture_height_in_mbs; + unsigned int bits_per_second; + unsigned int frame_rate; + unsigned int initial_qp; + unsigned int min_qp; + unsigned int basic_unit_size; + unsigned char vui_flag; +} VAEncSequenceParameterBufferH264; + +typedef struct _VAEncPictureParameterBufferH264 +{ + VASurfaceID reference_picture; + VASurfaceID reconstructed_picture; + VABufferID coded_buf; + unsigned short picture_width; + unsigned short picture_height; + unsigned char last_picture; /* if set to 1 it indicates the last picture in the sequence */ +} VAEncPictureParameterBufferH264; + +/**************************** + * H.263 specific encode data structures + ****************************/ + +typedef struct _VAEncSequenceParameterBufferH263 +{ + unsigned int intra_period; + unsigned int bits_per_second; + unsigned int frame_rate; + unsigned int initial_qp; + unsigned int min_qp; +} VAEncSequenceParameterBufferH263; + +typedef struct _VAEncPictureParameterBufferH263 +{ + VASurfaceID reference_picture; + VASurfaceID reconstructed_picture; + VABufferID coded_buf; + unsigned short picture_width; + unsigned short picture_height; + VAEncPictureType picture_type; +} VAEncPictureParameterBufferH263; + +/**************************** + * MPEG-4 specific encode data structures + ****************************/ + +typedef struct _VAEncSequenceParameterBufferMPEG4 +{ + unsigned char profile_and_level_indication; + unsigned int intra_period; + unsigned int video_object_layer_width; + unsigned int video_object_layer_height; + unsigned int vop_time_increment_resolution; + unsigned int fixed_vop_rate; + unsigned int fixed_vop_time_increment; + unsigned int bits_per_second; + unsigned int frame_rate; + unsigned int initial_qp; + unsigned int min_qp; +} VAEncSequenceParameterBufferMPEG4; + +typedef struct _VAEncPictureParameterBufferMPEG4 +{ + VASurfaceID reference_picture; + VASurfaceID reconstructed_picture; + VABufferID coded_buf; + unsigned short picture_width; + unsigned short picture_height; + unsigned int modulo_time_base; /* number of 1s */ + unsigned int vop_time_increment; + VAEncPictureType picture_type; +} VAEncPictureParameterBufferMPEG4; + + + +/* Buffer functions */ + +/* + * Creates a buffer for "num_elements" elements of "size" bytes and + * initalize with "data". + * if "data" is null, then the contents of the buffer data store + * are undefined. + * Basically there are two ways to get buffer data to the server side. One is + * to call vaCreateBuffer() with a non-null "data", which results the data being + * copied to the data store on the server side. A different method that + * eliminates this copy is to pass null as "data" when calling vaCreateBuffer(), + * and then use vaMapBuffer() to map the data store from the server side to the + * client address space for access. + * Note: image buffers are created by the library, not the client. Please see + * vaCreateImage on how image buffers are managed. + */ +VAStatus vaCreateBuffer ( + VADisplay dpy, + VAContextID context, + VABufferType type, /* in */ + unsigned int size, /* in */ + unsigned int num_elements, /* in */ + void *data, /* in */ + VABufferID *buf_id /* out */ +); + +/* + * Convey to the server how many valid elements are in the buffer. + * e.g. if multiple slice parameters are being held in a single buffer, + * this will communicate to the server the number of slice parameters + * that are valid in the buffer. + */ +VAStatus vaBufferSetNumElements ( + VADisplay dpy, + VABufferID buf_id, /* in */ + unsigned int num_elements /* in */ +); + +/* + * Map data store of the buffer into the client's address space + * vaCreateBuffer() needs to be called with "data" set to NULL before + * calling vaMapBuffer() + */ +VAStatus vaMapBuffer ( + VADisplay dpy, + VABufferID buf_id, /* in */ + void **pbuf /* out */ +); + +/* + * After client making changes to a mapped data store, it needs to + * "Unmap" it to let the server know that the data is ready to be + * consumed by the server + */ +VAStatus vaUnmapBuffer ( + VADisplay dpy, + VABufferID buf_id /* in */ +); + +/* + * After this call, the buffer is deleted and this buffer_id is no longer valid + * Only call this if the buffer is not going to be passed to vaRenderBuffer + */ +VAStatus vaDestroyBuffer ( + VADisplay dpy, + VABufferID buffer_id +); + +/* +Render (Decode) Pictures + +A picture represents either a frame or a field. + +The Begin/Render/End sequence sends the decode buffers to the server +*/ + +/* + * Get ready to decode a picture to a target surface + */ +VAStatus vaBeginPicture ( + VADisplay dpy, + VAContextID context, + VASurfaceID render_target +); + +/* + * Send decode buffers to the server. + * Buffers are automatically destroyed afterwards + */ +VAStatus vaRenderPicture ( + VADisplay dpy, + VAContextID context, + VABufferID *buffers, + int num_buffers +); + +/* + * Make the end of rendering for a picture. + * The server should start processing all pending operations for this + * surface. This call is non-blocking. The client can start another + * Begin/Render/End sequence on a different render target. + */ +VAStatus vaEndPicture ( + VADisplay dpy, + VAContextID context +); + +/* + +Synchronization + +*/ + +/* + * This function blocks until all pending operations on the render target + * have been completed. Upon return it is safe to use the render target for a + * different picture. + */ +VAStatus vaSyncSurface ( + VADisplay dpy, + VASurfaceID render_target +); + +typedef enum +{ + VASurfaceRendering = 1, /* Rendering in progress */ + VASurfaceDisplaying = 2, /* Displaying in progress (not safe to render into it) */ + /* this status is useful if surface is used as the source */ + /* of an overlay */ + VASurfaceReady = 4, /* not being rendered or displayed */ + VASurfaceSkipped = 8 /* Indicate a skipped frame during encode */ +} VASurfaceStatus; + +/* + * Find out any pending ops on the render target + */ +VAStatus vaQuerySurfaceStatus ( + VADisplay dpy, + VASurfaceID render_target, + VASurfaceStatus *status /* out */ +); + +/* + * Images and Subpictures + * VAImage is used to either get the surface data to client memory, or + * to copy image data in client memory to a surface. + * Both images, subpictures and surfaces follow the same 2D coordinate system where origin + * is at the upper left corner with positive X to the right and positive Y down + */ +#define VA_FOURCC(ch0, ch1, ch2, ch3) \ + ((unsigned long)(unsigned char) (ch0) | ((unsigned long)(unsigned char) (ch1) << 8) | \ + ((unsigned long)(unsigned char) (ch2) << 16) | ((unsigned long)(unsigned char) (ch3) << 24 )) + +/* a few common FourCCs */ +#define VA_FOURCC_NV12 0x3231564E +#define VA_FOURCC_AI44 0x34344149 +#define VA_FOURCC_RGBA 0x41424752 +#define VA_FOURCC_UYVY 0x59565955 +#define VA_FOURCC_YUY2 0x32595559 +#define VA_FOURCC_AYUV 0x56555941 +#define VA_FOURCC_NV11 0x3131564e +#define VA_FOURCC_YV12 0x32315659 +#define VA_FOURCC_P208 0x38303250 +#define VA_FOURCC_IYUV 0x56555949 + +/* byte order */ +#define VA_LSB_FIRST 1 +#define VA_MSB_FIRST 2 + +typedef struct _VAImageFormat +{ + unsigned int fourcc; + unsigned int byte_order; /* VA_LSB_FIRST, VA_MSB_FIRST */ + unsigned int bits_per_pixel; + /* for RGB formats */ + unsigned int depth; /* significant bits per pixel */ + unsigned int red_mask; + unsigned int green_mask; + unsigned int blue_mask; + unsigned int alpha_mask; +} VAImageFormat; + +typedef VAGenericID VAImageID; + +typedef struct _VAImage +{ + VAImageID image_id; /* uniquely identify this image */ + VAImageFormat format; + VABufferID buf; /* image data buffer */ + /* + * Image data will be stored in a buffer of type VAImageBufferType to facilitate + * data store on the server side for optimal performance. The buffer will be + * created by the CreateImage function, and proper storage allocated based on the image + * size and format. This buffer is managed by the library implementation, and + * accessed by the client through the buffer Map/Unmap functions. + */ + unsigned short width; + unsigned short height; + unsigned int data_size; + unsigned int num_planes; /* can not be greater than 3 */ + /* + * An array indicating the scanline pitch in bytes for each plane. + * Each plane may have a different pitch. Maximum 3 planes for planar formats + */ + unsigned int pitches[3]; + /* + * An array indicating the byte offset from the beginning of the image data + * to the start of each plane. + */ + unsigned int offsets[3]; + + /* The following fields are only needed for paletted formats */ + int num_palette_entries; /* set to zero for non-palette images */ + /* + * Each component is one byte and entry_bytes indicates the number of components in + * each entry (eg. 3 for YUV palette entries). set to zero for non-palette images + */ + int entry_bytes; + /* + * An array of ascii characters describing the order of the components within the bytes. + * Only entry_bytes characters of the string are used. + */ + char component_order[4]; +} VAImage; + +/* Get maximum number of image formats supported by the implementation */ +int vaMaxNumImageFormats ( + VADisplay dpy +); + +/* + * Query supported image formats + * The caller must provide a "format_list" array that can hold at + * least vaMaxNumImageFormats() entries. The actual number of formats + * returned in "format_list" is returned in "num_formats". + */ +VAStatus vaQueryImageFormats ( + VADisplay dpy, + VAImageFormat *format_list, /* out */ + int *num_formats /* out */ +); + +/* + * Create a VAImage structure + * The width and height fields returned in the VAImage structure may get + * enlarged for some YUV formats. Upon return from this function, + * image->buf has been created and proper storage allocated by the library. + * The client can access the image through the Map/Unmap calls. + */ +VAStatus vaCreateImage ( + VADisplay dpy, + VAImageFormat *format, + int width, + int height, + VAImage *image /* out */ +); + +/* + * Should call DestroyImage before destroying the surface it is bound to + */ +VAStatus vaDestroyImage ( + VADisplay dpy, + VAImageID image +); + +VAStatus vaSetImagePalette ( + VADisplay dpy, + VAImageID image, + /* + * pointer to an array holding the palette data. The size of the array is + * num_palette_entries * entry_bytes in size. The order of the components + * in the palette is described by the component_order in VAImage struct + */ + unsigned char *palette +); + +/* + * Retrive surface data into a VAImage + * Image must be in a format supported by the implementation + */ +VAStatus vaGetImage ( + VADisplay dpy, + VASurfaceID surface, + int x, /* coordinates of the upper left source pixel */ + int y, + unsigned int width, /* width and height of the region */ + unsigned int height, + VAImageID image +); + +/* + * Copy data from a VAImage to a surface + * Image must be in a format supported by the implementation + * Returns a VA_STATUS_ERROR_SURFACE_BUSY if the surface + * shouldn't be rendered into when this is called + */ +VAStatus vaPutImage ( + VADisplay dpy, + VASurfaceID surface, + VAImageID image, + int src_x, + int src_y, + unsigned int src_width, + unsigned int src_height, + int dest_x, + int dest_y, + unsigned int dest_width, + unsigned int dest_height +); + +/* + * Derive an VAImage from an existing surface. + * This interface will derive a VAImage and corresponding image buffer from + * an existing VA Surface. The image buffer can then be mapped/unmapped for + * direct CPU access. This operation is only possible on implementations with + * direct rendering capabilities and internal surface formats that can be + * represented with a VAImage. When the operation is not possible this interface + * will return VA_STATUS_ERROR_OPERATION_FAILED. Clients should then fall back + * to using vaCreateImage + vaPutImage to accomplish the same task in an + * indirect manner. + * + * Implementations should only return success when the resulting image buffer + * would be useable with vaMap/Unmap. + * + * When directly accessing a surface special care must be taken to insure + * proper synchronization with the graphics hardware. Clients should call + * vaQuerySurfaceStatus to insure that a surface is not the target of concurrent + * rendering or currently being displayed by an overlay. + * + * Additionally nothing about the contents of a surface should be assumed + * following a vaPutSurface. Implementations are free to modify the surface for + * scaling or subpicture blending within a call to vaPutImage. + * + * Calls to vaPutImage or vaGetImage using the same surface from which the image + * has been derived will return VA_STATUS_ERROR_SURFACE_BUSY. vaPutImage or + * vaGetImage with other surfaces is supported. + * + * An image created with vaDeriveImage should be freed with vaDestroyImage. The + * image and image buffer structures will be destroyed; however, the underlying + * surface will remain unchanged until freed with vaDestroySurfaces. + */ +VAStatus vaDeriveImage ( + VADisplay dpy, + VASurfaceID surface, + VAImage *image /* out */ +); + +/* + * Subpictures + * Subpicture is a special type of image that can be blended + * with a surface during vaPutSurface(). Subpicture can be used to render + * DVD sub-titles or closed captioning text etc. + */ + +typedef VAGenericID VASubpictureID; + +/* Get maximum number of subpicture formats supported by the implementation */ +int vaMaxNumSubpictureFormats ( + VADisplay dpy +); + +/* flags for subpictures */ +#define VA_SUBPICTURE_CHROMA_KEYING 0x0001 +#define VA_SUBPICTURE_GLOBAL_ALPHA 0x0002 +/* + * Query supported subpicture formats + * The caller must provide a "format_list" array that can hold at + * least vaMaxNumSubpictureFormats() entries. The flags arrary holds the flag + * for each format to indicate additional capabilities for that format. The actual + * number of formats returned in "format_list" is returned in "num_formats". + * flags: returned value to indicate addtional capabilities + * VA_SUBPICTURE_CHROMA_KEYING - supports chroma-keying + * VA_SUBPICTURE_GLOBAL_ALPHA - supports global alpha + */ +VAStatus vaQuerySubpictureFormats ( + VADisplay dpy, + VAImageFormat *format_list, /* out */ + unsigned int *flags, /* out */ + unsigned int *num_formats /* out */ +); + +/* + * Subpictures are created with an image associated. + */ +VAStatus vaCreateSubpicture ( + VADisplay dpy, + VAImageID image, + VASubpictureID *subpicture /* out */ +); + +/* + * Destroy the subpicture before destroying the image it is assocated to + */ +VAStatus vaDestroySubpicture ( + VADisplay dpy, + VASubpictureID subpicture +); + +/* + * Bind an image to the subpicture. This image will now be associated with + * the subpicture instead of the one at creation. + */ +VAStatus vaSetSubpictureImage ( + VADisplay dpy, + VASubpictureID subpicture, + VAImageID image +); + +/* + * If chromakey is enabled, then the area where the source value falls within + * the chromakey [min, max] range is transparent + * The chromakey component format is the following: + * For RGB: [0:7] Red [8:15] Blue [16:23] Green + * For YUV: [0:7] V [8:15] U [16:23] Y + * The chromakey mask can be used to mask out certain components for chromakey + * comparision + */ +VAStatus vaSetSubpictureChromakey ( + VADisplay dpy, + VASubpictureID subpicture, + unsigned int chromakey_min, + unsigned int chromakey_max, + unsigned int chromakey_mask +); + +/* + * Global alpha value is between 0 and 1. A value of 1 means fully opaque and + * a value of 0 means fully transparent. If per-pixel alpha is also specified then + * the overall alpha is per-pixel alpha multiplied by the global alpha + */ +VAStatus vaSetSubpictureGlobalAlpha ( + VADisplay dpy, + VASubpictureID subpicture, + float global_alpha +); + +/* + * vaAssociateSubpicture associates the subpicture with target_surfaces. + * It defines the region mapping between the subpicture and the target + * surfaces through source and destination rectangles (with the same width and height). + * Both will be displayed at the next call to vaPutSurface. Additional + * associations before the call to vaPutSurface simply overrides the association. + */ +VAStatus vaAssociateSubpicture ( + VADisplay dpy, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces, + short src_x, /* upper left offset in subpicture */ + short src_y, + unsigned short src_width, + unsigned short src_height, + short dest_x, /* upper left offset in surface */ + short dest_y, + unsigned short dest_width, + unsigned short dest_height, + /* + * whether to enable chroma-keying or global-alpha + * see VA_SUBPICTURE_XXX values + */ + unsigned int flags +); + +/* + * vaDeassociateSubpicture removes the association of the subpicture with target_surfaces. + */ +VAStatus vaDeassociateSubpicture ( + VADisplay dpy, + VASubpictureID subpicture, + VASurfaceID *target_surfaces, + int num_surfaces +); + +typedef struct _VARectangle +{ + short x; + short y; + unsigned short width; + unsigned short height; +} VARectangle; + +/* + * Display attributes + * Display attributes are used to control things such as contrast, hue, saturation, + * brightness etc. in the rendering process. The application can query what + * attributes are supported by the driver, and then set the appropriate attributes + * before calling vaPutSurface() + */ + +/* Currently defined display attribute types */ +typedef enum +{ + VADisplayAttribBrightness = 0, + VADisplayAttribContrast = 1, + VADisplayAttribHue = 2, + VADisplayAttribSaturation = 3, + /* client can specifiy a background color for the target window */ + VADisplayAttribBackgroundColor = 4, + /* + * this is a gettable only attribute. For some implementations that use the + * hardware overlay, after PutSurface is called, the surface can not be + * re-used until after the subsequent PutSurface call. If this is the case + * then the value for this attribute will be set to 1 so that the client + * will not attempt to re-use the surface right after returning from a call + * to PutSurface. + */ + VADisplayAttribDirectSurface = 5, +} VADisplayAttribType; + +/* flags for VADisplayAttribute */ +#define VA_DISPLAY_ATTRIB_NOT_SUPPORTED 0x0000 +#define VA_DISPLAY_ATTRIB_GETTABLE 0x0001 +#define VA_DISPLAY_ATTRIB_SETTABLE 0x0002 + +typedef struct _VADisplayAttribute +{ + VADisplayAttribType type; + int min_value; + int max_value; + int value; /* used by the set/get attribute functions */ +/* flags can be VA_DISPLAY_ATTRIB_GETTABLE or VA_DISPLAY_ATTRIB_SETTABLE or OR'd together */ + unsigned int flags; +} VADisplayAttribute; + +/* Get maximum number of display attributs supported by the implementation */ +int vaMaxNumDisplayAttributes ( + VADisplay dpy +); + +/* + * Query display attributes + * The caller must provide a "attr_list" array that can hold at + * least vaMaxNumDisplayAttributes() entries. The actual number of attributes + * returned in "attr_list" is returned in "num_attributes". + */ +VAStatus vaQueryDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* out */ + int *num_attributes /* out */ +); + +/* + * Get display attributes + * This function returns the current attribute values in "attr_list". + * Only attributes returned with VA_DISPLAY_ATTRIB_GETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can have their values retrieved. + */ +VAStatus vaGetDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, /* in/out */ + int num_attributes +); + +/* + * Set display attributes + * Only attributes returned with VA_DISPLAY_ATTRIB_SETTABLE set in the "flags" field + * from vaQueryDisplayAttributes() can be set. If the attribute is not settable or + * the value is out of range, the function returns VA_STATUS_ERROR_ATTR_NOT_SUPPORTED + */ +VAStatus vaSetDisplayAttributes ( + VADisplay dpy, + VADisplayAttribute *attr_list, + int num_attributes +); + +#ifdef __cplusplus +} +#endif + +#endif /* _VA_H_ */ diff -Nru libva-0.31.0+latest1/va/va_version.h.in libva-0.31.0+latest2/va/va_version.h.in --- libva-0.31.0+latest1/va/va_version.h.in 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/va_version.h.in 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2009 Splitted-Desktop Systems. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef VA_VERSION_H +#define VA_VERSION_H + +/** + * VA_MAJOR_VERSION: + * + * The major version of the VA library (1, if %VA_VERSION is 1.2.3) + */ +#define VA_MAJOR_VERSION (@LIBVA_MAJOR_VERSION@) + +/** + * VA_MINOR_VERSION: + * + * The minor version of the VA library (2, if %VA_VERSION is 1.2.3) + */ +#define VA_MINOR_VERSION (@LIBVA_MINOR_VERSION@) + +/** + * VA_MICRO_VERSION: + * + * The micro version of the VA library (3, if %VA_VERSION is 1.2.3) + */ +#define VA_MICRO_VERSION (@LIBVA_MICRO_VERSION@) + +/** + * VA_VERSION: + * + * The full version of the VA library, like 1.2.3 + */ +#define VA_VERSION @LIBVA_VERSION@ + +/** + * VA_VERSION_S: + * + * The full version of the VA library, in string form (suited for + * string concatenation) + */ +#define VA_VERSION_S "@LIBVA_VERSION@" + +/** + * VA_VERSION_HEX: + * + * Numerically encoded version of the VA library, like 0x010203 + */ +#define VA_VERSION_HEX ((VA_MAJOR_VERSION << 24) | \ + (VA_MINOR_VERSION << 16) | \ + (VA_MICRO_VERSION << 8)) + +/** + * VA_CHECK_VERSION: + * @major: major version, like 1 in 1.2.3 + * @minor: minor version, like 2 in 1.2.3 + * @micro: micro version, like 3 in 1.2.3 + * + * Evaluates to %TRUE if the version of the VA library is greater + * than @major, @minor and @micro + */ +#define VA_CHECK_VERSION(major,minor,micro) \ + (VA_MAJOR_VERSION > (major) || \ + (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION > (minor)) || \ + (VA_MAJOR_VERSION == (major) && VA_MINOR_VERSION == (minor) && VA_MICRO_VERSION >= (micro))) + +#endif /* VA_VERSION_H */ diff -Nru libva-0.31.0+latest1/va/va_x11.h libva-0.31.0+latest2/va/va_x11.h --- libva-0.31.0+latest1/va/va_x11.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/va_x11.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,47 @@ +#ifndef _VA_X11_H_ +#define _VA_X11_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Returns a suitable VADisplay for VA API + */ +VADisplay vaGetDisplay ( + Display *dpy +); + +/* + * Output rendering + * Following is the rendering interface for X windows, + * to get the decode output surface to a X drawable + * It basically performs a de-interlacing (if needed), + * color space conversion and scaling to the destination + * rectangle + */ +VAStatus vaPutSurface ( + VADisplay dpy, + VASurfaceID surface, + Drawable draw, /* X Drawable */ + short srcx, + short srcy, + unsigned short srcw, + unsigned short srch, + short destx, + short desty, + unsigned short destw, + unsigned short desth, + VARectangle *cliprects, /* client supplied destination clip list */ + unsigned int number_cliprects, /* number of clip rects in the clip list */ + unsigned int flags /* PutSurface flags */ +); + +#ifdef __cplusplus +} +#endif + +#endif /* _VA_X11_H_ */ diff -Nru libva-0.31.0+latest1/va/x11/dri1_util.c libva-0.31.0+latest2/va/x11/dri1_util.c --- libva-0.31.0+latest1/va/x11/dri1_util.c 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/dri1_util.c 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,157 @@ +#include +#include +#include +#include +#include + +#include + +#include "X11/Xlib.h" +#include "va.h" +#include "va_backend.h" + +#include "va_dri.h" +#include "va_dricommon.h" + +struct dri1_drawable +{ + struct dri_drawable base; + union dri_buffer buffer; + int width; + int height; +}; + +static struct dri_drawable * +dri1CreateDrawable(VADriverContextP ctx, XID x_drawable) +{ + struct dri1_drawable *dri1_drawable; + + dri1_drawable = calloc(1, sizeof(*dri1_drawable)); + + if (!dri1_drawable) + return NULL; + + dri1_drawable->base.x_drawable = x_drawable; + + return &dri1_drawable->base; +} + +static void +dri1DestroyDrawable(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + free(dri_drawable); +} + +static void +dri1SwapBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + +} + +static union dri_buffer * +dri1GetRenderingBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri1_drawable *dri1_drawable = (struct dri1_drawable *)dri_drawable; + + return &dri1_drawable->buffer; +} + +static void +dri1Close(VADriverContextP ctx) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + + free_drawable_hashtable(ctx); + VA_DRIDestroyContext(ctx->x11_dpy, ctx->x11_screen, dri_state->hwContextID); + assert(dri_state->pSAREA != MAP_FAILED); + drmUnmap(dri_state->pSAREA, SAREA_MAX); + assert(dri_state->fd >= 0); + drmCloseOnce(dri_state->fd); + VA_DRICloseConnection(ctx->x11_dpy, ctx->x11_screen); +} + +Bool +isDRI1Connected(VADriverContextP ctx, char **driver_name) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + int direct_capable; + int driver_major; + int driver_minor; + int driver_patch; + int newlyopened; + char *BusID; + drm_magic_t magic; + + *driver_name = NULL; + dri_state->fd = -1; + dri_state->pSAREA = MAP_FAILED; + dri_state->driConnectedFlag = VA_NONE; + + if (!VA_DRIQueryDirectRenderingCapable(ctx->x11_dpy, + ctx->x11_screen, + &direct_capable)) + goto err_out0; + + if (!direct_capable) + goto err_out0; + + if (!VA_DRIGetClientDriverName(ctx->x11_dpy, ctx->x11_screen, + &driver_major, &driver_minor, + &driver_patch, driver_name)) + goto err_out0; + + if (!VA_DRIOpenConnection(ctx->x11_dpy, ctx->x11_screen, + &dri_state->hSAREA, &BusID)) + goto err_out0; + + + dri_state->fd = drmOpenOnce(NULL, BusID, &newlyopened); + XFree(BusID); + + if (dri_state->fd < 0) + goto err_out1; + + + if (drmGetMagic(dri_state->fd, &magic)) + goto err_out1; + + if (newlyopened && !VA_DRIAuthConnection(ctx->x11_dpy, ctx->x11_screen, magic)) + goto err_out1; + + if (drmMap(dri_state->fd, dri_state->hSAREA, SAREA_MAX, &dri_state->pSAREA)) + goto err_out1; + + if (!VA_DRICreateContext(ctx->x11_dpy, ctx->x11_screen, + DefaultVisual(ctx->x11_dpy, ctx->x11_screen), + &dri_state->hwContextID, &dri_state->hwContext)) + goto err_out1; + + dri_state->driConnectedFlag = VA_DRI1; + dri_state->createDrawable = dri1CreateDrawable; + dri_state->destroyDrawable = dri1DestroyDrawable; + dri_state->swapBuffer = dri1SwapBuffer; + dri_state->getRenderingBuffer = dri1GetRenderingBuffer; + dri_state->close = dri1Close; + + return True; + +err_out1: + if (dri_state->pSAREA != MAP_FAILED) + drmUnmap(dri_state->pSAREA, SAREA_MAX); + + if (dri_state->fd >= 0) + drmCloseOnce(dri_state->fd); + + VA_DRICloseConnection(ctx->x11_dpy, ctx->x11_screen); + +err_out0: + if (*driver_name) + XFree(*driver_name); + + dri_state->pSAREA = MAP_FAILED; + dri_state->fd = -1; + *driver_name = NULL; + + return False; +} + diff -Nru libva-0.31.0+latest1/va/x11/dri2_util.c libva-0.31.0+latest2/va/x11/dri2_util.c --- libva-0.31.0+latest1/va/x11/dri2_util.c 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/dri2_util.c 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,200 @@ +#include +#include +#include +#include + +#include + +#include +#include +#include "va.h" +#include "va_backend.h" + +#include "va_dri2.h" +#include "va_dri2tokens.h" +#include "va_dricommon.h" + +#define __DRI_BUFFER_FRONT_LEFT 0 +#define __DRI_BUFFER_BACK_LEFT 1 +#define __DRI_BUFFER_FRONT_RIGHT 2 +#define __DRI_BUFFER_BACK_RIGHT 3 +#define __DRI_BUFFER_DEPTH 4 +#define __DRI_BUFFER_STENCIL 5 +#define __DRI_BUFFER_ACCUM 6 +#define __DRI_BUFFER_FAKE_FRONT_LEFT 7 +#define __DRI_BUFFER_FAKE_FRONT_RIGHT 8 + +struct dri2_drawable +{ + struct dri_drawable base; + union dri_buffer buffers[5]; + int width; + int height; + int has_backbuffer; + int back_index; + int front_index; +}; + +static struct dri_drawable * +dri2CreateDrawable(VADriverContextP ctx, XID x_drawable) +{ + struct dri2_drawable *dri2_drawable; + + dri2_drawable = calloc(1, sizeof(*dri2_drawable)); + + if (!dri2_drawable) + return NULL; + + dri2_drawable->base.x_drawable = x_drawable; + dri2_drawable->base.x = 0; + dri2_drawable->base.y = 0; + VA_DRI2CreateDrawable(ctx->x11_dpy, x_drawable); + + return &dri2_drawable->base; +} + +static void +dri2DestroyDrawable(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + VA_DRI2DestroyDrawable(ctx->x11_dpy, dri_drawable->x_drawable); + free(dri_drawable); +} + +static void +dri2SwapBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri2_drawable *dri2_drawable = (struct dri2_drawable *)dri_drawable; + XRectangle xrect; + XserverRegion region; + + if (dri2_drawable->has_backbuffer) { + xrect.x = 0; + xrect.y = 0; + xrect.width = dri2_drawable->width; + xrect.height = dri2_drawable->height; + + region = XFixesCreateRegion(ctx->x11_dpy, &xrect, 1); + VA_DRI2CopyRegion(ctx->x11_dpy, dri_drawable->x_drawable, region, + DRI2BufferFrontLeft, DRI2BufferBackLeft); + XFixesDestroyRegion(ctx->x11_dpy, region); + } +} + +static union dri_buffer * +dri2GetRenderingBuffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri2_drawable *dri2_drawable = (struct dri2_drawable *)dri_drawable; + int i; + int count; + unsigned int attachments[5]; + VA_DRI2Buffer *buffers; + + i = 0; + attachments[i++] = __DRI_BUFFER_BACK_LEFT; + attachments[i++] = __DRI_BUFFER_FRONT_LEFT; + buffers = VA_DRI2GetBuffers(ctx->x11_dpy, dri_drawable->x_drawable, + &dri2_drawable->width, &dri2_drawable->height, + attachments, i, &count); + assert(buffers); + if (buffers == NULL) + return NULL; + + dri2_drawable->has_backbuffer = 0; + + for (i = 0; i < count; i++) { + dri2_drawable->buffers[i].dri2.attachment = buffers[i].attachment; + dri2_drawable->buffers[i].dri2.name = buffers[i].name; + dri2_drawable->buffers[i].dri2.pitch = buffers[i].pitch; + dri2_drawable->buffers[i].dri2.cpp = buffers[i].cpp; + dri2_drawable->buffers[i].dri2.flags = buffers[i].flags; + + if (buffers[i].attachment == __DRI_BUFFER_BACK_LEFT) { + dri2_drawable->has_backbuffer = 1; + dri2_drawable->back_index = i; + } + + if (buffers[i].attachment == __DRI_BUFFER_FRONT_LEFT) + dri2_drawable->front_index = i; + } + + dri_drawable->width = dri2_drawable->width; + dri_drawable->height = dri2_drawable->height; + Xfree(buffers); + + if (dri2_drawable->has_backbuffer) + return &dri2_drawable->buffers[dri2_drawable->back_index]; + + return &dri2_drawable->buffers[dri2_drawable->front_index]; +} + +static void +dri2Close(VADriverContextP ctx) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + + free_drawable_hashtable(ctx); + assert(dri_state->fd >= 0); + close(dri_state->fd); +} + +Bool +isDRI2Connected(VADriverContextP ctx, char **driver_name) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + int major, minor; + int error_base; + int event_base; + char *device_name = NULL; + drm_magic_t magic; + *driver_name = NULL; + dri_state->fd = -1; + dri_state->driConnectedFlag = VA_NONE; + if (!VA_DRI2QueryExtension(ctx->x11_dpy, &event_base, &error_base)) + goto err_out; + + if (!VA_DRI2QueryVersion(ctx->x11_dpy, &major, &minor)) + goto err_out; + + + if (!VA_DRI2Connect(ctx->x11_dpy, RootWindow(ctx->x11_dpy, ctx->x11_screen), + driver_name, &device_name)) + goto err_out; + + dri_state->fd = open(device_name, O_RDWR); + assert(dri_state->fd >= 0); + + if (dri_state->fd < 0) + goto err_out; + + if (drmGetMagic(dri_state->fd, &magic)) + goto err_out; + + if (!VA_DRI2Authenticate(ctx->x11_dpy, RootWindow(ctx->x11_dpy, ctx->x11_screen), + magic)) + goto err_out; + + dri_state->driConnectedFlag = VA_DRI2; + dri_state->createDrawable = dri2CreateDrawable; + dri_state->destroyDrawable = dri2DestroyDrawable; + dri_state->swapBuffer = dri2SwapBuffer; + dri_state->getRenderingBuffer = dri2GetRenderingBuffer; + dri_state->close = dri2Close; + + return True; + +err_out: + if (device_name) + Xfree(device_name); + + if (*driver_name) + Xfree(*driver_name); + + if (dri_state->fd >= 0) + close(dri_state->fd); + + *driver_name = NULL; + dri_state->fd = -1; + + return False; +} + diff -Nru libva-0.31.0+latest1/va/x11/Makefile.am libva-0.31.0+latest2/va/x11/Makefile.am --- libva-0.31.0+latest1/va/x11/Makefile.am 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/Makefile.am 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,30 @@ +# INTEL CONFIDENTIAL +# Copyright 2007 Intel Corporation. All Rights Reserved. +# +# The source code contained or described herein and all documents related to +# the source code ("Material") are owned by Intel Corporation or its suppliers +# or licensors. Title to the Material remains with Intel Corporation or its +# suppliers and licensors. The Material may contain trade secrets and +# proprietary and confidential information of Intel Corporation and its +# suppliers and licensors, and is protected by worldwide copyright and trade +# secret laws and treaty provisions. No part of the Material may be used, +# copied, reproduced, modified, published, uploaded, posted, transmitted, +# distributed, or disclosed in any way without Intel's prior express written +# permission. +# +# No license under any patent, copyright, trade secret or other intellectual +# property right is granted to or conferred upon you by disclosure or delivery +# of the Materials, either expressly, by implication, inducement, estoppel or +# otherwise. Any license under such intellectual property rights must be +# express and approved by Intel in writing. + +AM_CFLAGS = -DLINUX -I$(top_srcdir)/va $(DRM_CFLAGS) + +noinst_LTLIBRARIES = libva_x11.la + +libva_x11includedir = ${includedir}/va +libva_x11include_HEADERS = va_dri.h va_dri2.h va_dricommon.h + +libva_x11_la_SOURCES = va_x11.c va_dri.c va_dri2.c va_dricommon.c dri2_util.c dri1_util.c va_nvctrl.c + +EXTRA_DIST = va_dristr.h va_dri2str.h va_dri2tokens.h va_nvctrl.h diff -Nru libva-0.31.0+latest1/va/x11/va_dri2.c libva-0.31.0+latest2/va/x11/va_dri2.c --- libva-0.31.0+latest1/va/x11/va_dri2.c 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dri2.c 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,307 @@ +/* + * Copyright © 2008 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Soft- + * ware"), to deal in the Software without restriction, including without + * limitation the rights to use, copy, modify, merge, publish, distribute, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, provided that the above copyright + * notice(s) and this permission notice appear in all copies of the Soft- + * ware and that both the above copyright notice(s) and this permission + * notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- + * MANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization of + * the copyright holder. + * + * Authors: + * Kristian Høgsberg (krh@redhat.com) + */ + + +#define NEED_REPLIES +#include +#include +#include +#include "xf86drm.h" +#include "va_dri2.h" +#include "va_dri2str.h" +#include "va_dri2tokens.h" + +#ifndef DRI2DriverDRI +#define DRI2DriverDRI 0 +#endif + +static char va_dri2ExtensionName[] = DRI2_NAME; +static XExtensionInfo _va_dri2_info_data; +static XExtensionInfo *va_dri2Info = &_va_dri2_info_data; +static XEXT_GENERATE_CLOSE_DISPLAY (VA_DRI2CloseDisplay, va_dri2Info) +static /* const */ XExtensionHooks va_dri2ExtensionHooks = { + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + VA_DRI2CloseDisplay, /* close_display */ + NULL, /* wire_to_event */ + NULL, /* event_to_wire */ + NULL, /* error */ + NULL, /* error_string */ +}; + +static XEXT_GENERATE_FIND_DISPLAY (DRI2FindDisplay, va_dri2Info, + va_dri2ExtensionName, + &va_dri2ExtensionHooks, + 0, NULL) + +Bool VA_DRI2QueryExtension(Display *dpy, int *eventBase, int *errorBase) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + + if (XextHasExtension(info)) { + *eventBase = info->codes->first_event; + *errorBase = info->codes->first_error; + return True; + } + + return False; +} + +Bool VA_DRI2QueryVersion(Display *dpy, int *major, int *minor) +{ + XExtDisplayInfo *info = DRI2FindDisplay (dpy); + xDRI2QueryVersionReply rep; + xDRI2QueryVersionReq *req; + + XextCheckExtension (dpy, info, va_dri2ExtensionName, False); + + LockDisplay(dpy); + GetReq(DRI2QueryVersion, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2QueryVersion; + req->majorVersion = DRI2_MAJOR; + req->minorVersion = DRI2_MINOR; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + *major = rep.majorVersion; + *minor = rep.minorVersion; + UnlockDisplay(dpy); + SyncHandle(); + + return True; +} + +Bool VA_DRI2Connect(Display *dpy, XID window, + char **driverName, char **deviceName) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2ConnectReply rep; + xDRI2ConnectReq *req; + + XextCheckExtension (dpy, info, va_dri2ExtensionName, False); + + LockDisplay(dpy); + GetReq(DRI2Connect, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2Connect; + req->window = window; + req->driverType = DRI2DriverDRI; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + + if (rep.driverNameLength == 0 && rep.deviceNameLength == 0) { + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + + *driverName = Xmalloc(rep.driverNameLength + 1); + if (*driverName == NULL) { + _XEatData(dpy, + ((rep.driverNameLength + 3) & ~3) + + ((rep.deviceNameLength + 3) & ~3)); + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + _XReadPad(dpy, *driverName, rep.driverNameLength); + (*driverName)[rep.driverNameLength] = '\0'; + + *deviceName = Xmalloc(rep.deviceNameLength + 1); + if (*deviceName == NULL) { + Xfree(*driverName); + _XEatData(dpy, ((rep.deviceNameLength + 3) & ~3)); + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + _XReadPad(dpy, *deviceName, rep.deviceNameLength); + (*deviceName)[rep.deviceNameLength] = '\0'; + + UnlockDisplay(dpy); + SyncHandle(); + + return True; +} + +Bool VA_DRI2Authenticate(Display *dpy, XID window, drm_magic_t magic) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2AuthenticateReq *req; + xDRI2AuthenticateReply rep; + + XextCheckExtension (dpy, info, va_dri2ExtensionName, False); + + LockDisplay(dpy); + GetReq(DRI2Authenticate, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2Authenticate; + req->window = window; + req->magic = magic; + + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + return False; + } + + UnlockDisplay(dpy); + SyncHandle(); + + return rep.authenticated; +} + +void VA_DRI2CreateDrawable(Display *dpy, XID drawable) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2CreateDrawableReq *req; + + XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); + + LockDisplay(dpy); + GetReq(DRI2CreateDrawable, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2CreateDrawable; + req->drawable = drawable; + UnlockDisplay(dpy); + SyncHandle(); +} + +void VA_DRI2DestroyDrawable(Display *dpy, XID drawable) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2DestroyDrawableReq *req; + + XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); + + XSync(dpy, False); + + LockDisplay(dpy); + GetReq(DRI2DestroyDrawable, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2DestroyDrawable; + req->drawable = drawable; + UnlockDisplay(dpy); + SyncHandle(); +} + +VA_DRI2Buffer *VA_DRI2GetBuffers(Display *dpy, XID drawable, + int *width, int *height, + unsigned int *attachments, int count, + int *outCount) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2GetBuffersReply rep; + xDRI2GetBuffersReq *req; + VA_DRI2Buffer *buffers; + xDRI2Buffer repBuffer; + CARD32 *p; + int i; + + XextCheckExtension (dpy, info, va_dri2ExtensionName, False); + + LockDisplay(dpy); + GetReqExtra(DRI2GetBuffers, count * 4, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2GetBuffers; + req->drawable = drawable; + req->count = count; + p = (CARD32 *) &req[1]; + for (i = 0; i < count; i++) + p[i] = attachments[i]; + + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + return NULL; + } + + *width = rep.width; + *height = rep.height; + *outCount = rep.count; + + buffers = Xmalloc(rep.count * sizeof buffers[0]); + if (buffers == NULL) { + _XEatData(dpy, rep.count * sizeof repBuffer); + UnlockDisplay(dpy); + SyncHandle(); + return NULL; + } + + for (i = 0; i < rep.count; i++) { + _XReadPad(dpy, (char *) &repBuffer, sizeof repBuffer); + buffers[i].attachment = repBuffer.attachment; + buffers[i].name = repBuffer.name; + buffers[i].pitch = repBuffer.pitch; + buffers[i].cpp = repBuffer.cpp; + buffers[i].flags = repBuffer.flags; + } + + UnlockDisplay(dpy); + SyncHandle(); + + return buffers; +} + +void VA_DRI2CopyRegion(Display *dpy, XID drawable, XserverRegion region, + CARD32 dest, CARD32 src) +{ + XExtDisplayInfo *info = DRI2FindDisplay(dpy); + xDRI2CopyRegionReq *req; + xDRI2CopyRegionReply rep; + + XextSimpleCheckExtension (dpy, info, va_dri2ExtensionName); + + LockDisplay(dpy); + GetReq(DRI2CopyRegion, req); + req->reqType = info->codes->major_opcode; + req->dri2ReqType = X_DRI2CopyRegion; + req->drawable = drawable; + req->region = region; + req->dest = dest; + req->src = src; + + _XReply(dpy, (xReply *)&rep, 0, xFalse); + + UnlockDisplay(dpy); + SyncHandle(); +} diff -Nru libva-0.31.0+latest1/va/x11/va_dri2.h libva-0.31.0+latest2/va/x11/va_dri2.h --- libva-0.31.0+latest1/va/x11/va_dri2.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dri2.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,71 @@ +/* + * Copyright © 2007,2008 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Soft- + * ware"), to deal in the Software without restriction, including without + * limitation the rights to use, copy, modify, merge, publish, distribute, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, provided that the above copyright + * notice(s) and this permission notice appear in all copies of the Soft- + * ware and that both the above copyright notice(s) and this permission + * notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- + * MANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization of + * the copyright holder. + * + * Authors: + * Kristian Høgsberg (krh@redhat.com) + */ + +#ifndef _VA_DRI2_H_ +#define _VA_DRI2_H_ + +#include +#include +#include + +typedef struct { + unsigned int attachment; + unsigned int name; + unsigned int pitch; + unsigned int cpp; + unsigned int flags; +} VA_DRI2Buffer; + +extern Bool +VA_DRI2QueryExtension(Display *display, int *eventBase, int *errorBase); +extern Bool +VA_DRI2QueryVersion(Display *display, int *major, int *minor); +extern Bool +VA_DRI2Connect(Display *display, XID window, + char **driverName, char **deviceName); +extern Bool +VA_DRI2Authenticate(Display *display, XID window, drm_magic_t magic); +extern void +VA_DRI2CreateDrawable(Display *display, XID drawable); +extern void +VA_DRI2DestroyDrawable(Display *display, XID handle); +extern VA_DRI2Buffer * +VA_DRI2GetBuffers(Display *dpy, XID drawable, + int *width, int *height, + unsigned int *attachments, int count, + int *outCount); +#if 0 +extern void +VA_DRI2CopyRegion(Display *dpy, XID drawable, XserverRegion region, + CARD32 dest, CARD32 src); +#endif +#endif diff -Nru libva-0.31.0+latest1/va/x11/va_dri2str.h libva-0.31.0+latest2/va/x11/va_dri2str.h --- libva-0.31.0+latest1/va/x11/va_dri2str.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dri2str.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,193 @@ +/* + * Copyright © 2008 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Soft- + * ware"), to deal in the Software without restriction, including without + * limitation the rights to use, copy, modify, merge, publish, distribute, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, provided that the above copyright + * notice(s) and this permission notice appear in all copies of the Soft- + * ware and that both the above copyright notice(s) and this permission + * notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- + * MANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization of + * the copyright holder. + * + * Authors: + * Kristian Høgsberg (krh@redhat.com) + */ + +#ifndef _DRI2_PROTO_H_ +#define _DRI2_PROTO_H_ + +#define DRI2_NAME "DRI2" +#define DRI2_MAJOR 1 +#define DRI2_MINOR 0 + +#define DRI2NumberErrors 0 +#define DRI2NumberEvents 0 +#define DRI2NumberRequests 7 + +#define X_DRI2QueryVersion 0 +#define X_DRI2Connect 1 +#define X_DRI2Authenticate 2 +#define X_DRI2CreateDrawable 3 +#define X_DRI2DestroyDrawable 4 +#define X_DRI2GetBuffers 5 +#define X_DRI2CopyRegion 6 + +typedef struct { + CARD32 attachment B32; + CARD32 name B32; + CARD32 pitch B32; + CARD32 cpp B32; + CARD32 flags B32; +} xDRI2Buffer; + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 majorVersion B32; + CARD32 minorVersion B32; +} xDRI2QueryVersionReq; +#define sz_xDRI2QueryVersionReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 majorVersion B32; + CARD32 minorVersion B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xDRI2QueryVersionReply; +#define sz_xDRI2QueryVersionReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 window B32; + CARD32 driverType B32; +} xDRI2ConnectReq; +#define sz_xDRI2ConnectReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 driverNameLength B32; + CARD32 deviceNameLength B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; +} xDRI2ConnectReply; +#define sz_xDRI2ConnectReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 window B32; + CARD32 magic B32; +} xDRI2AuthenticateReq; +#define sz_xDRI2AuthenticateReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 authenticated B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xDRI2AuthenticateReply; +#define sz_xDRI2AuthenticateReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; +} xDRI2CreateDrawableReq; +#define sz_xDRI2CreateDrawableReq 8 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; +} xDRI2DestroyDrawableReq; +#define sz_xDRI2DestroyDrawableReq 8 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; + CARD32 count B32; +} xDRI2GetBuffersReq; +#define sz_xDRI2GetBuffersReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 width B32; + CARD32 height B32; + CARD32 count B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; +} xDRI2GetBuffersReply; +#define sz_xDRI2GetBuffersReply 32 + +typedef struct { + CARD8 reqType; + CARD8 dri2ReqType; + CARD16 length B16; + CARD32 drawable B32; + CARD32 region B32; + CARD32 dest B32; + CARD32 src B32; +} xDRI2CopyRegionReq; +#define sz_xDRI2CopyRegionReq 20 + +typedef struct { + BYTE type; /* X_Reply */ + BYTE pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; + CARD32 pad7 B32; +} xDRI2CopyRegionReply; +#define sz_xDRI2CopyRegionReply 32 + +#endif diff -Nru libva-0.31.0+latest1/va/x11/va_dri2tokens.h libva-0.31.0+latest2/va/x11/va_dri2tokens.h --- libva-0.31.0+latest1/va/x11/va_dri2tokens.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dri2tokens.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,48 @@ +/* + * Copyright © 2008 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Soft- + * ware"), to deal in the Software without restriction, including without + * limitation the rights to use, copy, modify, merge, publish, distribute, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, provided that the above copyright + * notice(s) and this permission notice appear in all copies of the Soft- + * ware and that both the above copyright notice(s) and this permission + * notice appear in supporting documentation. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE- + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR- + * MANCE OF THIS SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization of + * the copyright holder. + * + * Authors: + * Kristian Høgsberg (krh@redhat.com) + */ + +#ifndef _DRI2_TOKENS_H_ +#define _DRI2_TOKENS_H_ + +#define DRI2BufferFrontLeft 0 +#define DRI2BufferBackLeft 1 +#define DRI2BufferFrontRight 2 +#define DRI2BufferBackRight 3 +#define DRI2BufferDepth 4 +#define DRI2BufferStencil 5 +#define DRI2BufferAccum 6 +#define DRI2BufferFakeFrontLeft 7 +#define DRI2BufferFakeFrontRight 8 + +#define DRI2DriverDRI 0 + +#endif diff -Nru libva-0.31.0+latest1/va/x11/va_dri.c libva-0.31.0+latest2/va/x11/va_dri.c --- libva-0.31.0+latest1/va/x11/va_dri.c 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dri.c 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,624 @@ +/* $XFree86: xc/lib/GL/dri/XF86dri.c,v 1.13 2002/10/30 12:51:25 alanh Exp $ */ +/************************************************************************** + +Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. +Copyright 2000 VA Linux Systems, Inc. +Copyright 2007 Intel Corporation +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +/* + * Authors: + * Kevin E. Martin + * Jens Owen + * Rickard E. (Rik) Faith + * + */ + +/* THIS IS NOT AN X CONSORTIUM STANDARD */ + +#define NEED_REPLIES +#include +#include +#include +#include "va_dristr.h" + +#define PUBLIC + +static XExtensionInfo _va_dri_info_data; +static XExtensionInfo *va_dri_info = &_va_dri_info_data; +static char va_dri_extension_name[] = VA_DRINAME; + +#define VA_DRICheckExtension(dpy,i,val) \ + XextCheckExtension (dpy, i, va_dri_extension_name, val) + +/***************************************************************************** + * * + * private utility routines * + * * + *****************************************************************************/ + +static int close_display(Display *dpy, XExtCodes *extCodes); +static /* const */ XExtensionHooks va_dri_extension_hooks = { + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + close_display, /* close_display */ + NULL, /* wire_to_event */ + NULL, /* event_to_wire */ + NULL, /* error */ + NULL, /* error_string */ +}; + +static XEXT_GENERATE_FIND_DISPLAY (find_display, va_dri_info, + va_dri_extension_name, + &va_dri_extension_hooks, + 0, NULL) + +static XEXT_GENERATE_CLOSE_DISPLAY (close_display, va_dri_info) + + +/***************************************************************************** + * * + * public XFree86-DRI Extension routines * + * * + *****************************************************************************/ + +#if 0 +#include +#define TRACE(msg) fprintf(stderr,"XF86DRI%s\n", msg); +#else +#define TRACE(msg) +#endif + + +PUBLIC Bool VA_DRIQueryExtension (dpy, event_basep, error_basep) + Display *dpy; + int *event_basep, *error_basep; +{ + XExtDisplayInfo *info = find_display (dpy); + + TRACE("QueryExtension..."); + if (XextHasExtension(info)) { + *event_basep = info->codes->first_event; + *error_basep = info->codes->first_error; + TRACE("QueryExtension... return True"); + return True; + } else { + TRACE("QueryExtension... return False"); + return False; + } +} + +PUBLIC Bool VA_DRIQueryVersion(dpy, majorVersion, minorVersion, patchVersion) + Display* dpy; + int* majorVersion; + int* minorVersion; + int* patchVersion; +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIQueryVersionReply rep; + xVA_DRIQueryVersionReq *req; + + TRACE("QueryVersion..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIQueryVersion, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIQueryVersion; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("QueryVersion... return False"); + return False; + } + *majorVersion = rep.majorVersion; + *minorVersion = rep.minorVersion; + *patchVersion = rep.patchVersion; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("QueryVersion... return True"); + return True; +} + +PUBLIC Bool VA_DRIQueryDirectRenderingCapable(dpy, screen, isCapable) + Display* dpy; + int screen; + Bool* isCapable; +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIQueryDirectRenderingCapableReply rep; + xVA_DRIQueryDirectRenderingCapableReq *req; + + TRACE("QueryDirectRenderingCapable..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIQueryDirectRenderingCapable, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIQueryDirectRenderingCapable; + req->screen = screen; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("QueryDirectRenderingCapable... return False"); + return False; + } + *isCapable = rep.isCapable; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("QueryDirectRenderingCapable... return True"); + return True; +} + +PUBLIC Bool VA_DRIOpenConnection(dpy, screen, hSAREA, busIdString) + Display* dpy; + int screen; + drm_handle_t * hSAREA; + char **busIdString; +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIOpenConnectionReply rep; + xVA_DRIOpenConnectionReq *req; + + TRACE("OpenConnection..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIOpenConnection, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIOpenConnection; + req->screen = screen; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("OpenConnection... return False"); + return False; + } + + *hSAREA = rep.hSAREALow; + if (sizeof(drm_handle_t) == 8) { + int shift = 32; /* var to prevent warning on next line */ + *hSAREA |= ((drm_handle_t) rep.hSAREAHigh) << shift; + } + + if (rep.length) { + if (!(*busIdString = (char *)Xcalloc(rep.busIdStringLength + 1, 1))) { + _XEatData(dpy, ((rep.busIdStringLength+3) & ~3)); + UnlockDisplay(dpy); + SyncHandle(); + TRACE("OpenConnection... return False"); + return False; + } + _XReadPad(dpy, *busIdString, rep.busIdStringLength); + } else { + *busIdString = NULL; + } + UnlockDisplay(dpy); + SyncHandle(); + TRACE("OpenConnection... return True"); + return True; +} + +PUBLIC Bool VA_DRIAuthConnection(dpy, screen, magic) + Display* dpy; + int screen; + drm_magic_t magic; +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIAuthConnectionReq *req; + xVA_DRIAuthConnectionReply rep; + + TRACE("AuthConnection..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIAuthConnection, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIAuthConnection; + req->screen = screen; + req->magic = magic; + rep.authenticated = 0; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse) || !rep.authenticated) { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("AuthConnection... return False"); + return False; + } + UnlockDisplay(dpy); + SyncHandle(); + TRACE("AuthConnection... return True"); + return True; +} + +PUBLIC Bool VA_DRICloseConnection(dpy, screen) + Display* dpy; + int screen; +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRICloseConnectionReq *req; + + TRACE("CloseConnection..."); + + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRICloseConnection, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRICloseConnection; + req->screen = screen; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("CloseConnection... return True"); + return True; +} + +PUBLIC Bool VA_DRIGetClientDriverName(dpy, screen, ddxDriverMajorVersion, + ddxDriverMinorVersion, ddxDriverPatchVersion, clientDriverName) + Display* dpy; + int screen; + int* ddxDriverMajorVersion; + int* ddxDriverMinorVersion; + int* ddxDriverPatchVersion; + char** clientDriverName; +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIGetClientDriverNameReply rep; + xVA_DRIGetClientDriverNameReq *req; + + TRACE("GetClientDriverName..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIGetClientDriverName, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIGetClientDriverName; + req->screen = screen; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetClientDriverName... return False"); + return False; + } + + *ddxDriverMajorVersion = rep.ddxDriverMajorVersion; + *ddxDriverMinorVersion = rep.ddxDriverMinorVersion; + *ddxDriverPatchVersion = rep.ddxDriverPatchVersion; + + if (rep.length) { + if (!(*clientDriverName = (char *)Xcalloc(rep.clientDriverNameLength + 1, 1))) { + _XEatData(dpy, ((rep.clientDriverNameLength+3) & ~3)); + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetClientDriverName... return False"); + return False; + } + _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength); + } else { + *clientDriverName = NULL; + } + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetClientDriverName... return True"); + return True; +} + +PUBLIC Bool VA_DRICreateContextWithConfig(dpy, screen, configID, context, + hHWContext) + Display* dpy; + int screen; + int configID; + XID* context; + drm_context_t * hHWContext; +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRICreateContextReply rep; + xVA_DRICreateContextReq *req; + + TRACE("CreateContext..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRICreateContext, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRICreateContext; + req->visual = configID; + req->screen = screen; + *context = XAllocID(dpy); + req->context = *context; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("CreateContext... return False"); + return False; + } + *hHWContext = rep.hHWContext; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("CreateContext... return True"); + return True; +} + +PUBLIC Bool VA_DRICreateContext(dpy, screen, visual, context, hHWContext) + Display* dpy; + int screen; + Visual* visual; + XID* context; + drm_context_t * hHWContext; +{ + return VA_DRICreateContextWithConfig( dpy, screen, visual->visualid, + context, hHWContext ); +} + +PUBLIC Bool VA_DRIDestroyContext( __DRInativeDisplay * ndpy, int screen, + __DRIid context ) +{ + Display * const dpy = (Display *) ndpy; + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIDestroyContextReq *req; + + TRACE("DestroyContext..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIDestroyContext, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIDestroyContext; + req->screen = screen; + req->context = context; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("DestroyContext... return True"); + return True; +} + +PUBLIC Bool VA_DRICreateDrawable( __DRInativeDisplay * ndpy, int screen, + __DRIid drawable, drm_drawable_t * hHWDrawable ) +{ + Display * const dpy = (Display *) ndpy; + XExtDisplayInfo *info = find_display (dpy); + xVA_DRICreateDrawableReply rep; + xVA_DRICreateDrawableReq *req; + + TRACE("CreateDrawable..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRICreateDrawable, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRICreateDrawable; + req->screen = screen; + req->drawable = drawable; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("CreateDrawable... return False"); + return False; + } + *hHWDrawable = rep.hHWDrawable; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("CreateDrawable... return True"); + return True; +} + +PUBLIC Bool VA_DRIDestroyDrawable( __DRInativeDisplay * ndpy, int screen, + __DRIid drawable ) +{ + Display * const dpy = (Display *) ndpy; + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIDestroyDrawableReq *req; + + TRACE("DestroyDrawable..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIDestroyDrawable, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIDestroyDrawable; + req->screen = screen; + req->drawable = drawable; + UnlockDisplay(dpy); + SyncHandle(); + TRACE("DestroyDrawable... return True"); + return True; +} + +PUBLIC Bool VA_DRIGetDrawableInfo(Display* dpy, int screen, Drawable drawable, + unsigned int* index, unsigned int* stamp, + int* X, int* Y, int* W, int* H, + int* numClipRects, drm_clip_rect_t ** pClipRects, + int* backX, int* backY, + int* numBackClipRects, drm_clip_rect_t ** pBackClipRects ) +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIGetDrawableInfoReply rep; + xVA_DRIGetDrawableInfoReq *req; + int total_rects; + + TRACE("GetDrawableInfo..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIGetDrawableInfo, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIGetDrawableInfo; + req->screen = screen; + req->drawable = drawable; + + if (!_XReply(dpy, (xReply *)&rep, 1, xFalse)) + { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetDrawableInfo... return False"); + return False; + } + *index = rep.drawableTableIndex; + *stamp = rep.drawableTableStamp; + *X = (int)rep.drawableX; + *Y = (int)rep.drawableY; + *W = (int)rep.drawableWidth; + *H = (int)rep.drawableHeight; + *numClipRects = rep.numClipRects; + total_rects = *numClipRects; + + *backX = rep.backX; + *backY = rep.backY; + *numBackClipRects = rep.numBackClipRects; + total_rects += *numBackClipRects; + +#if 0 + /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks + * backwards compatibility (Because of the >> 2 shift) but the fix + * enables multi-threaded apps to work. + */ + if (rep.length != ((((SIZEOF(xVA_DRIGetDrawableInfoReply) - + SIZEOF(xGenericReply) + + total_rects * sizeof(drm_clip_rect_t)) + 3) & ~3) >> 2)) { + _XEatData(dpy, rep.length); + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetDrawableInfo... return False"); + return False; + } +#endif + + if (*numClipRects) { + int len = sizeof(drm_clip_rect_t) * (*numClipRects); + + *pClipRects = (drm_clip_rect_t *)Xcalloc(len, 1); + if (*pClipRects) + _XRead(dpy, (char*)*pClipRects, len); + } else { + *pClipRects = NULL; + } + + if (*numBackClipRects) { + int len = sizeof(drm_clip_rect_t) * (*numBackClipRects); + + *pBackClipRects = (drm_clip_rect_t *)Xcalloc(len, 1); + if (*pBackClipRects) + _XRead(dpy, (char*)*pBackClipRects, len); + } else { + *pBackClipRects = NULL; + } + + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetDrawableInfo... return True"); + return True; +} + +PUBLIC Bool VA_DRIGetDeviceInfo(dpy, screen, hFrameBuffer, + fbOrigin, fbSize, fbStride, devPrivateSize, pDevPrivate) + Display* dpy; + int screen; + drm_handle_t * hFrameBuffer; + int* fbOrigin; + int* fbSize; + int* fbStride; + int* devPrivateSize; + void** pDevPrivate; +{ + XExtDisplayInfo *info = find_display (dpy); + xVA_DRIGetDeviceInfoReply rep; + xVA_DRIGetDeviceInfoReq *req; + + TRACE("GetDeviceInfo..."); + VA_DRICheckExtension (dpy, info, False); + + LockDisplay(dpy); + GetReq(VA_DRIGetDeviceInfo, req); + req->reqType = info->codes->major_opcode; + req->driReqType = X_VA_DRIGetDeviceInfo; + req->screen = screen; + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) { + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetDeviceInfo... return False"); + return False; + } + + *hFrameBuffer = rep.hFrameBufferLow; + if (sizeof(drm_handle_t) == 8) { + int shift = 32; /* var to prevent warning on next line */ + *hFrameBuffer |= ((drm_handle_t) rep.hFrameBufferHigh) << shift; + } + + *fbOrigin = rep.framebufferOrigin; + *fbSize = rep.framebufferSize; + *fbStride = rep.framebufferStride; + *devPrivateSize = rep.devPrivateSize; + + if (rep.length) { + if (!(*pDevPrivate = (void *)Xcalloc(rep.devPrivateSize, 1))) { + _XEatData(dpy, ((rep.devPrivateSize+3) & ~3)); + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetDeviceInfo... return False"); + return False; + } + _XRead(dpy, (char*)*pDevPrivate, rep.devPrivateSize); + } else { + *pDevPrivate = NULL; + } + + UnlockDisplay(dpy); + SyncHandle(); + TRACE("GetDeviceInfo... return True"); + return True; +} + +PUBLIC Bool VA_DRIOpenFullScreen(dpy, screen, drawable) + Display* dpy; + int screen; + Drawable drawable; +{ + /* This function and the underlying X protocol are deprecated. + */ + (void) dpy; + (void) screen; + (void) drawable; + return False; +} + +PUBLIC Bool VA_DRICloseFullScreen(dpy, screen, drawable) + Display* dpy; + int screen; + Drawable drawable; +{ + /* This function and the underlying X protocol are deprecated. + */ + (void) dpy; + (void) screen; + (void) drawable; + return True; +} + +#undef TRACE + diff -Nru libva-0.31.0+latest1/va/x11/va_dricommon.c libva-0.31.0+latest2/va/x11/va_dricommon.c --- libva-0.31.0+latest1/va/x11/va_dricommon.c 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dricommon.c 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,62 @@ +#include "va_dricommon.h" + +static struct dri_drawable * +do_drawable_hash(VADriverContextP ctx, XID drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + int index = drawable % DRAWABLE_HASH_SZ; + struct dri_drawable *dri_drawable = dri_state->drawable_hash[index]; + + while (dri_drawable) { + if (dri_drawable->x_drawable == drawable) + return dri_drawable; + dri_drawable = dri_drawable->next; + } + + dri_drawable = dri_state->createDrawable(ctx, drawable); + dri_drawable->x_drawable = drawable; + dri_drawable->next = dri_state->drawable_hash[index]; + dri_state->drawable_hash[index] = dri_drawable; + + return dri_drawable; +} + +void +free_drawable_hashtable(VADriverContextP ctx) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + int i; + struct dri_drawable *dri_drawable, *prev; + + for (i = 0; i < DRAWABLE_HASH_SZ; i++) { + dri_drawable = dri_state->drawable_hash[i]; + + while (dri_drawable) { + prev = dri_drawable; + dri_drawable = prev->next; + dri_state->destroyDrawable(ctx, prev); + } + } +} + +struct dri_drawable * +dri_get_drawable(VADriverContextP ctx, XID drawable) +{ + return do_drawable_hash(ctx, drawable); +} + +void +dri_swap_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + + dri_state->swapBuffer(ctx, dri_drawable); +} + +union dri_buffer * +dri_get_rendering_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable) +{ + struct dri_state *dri_state = (struct dri_state *)ctx->dri_state; + + return dri_state->getRenderingBuffer(ctx, dri_drawable); +} diff -Nru libva-0.31.0+latest1/va/x11/va_dricommon.h libva-0.31.0+latest2/va/x11/va_dricommon.h --- libva-0.31.0+latest1/va/x11/va_dricommon.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dricommon.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,68 @@ +#ifndef _VA_DRICOMMON_H_ +#define _VA_DRICOMMON_H_ + +#include + +#include +#include +#include + +#include + +enum +{ + VA_NONE = 0, + VA_DRI1 = 1, + VA_DRI2 = 2 +}; + +union dri_buffer +{ + struct { + unsigned int attachment; + unsigned int name; + unsigned int pitch; + unsigned int cpp; + unsigned int flags; + } dri2; + + struct { + } dri1; +}; + +struct dri_drawable +{ + XID x_drawable; + int x; + int y; + unsigned int width; + unsigned int height; + struct dri_drawable *next; +}; + +#define DRAWABLE_HASH_SZ 32 +struct dri_state +{ + int fd; + int driConnectedFlag; /* 0: disconnected, 1: DRI, 2: DRI2 */ + drm_handle_t hSAREA; + drm_context_t hwContext; + drmAddress pSAREA; + XID hwContextID; + struct dri_drawable *drawable_hash[DRAWABLE_HASH_SZ]; + + struct dri_drawable *(*createDrawable)(VADriverContextP ctx, XID x_drawable); + void (*destroyDrawable)(VADriverContextP ctx, struct dri_drawable *dri_drawable); + void (*swapBuffer)(VADriverContextP ctx, struct dri_drawable *dri_drawable); + union dri_buffer *(*getRenderingBuffer)(VADriverContextP ctx, struct dri_drawable *dri_drawable); + void (*close)(VADriverContextP ctx); +}; + +Bool isDRI2Connected(VADriverContextP ctx, char **driver_name); +Bool isDRI1Connected(VADriverContextP ctx, char **driver_name); +void free_drawable_hashtable(VADriverContextP ctx); +struct dri_drawable *dri_get_drawable(VADriverContextP ctx, XID drawable); +void dri_swap_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable); +union dri_buffer *dri_get_rendering_buffer(VADriverContextP ctx, struct dri_drawable *dri_drawable); + +#endif /* _VA_DRICOMMON_H_ */ diff -Nru libva-0.31.0+latest1/va/x11/va_dri.h libva-0.31.0+latest2/va/x11/va_dri.h --- libva-0.31.0+latest1/va/x11/va_dri.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dri.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,120 @@ +/* $XFree86: xc/lib/GL/dri/xf86dri.h,v 1.8 2002/10/30 12:51:25 alanh Exp $ */ +/************************************************************************** + +Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. +Copyright 2000 VA Linux Systems, Inc. +Copyright 2007 Intel Corporation +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +/** + * \file xf86dri.h + * Protocol numbers and function prototypes for DRI X protocol. + * + * \author Kevin E. Martin + * \author Jens Owen + * \author Rickard E. (Rik) Faith + */ + +#ifndef _VA_DRI_H_ +#define _VA_DRI_H_ + +#include +#include + +#define X_VA_DRIQueryVersion 0 +#define X_VA_DRIQueryDirectRenderingCapable 1 +#define X_VA_DRIOpenConnection 2 +#define X_VA_DRICloseConnection 3 +#define X_VA_DRIGetClientDriverName 4 +#define X_VA_DRICreateContext 5 +#define X_VA_DRIDestroyContext 6 +#define X_VA_DRICreateDrawable 7 +#define X_VA_DRIDestroyDrawable 8 +#define X_VA_DRIGetDrawableInfo 9 +#define X_VA_DRIGetDeviceInfo 10 +#define X_VA_DRIAuthConnection 11 +#define X_VA_DRIOpenFullScreen 12 /* Deprecated */ +#define X_VA_DRICloseFullScreen 13 /* Deprecated */ + +#define VA_DRINumberEvents 0 + +#define VA_DRIClientNotLocal 0 +#define VA_DRIOperationNotSupported 1 +#define VA_DRINumberErrors (VA_DRIOperationNotSupported + 1) + +typedef unsigned long __DRIid; +typedef void __DRInativeDisplay; + +_XFUNCPROTOBEGIN + +Bool VA_DRIQueryExtension( Display *dpy, int *event_base, int *error_base ); + +Bool VA_DRIQueryVersion( Display *dpy, int *majorVersion, int *minorVersion, + int *patchVersion ); + +Bool VA_DRIQueryDirectRenderingCapable( Display *dpy, int screen, + Bool *isCapable ); + +Bool VA_DRIOpenConnection( Display *dpy, int screen, drm_handle_t *hSAREA, + char **busIDString ); + +Bool VA_DRIAuthConnection( Display *dpy, int screen, drm_magic_t magic ); + +Bool VA_DRICloseConnection( Display *dpy, int screen ); + +Bool VA_DRIGetClientDriverName( Display *dpy, int screen, + int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, + int *ddxDriverPatchVersion, char **clientDriverName ); + +Bool VA_DRICreateContext( Display *dpy, int screen, Visual *visual, + XID *ptr_to_returned_context_id, drm_context_t *hHWContext ); + +Bool VA_DRICreateContextWithConfig( Display *dpy, int screen, int configID, + XID *ptr_to_returned_context_id, drm_context_t *hHWContext ); + +Bool VA_DRIDestroyContext( __DRInativeDisplay *dpy, int screen, + __DRIid context_id ); + +Bool VA_DRICreateDrawable( __DRInativeDisplay *dpy, int screen, + __DRIid drawable, drm_drawable_t *hHWDrawable ); + +Bool VA_DRIDestroyDrawable( __DRInativeDisplay *dpy, int screen, + __DRIid drawable); + +Bool VA_DRIGetDrawableInfo( Display *dpy, int screen, Drawable drawable, + unsigned int *index, unsigned int *stamp, + int *X, int *Y, int *W, int *H, + int *numClipRects, drm_clip_rect_t ** pClipRects, + int *backX, int *backY, + int *numBackClipRects, drm_clip_rect_t **pBackClipRects ); + +Bool VA_DRIGetDeviceInfo( Display *dpy, int screen, + drm_handle_t *hFrameBuffer, int *fbOrigin, int *fbSize, + int *fbStride, int *devPrivateSize, void **pDevPrivate ); + +_XFUNCPROTOEND + +#endif /* _VA_DRI_H_ */ + diff -Nru libva-0.31.0+latest1/va/x11/va_dristr.h libva-0.31.0+latest2/va/x11/va_dristr.h --- libva-0.31.0+latest1/va/x11/va_dristr.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_dristr.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,344 @@ +/* $XFree86: xc/lib/GL/dri/xf86dristr.h,v 1.10 2002/10/30 12:51:25 alanh Exp $ */ +/************************************************************************** + +Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. +Copyright 2000 VA Linux Systems, Inc. +Copyright 2007 Intel Corporation +All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sub license, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice (including the +next paragraph) shall be included in all copies or substantial portions +of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. +IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +**************************************************************************/ + +/* + * Authors: + * Kevin E. Martin + * Jens Owen + * Rickard E. (Rik) Fiath + * + */ + +#ifndef _VA_DRISTR_H_ +#define _VA_DRISTR_H_ + +#include "va_dri.h" + +#define VA_DRINAME "XFree86-DRI" + +/* The DRI version number. This was originally set to be the same of the + * XFree86 version number. However, this version is really indepedent of + * the XFree86 version. + * + * Version History: + * 4.0.0: Original + * 4.0.1: Patch to bump clipstamp when windows are destroyed, 28 May 02 + * 4.1.0: Add transition from single to multi in DRMInfo rec, 24 Jun 02 + */ +#define VA_DRI_MAJOR_VERSION 4 +#define VA_DRI_MINOR_VERSION 1 +#define VA_DRI_PATCH_VERSION 0 + +typedef struct _VA_DRIQueryVersion { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRIQueryVersion */ + CARD16 length B16; +} xVA_DRIQueryVersionReq; +#define sz_xVA_DRIQueryVersionReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 majorVersion B16; /* major version of DRI protocol */ + CARD16 minorVersion B16; /* minor version of DRI protocol */ + CARD32 patchVersion B32; /* patch version of DRI protocol */ + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xVA_DRIQueryVersionReply; +#define sz_xVA_DRIQueryVersionReply 32 + +typedef struct _VA_DRIQueryDirectRenderingCapable { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* X_DRIQueryDirectRenderingCapable */ + CARD16 length B16; + CARD32 screen B32; +} xVA_DRIQueryDirectRenderingCapableReq; +#define sz_xVA_DRIQueryDirectRenderingCapableReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + BOOL isCapable; + BOOL pad2; + BOOL pad3; + BOOL pad4; + CARD32 pad5 B32; + CARD32 pad6 B32; + CARD32 pad7 B32; + CARD32 pad8 B32; + CARD32 pad9 B32; +} xVA_DRIQueryDirectRenderingCapableReply; +#define sz_xVA_DRIQueryDirectRenderingCapableReply 32 + +typedef struct _VA_DRIOpenConnection { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRIOpenConnection */ + CARD16 length B16; + CARD32 screen B32; +} xVA_DRIOpenConnectionReq; +#define sz_xVA_DRIOpenConnectionReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 hSAREALow B32; + CARD32 hSAREAHigh B32; + CARD32 busIdStringLength B32; + CARD32 pad6 B32; + CARD32 pad7 B32; + CARD32 pad8 B32; +} xVA_DRIOpenConnectionReply; +#define sz_xVA_DRIOpenConnectionReply 32 + +typedef struct _VA_DRIAuthConnection { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRICloseConnection */ + CARD16 length B16; + CARD32 screen B32; + CARD32 magic B32; +} xVA_DRIAuthConnectionReq; +#define sz_xVA_DRIAuthConnectionReq 12 + +typedef struct { + BYTE type; + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 authenticated B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xVA_DRIAuthConnectionReply; +#define zx_xVA_DRIAuthConnectionReply 32 + +typedef struct _VA_DRICloseConnection { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRICloseConnection */ + CARD16 length B16; + CARD32 screen B32; +} xVA_DRICloseConnectionReq; +#define sz_xVA_DRICloseConnectionReq 8 + +typedef struct _VA_DRIGetClientDriverName { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRIGetClientDriverName */ + CARD16 length B16; + CARD32 screen B32; +} xVA_DRIGetClientDriverNameReq; +#define sz_xVA_DRIGetClientDriverNameReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 ddxDriverMajorVersion B32; + CARD32 ddxDriverMinorVersion B32; + CARD32 ddxDriverPatchVersion B32; + CARD32 clientDriverNameLength B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xVA_DRIGetClientDriverNameReply; +#define sz_xVA_DRIGetClientDriverNameReply 32 + +typedef struct _VA_DRICreateContext { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRICreateContext */ + CARD16 length B16; + CARD32 screen B32; + CARD32 visual B32; + CARD32 context B32; +} xVA_DRICreateContextReq; +#define sz_xVA_DRICreateContextReq 16 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 hHWContext B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xVA_DRICreateContextReply; +#define sz_xVA_DRICreateContextReply 32 + +typedef struct _VA_DRIDestroyContext { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRIDestroyContext */ + CARD16 length B16; + CARD32 screen B32; + CARD32 context B32; +} xVA_DRIDestroyContextReq; +#define sz_xVA_DRIDestroyContextReq 12 + +typedef struct _VA_DRICreateDrawable { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRICreateDrawable */ + CARD16 length B16; + CARD32 screen B32; + CARD32 drawable B32; +} xVA_DRICreateDrawableReq; +#define sz_xVA_DRICreateDrawableReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 hHWDrawable B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xVA_DRICreateDrawableReply; +#define sz_xVA_DRICreateDrawableReply 32 + +typedef struct _VA_DRIDestroyDrawable { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRIDestroyDrawable */ + CARD16 length B16; + CARD32 screen B32; + CARD32 drawable B32; +} xVA_DRIDestroyDrawableReq; +#define sz_xVA_DRIDestroyDrawableReq 12 + +typedef struct _VA_DRIGetDrawableInfo { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRIGetDrawableInfo */ + CARD16 length B16; + CARD32 screen B32; + CARD32 drawable B32; +} xVA_DRIGetDrawableInfoReq; +#define sz_xVA_DRIGetDrawableInfoReq 12 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 drawableTableIndex B32; + CARD32 drawableTableStamp B32; + INT16 drawableX B16; + INT16 drawableY B16; + INT16 drawableWidth B16; + INT16 drawableHeight B16; + CARD32 numClipRects B32; + INT16 backX B16; + INT16 backY B16; + CARD32 numBackClipRects B32; +} xVA_DRIGetDrawableInfoReply; + +#define sz_xVA_DRIGetDrawableInfoReply 36 + + +typedef struct _VA_DRIGetDeviceInfo { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRIGetDeviceInfo */ + CARD16 length B16; + CARD32 screen B32; +} xVA_DRIGetDeviceInfoReq; +#define sz_xVA_DRIGetDeviceInfoReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 hFrameBufferLow B32; + CARD32 hFrameBufferHigh B32; + CARD32 framebufferOrigin B32; + CARD32 framebufferSize B32; + CARD32 framebufferStride B32; + CARD32 devPrivateSize B32; +} xVA_DRIGetDeviceInfoReply; +#define sz_xVA_DRIGetDeviceInfoReply 32 + +typedef struct _VA_DRIOpenFullScreen { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRIOpenFullScreen */ + CARD16 length B16; + CARD32 screen B32; + CARD32 drawable B32; +} xVA_DRIOpenFullScreenReq; +#define sz_xVA_DRIOpenFullScreenReq 12 + +typedef struct { + BYTE type; + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 isFullScreen B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; +} xVA_DRIOpenFullScreenReply; +#define sz_xVA_DRIOpenFullScreenReply 32 + +typedef struct _VA_DRICloseFullScreen { + CARD8 reqType; /* always DRIReqCode */ + CARD8 driReqType; /* always X_DRICloseFullScreen */ + CARD16 length B16; + CARD32 screen B32; + CARD32 drawable B32; +} xVA_DRICloseFullScreenReq; +#define sz_xVA_DRICloseFullScreenReq 12 + +typedef struct { + BYTE type; + BOOL pad1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 pad2 B32; + CARD32 pad3 B32; + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; + CARD32 pad7 B32; +} xVA_DRICloseFullScreenReply; +#define sz_xVA_DRICloseFullScreenReply 32 + + +#endif /* _VA_DRISTR_H_ */ diff -Nru libva-0.31.0+latest1/va/x11/va_nvctrl.c libva-0.31.0+latest2/va/x11/va_nvctrl.c --- libva-0.31.0+latest1/va/x11/va_nvctrl.c 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_nvctrl.c 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,399 @@ +/* + * Copyright (c) 2008 NVIDIA, Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include + +#define NEED_REPLIES +#include +#include +#include +#include +#include +#include "va_nvctrl.h" + +#define NV_CONTROL_ERRORS 0 +#define NV_CONTROL_EVENTS 5 +#define NV_CONTROL_NAME "NV-CONTROL" + +#define NV_CTRL_TARGET_TYPE_X_SCREEN 0 +#define NV_CTRL_TARGET_TYPE_GPU 1 +#define NV_CTRL_TARGET_TYPE_FRAMELOCK 2 +#define NV_CTRL_TARGET_TYPE_VCSC 3 /* Visual Computing System */ + +#define NV_CTRL_STRING_NVIDIA_DRIVER_VERSION 3 /* R--G */ + +#define X_nvCtrlQueryExtension 0 +#define X_nvCtrlIsNv 1 +#define X_nvCtrlQueryStringAttribute 4 + +typedef struct { + CARD8 reqType; + CARD8 nvReqType; + CARD16 length B16; +} xnvCtrlQueryExtensionReq; +#define sz_xnvCtrlQueryExtensionReq 4 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 padb1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD16 major B16; + CARD16 minor B16; + CARD32 padl4 B32; + CARD32 padl5 B32; + CARD32 padl6 B32; + CARD32 padl7 B32; + CARD32 padl8 B32; +} xnvCtrlQueryExtensionReply; +#define sz_xnvCtrlQueryExtensionReply 32 + +typedef struct { + CARD8 reqType; + CARD8 nvReqType; + CARD16 length B16; + CARD32 screen B32; +} xnvCtrlIsNvReq; +#define sz_xnvCtrlIsNvReq 8 + +typedef struct { + BYTE type; /* X_Reply */ + CARD8 padb1; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 isnv B32; + CARD32 padl4 B32; + CARD32 padl5 B32; + CARD32 padl6 B32; + CARD32 padl7 B32; + CARD32 padl8 B32; +} xnvCtrlIsNvReply; +#define sz_xnvCtrlIsNvReply 32 + +typedef struct { + CARD8 reqType; + CARD8 nvReqType; + CARD16 length B16; + CARD16 target_id B16; /* X screen number or GPU number */ + CARD16 target_type B16; /* X screen or GPU */ + CARD32 display_mask B32; + CARD32 attribute B32; +} xnvCtrlQueryStringAttributeReq; +#define sz_xnvCtrlQueryStringAttributeReq 16 + +typedef struct { + BYTE type; + BYTE pad0; + CARD16 sequenceNumber B16; + CARD32 length B32; + CARD32 flags B32; + CARD32 n B32; /* Length of string */ + CARD32 pad4 B32; + CARD32 pad5 B32; + CARD32 pad6 B32; + CARD32 pad7 B32; +} xnvCtrlQueryStringAttributeReply; +#define sz_xnvCtrlQueryStringAttributeReply 32 + +#define NVCTRL_EXT_NEED_CHECK (XPointer)(~0) +#define NVCTRL_EXT_NEED_NOTHING (XPointer)(0) +#define NVCTRL_EXT_NEED_TARGET_SWAP (XPointer)(1) + +static XExtensionInfo _nvctrl_ext_info_data; +static XExtensionInfo *nvctrl_ext_info = &_nvctrl_ext_info_data; +static /* const */ char *nvctrl_extension_name = NV_CONTROL_NAME; + +#define XNVCTRLCheckExtension(dpy,i,val) \ + XextCheckExtension (dpy, i, nvctrl_extension_name, val) +#define XNVCTRLSimpleCheckExtension(dpy,i) \ + XextSimpleCheckExtension (dpy, i, nvctrl_extension_name) + +static int close_display(); +static /* const */ XExtensionHooks nvctrl_extension_hooks = { + NULL, /* create_gc */ + NULL, /* copy_gc */ + NULL, /* flush_gc */ + NULL, /* free_gc */ + NULL, /* create_font */ + NULL, /* free_font */ + close_display, /* close_display */ + NULL, /* wire_to_event */ + NULL, /* event_to_wire */ + NULL, /* error */ + NULL, /* error_string */ +}; + +static XEXT_GENERATE_FIND_DISPLAY (find_display, nvctrl_ext_info, + nvctrl_extension_name, + &nvctrl_extension_hooks, + NV_CONTROL_EVENTS, NVCTRL_EXT_NEED_CHECK) + +static XEXT_GENERATE_CLOSE_DISPLAY (close_display, nvctrl_ext_info) + +static Bool XNVCTRLQueryVersion (Display *dpy, int *major, int *minor); + +/* + * NV-CONTROL versions 1.8 and 1.9 pack the target_type and target_id + * fields in reversed order. In order to talk to one of these servers, + * we need to swap these fields. + */ +static void XNVCTRLCheckTargetData(Display *dpy, XExtDisplayInfo *info, + int *target_type, int *target_id) +{ + /* Find out what the server's NV-CONTROL version is and + * setup for swapping if we need to. + */ + if (info->data == NVCTRL_EXT_NEED_CHECK) { + int major, minor; + + if (XNVCTRLQueryVersion(dpy, &major, &minor)) { + if (major == 1 && + (minor == 8 || minor == 9)) { + info->data = NVCTRL_EXT_NEED_TARGET_SWAP; + } else { + info->data = NVCTRL_EXT_NEED_NOTHING; + } + } else { + info->data = NVCTRL_EXT_NEED_NOTHING; + } + } + + /* We need to swap the target_type and target_id */ + if (info->data == NVCTRL_EXT_NEED_TARGET_SWAP) { + int tmp; + tmp = *target_type; + *target_type = *target_id; + *target_id = tmp; + } +} + + +static Bool XNVCTRLQueryExtension ( + Display *dpy, + int *event_basep, + int *error_basep +){ + XExtDisplayInfo *info = find_display (dpy); + + if (XextHasExtension(info)) { + if (event_basep) *event_basep = info->codes->first_event; + if (error_basep) *error_basep = info->codes->first_error; + return True; + } else { + return False; + } +} + + +static Bool XNVCTRLQueryVersion ( + Display *dpy, + int *major, + int *minor +){ + XExtDisplayInfo *info = find_display (dpy); + xnvCtrlQueryExtensionReply rep; + xnvCtrlQueryExtensionReq *req; + + if(!XextHasExtension(info)) + return False; + + XNVCTRLCheckExtension (dpy, info, False); + + LockDisplay (dpy); + GetReq (nvCtrlQueryExtension, req); + req->reqType = info->codes->major_opcode; + req->nvReqType = X_nvCtrlQueryExtension; + if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay (dpy); + SyncHandle (); + return False; + } + if (major) *major = rep.major; + if (minor) *minor = rep.minor; + UnlockDisplay (dpy); + SyncHandle (); + return True; +} + + +static Bool XNVCTRLIsNvScreen ( + Display *dpy, + int screen +){ + XExtDisplayInfo *info = find_display (dpy); + xnvCtrlIsNvReply rep; + xnvCtrlIsNvReq *req; + Bool isnv; + + if(!XextHasExtension(info)) + return False; + + XNVCTRLCheckExtension (dpy, info, False); + + LockDisplay (dpy); + GetReq (nvCtrlIsNv, req); + req->reqType = info->codes->major_opcode; + req->nvReqType = X_nvCtrlIsNv; + req->screen = screen; + if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { + UnlockDisplay (dpy); + SyncHandle (); + return False; + } + isnv = rep.isnv; + UnlockDisplay (dpy); + SyncHandle (); + return isnv; +} + + +static Bool XNVCTRLQueryTargetStringAttribute ( + Display *dpy, + int target_type, + int target_id, + unsigned int display_mask, + unsigned int attribute, + char **ptr +){ + XExtDisplayInfo *info = find_display (dpy); + xnvCtrlQueryStringAttributeReply rep; + xnvCtrlQueryStringAttributeReq *req; + Bool exists; + int length, numbytes, slop; + + if (!ptr) return False; + + if(!XextHasExtension(info)) + return False; + + XNVCTRLCheckExtension (dpy, info, False); + XNVCTRLCheckTargetData(dpy, info, &target_type, &target_id); + + LockDisplay (dpy); + GetReq (nvCtrlQueryStringAttribute, req); + req->reqType = info->codes->major_opcode; + req->nvReqType = X_nvCtrlQueryStringAttribute; + req->target_type = target_type; + req->target_id = target_id; + req->display_mask = display_mask; + req->attribute = attribute; + if (!_XReply (dpy, (xReply *) &rep, 0, False)) { + UnlockDisplay (dpy); + SyncHandle (); + return False; + } + length = rep.length; + numbytes = rep.n; + slop = numbytes & 3; + *ptr = (char *) Xmalloc(numbytes); + if (! *ptr) { + _XEatData(dpy, length); + UnlockDisplay (dpy); + SyncHandle (); + return False; + } else { + _XRead(dpy, (char *) *ptr, numbytes); + if (slop) _XEatData(dpy, 4-slop); + } + exists = rep.flags; + UnlockDisplay (dpy); + SyncHandle (); + return exists; +} + +static Bool XNVCTRLQueryStringAttribute ( + Display *dpy, + int screen, + unsigned int display_mask, + unsigned int attribute, + char **ptr +){ + return XNVCTRLQueryTargetStringAttribute(dpy, NV_CTRL_TARGET_TYPE_X_SCREEN, + screen, display_mask, + attribute, ptr); +} + + +Bool VA_NVCTRLQueryDirectRenderingCapable( Display *dpy, int screen, + Bool *isCapable ) +{ + int event_base; + int error_base; + + if (isCapable) + *isCapable = False; + + if (!XNVCTRLQueryExtension(dpy, &event_base, &error_base)) + return False; + + if (isCapable && XNVCTRLIsNvScreen(dpy, screen)) + *isCapable = True; + + return True; +} + +Bool VA_NVCTRLGetClientDriverName( Display *dpy, int screen, + int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, + int *ddxDriverPatchVersion, char **clientDriverName ) +{ + if (ddxDriverMajorVersion) + *ddxDriverMajorVersion = 0; + if (ddxDriverMinorVersion) + *ddxDriverMinorVersion = 0; + if (ddxDriverPatchVersion) + *ddxDriverPatchVersion = 0; + if (clientDriverName) + *clientDriverName = NULL; + + char *nvidia_driver_version = NULL; + if (!XNVCTRLQueryStringAttribute(dpy, screen, 0, NV_CTRL_STRING_NVIDIA_DRIVER_VERSION, &nvidia_driver_version)) + return False; + + char *end, *str = nvidia_driver_version; + unsigned long v = strtoul(str, &end, 10); + if (end && end != str) { + if (ddxDriverMajorVersion) + *ddxDriverMajorVersion = v; + if (*(str = end) == '.') { + v = strtoul(str + 1, &end, 10); + if (end && end != str && (*end == '.' || *end == '\0')) { + if (ddxDriverMinorVersion) + *ddxDriverMinorVersion = v; + if (*(str = end) == '.') { + v = strtoul(str + 1, &end, 10); + if (end && end != str && *end == '\0') { + if (ddxDriverPatchVersion) + *ddxDriverPatchVersion = v; + } + } + } + } + } + Xfree(nvidia_driver_version); + + if (clientDriverName) + *clientDriverName = strdup("nvidia"); + + return True; +} diff -Nru libva-0.31.0+latest1/va/x11/va_nvctrl.h libva-0.31.0+latest2/va/x11/va_nvctrl.h --- libva-0.31.0+latest1/va/x11/va_nvctrl.h 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_nvctrl.h 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2008 NVIDIA, Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef VA_NVCTRLLIB_H +#define VA_NVCTRLLIB_H + +#include + +Bool VA_NVCTRLQueryDirectRenderingCapable( Display *dpy, int screen, + Bool *isCapable ); + +Bool VA_NVCTRLGetClientDriverName( Display *dpy, int screen, + int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, + int *ddxDriverPatchVersion, char **clientDriverName ); + +#endif /* VA_NVCTRLLIB_H */ diff -Nru libva-0.31.0+latest1/va/x11/va_x11.c libva-0.31.0+latest2/va/x11/va_x11.c --- libva-0.31.0+latest1/va/x11/va_x11.c 1970-01-01 01:00:00.000000000 +0100 +++ libva-0.31.0+latest2/va/x11/va_x11.c 2010-03-18 08:39:39.000000000 +0000 @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2007 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#define _GNU_SOURCE 1 +#include "config.h" +#include "va.h" +#include "va_backend.h" +#include "va_x11.h" +#include "va_dri.h" +#include "va_dri2.h" +#include "va_dricommon.h" +#include "va_nvctrl.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static VADisplayContextP pDisplayContexts = NULL; + +static int va_DisplayContextIsValid ( + VADisplayContextP pDisplayContext +) +{ + VADisplayContextP ctx = pDisplayContexts; + + while (ctx) + { + if (ctx == pDisplayContext && pDisplayContext->pDriverContext) + return 1; + ctx = ctx->pNext; + } + return 0; +} + +static void va_DisplayContextDestroy ( + VADisplayContextP pDisplayContext +) +{ + VADisplayContextP *ctx = &pDisplayContexts; + + /* Throw away pDisplayContext */ + while (*ctx) + { + if (*ctx == pDisplayContext) + { + *ctx = pDisplayContext->pNext; + pDisplayContext->pNext = NULL; + break; + } + ctx = &((*ctx)->pNext); + } + free(pDisplayContext->pDriverContext->dri_state); + free(pDisplayContext->pDriverContext); + free(pDisplayContext); +} + + +static VAStatus va_DRI2GetDriverName ( + VADisplayContextP pDisplayContext, + char **driver_name +) +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + + if (!isDRI2Connected(ctx, driver_name)) + return VA_STATUS_ERROR_UNKNOWN; + + return VA_STATUS_SUCCESS; +} + +static VAStatus va_DRIGetDriverName ( + VADisplayContextP pDisplayContext, + char **driver_name +) +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + + if (!isDRI1Connected(ctx, driver_name)) + return VA_STATUS_ERROR_UNKNOWN; + + return VA_STATUS_SUCCESS; +} + +static VAStatus va_NVCTRL_GetDriverName ( + VADisplayContextP pDisplayContext, + char **driver_name +) +{ + VADriverContextP ctx = pDisplayContext->pDriverContext; + int direct_capable, driver_major, driver_minor, driver_patch; + Bool result; + + result = VA_NVCTRLQueryDirectRenderingCapable(ctx->x11_dpy, ctx->x11_screen, + &direct_capable); + if (!result || !direct_capable) + return VA_STATUS_ERROR_UNKNOWN; + + result = VA_NVCTRLGetClientDriverName(ctx->x11_dpy, ctx->x11_screen, + &driver_major, &driver_minor, + &driver_patch, driver_name); + if (!result) + return VA_STATUS_ERROR_UNKNOWN; + + return VA_STATUS_SUCCESS; +} + +static VAStatus va_DisplayContextGetDriverName ( + VADisplayContextP pDisplayContext, + char **driver_name +) +{ + VAStatus vaStatus; + char *driver_name_env; + + if (driver_name) + *driver_name = NULL; + + if ((driver_name_env = getenv("LIBVA_DRIVER_NAME")) != NULL + && geteuid() == getuid()) + { + /* don't allow setuid apps to use LIBVA_DRIVER_NAME */ + *driver_name = strdup(driver_name_env); + return VA_STATUS_SUCCESS; + } + + vaStatus = va_DRI2GetDriverName(pDisplayContext, driver_name); + if (vaStatus != VA_STATUS_SUCCESS) + vaStatus = va_DRIGetDriverName(pDisplayContext, driver_name); + if (vaStatus != VA_STATUS_SUCCESS) + vaStatus = va_NVCTRL_GetDriverName(pDisplayContext, driver_name); + + return vaStatus; +} + + +VADisplay vaGetDisplay ( + Display *native_dpy /* implementation specific */ +) +{ + VADisplay dpy = NULL; + VADisplayContextP pDisplayContext = pDisplayContexts; + + if (!native_dpy) + return NULL; + + while (pDisplayContext) + { + if (pDisplayContext->pDriverContext && + pDisplayContext->pDriverContext->x11_dpy == native_dpy) + { + dpy = (VADisplay)pDisplayContext; + break; + } + pDisplayContext = pDisplayContext->pNext; + } + + if (!dpy) + { + /* create new entry */ + VADriverContextP pDriverContext; + struct dri_state *dri_state; + pDisplayContext = calloc(1, sizeof(*pDisplayContext)); + pDriverContext = calloc(1, sizeof(*pDriverContext)); + dri_state = calloc(1, sizeof(*dri_state)); + if (pDisplayContext && pDriverContext && dri_state) + { + pDisplayContext->vadpy_magic = VA_DISPLAY_MAGIC; + + pDriverContext->x11_dpy = native_dpy; + pDisplayContext->pNext = pDisplayContexts; + pDisplayContext->pDriverContext = pDriverContext; + pDisplayContext->vaIsValid = va_DisplayContextIsValid; + pDisplayContext->vaDestroy = va_DisplayContextDestroy; + pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName; + pDisplayContexts = pDisplayContext; + pDriverContext->dri_state = dri_state; + dpy = (VADisplay)pDisplayContext; + } + else + { + if (pDisplayContext) + free(pDisplayContext); + if (pDriverContext) + free(pDriverContext); + if (dri_state) + free(dri_state); + } + } + + return dpy; +}