1 /**************************************************************************
2  *
3  * Copyright 2010 Thomas Balling Sørensen & Orasanu Lucian.
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the
8  * "Software"), to deal in the Software without restriction, including
9  * without limitation the rights to use, copy, modify, merge, publish,
10  * distribute, sub license, and/or sell copies of the Software, and to
11  * permit persons to whom the Software is furnished to do so, subject to
12  * the following conditions:
13  *
14  * The above copyright notice and this permission notice (including the
15  * next paragraph) shall be included in all copies or substantial portions
16  * of the Software.
17  *
18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25  *
26  **************************************************************************/
27 
28 #include <va/va.h>
29 #include <va/va_backend.h>
30 
31 #include "pipe/p_format.h"
32 
33 #include "va_private.h"
34 
35 typedef struct  {
36    enum pipe_format pipe_format;
37    VAImageFormat    va_format;
38    unsigned int     va_flags;
39 } va_subpicture_formats_supported_t;
40 
41 static const va_subpicture_formats_supported_t va_subpicture_formats_supported[VA_MAX_SUBPIC_FORMATS_SUPPORTED + 1] =
42 {
43    { PIPE_FORMAT_B8G8R8A8_UNORM,
44       { VA_FOURCC('B','G','R','A'), VA_LSB_FIRST, 32, 32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 },
45       0 },
46    { PIPE_FORMAT_R8G8B8A8_UNORM,
47       { VA_FOURCC_RGBA, VA_LSB_FIRST, 32, 32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 },
48       0 }
49 };
50 
51 VAStatus
vlVaQuerySubpictureFormats(VADriverContextP ctx,VAImageFormat * format_list,unsigned int * flags,unsigned int * num_formats)52 vlVaQuerySubpictureFormats(VADriverContextP ctx, VAImageFormat *format_list,
53                            unsigned int *flags, unsigned int *num_formats)
54 {
55    if (!ctx)
56       return VA_STATUS_ERROR_INVALID_CONTEXT;
57 
58    if (!(format_list && flags && num_formats))
59       return VA_STATUS_ERROR_UNKNOWN;
60 
61    num_formats[0] = VA_MAX_SUBPIC_FORMATS_SUPPORTED;
62 
63    int n = 0;
64    /* Query supported formats */
65    for (n = 0; n < VA_MAX_SUBPIC_FORMATS_SUPPORTED ; n++) {
66       const va_subpicture_formats_supported_t * const format_map = &va_subpicture_formats_supported[n];
67       flags[n] = format_map->va_flags;
68       format_list[n] = format_map->va_format;
69    }
70 
71    return VA_STATUS_SUCCESS;
72 }
73 
74 VAStatus
vlVaCreateSubpicture(VADriverContextP ctx,VAImageID image,VASubpictureID * subpicture)75 vlVaCreateSubpicture(VADriverContextP ctx, VAImageID image, VASubpictureID *subpicture)
76 {
77    if (!ctx)
78       return VA_STATUS_ERROR_INVALID_CONTEXT;
79 
80    return VA_STATUS_ERROR_UNIMPLEMENTED;
81 }
82 
83 VAStatus
vlVaDestroySubpicture(VADriverContextP ctx,VASubpictureID subpicture)84 vlVaDestroySubpicture(VADriverContextP ctx, VASubpictureID subpicture)
85 {
86    if (!ctx)
87       return VA_STATUS_ERROR_INVALID_CONTEXT;
88 
89    return VA_STATUS_ERROR_UNIMPLEMENTED;
90 }
91 
92 VAStatus
vlVaSubpictureImage(VADriverContextP ctx,VASubpictureID subpicture,VAImageID image)93 vlVaSubpictureImage(VADriverContextP ctx, VASubpictureID subpicture, VAImageID image)
94 {
95    if (!ctx)
96       return VA_STATUS_ERROR_INVALID_CONTEXT;
97 
98    return VA_STATUS_ERROR_UNIMPLEMENTED;
99 }
100 
101 VAStatus
vlVaSetSubpictureChromakey(VADriverContextP ctx,VASubpictureID subpicture,unsigned int chromakey_min,unsigned int chromakey_max,unsigned int chromakey_mask)102 vlVaSetSubpictureChromakey(VADriverContextP ctx, VASubpictureID subpicture,
103                            unsigned int chromakey_min, unsigned int chromakey_max, unsigned int chromakey_mask)
104 {
105    if (!ctx)
106       return VA_STATUS_ERROR_INVALID_CONTEXT;
107 
108    return VA_STATUS_ERROR_UNIMPLEMENTED;
109 }
110 
111 VAStatus
vlVaSetSubpictureGlobalAlpha(VADriverContextP ctx,VASubpictureID subpicture,float global_alpha)112 vlVaSetSubpictureGlobalAlpha(VADriverContextP ctx, VASubpictureID subpicture, float global_alpha)
113 {
114    if (!ctx)
115       return VA_STATUS_ERROR_INVALID_CONTEXT;
116 
117    return VA_STATUS_ERROR_UNIMPLEMENTED;
118 }
119 
120 VAStatus
vlVaAssociateSubpicture(VADriverContextP ctx,VASubpictureID subpicture,VASurfaceID * target_surfaces,int num_surfaces,short src_x,short src_y,unsigned short src_width,unsigned short src_height,short dest_x,short dest_y,unsigned short dest_width,unsigned short dest_height,unsigned int flags)121 vlVaAssociateSubpicture(VADriverContextP ctx, VASubpictureID subpicture, VASurfaceID *target_surfaces,
122                         int num_surfaces, short src_x, short src_y,
123                         unsigned short src_width, unsigned short src_height,
124                         short dest_x, short dest_y,
125                         unsigned short dest_width,
126                         unsigned short dest_height,
127                         unsigned int flags)
128 {
129    if (!ctx)
130       return VA_STATUS_ERROR_INVALID_CONTEXT;
131 
132    return VA_STATUS_ERROR_UNIMPLEMENTED;
133 }
134 
135 VAStatus
vlVaDeassociateSubpicture(VADriverContextP ctx,VASubpictureID subpicture,VASurfaceID * target_surfaces,int num_surfaces)136 vlVaDeassociateSubpicture(VADriverContextP ctx, VASubpictureID subpicture,
137                           VASurfaceID *target_surfaces, int num_surfaces)
138 {
139    if (!ctx)
140       return VA_STATUS_ERROR_INVALID_CONTEXT;
141 
142    return VA_STATUS_ERROR_UNIMPLEMENTED;
143 }
144