Remove nvnc_set_dimensions()

This information is now figured out based on the nvnc_fb passed into
nvnc_set_buffer()
pull/30/head
Andri Yngvason 2020-04-12 16:08:33 +00:00
parent 97899ed045
commit 737dd311a0
5 changed files with 37 additions and 47 deletions

View File

@ -139,7 +139,6 @@ int main(int argc, char* argv[])
struct nvnc* server = nvnc_open("127.0.0.1", 5900);
nvnc_set_dimensions(server, width, height, format);
nvnc_set_name(server, "Draw");
nvnc_set_pointer_fn(server, on_pointer_event);
nvnc_set_userdata(server, &draw);

View File

@ -49,11 +49,6 @@ int main(int argc, char* argv[])
struct nvnc* server = nvnc_open("127.0.0.1", 5900);
int width = nvnc_fb_get_width(fb);
int height = nvnc_fb_get_height(fb);
uint32_t fourcc_format = nvnc_fb_get_fourcc_format(fb);
nvnc_set_dimensions(server, width, height, fourcc_format);
nvnc_set_buffer(server, fb);
nvnc_set_name(server, file);

View File

@ -81,20 +81,13 @@ struct nvnc_client {
LIST_HEAD(nvnc_client_list, nvnc_client);
struct vnc_display {
uint16_t width;
uint16_t height;
uint32_t pixfmt; /* fourcc pixel format */
char name[256];
};
struct nvnc {
struct nvnc_common common;
int fd;
struct aml_handler* poll_handle;
struct aml_idle* dispatch_handler;
struct nvnc_client_list clients;
struct vnc_display display;
char name[256];
void* userdata;
nvnc_key_fn key_fn;
nvnc_pointer_fn pointer_fn;

View File

@ -57,9 +57,6 @@ void* nvnc_get_userdata(const void* self);
struct nvnc* nvnc_get_server(const struct nvnc_client* client);
void nvnc_set_dimensions(struct nvnc* self, uint16_t width, uint16_t height,
uint32_t fourcc_format);
void nvnc_set_buffer(struct nvnc*, struct nvnc_fb*);
void nvnc_set_name(struct nvnc* self, const char* name);

View File

@ -348,28 +348,31 @@ static void disconnect_all_other_clients(struct nvnc_client* client)
static void send_server_init_message(struct nvnc_client* client)
{
struct nvnc* server = client->server;
struct vnc_display* display = &server->display;
size_t name_len = strlen(display->name);
size_t name_len = strlen(server->name);
size_t size = sizeof(struct rfb_server_init_msg) + name_len;
if (!server->buffer) {
log_debug("Tried to send init message, but not buffer has been set\n");
goto close;
}
uint16_t width = nvnc_fb_get_width(server->buffer);
uint16_t height = nvnc_fb_get_height(server->buffer);
uint32_t fourcc = nvnc_fb_get_fourcc_format(server->buffer);
struct rfb_server_init_msg* msg = calloc(1, size);
if (!msg) {
stream_close(client->net_stream);
client_unref(client);
return;
}
if (!msg)
goto close;
msg->width = htons(display->width),
msg->height = htons(display->height), msg->name_length = htonl(name_len),
memcpy(msg->name_string, display->name, name_len);
msg->width = htons(width);
msg->height = htons(height);
msg->name_length = htonl(name_len);
memcpy(msg->name_string, server->name, name_len);
int rc = rfb_pixfmt_from_fourcc(&msg->pixel_format, display->pixfmt);
if (rc < 0) {
stream_close(client->net_stream);
client_unref(client);
return;
}
int rc = rfb_pixfmt_from_fourcc(&msg->pixel_format, fourcc);
if (rc < 0)
goto pixfmt_failure;
msg->pixel_format.red_max = htons(msg->pixel_format.red_max);
msg->pixel_format.green_max = htons(msg->pixel_format.green_max);
@ -377,6 +380,14 @@ static void send_server_init_message(struct nvnc_client* client)
struct rcbuf* payload = rcbuf_new(msg, size);
stream_send(client->net_stream, payload, NULL, NULL);
return;
pixfmt_failure:
free(msg);
close:
stream_close(client->net_stream);
client_unref(client);
}
static int on_init_message(struct nvnc_client* client)
@ -834,7 +845,7 @@ struct nvnc* nvnc_open(const char* address, uint16_t port)
if (!self)
return NULL;
strcpy(self->display.name, DEFAULT_NAME);
strcpy(self->name, DEFAULT_NAME);
LIST_INIT(&self->clients);
@ -1063,9 +1074,13 @@ void nvnc_damage_region(struct nvnc* self, const struct pixman_region16* damage)
EXPORT
void nvnc_damage_whole(struct nvnc* self)
{
assert(self->buffer);
uint16_t width = nvnc_fb_get_width(self->buffer);
uint16_t height = nvnc_fb_get_height(self->buffer);
struct pixman_region16 damage;
pixman_region_init_rect(&damage, 0, 0, self->display.width,
self->display.height);
pixman_region_init_rect(&damage, 0, 0, width, height);
nvnc_damage_region(self, &damage);
pixman_region_fini(&damage);
}
@ -1120,15 +1135,6 @@ void nvnc_set_client_cleanup_fn(struct nvnc_client* self, nvnc_client_fn fn)
self->cleanup_fn = fn;
}
EXPORT
void nvnc_set_dimensions(struct nvnc* self, uint16_t width, uint16_t height,
uint32_t fourcc_format)
{
self->display.width = width;
self->display.height = height;
self->display.pixfmt = fourcc_format;
}
EXPORT
void nvnc_set_buffer(struct nvnc* self, struct nvnc_fb* fb)
{
@ -1148,8 +1154,8 @@ struct nvnc* nvnc_get_server(const struct nvnc_client* client)
EXPORT
void nvnc_set_name(struct nvnc* self, const char* name)
{
strncpy(self->display.name, name, sizeof(self->display.name));
self->display.name[sizeof(self->display.name) - 1] = '\0';
strncpy(self->name, name, sizeof(self->name));
self->name[sizeof(self->name) - 1] = '\0';
}
EXPORT