Skip to content

Commit 500779a

Browse files
committed
make LorieBuffer handle regular pixmaps not backed but fd or ahardwarebuffer
some preparations to support transferring non-root-window pixmaps to renderer process
1 parent 8964da1 commit 500779a

File tree

4 files changed

+160
-91
lines changed

4 files changed

+160
-91
lines changed

app/src/main/cpp/lorie/InitOutput.c

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,12 @@ Bool drawSquares() {
233233
LoriePixmapPriv* priv = lorieRootWindowPixmapPriv();
234234
uint32_t* pixels = !priv ? NULL : priv->locked;
235235
if (pixels) {
236-
LorieBuffer_Desc d = {0};
237-
LorieBuffer_describe(priv->buffer, &d);
238-
int l = min(d.width, d.height) / 4, x = (d.width - l)/2, y = (d.height - l)/2;
236+
const LorieBuffer_Desc *d = LorieBuffer_description(priv->buffer);
237+
int l = min(d->width, d->height) / 4, x = (d->width - l)/2, y = (d->height - l)/2;
239238

240-
drawSquare(x - l/3, y - l/3, l, 0x00FF0000, d.stride, pixels);
241-
drawSquare(x, y, l, 0x0000FF00, d.stride, pixels);
242-
drawSquare(x + l/3, y + l/3, l, 0x000000FF, d.stride, pixels);
239+
drawSquare(x - l/3, y - l/3, l, 0x00FF0000, d->stride, pixels);
240+
drawSquare(x, y, l, 0x0000FF00, d->stride, pixels);
241+
drawSquare(x + l/3, y + l/3, l, 0x000000FF, d->stride, pixels);
243242
}
244243

245244
return FALSE;
@@ -443,7 +442,7 @@ static Bool lorieRedraw(__unused ClientPtr pClient, __unused void *closure) {
443442
// Also according to AHardwareBuffer docs simultaneous reading in rendering thread and
444443
// locking for writing in other thread is fine.
445444
LorieBuffer_unlock(priv->buffer);
446-
status = LorieBuffer_lock(priv->buffer, NULL, &priv->locked);
445+
status = LorieBuffer_lock(priv->buffer, &priv->locked);
447446
if (status)
448447
FatalError("Failed to lock the surface: %d\n", status);
449448

@@ -778,29 +777,24 @@ void lorieSetVM(JavaVM* vm) {
778777

779778
void exaDDXDriverInit(__unused ScreenPtr pScreen) {}
780779

781-
void *lorieCreatePixmap(__unused ScreenPtr pScreen, int width, int height, __unused int depth, int usage_hint, int bpp, int *new_fb_pitch) {
780+
void *lorieCreatePixmap(__unused ScreenPtr pScreen, int width, int height, __unused int depth, int usage_hint, __unused int bpp, int *new_fb_pitch) {
782781
LoriePixmapPriv *priv;
783782
size_t size = sizeof(LoriePixmapPriv);
784-
*new_fb_pitch = ((width * bpp + FB_MASK) >> FB_SHIFT) * sizeof(FbBits);
785-
786-
if (usage_hint != CREATE_PIXMAP_USAGE_LORIEBUFFER_BACKED)
787-
size += *new_fb_pitch * height;
783+
*new_fb_pitch = 0;
788784

789785
priv = calloc(1, size);
790786
if (!priv)
791787
return NULL;
792788

793-
if (usage_hint != CREATE_PIXMAP_USAGE_LORIEBUFFER_BACKED)
789+
if (width == 0 || height == 0)
794790
return priv;
795791

796-
uint8_t type = pvfb->root.legacyDrawing ? LORIEBUFFER_REGULAR : LORIEBUFFER_AHARDWAREBUFFER;
792+
uint8_t type = usage_hint != CREATE_PIXMAP_USAGE_LORIEBUFFER_BACKED ? LORIEBUFFER_REGULAR : pvfb->root.legacyDrawing ? LORIEBUFFER_FD : LORIEBUFFER_AHARDWAREBUFFER;
797793
uint8_t format = pvfb->root.flip ? AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM : AHARDWAREBUFFER_FORMAT_B8G8R8A8_UNORM;
798794
priv->buffer = LorieBuffer_allocate(width, height, format, type);
799-
LorieBuffer_Desc d = {0};
800-
LorieBuffer_describe(priv->buffer, &d);
801-
*new_fb_pitch = d.stride * 4;
795+
*new_fb_pitch = LorieBuffer_description(priv->buffer)->stride * 4;
802796

803-
LorieBuffer_lock(priv->buffer, NULL, &priv->locked);
797+
LorieBuffer_lock(priv->buffer, &priv->locked);
804798
if (!priv->buffer) {
805799
free(priv);
806800
return NULL;

app/src/main/cpp/lorie/activity.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,10 @@ static int xcallback(int fd, int events, __unused void* data) {
192192
}
193193
case EVENT_SHARED_ROOT_WINDOW_BUFFER: {
194194
static LorieBuffer* buffer = NULL;
195-
LorieBuffer_Desc desc = {0};
195+
const LorieBuffer_Desc* desc;
196196
LorieBuffer_recvHandleFromUnixSocket(conn_fd, &buffer);
197-
LorieBuffer_describe(buffer, &desc);
198-
log(INFO, "Received shared buffer width %d height %d format %d", desc.width, desc.height, desc.format);
197+
desc = LorieBuffer_description(buffer);
198+
log(INFO, "Received shared buffer width %d height %d format %d", desc->width, desc->height, desc->format);
199199
rendererSetBuffer(buffer);
200200
LorieBuffer_release(buffer);
201201
break;
@@ -223,7 +223,7 @@ static void connect_(__unused JNIEnv* env, __unused jobject cls, jint fd) {
223223
}
224224
}
225225

226-
static jboolean connected(JNIEnv* env, jclass clazz) {
226+
static jboolean connected(__unused JNIEnv* env,__unused jclass clazz) {
227227
return conn_fd != -1;
228228
}
229229

@@ -360,15 +360,15 @@ static void sendTextEvent(JNIEnv *env, __unused jobject thiz, jbyteArray text) {
360360
}
361361
}
362362

363-
static void surfaceChanged(JNIEnv *env, jobject thiz, jobject sfc) {
363+
static void surfaceChanged(JNIEnv *env, __unused jobject thiz, jobject sfc) {
364364
ANativeWindow* win = sfc ? ANativeWindow_fromSurface(env, sfc) : NULL;
365365
if (win)
366366
ANativeWindow_acquire(win);
367367

368368
rendererSetWindow(win);
369369
}
370370

371-
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) {
371+
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, __unused void *reserved) {
372372
JNIEnv* env;
373373
static JNINativeMethod methods[] = {
374374
{"nativeInit", "()V", (void *)&nativeInit},

0 commit comments

Comments
 (0)