1b0fac498ca4863166252f1268fda83394db54153Fei Jiang/*
2b0fac498ca4863166252f1268fda83394db54153Fei Jiang * Copyright (c) 2007 Intel Corporation. All Rights Reserved.
3b0fac498ca4863166252f1268fda83394db54153Fei Jiang *
4b0fac498ca4863166252f1268fda83394db54153Fei Jiang * Permission is hereby granted, free of charge, to any person obtaining a
5b0fac498ca4863166252f1268fda83394db54153Fei Jiang * copy of this software and associated documentation files (the
6b0fac498ca4863166252f1268fda83394db54153Fei Jiang * "Software"), to deal in the Software without restriction, including
7b0fac498ca4863166252f1268fda83394db54153Fei Jiang * without limitation the rights to use, copy, modify, merge, publish,
8b0fac498ca4863166252f1268fda83394db54153Fei Jiang * distribute, sub license, and/or sell copies of the Software, and to
9b0fac498ca4863166252f1268fda83394db54153Fei Jiang * permit persons to whom the Software is furnished to do so, subject to
10b0fac498ca4863166252f1268fda83394db54153Fei Jiang * the following conditions:
11b0fac498ca4863166252f1268fda83394db54153Fei Jiang *
12b0fac498ca4863166252f1268fda83394db54153Fei Jiang * The above copyright notice and this permission notice (including the
13b0fac498ca4863166252f1268fda83394db54153Fei Jiang * next paragraph) shall be included in all copies or substantial portions
14b0fac498ca4863166252f1268fda83394db54153Fei Jiang * of the Software.
15b0fac498ca4863166252f1268fda83394db54153Fei Jiang *
16b0fac498ca4863166252f1268fda83394db54153Fei Jiang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17b0fac498ca4863166252f1268fda83394db54153Fei Jiang * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18b0fac498ca4863166252f1268fda83394db54153Fei Jiang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19b0fac498ca4863166252f1268fda83394db54153Fei Jiang * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20b0fac498ca4863166252f1268fda83394db54153Fei Jiang * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21b0fac498ca4863166252f1268fda83394db54153Fei Jiang * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22b0fac498ca4863166252f1268fda83394db54153Fei Jiang * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23b0fac498ca4863166252f1268fda83394db54153Fei Jiang */
24b0fac498ca4863166252f1268fda83394db54153Fei Jiang
25b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define _GNU_SOURCE 1
26cceaa0568f77a7452857559614100b71fb36ee3awangkun#include "sysdeps.h"
27b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include "va.h"
28b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include "va_backend.h"
29b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include "va_backend_tpi.h"
30b0fac498ca4863166252f1268fda83394db54153Fei Jiang
31b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <assert.h>
32b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <stdarg.h>
33b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <stdio.h>
34b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <stdlib.h>
35b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <string.h>
36b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <dlfcn.h>
37b0fac498ca4863166252f1268fda83394db54153Fei Jiang#include <unistd.h>
38b0fac498ca4863166252f1268fda83394db54153Fei Jiang
39b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define CTX(dpy) (((VADisplayContextP)dpy)->pDriverContext)
40b0fac498ca4863166252f1268fda83394db54153Fei Jiang#define CHECK_DISPLAY(dpy) if( !vaDisplayIsValid(dpy) ) { return VA_STATUS_ERROR_INVALID_DISPLAY; }
41b0fac498ca4863166252f1268fda83394db54153Fei Jiang
42cceaa0568f77a7452857559614100b71fb36ee3awangkun
43cceaa0568f77a7452857559614100b71fb36ee3awangkun/*
444b672db6ee89c9846451bbab23cf18e93c4260b2hding * Create surfaces with special inputs/requirements
45cceaa0568f77a7452857559614100b71fb36ee3awangkun */
464b672db6ee89c9846451bbab23cf18e93c4260b2hdingVAStatus vaCreateSurfacesWithAttribute (
474b672db6ee89c9846451bbab23cf18e93c4260b2hding        VADisplay dpy,
484b672db6ee89c9846451bbab23cf18e93c4260b2hding        int width,
494b672db6ee89c9846451bbab23cf18e93c4260b2hding        int height,
504b672db6ee89c9846451bbab23cf18e93c4260b2hding        int format,
514b672db6ee89c9846451bbab23cf18e93c4260b2hding        int num_surfaces,
524b672db6ee89c9846451bbab23cf18e93c4260b2hding        VASurfaceID *surfaces,       /* out */
534b672db6ee89c9846451bbab23cf18e93c4260b2hding        VASurfaceAttributeTPI *attribute_tpi
5411419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang)
5511419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang{
5611419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang  VADriverContextP ctx;
5711419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang  struct VADriverVTableTPI *tpi;
5811419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang  CHECK_DISPLAY(dpy);
5911419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang  ctx = CTX(dpy);
60cceaa0568f77a7452857559614100b71fb36ee3awangkun
61f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun  printf("WARNING: vaCreateSurfacesWithAttribute will be removed, please use vaCreateSurfaces\n");
62f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun
6311419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang  tpi = (struct VADriverVTableTPI *)ctx->vtable_tpi;
644b672db6ee89c9846451bbab23cf18e93c4260b2hding  if (tpi && tpi->vaCreateSurfacesWithAttribute) {
654b672db6ee89c9846451bbab23cf18e93c4260b2hding      return tpi->vaCreateSurfacesWithAttribute( ctx, width, height, format, num_surfaces, surfaces, attribute_tpi);
6611419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang  } else
6711419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang      return VA_STATUS_ERROR_UNIMPLEMENTED;
6811419f3a137830e9533b7ea0711eff2058d6f328Shuduo Sang}
69cceaa0568f77a7452857559614100b71fb36ee3awangkun
70cceaa0568f77a7452857559614100b71fb36ee3awangkun
71b0fac498ca4863166252f1268fda83394db54153Fei JiangVAStatus vaPutSurfaceBuf (
72b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VADisplay dpy,
73b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VASurfaceID surface,
74b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned char* data,
75b0fac498ca4863166252f1268fda83394db54153Fei Jiang    int* data_len,
76b0fac498ca4863166252f1268fda83394db54153Fei Jiang    short srcx,
77b0fac498ca4863166252f1268fda83394db54153Fei Jiang    short srcy,
78b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short srcw,
79b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short srch,
80b0fac498ca4863166252f1268fda83394db54153Fei Jiang    short destx,
81b0fac498ca4863166252f1268fda83394db54153Fei Jiang    short desty,
82b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short destw,
83b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned short desth,
84b0fac498ca4863166252f1268fda83394db54153Fei Jiang    VARectangle *cliprects, /* client supplied clip list */
85b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned int number_cliprects, /* number of clip rects in the clip list */
86b0fac498ca4863166252f1268fda83394db54153Fei Jiang    unsigned int flags /* de-interlacing flags */
87b0fac498ca4863166252f1268fda83394db54153Fei Jiang)
88b0fac498ca4863166252f1268fda83394db54153Fei Jiang{
89b0fac498ca4863166252f1268fda83394db54153Fei Jiang  VADriverContextP ctx;
90b0fac498ca4863166252f1268fda83394db54153Fei Jiang  struct VADriverVTableTPI *tpi;
91b0fac498ca4863166252f1268fda83394db54153Fei Jiang  CHECK_DISPLAY(dpy);
92b0fac498ca4863166252f1268fda83394db54153Fei Jiang  ctx = CTX(dpy);
93b0fac498ca4863166252f1268fda83394db54153Fei Jiang
94b0fac498ca4863166252f1268fda83394db54153Fei Jiang  tpi = ( struct VADriverVTableTPI *)ctx->vtable_tpi;
95b0fac498ca4863166252f1268fda83394db54153Fei Jiang  if (tpi && tpi->vaPutSurfaceBuf) {
96b0fac498ca4863166252f1268fda83394db54153Fei Jiang      return tpi->vaPutSurfaceBuf( ctx, surface, data, data_len, srcx, srcy, srcw, srch,
974b672db6ee89c9846451bbab23cf18e93c4260b2hding                                  destx, desty, destw, desth, cliprects, number_cliprects, flags );
98b0fac498ca4863166252f1268fda83394db54153Fei Jiang  } else
99b0fac498ca4863166252f1268fda83394db54153Fei Jiang      return VA_STATUS_ERROR_UNIMPLEMENTED;
100b0fac498ca4863166252f1268fda83394db54153Fei Jiang}
101166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang
102166c85d0cdc279aa572e0e59f335eaf85e6be699Fei JiangVAStatus vaSetTimestampForSurface(
103f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun       VADisplay dpy,
104f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun       VASurfaceID surface,
105f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun       long long timestamp
106166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang)
107166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang{
108f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun   VADriverContextP ctx;
109f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun   struct VADriverVTableTPI *tpi;
110f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun   CHECK_DISPLAY(dpy);
111f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun   ctx = CTX(dpy);
112166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang
113f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun   tpi = ( struct VADriverVTableTPI *)ctx->vtable_tpi;
114f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun   if (tpi && tpi->vaSetTimestampForSurface) {
115f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun       return tpi->vaSetTimestampForSurface(ctx, surface, timestamp);
116f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun   } else
117f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun       return VA_STATUS_ERROR_UNIMPLEMENTED;
118166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang
119166c85d0cdc279aa572e0e59f335eaf85e6be699Fei Jiang}
120f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun
121f32d88b4751aa44be38f62dcd25533aec6ca46a2Liu Bolun
122