libnx
buffer_producer.h
1 #pragma once
2 #include "../gfx/nvioctl.h"
3 
4 typedef struct {
5  u32 is_valid;
6  nvioctl_fence nv_fences[4];
8 
9 typedef struct {
10  s32 left;
11  s32 top;
12  s32 right;
13  s32 bottom;
15 
16 typedef struct {
17  s64 timestamp;
18  s32 isAutoTimestamp;
19  bufferProducerRect crop;
20  s32 scalingMode;
21  u32 transform;//See the NATIVE_WINDOW_TRANSFORM_* enums.
22  u32 stickyTransform;
23  u32 unk[2];
24  bufferProducerFence fence;
26 
27 typedef struct {
28  u32 width;
29  u32 height;
30  u32 transformHint;
31  u32 numPendingBuffers;
33 
34 typedef struct {
35  u32 magic;
36  u32 width;
37  u32 height;
38  u32 stride;
39  u32 format;
40  u32 usage;
41 
42  u32 pid;
43  u32 refcount;
44 
45  u32 numFds;
46  u32 numInts;
47 
48  struct {//Actual size is numFds*4 + numInts*4.
49  u32 unk_x0;
50  u32 nvmap_handle0;
51  u32 unk_x8;
52  u32 unk_xc;
53  u32 unk_x10;
54  u32 unk_x14;
55  u32 unk_x18;
56  u32 unk_x1c;
57  u32 unk_x20;
58  u32 width_unk0;
59  u32 buffer_size0;
60  u32 unk_x2c;
61  u32 unk_x30;
62  u32 width_unk1;
63  u32 height_unk;
64  u32 flags;
65  u32 unk_x40;
66  u32 unk_x44;
67  u32 byte_stride;
68  u32 nvmap_handle1;
69  u32 buffer_offset;
70  u32 unk_x54;
71  u32 unk_x58;
72  u32 unk_x5c;
73  u32 unk_x60;
74  u32 unk_x64;
75  u32 unk_x68;
76  u32 buffer_size1;
77  u32 unk_x70[0x33];//Normally all-zero.
78  u64 timestamp;
79  } PACKED data;
81 
82 //From Android window.h.
83 /* attributes queriable with query() */
84 enum {
85  NATIVE_WINDOW_WIDTH = 0,
86  NATIVE_WINDOW_HEIGHT = 1,
87  NATIVE_WINDOW_FORMAT = 2,
88 //...
89 // NATIVE_WINDOW_DEFAULT_WIDTH = 6, //These two return invalid data.
90 // NATIVE_WINDOW_DEFAULT_HEIGHT = 7,
91 };
92 
93 //From Android window.h.
94 /* parameter for NATIVE_WINDOW_[API_][DIS]CONNECT */
95 enum {
96  //...
97  /* Buffers will be queued after being filled using the CPU
98  */
99  NATIVE_WINDOW_API_CPU = 2,
100  //...
101 };
102 
103 //From Android hardware.h.
104 
105 /**
106  * Transformation definitions
107  *
108  * IMPORTANT NOTE:
109  * HAL_TRANSFORM_ROT_90 is applied CLOCKWISE and AFTER HAL_TRANSFORM_FLIP_{H|V}.
110  *
111  */
112 
113 enum {
114  /* flip source image horizontally (around the vertical axis) */
115  HAL_TRANSFORM_FLIP_H = 0x01,
116  /* flip source image vertically (around the horizontal axis)*/
117  HAL_TRANSFORM_FLIP_V = 0x02,
118  /* rotate source image 90 degrees clockwise */
119  HAL_TRANSFORM_ROT_90 = 0x04,
120  /* rotate source image 180 degrees */
121  HAL_TRANSFORM_ROT_180 = 0x03,
122  /* rotate source image 270 degrees clockwise */
123  HAL_TRANSFORM_ROT_270 = 0x07,
124 };
125 
126 //From Android window.h.
127 /* parameter for NATIVE_WINDOW_SET_BUFFERS_TRANSFORM */
128 enum {
129  /* flip source image horizontally */
130  NATIVE_WINDOW_TRANSFORM_FLIP_H = HAL_TRANSFORM_FLIP_H,
131  /* flip source image vertically */
132  NATIVE_WINDOW_TRANSFORM_FLIP_V = HAL_TRANSFORM_FLIP_V,
133  /* rotate source image 90 degrees clock-wise */
134  NATIVE_WINDOW_TRANSFORM_ROT_90 = HAL_TRANSFORM_ROT_90,
135  /* rotate source image 180 degrees */
136  NATIVE_WINDOW_TRANSFORM_ROT_180 = HAL_TRANSFORM_ROT_180,
137  /* rotate source image 270 degrees clock-wise */
138  NATIVE_WINDOW_TRANSFORM_ROT_270 = HAL_TRANSFORM_ROT_270,
139 };
140 
141 Result bufferProducerInitialize(Binder *session);
142 void bufferProducerExit(void);
143 
144 Result bufferProducerRequestBuffer(s32 bufferIdx, bufferProducerGraphicBuffer *buf);
145 Result bufferProducerDequeueBuffer(bool async, u32 width, u32 height, s32 format, u32 usage, s32 *buf, bufferProducerFence *fence);
146 Result bufferProducerDetachBuffer(s32 slot);
147 Result bufferProducerQueueBuffer(s32 buf, bufferProducerQueueBufferInput *input, bufferProducerQueueBufferOutput *output);
148 Result bufferProducerQuery(s32 what, s32* value);
149 Result bufferProducerConnect(s32 api, bool producerControlledByApp, bufferProducerQueueBufferOutput *output);
150 Result bufferProducerDisconnect(s32 api);
151 Result bufferProducerGraphicBufferInit(s32 buf, bufferProducerGraphicBuffer *input);
#define PACKED
Packs a struct (and other types?) so it won't include padding bytes.
Definition: types.h:56
Definition: buffer_producer.h:9
Definition: buffer_producer.h:34
u32 Result
Function error code result type.
Definition: types.h:46
uint64_t u64
64-bit unsigned integer.
Definition: types.h:24
Definition: nvioctl.h:54
uint32_t u32
32-bit unsigned integer.
Definition: types.h:23
Definition: buffer_producer.h:16
Definition: buffer_producer.h:27
Definition: binder.h:6
int32_t s32
32-bit signed integer.
Definition: types.h:29
Definition: buffer_producer.h:4
int64_t s64
64-bit signed integer.
Definition: types.h:30