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