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 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.
26 **************************************************************************/
28 #ifndef PIPE_VIDEO_CONTEXT_H
29 #define PIPE_VIDEO_CONTEXT_H
35 #include "pipe/p_video_state.h"
39 struct pipe_macroblock
;
40 struct pipe_picture_desc
;
41 struct pipe_fence_handle
;
44 * Gallium video decoder for a specific codec/profile
46 struct pipe_video_decoder
48 struct pipe_context
*context
;
50 enum pipe_video_profile profile
;
51 enum pipe_video_entrypoint entrypoint
;
52 enum pipe_video_chroma_format chroma_format
;
55 unsigned max_references
;
58 * destroy this video decoder
60 void (*destroy
)(struct pipe_video_decoder
*decoder
);
63 * start decoding of a new frame
65 void (*begin_frame
)(struct pipe_video_decoder
*decoder
,
66 struct pipe_video_buffer
*target
,
67 struct pipe_picture_desc
*picture
);
72 void (*decode_macroblock
)(struct pipe_video_decoder
*decoder
,
73 struct pipe_video_buffer
*target
,
74 struct pipe_picture_desc
*picture
,
75 const struct pipe_macroblock
*macroblocks
,
76 unsigned num_macroblocks
);
81 void (*decode_bitstream
)(struct pipe_video_decoder
*decoder
,
82 struct pipe_video_buffer
*target
,
83 struct pipe_picture_desc
*picture
,
85 const void * const *buffers
,
86 const unsigned *sizes
);
89 * end decoding of the current frame
91 void (*end_frame
)(struct pipe_video_decoder
*decoder
,
92 struct pipe_video_buffer
*target
,
93 struct pipe_picture_desc
*picture
);
96 * flush any outstanding command buffers to the hardware
97 * should be called before a video_buffer is acessed by the state tracker again
99 void (*flush
)(struct pipe_video_decoder
*decoder
);
103 * output for decoding / input for displaying
105 struct pipe_video_buffer
107 struct pipe_context
*context
;
109 enum pipe_format buffer_format
;
110 enum pipe_video_chroma_format chroma_format
;
116 * destroy this video buffer
118 void (*destroy
)(struct pipe_video_buffer
*buffer
);
121 * get a individual sampler view for each plane
123 struct pipe_sampler_view
**(*get_sampler_view_planes
)(struct pipe_video_buffer
*buffer
);
126 * get a individual sampler view for each component
128 struct pipe_sampler_view
**(*get_sampler_view_components
)(struct pipe_video_buffer
*buffer
);
131 * get a individual surfaces for each plane
133 struct pipe_surface
**(*get_surfaces
)(struct pipe_video_buffer
*buffer
);
136 * auxiliary associated data
138 void *associated_data
;
141 * decoder where the associated data came from
143 struct pipe_video_decoder
*decoder
;
146 * destroy the associated data
148 void (*destroy_associated_data
)(void *associated_data
);
155 #endif /* PIPE_VIDEO_CONTEXT_H */