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. 21877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * IN NO EVENT SHALL VMWARE 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" 32f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König#include "pipe/p_video_codec.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 56e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi/* clockwise degree */ 57e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichienum vl_compositor_rotation 58e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi{ 59e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi VL_COMPOSITOR_ROTATE_0, 60e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi VL_COMPOSITOR_ROTATE_90, 61e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi VL_COMPOSITOR_ROTATE_180, 62e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi VL_COMPOSITOR_ROTATE_270 63e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi}; 64e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi 65e5f78a74f8294ee02015552db664dae1e7da9f47Christian Königstruct vl_compositor_layer 66e5f78a74f8294ee02015552db664dae1e7da9f47Christian König{ 670d53cb2e83cafb7007068192674a8b5b57a27ca4Christian König bool clearing; 680d53cb2e83cafb7007068192674a8b5b57a27ca4Christian König 6974a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König bool viewport_valid; 7074a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König struct pipe_viewport_state viewport; 7174a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König 72e5f78a74f8294ee02015552db664dae1e7da9f47Christian König void *fs; 7376d881b8b086495081c0a3c8fea2278f1480f107Christian König void *samplers[3]; 744f37636afb5adc299ecbe497209702a47039580cChristian König void *blend; 750d53cb2e83cafb7007068192674a8b5b57a27ca4Christian König 76e5f78a74f8294ee02015552db664dae1e7da9f47Christian König struct pipe_sampler_view *sampler_views[3]; 776092fbed46302e2bdf6c6f2e229f4e393652e228Christian König struct { 786092fbed46302e2bdf6c6f2e229f4e393652e228Christian König struct vertex2f tl, br; 796092fbed46302e2bdf6c6f2e229f4e393652e228Christian König } src, dst; 8037f97e1753af20a7161f61e99cb203b214e00641Christian König struct vertex2f zw; 81b90727bb241e4a04158d34aad078cb18e478fea7Christian König struct vertex4f colors[4]; 82e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi enum vl_compositor_rotation rotate; 83e5f78a74f8294ee02015552db664dae1e7da9f47Christian König}; 84e5f78a74f8294ee02015552db664dae1e7da9f47Christian König 8532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königstruct vl_compositor_state 86f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton{ 87f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton struct pipe_context *pipe; 88f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 8974a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König bool scissor_valid; 90167b1b32c5ff30d514253072ce54513112c03d4dChristian König struct pipe_scissor_state scissor; 91e5f78a74f8294ee02015552db664dae1e7da9f47Christian König struct pipe_resource *csc_matrix; 925f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton 9332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König union pipe_color_union clear_color; 9432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König 9532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König unsigned used_layers:VL_COMPOSITOR_MAX_LAYERS; 9632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct vl_compositor_layer layers[VL_COMPOSITOR_MAX_LAYERS]; 9732c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König}; 9832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König 9932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königstruct vl_compositor 10032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König{ 10132c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct pipe_context *pipe; 1022b033f3aab8267eb6499954fe4a582472f91ef28Marek Olšák struct u_upload_mgr *upload; 10332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König 10432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct pipe_framebuffer_state fb_state; 10532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct pipe_vertex_buffer vertex_buf; 10632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König 10776d881b8b086495081c0a3c8fea2278f1480f107Christian König void *sampler_linear; 10876d881b8b086495081c0a3c8fea2278f1480f107Christian König void *sampler_nearest; 1094f37636afb5adc299ecbe497209702a47039580cChristian König void *blend_clear, *blend_add; 110255033e4819b096491dd987c3ca4d8ee32a7cdb6Christian König void *rast; 1118082816e27a0ee376e679c4d81ff8a3f0611ea9eYounes Manton void *dsa; 112e5f78a74f8294ee02015552db664dae1e7da9f47Christian König void *vertex_elems_state; 113f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 114e5f78a74f8294ee02015552db664dae1e7da9f47Christian König void *vs; 115e5f78a74f8294ee02015552db664dae1e7da9f47Christian König void *fs_video_buffer; 1162e18c2c6f86342e7ea77b0f1a1f731f879db0ed3Leo Liu void *fs_weave_rgb; 117e5f78a74f8294ee02015552db664dae1e7da9f47Christian König void *fs_rgba; 1185f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton 1194f37636afb5adc299ecbe497209702a47039580cChristian König struct { 12014761da9f9bc132b061d4cfa4d7dd93d1b113f6bLeo Liu void *y; 12114761da9f9bc132b061d4cfa4d7dd93d1b113f6bLeo Liu void *uv; 12214761da9f9bc132b061d4cfa4d7dd93d1b113f6bLeo Liu } fs_weave_yuv; 12314761da9f9bc132b061d4cfa4d7dd93d1b113f6bLeo Liu 12414761da9f9bc132b061d4cfa4d7dd93d1b113f6bLeo Liu struct { 1254f37636afb5adc299ecbe497209702a47039580cChristian König void *rgb; 1264f37636afb5adc299ecbe497209702a47039580cChristian König void *yuv; 1274f37636afb5adc299ecbe497209702a47039580cChristian König } fs_palette; 128e5f78a74f8294ee02015552db664dae1e7da9f47Christian König}; 129f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 130bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 131bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * initialize this compositor 132bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 133bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königbool 134bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvl_compositor_init(struct vl_compositor *compositor, struct pipe_context *pipe); 135bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 136bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 13732c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König * init state bag 13832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König */ 13932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königbool 14032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_init_state(struct vl_compositor_state *state, struct pipe_context *pipe); 14132c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König 14232c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König/** 143bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set yuv -> rgba conversion matrix 144bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 145cee5af93ee5ea9e3c4dd19047952fec6bcfed2b6Nayan Deshmukhbool 146f24eb5a17830b8137045a626dbd55e75ed5e708dNayan Deshmukhvl_compositor_set_csc_matrix(struct vl_compositor_state *settings, 147f24eb5a17830b8137045a626dbd55e75ed5e708dNayan Deshmukh const vl_csc_matrix *matrix, 148f24eb5a17830b8137045a626dbd55e75ed5e708dNayan Deshmukh float luma_min, float luma_max); 149bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 150bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 151bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * reset dirty area, so it's cleared with the clear colour 152bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 153bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid 154167b1b32c5ff30d514253072ce54513112c03d4dChristian Königvl_compositor_reset_dirty_area(struct u_rect *dirty); 155bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 156bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 157bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set the clear color 158bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 159bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid 16032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_clear_color(struct vl_compositor_state *settings, union pipe_color_union *color); 16142fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grange 16242fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grange/** 16342fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grange * get the clear color 16442fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grange */ 16542fddacabafebd4c9f1ba2f8f94192f8f4f76fceEmeric Grangevoid 16632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_get_clear_color(struct vl_compositor_state *settings, union pipe_color_union *color); 16732c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König 16832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König/** 16932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König * set the destination clipping 17032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König */ 17132c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvoid 172d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian Königvl_compositor_set_dst_clip(struct vl_compositor_state *settings, struct u_rect *dst_clip); 173bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 174bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 175bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set overlay samplers 176bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 177bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/*@{*/ 178bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 179bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 180bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * reset all currently set layers 181bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 182bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid 18332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_clear_layers(struct vl_compositor_state *state); 184bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 185bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 1864f37636afb5adc299ecbe497209702a47039580cChristian König * set the blender used to render a layer 1874f37636afb5adc299ecbe497209702a47039580cChristian König */ 1884f37636afb5adc299ecbe497209702a47039580cChristian Königvoid 18932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_layer_blend(struct vl_compositor_state *state, 1904f37636afb5adc299ecbe497209702a47039580cChristian König unsigned layer, void *blend, bool is_clearing); 1914f37636afb5adc299ecbe497209702a47039580cChristian König 1924f37636afb5adc299ecbe497209702a47039580cChristian König/** 19374a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König * set the layer destination area 19474a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König */ 19574a4e9089488e7f341d21053bbf2d4aa52b99b70Christian Königvoid 19674a4e9089488e7f341d21053bbf2d4aa52b99b70Christian Königvl_compositor_set_layer_dst_area(struct vl_compositor_state *settings, 19774a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König unsigned layer, struct u_rect *dst_area); 19874a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König 19974a4e9089488e7f341d21053bbf2d4aa52b99b70Christian König/** 200bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set a video buffer as a layer to render 201bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 202bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid 20332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_buffer_layer(struct vl_compositor_state *state, 20432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct vl_compositor *compositor, 205bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König unsigned layer, 206bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König struct pipe_video_buffer *buffer, 207d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König struct u_rect *src_rect, 208d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König struct u_rect *dst_rect, 20937f97e1753af20a7161f61e99cb203b214e00641Christian König enum vl_compositor_deinterlace deinterlace); 210bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 211bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 212bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set a paletted sampler as a layer to render 213bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 214bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid 21532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_palette_layer(struct vl_compositor_state *state, 21632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct vl_compositor *compositor, 217bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König unsigned layer, 218bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König struct pipe_sampler_view *indexes, 219bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König struct pipe_sampler_view *palette, 220d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König struct u_rect *src_rect, 221d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König struct u_rect *dst_rect, 2224f37636afb5adc299ecbe497209702a47039580cChristian König bool include_color_conversion); 223bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 224bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 225bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * set a rgba sampler as a layer to render 226bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 227bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid 22832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_set_rgba_layer(struct vl_compositor_state *state, 22932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct vl_compositor *compositor, 230bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König unsigned layer, 231bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König struct pipe_sampler_view *rgba, 232d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König struct u_rect *src_rect, 233b90727bb241e4a04158d34aad078cb18e478fea7Christian König struct u_rect *dst_rect, 234b90727bb241e4a04158d34aad078cb18e478fea7Christian König struct vertex4f *colors); 235bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 236e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi/** 237e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi * set the layer rotation 238e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi */ 239e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichivoid 240e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichivl_compositor_set_layer_rotation(struct vl_compositor_state *state, 241e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi unsigned layer, 242e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi enum vl_compositor_rotation rotate); 243e7e207658c6adb3dfd98038c248efde70fd43056Kusanagi Kouichi 24482f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu/** 24582f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu * set a layer of y or uv to render 24682f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu */ 24782f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liuvoid 24882f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liuvl_compositor_set_yuv_layer(struct vl_compositor_state *s, 24982f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu struct vl_compositor *c, 25082f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu unsigned layer, 25182f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu struct pipe_video_buffer *buffer, 25282f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu struct u_rect *src_rect, 25382f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu struct u_rect *dst_rect, 25482f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu bool y); 25582f875f4d800d05b04a8174e8863b2b70276bbb0Leo Liu 256bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/*@}*/ 257bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 258bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 259bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König * render the layers to the frontbuffer 260bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König */ 261bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid 26232c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_render(struct vl_compositor_state *state, 26332c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct vl_compositor *compositor, 26432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König struct pipe_surface *dst_surface, 265e27f87b549cf2d4cfef97958ff175862fdf494b0Christian König struct u_rect *dirty_area, 266e27f87b549cf2d4cfef97958ff175862fdf494b0Christian König bool clear_dirty); 267bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König 268bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König/** 26902e191cb6aa13286fff956a7929959d7cee7241dEmeric Grange * destroy this compositor 27002e191cb6aa13286fff956a7929959d7cee7241dEmeric Grange */ 271bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvoid 272bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian Königvl_compositor_cleanup(struct vl_compositor *compositor); 273e00da1476fcdf8e5877fc1e62118080f5c4193f0Younes Manton 27432c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König/** 27532c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König * destroy this state bag 27632c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König */ 27732c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvoid 27832c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian Königvl_compositor_cleanup_state(struct vl_compositor_state *state); 27932c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König 280f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#endif /* vl_compositor_h */ 281