1fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton/**************************************************************************
25f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton *
3fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * Copyright 2009 Younes Manton.
4fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * All Rights Reserved.
55f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton *
6fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * Permission is hereby granted, free of charge, to any person obtaining a
7fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * copy of this software and associated documentation files (the
8fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * "Software"), to deal in the Software without restriction, including
9fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * without limitation the rights to use, copy, modify, merge, publish,
10fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * distribute, sub license, and/or sell copies of the Software, and to
11fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * permit persons to whom the Software is furnished to do so, subject to
12fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * the following conditions:
135f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton *
14fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * The above copyright notice and this permission notice (including the
15fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * next paragraph) shall be included in all copies or substantial portions
16fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * of the Software.
175f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton *
18fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
255f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton *
26fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton **************************************************************************/
27fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton
28f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#ifndef vl_compositor_h
29f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#define vl_compositor_h
30f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
3119bcd21ed151cf1716f2f87dff0f712231aa2ce7Kai Wasserbäch#include "pipe/p_state.h"
3219bcd21ed151cf1716f2f87dff0f712231aa2ce7Kai Wasserbäch#include "pipe/p_video_decoder.h"
3319bcd21ed151cf1716f2f87dff0f712231aa2ce7Kai Wasserbäch#include "pipe/p_video_state.h"
34f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
35167b1b32c5ff30d514253072ce54513112c03d4dChristian König#include "util/u_rect.h"
36167b1b32c5ff30d514253072ce54513112c03d4dChristian König
376092fbed46302e2bdf6c6f2e229f4e393652e228Christian König#include "vl_types.h"
3814766f820069ca987543918bce96410c481e5d20Christian König#include "vl_csc.h"
396092fbed46302e2bdf6c6f2e229f4e393652e228Christian König
40f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_context;
41f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
42bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
43bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * composing and displaying of image data
44bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
45bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
465f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton#define VL_COMPOSITOR_MAX_LAYERS 16
475f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton
4837f97e1753af20a7161f61e99cb203b214e00641Christian König/* deinterlace allgorithem */
4937f97e1753af20a7161f61e99cb203b214e00641Christian Königenum vl_compositor_deinterlace
5037f97e1753af20a7161f61e99cb203b214e00641Christian König{
5137f97e1753af20a7161f61e99cb203b214e00641Christian König   VL_COMPOSITOR_WEAVE,
5237f97e1753af20a7161f61e99cb203b214e00641Christian König   VL_COMPOSITOR_BOB_TOP,
5337f97e1753af20a7161f61e99cb203b214e00641Christian König   VL_COMPOSITOR_BOB_BOTTOM
5437f97e1753af20a7161f61e99cb203b214e00641Christian König};
5537f97e1753af20a7161f61e99cb203b214e00641Christian König
56e5f78a74f8294ee02015552db664dae1e7da9f47Christian Königstruct vl_compositor_layer
57e5f78a74f8294ee02015552db664dae1e7da9f47Christian König{
580d53cb2e83cafb7007068192674a8b5b57a27ca4Christian König   bool clearing;
590d53cb2e83cafb7007068192674a8b5b57a27ca4Christian König
6074a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König   bool viewport_valid;
6174a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König   struct pipe_viewport_state viewport;
6274a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König
63e5f78a74f8294ee02015552db664dae1e7da9f47Christian König   void *fs;
6476d881b8b086495081c0a3c8fea2278f1480f107Christian König   void *samplers[3];
654f37636afb5adc299ecbe497209702a47039580cChristian König   void *blend;
660d53cb2e83cafb7007068192674a8b5b57a27ca4Christian König
67e5f78a74f8294ee02015552db664dae1e7da9f47Christian König   struct pipe_sampler_view *sampler_views[3];
686092fbed46302e2bdf6c6f2e229f4e393652e228Christian König   struct {
696092fbed46302e2bdf6c6f2e229f4e393652e228Christian König      struct vertex2f tl, br;
706092fbed46302e2bdf6c6f2e229f4e393652e228Christian König   } src, dst;
7137f97e1753af20a7161f61e99cb203b214e00641Christian König   struct vertex2f zw;
72b90727bb241e4a04158d34aad078cb18e478fea7Christian König   struct vertex4f colors[4];
73e5f78a74f8294ee02015552db664dae1e7da9f47Christian König};
74e5f78a74f8294ee02015552db664dae1e7da9f47Christian König
7532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königstruct vl_compositor_state
76f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton{
77f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton   struct pipe_context *pipe;
78f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
7974a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König   bool scissor_valid;
80167b1b32c5ff30d514253072ce54513112c03d4dChristian König   struct pipe_scissor_state scissor;
81e5f78a74f8294ee02015552db664dae1e7da9f47Christian König   struct pipe_resource *csc_matrix;
825f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton
8332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   union pipe_color_union clear_color;
8432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König
8532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   unsigned used_layers:VL_COMPOSITOR_MAX_LAYERS;
8632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   struct vl_compositor_layer layers[VL_COMPOSITOR_MAX_LAYERS];
8732c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König};
8832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König
8932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königstruct vl_compositor
9032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König{
9132c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   struct pipe_context *pipe;
9232c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König
9332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   struct pipe_framebuffer_state fb_state;
9432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   struct pipe_vertex_buffer vertex_buf;
9532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König
9676d881b8b086495081c0a3c8fea2278f1480f107Christian König   void *sampler_linear;
9776d881b8b086495081c0a3c8fea2278f1480f107Christian König   void *sampler_nearest;
984f37636afb5adc299ecbe497209702a47039580cChristian König   void *blend_clear, *blend_add;
99255033e4819b096491dd987c3ca4d8ee32a7cdb6Christian König   void *rast;
1008082816e27a0ee376e679c4d81ff8a3f0611ea9eYounes Manton   void *dsa;
101e5f78a74f8294ee02015552db664dae1e7da9f47Christian König   void *vertex_elems_state;
102f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
103e5f78a74f8294ee02015552db664dae1e7da9f47Christian König   void *vs;
104e5f78a74f8294ee02015552db664dae1e7da9f47Christian König   void *fs_video_buffer;
1053841d3fd1358cd3ecbe71d173e52551420a07f4eChristian König   void *fs_weave;
106e5f78a74f8294ee02015552db664dae1e7da9f47Christian König   void *fs_rgba;
1075f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton
1084f37636afb5adc299ecbe497209702a47039580cChristian König   struct {
1094f37636afb5adc299ecbe497209702a47039580cChristian König      void *rgb;
1104f37636afb5adc299ecbe497209702a47039580cChristian König      void *yuv;
1114f37636afb5adc299ecbe497209702a47039580cChristian König   } fs_palette;
112e5f78a74f8294ee02015552db664dae1e7da9f47Christian König};
113f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
114bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
115bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * initialize this compositor
116bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
117bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königbool
118bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvl_compositor_init(struct vl_compositor *compositor, struct pipe_context *pipe);
119bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
120bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
12132c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König * init state bag
12232c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König */
12332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königbool
12432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_init_state(struct vl_compositor_state *state, struct pipe_context *pipe);
12532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König
12632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König/**
127bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set yuv -> rgba conversion matrix
128bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
129bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
13014766f820069ca987543918bce96410c481e5d20Christian Königvl_compositor_set_csc_matrix(struct vl_compositor_state *settings, const vl_csc_matrix *matrix);
131bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
132bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
133bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * reset dirty area, so it's cleared with the clear colour
134bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
135bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
136167b1b32c5ff30d514253072ce54513112c03d4dChristian Königvl_compositor_reset_dirty_area(struct u_rect *dirty);
137bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
138bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
139bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set the clear color
140bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
141bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
14232c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_clear_color(struct vl_compositor_state *settings, union pipe_color_union *color);
14342fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grange
14442fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grange/**
14542fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grange * get the clear color
14642fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grange */
14742fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grangevoid
14832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_get_clear_color(struct vl_compositor_state *settings, union pipe_color_union *color);
14932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König
15032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König/**
15132c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König * set the destination clipping
15232c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König */
15332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvoid
154d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian Königvl_compositor_set_dst_clip(struct vl_compositor_state *settings, struct u_rect *dst_clip);
155bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
156bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
157bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set overlay samplers
158bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
159bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/*@{*/
160bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
161bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
162bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * reset all currently set layers
163bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
164bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
16532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_clear_layers(struct vl_compositor_state *state);
166bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
167bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
1684f37636afb5adc299ecbe497209702a47039580cChristian König * set the blender used to render a layer
1694f37636afb5adc299ecbe497209702a47039580cChristian König */
1704f37636afb5adc299ecbe497209702a47039580cChristian Königvoid
17132c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_layer_blend(struct vl_compositor_state *state,
1724f37636afb5adc299ecbe497209702a47039580cChristian König                              unsigned layer, void *blend, bool is_clearing);
1734f37636afb5adc299ecbe497209702a47039580cChristian König
1744f37636afb5adc299ecbe497209702a47039580cChristian König/**
17574a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König * set the layer destination area
17674a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König */
17774a4e9089488e7f341d21053bbf2d4aa52b99b70Christian Königvoid
17874a4e9089488e7f341d21053bbf2d4aa52b99b70Christian Königvl_compositor_set_layer_dst_area(struct vl_compositor_state *settings,
17974a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König                                 unsigned layer, struct u_rect *dst_area);
18074a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König
18174a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König/**
182bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set a video buffer as a layer to render
183bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
184bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
18532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_buffer_layer(struct vl_compositor_state *state,
18632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König                               struct vl_compositor *compositor,
187bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König                               unsigned layer,
188bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König                               struct pipe_video_buffer *buffer,
189d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König                               struct u_rect *src_rect,
190d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König                               struct u_rect *dst_rect,
19137f97e1753af20a7161f61e99cb203b214e00641Christian König                               enum vl_compositor_deinterlace deinterlace);
192bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
193bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
194bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set a paletted sampler as a layer to render
195bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
196bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
19732c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_palette_layer(struct vl_compositor_state *state,
19832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König                                struct vl_compositor *compositor,
199bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König                                unsigned layer,
200bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König                                struct pipe_sampler_view *indexes,
201bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König                                struct pipe_sampler_view *palette,
202d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König                                struct u_rect *src_rect,
203d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König                                struct u_rect *dst_rect,
2044f37636afb5adc299ecbe497209702a47039580cChristian König                                bool include_color_conversion);
205bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
206bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
207bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set a rgba sampler as a layer to render
208bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
209bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
21032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_rgba_layer(struct vl_compositor_state *state,
21132c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König                             struct vl_compositor *compositor,
212bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König                             unsigned layer,
213bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König                             struct pipe_sampler_view *rgba,
214d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König                             struct u_rect *src_rect,
215b90727bb241e4a04158d34aad078cb18e478fea7Christian König                             struct u_rect *dst_rect,
216b90727bb241e4a04158d34aad078cb18e478fea7Christian König                             struct vertex4f *colors);
217bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
218bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/*@}*/
219bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
220bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
221bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * render the layers to the frontbuffer
222bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */
223bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
22432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_render(struct vl_compositor_state *state,
22532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König                     struct vl_compositor       *compositor,
22632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König                     struct pipe_surface        *dst_surface,
22732c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König                     struct u_rect              *dirty_area);
228bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König
229bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/**
23002e191cb6aa13286fff956a7929959d7cee7241dEmeric Grange * destroy this compositor
23102e191cb6aa13286fff956a7929959d7cee7241dEmeric Grange */
232bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid
233bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvl_compositor_cleanup(struct vl_compositor *compositor);
234e00da1476fcdf8e5877fc1e62118080f5c4193f0Younes Manton
23532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König/**
23632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König * destroy this state bag
23732c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König */
23832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvoid
23932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_cleanup_state(struct vl_compositor_state *state);
24032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König
241f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#endif /* vl_compositor_h */
242