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