1 /**************************************************************************
3 * Copyright 2009 Younes Manton.
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:
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
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 VMWARE 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.
26 **************************************************************************/
28 #ifndef PIPE_VIDEO_CONTEXT_H
29 #define PIPE_VIDEO_CONTEXT_H
31 #include "pipe/p_video_state.h"
39 struct pipe_macroblock
;
40 struct pipe_picture_desc
;
41 struct pipe_fence_handle
;
44 * Gallium video codec for a specific format/profile
46 struct pipe_video_codec
48 struct pipe_context
*context
;
50 enum pipe_video_profile profile
;
52 enum pipe_video_entrypoint entrypoint
;
53 enum pipe_video_chroma_format chroma_format
;
56 unsigned max_references
;
57 bool expect_chunked_decode
;
60 * destroy this video decoder
62 void (*destroy
)(struct pipe_video_codec
*codec
);
65 * start decoding of a new frame
67 void (*begin_frame
)(struct pipe_video_codec
*codec
,
68 struct pipe_video_buffer
*target
,
69 struct pipe_picture_desc
*picture
);
74 void (*decode_macroblock
)(struct pipe_video_codec
*codec
,
75 struct pipe_video_buffer
*target
,
76 struct pipe_picture_desc
*picture
,
77 const struct pipe_macroblock
*macroblocks
,
78 unsigned num_macroblocks
);
83 void (*decode_bitstream
)(struct pipe_video_codec
*codec
,
84 struct pipe_video_buffer
*target
,
85 struct pipe_picture_desc
*picture
,
87 const void * const *buffers
,
88 const unsigned *sizes
);
91 * encode to a bitstream
93 void (*encode_bitstream
)(struct pipe_video_codec
*codec
,
94 struct pipe_video_buffer
*source
,
95 struct pipe_resource
*destination
,
99 * end decoding of the current frame
101 void (*end_frame
)(struct pipe_video_codec
*codec
,
102 struct pipe_video_buffer
*target
,
103 struct pipe_picture_desc
*picture
);
106 * flush any outstanding command buffers to the hardware
107 * should be called before a video_buffer is acessed by the state tracker again
109 void (*flush
)(struct pipe_video_codec
*codec
);
112 * get encoder feedback
114 void (*get_feedback
)(struct pipe_video_codec
*codec
, void *feedback
, unsigned *size
);
118 * output for decoding / input for displaying
120 struct pipe_video_buffer
122 struct pipe_context
*context
;
124 enum pipe_format buffer_format
;
125 enum pipe_video_chroma_format chroma_format
;
132 * destroy this video buffer
134 void (*destroy
)(struct pipe_video_buffer
*buffer
);
137 * get an individual sampler view for each plane
139 struct pipe_sampler_view
**(*get_sampler_view_planes
)(struct pipe_video_buffer
*buffer
);
142 * get an individual sampler view for each component
144 struct pipe_sampler_view
**(*get_sampler_view_components
)(struct pipe_video_buffer
*buffer
);
147 * get an individual surfaces for each plane
149 struct pipe_surface
**(*get_surfaces
)(struct pipe_video_buffer
*buffer
);
152 * auxiliary associated data
154 void *associated_data
;
157 * codec where the associated data came from
159 struct pipe_video_codec
*codec
;
162 * destroy the associated data
164 void (*destroy_associated_data
)(void *associated_data
);
171 #endif /* PIPE_VIDEO_CONTEXT_H */