Commit Graph

312 Commits (103fbe996ef245d9c5b3539c70ce4bfe88814753)

Author SHA1 Message Date
Andri Yngvason aca09358ea Add back damage argument to nvnc_set_cursor
It's better to keep feeding buffers to keep buffers in rotation for damage
tracking purposes.
2022-02-21 21:43:41 +00:00
Andri Yngvason 9c02e6afaf Implement hiding cursors 2022-02-20 14:48:24 +00:00
Andri Yngvason 1553c88f5e Add width and height arguments to nvnc_set_cursor 2022-02-19 23:06:15 +00:00
Andri Yngvason afc0f018da cursor: Use the right scan-line length when width != stride 2022-02-19 21:51:24 +00:00
Andri Yngvason cb282c57c4 cursor: Map cursor buffers before access 2022-02-13 18:44:27 +00:00
Andri Yngvason c876b91541 pixels: Add function to get rfb pixel format name 2022-02-12 13:15:30 +00:00
Andri Yngvason 0e0fe5b73a pixels: Add function to convert drm format to string 2022-02-12 12:30:12 +00:00
Andri Yngvason 70784e1bcc cursor: Fix alpha mask stride 2022-02-10 21:53:33 +00:00
Andri Yngvason 9a292afd52 pixels: Handle different endianness for alpha mask 2022-02-10 21:53:33 +00:00
Andri Yngvason 48baf74560 Implement client side cursor rendering 2022-02-06 16:33:46 +00:00
Andri Yngvason 258dccd768 Add a cursor encoder 2022-02-06 16:33:46 +00:00
Andri Yngvason 0cc6be091c pixels: Add function to extract alpha mask 2022-02-06 15:01:33 +00:00
Andri Yngvason 613761cf5f h264-encoder: Add 30 bit color depth formats 2022-01-27 22:31:32 +00:00
Andri Yngvason 648255769a pixels: Add 10-bits-per-colour formats 2022-01-27 22:11:51 +00:00
Andri Yngvason fd23cb8c2f enc-util: Round up division in calc_bytes_per_cpixel
Otherwise 10 bit formats will be mistaken for 8 bit formats.
2022-01-27 22:10:37 +00:00
Andri Yngvason 5dc6a28828 h264-encoder: Automatically find a render node 2021-12-26 13:10:41 +00:00
Andri Yngvason 5a75fdf2bc display: Only run damage refinery when it's needed 2021-12-26 13:10:41 +00:00
Andri Yngvason c5a5437a9e server: Keep a count of clients that use damage 2021-12-26 13:10:41 +00:00
Andri Yngvason 55beea3464 open-h264: Set "ignores-damage" flag 2021-12-26 13:10:41 +00:00
Andri Yngvason 90f61f03c6 Plug open h264 2021-12-26 13:10:41 +00:00
Andri Yngvason 0a70f7fa6a encoder: Add push/pull encoder interface 2021-12-26 13:10:41 +00:00
Andri Yngvason e1ba4e1085 API: Add nvnc_fb_get_type 2021-12-26 13:10:41 +00:00
Andri Yngvason 15c14d7d4b Create an Open h.264 encoder 2021-12-26 13:10:41 +00:00
Andri Yngvason b71598b334 Create h264-encoder 2021-12-26 13:10:41 +00:00
Andri Yngvason 65c0e91c37 Move update header out of encoders 2021-12-12 16:05:29 +00:00
Andri Yngvason 8b2c81c3dd Add offset coordinates to encoders 2021-12-11 21:55:56 +00:00
Andri Yngvason 42b102df0c Remove unused headers 2021-12-11 21:07:41 +00:00
Andri Yngvason a7241658b0 Create encoder abstraction 2021-12-11 21:03:18 +00:00
Andri Yngvason 66942ab913 display: Clean up transformed damage region
This fixes a memory leak
2021-12-11 20:58:17 +00:00
Andri Yngvason 783ac9d99d fb: Unmap released fbs 2021-09-20 22:06:08 +00:00
Andri Yngvason 10c0b9131c fb: Fix mapped gbm buffer stride 2021-09-20 21:57:56 +00:00
Andri Yngvason 26ff812ea6 Add damage refinery from wayvnc 2021-09-20 21:40:21 +00:00
Andri Yngvason ff3dc13f0b resampler: Track buffer damage 2021-09-20 21:40:21 +00:00
Andri Yngvason 943bd33993 resampler: Make resampler object opaque 2021-09-20 21:40:21 +00:00
Andri Yngvason 3b24dbd6a4 resampler: Transform output buffer dimensions based on input transform 2021-09-20 21:40:21 +00:00
Andri Yngvason 0d4ab56568 transform-util: Add dimensions transform function 2021-09-19 21:11:54 +00:00
Andri Yngvason 02559a7f7e Re-sample transformed framebuffers 2021-09-19 20:12:30 +00:00
Andri Yngvason 691e835d1b fb: Add transform attribute 2021-09-19 19:56:56 +00:00
Andri Yngvason 784af9fa5d Add transform utility functions from wayvnc 2021-09-19 19:54:59 +00:00
Andri Yngvason dad7312814 pixels: Add fourcc_to_pixman_fmt 2021-09-19 19:54:23 +00:00
Andri Yngvason cf42f76f56 Add gbm_bo nvnc_fb type 2021-09-12 18:51:22 +00:00
Andri Yngvason a14b829743 fb: Fix buffer allocation
Width and height got mixed up.
2021-09-11 18:17:01 +00:00
Andri Yngvason dad1948e98 Remove nvnc_fb_flags 2021-09-05 00:46:24 +00:00
Andri Yngvason b75eeac03d Add API function for creating nvnc_fb from an pre-allocated buffer 2021-09-05 00:46:24 +00:00
Andri Yngvason 96886e21d5 Add a API function to get the pixel size of nvnc_fb 2021-09-05 00:46:24 +00:00
Andri Yngvason c7dd062498 Add a stride parameter to nvnc_fb 2021-09-05 00:46:24 +00:00
Andri Yngvason e8e4a9469a Remove damage checker
There's a much better one in wayvnc
2021-09-05 00:46:24 +00:00
Andri Yngvason 2095913688 display & fb_pool: Clean up memory leaks 2021-09-04 21:21:23 +00:00
Andri Yngvason 77d8efcbe3 fb_pool: Return true from resize when dimensions change 2021-09-04 21:21:23 +00:00
Andri Yngvason 1b7b51af44 Add a cleanup callback to nvnc_set_userdata 2021-09-04 21:21:23 +00:00
Andri Yngvason 41c9ebe960 server: process fb update requests in fb update request message handler
Otherwise, the client won't get the initial frame
2021-09-04 21:21:23 +00:00
Andri Yngvason e16a64a67d fb_pool: Fix reference counting error 2021-09-04 21:21:23 +00:00
Andri Yngvason f5b0f508f0 fb: Use special context pointer for release callback 2021-09-04 21:21:23 +00:00
Andri Yngvason f566105ab5 Remove nvnc_set_render_fn 2021-09-04 21:21:23 +00:00
Andri Yngvason 981256d8d5 Add a buffer pool 2021-09-04 21:21:23 +00:00
Andri Yngvason d63feadeab Notify the user when an fb is released 2021-09-04 21:21:23 +00:00
Andri Yngvason 031555c85d fb: Add hold/release logic 2021-09-04 21:21:23 +00:00
Ryan Farley b320723049 Support UNIX sockets
Adds support for UNIX domain sockets with `nvnc_open_unix()` function.
Closes #1.
2021-04-04 20:24:33 +00:00
Andri Yngvason 1359b987a3 Translate XT keycodes to linux keycodes 2020-11-29 20:48:31 +00:00
Andri Yngvason f547ed72f9 Decrement pending requests when sending pseudo frames 2020-11-29 18:36:48 +00:00
Andri Yngvason ea98af75de Notify client about qemu key capability 2020-11-29 18:36:48 +00:00
Andri Yngvason dbe35bc3ad Add qemu extended key events 2020-11-29 18:36:48 +00:00
Andri Yngvason e69006fc48 tight: Hold fb and client refs while encoding 2020-09-27 17:17:22 +00:00
Andri Yngvason af38a643d9 tight: Don't block 1 worker while encoding tiles 2020-09-27 12:37:00 +00:00
Andri Yngvason 9e84000e0a server: Extract finish_fb_update() from on_client_update_fb_done() 2020-09-26 22:29:02 +00:00
Andri Yngvason add8d8e8db server: Move pixel format conversion out of do_client_update_fb 2020-09-26 22:17:02 +00:00
Andri Yngvason 7e2b4fef8c server: Refactor schedule_client_update_fb 2020-09-26 22:00:53 +00:00
Andri Yngvason 24a6e29cf2 raw-encoder: Use encder utils 2020-09-26 16:19:02 +00:00
Andri Yngvason 413e6e7e72 zrle: Use encoder utils 2020-09-26 16:16:36 +00:00
Andri Yngvason 31b7077bc5 tight: Use encoder utils 2020-09-26 16:13:17 +00:00
Andri Yngvason 25a533e22b Add common utilities for encoders 2020-09-26 16:10:25 +00:00
Scott Moreau 81a8ba9d0e server: Handle cut text messages of up to 10MB 2020-09-25 21:47:59 +00:00
Scott Moreau 783807c0b9 server: Fix possible crash on fragmented packet messages
The packets sent from the client especially for client cut text,
are typically sent in two packets, one for the message containing
the type and length and the other for the actual data. Sometimes
the first message is read but we still don't have the data yet.
We need to continue reading data to use the structure but this
revealed a bug. The client event handler was calling memmove()
with buffer_index as the size argument. This meant that it was
copying the wrong amount of data, resulting in garbage at the
end of the expected data. This patch fixes the problem by first
subtracting buffer_index from buffer_len and then moving buffer_len
worth of data, which is what was read into msg_buffer. The problem
possibly manifested itself with random crashes, after reading
random data.
2020-09-21 21:15:45 +00:00
Scott Moreau 6d29937e15 server: Add remaining support for simple copy/paste
- Add function to set callback for client_cut_text
- Add server_cut_text structure and function

This in conjunction with wayvnc #66 closes #4.
2020-09-21 21:15:45 +00:00
Andri Yngvason addcc50483 Bake version info into library 2020-07-26 11:43:29 +00:00
Andri Yngvason e1c0923915 stream: Add byte counters 2020-07-26 11:43:29 +00:00
Andri Yngvason b52f5cd6c9 Resize tight encoder on frame resize 2020-07-19 16:58:55 +00:00
Andri Yngvason 76beec6415 tight: Add method to resize encoder grid 2020-07-19 16:57:44 +00:00
Andri Yngvason d4a5ed4133 stream: Ignore events after close instead of aborting
Aborting places an unnecessary restriction on the event loop library.
2020-07-19 13:22:57 +00:00
Andri Yngvason a0801f04e4 Implement server-side resizing 2020-07-19 11:54:39 +00:00
Andri Yngvason eb4b9d71a4 Return failure if display buffer is not set in on_connect 2020-07-18 14:04:12 +00:00
Andri Yngvason 683776cdf0 server: Assert that a client has a stream open when processing a message 2020-07-16 18:14:52 +00:00
Andri Yngvason 33eda8c5d0 Always enable tight, encoding but allow disabling lossy tight encoding 2020-07-11 20:16:27 +00:00
Andri Yngvason 497f9adb29 tight: Re-implement with threads 2020-07-11 20:06:45 +00:00
Andri Yngvason 9b54f6d936 Clean up dispatch hander on exit 2020-07-06 16:43:53 +00:00
Andri Yngvason 52e30e795b Align with neatvnc API changes 2020-07-06 16:43:15 +00:00
Andri Yngvason 7fb2215c0f Use raw encoding by default if no encoding has been selected
This complies with the standard.
2020-05-31 22:56:27 +00:00
Andri Yngvason 569ad287c5 Fix version error handling 2020-05-29 20:18:05 +00:00
Andri Yngvason 91bd49848f Build benchmarks again 2020-05-27 21:59:34 +00:00
Stefan Agner d2527e57f0 fix build warnings when building without tls
Fix trivial build warnings when building without TLS support.
2020-05-22 20:54:53 +00:00
Stefan Agner 8f9c71bb33 fix below zero message count check
size_t is unsigned and hence can't be below zero, triggering this gcc
warning with gcc 10:
  warning: comparison of unsigned expression in ‘< 0’ is always false [-Wtype-limits]

It seems this if statement is meant to check if there are messages to
process (larger than 0). If there are no messages, we should jump out
early.
2020-05-21 17:44:31 +00:00
Stefan Agner a37eed4a4a remove fb_lock/unlock
The two functions have been removed from the external header file.
Remove them and the now unnecessary field is_locked.
2020-05-21 17:44:31 +00:00
Stefan Agner 8316994dfa use static for functions not used outside this compile unit
Add static for all functions only used inside the individual compile
units. This helps the compiler to potentially inline these functions.

This allows to use neatvnc as a Meson subproject in Weston which has
-Wmissing-prototypes enabled by default.
2020-05-21 17:44:31 +00:00
Andri Yngvason 477ab4c481 tight: Allow lossy encoding with 16 bpp 2020-05-05 21:34:45 +00:00
Andri Yngvason f3e09fd622 Prepare API for multi-display support
These changes are made now to make it possible to add multi-display
support in the future while keeping the public interface stable.
2020-04-12 18:16:19 +00:00
Andri Yngvason 737dd311a0 Remove nvnc_set_dimensions()
This information is now figured out based on the nvnc_fb passed into
nvnc_set_buffer()
2020-04-12 16:08:33 +00:00
Andri Yngvason d12e66b043 raw-encoding: Add copyright notice 2020-04-12 13:18:42 +00:00
Andri Yngvason 2b2d12c755 damage: Add copyright notice 2020-04-12 13:18:28 +00:00
Andri Yngvason a616423c49 fb: Add copyright notice 2020-04-12 13:17:54 +00:00
Andri Yngvason c6f1ab616e tight: Replace an assert with return -1 2020-04-10 12:40:57 +00:00
Andri Yngvason 0350ba1d16 zrle: Replace an assert with return -1 2020-04-10 12:36:51 +00:00
Andri Yngvason 297e22b588 Don't render when a client is still encoding 2020-04-10 12:07:35 +00:00
Andri Yngvason 1c2a2231d6 tight: Don't drop MSB when encoding rect size 2020-04-10 11:51:40 +00:00
Andri Yngvason 77b866096d Redesign framebuffer update loop
Rendering may now only happen inside the rendering callback. The user is
also allowed to change out the entire buffer in the callback.

The callback is triggered by nvnc_damage_region(), nvnc_damage_whole()
and/or framebuffer update requests.

This fixes #26
2020-04-07 23:35:57 +00:00
Andri Yngvason 048b796ff5 Enable SO_REUSEADDR again 2020-04-06 18:29:17 +00:00
Andri Yngvason 11a73c5cb0 Revert "tight: Limit rectangle max width according to spec"
This reverts commit 999c1ef255.

This sends more rects than the original rect count allows for.
2020-04-06 00:01:32 +00:00
Andri Yngvason 1976221afe Resolve host names in nvnc_open()
This fixes #23
2020-04-04 22:26:00 +00:00
Andri Yngvason 8fc5c18b28 Don't show partial frames to new clients 2020-04-04 14:00:03 +00:00
Andri Yngvason f45f90ed9b nvnc_fb: Add a mechanism for signaling that a frame is in use 2020-04-04 12:33:18 +00:00
Andri Yngvason b0799f7490 server: Add dtrace probe for stream_send inside update_fb_done 2020-04-03 23:11:12 +00:00
Andri Yngvason a54b9ddd8e tight: Check quality level at start of each frame 2020-04-03 22:54:46 +00:00
Andri Yngvason b44d1a1f58 Replace miniz with system provided zlib
miniz is simply broken, so I can't use it.
2020-04-03 22:39:55 +00:00
Andri Yngvason 25626a9048 tight: Implement quality control 2020-04-03 20:09:26 +00:00
Andri Yngvason 17e0d6036f tight: Implement bare minimum "basic" encoding 2020-04-03 00:18:54 +00:00
Andri Yngvason cfb2abfc58 tight: Prepare for "basic" encoding method 2020-04-02 21:52:04 +00:00
Andri Yngvason 999c1ef255 tight: Limit rectangle max width according to spec 2020-04-02 21:26:12 +00:00
Andri Yngvason 1724797a27 tight: Add some error handling 2020-04-02 21:12:09 +00:00
Andri Yngvason 10a3fd6238 Add dtrace probes for framebuffer updates 2020-04-01 22:53:22 +00:00
Andri Yngvason 22eba2bed8 Make sure framebuffers are properly aligned 2020-03-29 13:16:05 +00:00
Andri Yngvason f0974e5af6 stream: Close if read() == 0 2020-03-24 19:15:27 +00:00
John Axel Eriksson d1c7402acd
Remove libuv header include 2020-03-24 07:04:05 +01:00
Andri Yngvason a77eb34fba Spawn as many workers as there are CPU cores 2020-03-21 17:27:30 +00:00
Andri Yngvason 76e721c4cd Replace libuv with aml 2020-03-21 16:59:10 +00:00
Andri Yngvason 992b4445ed tight: Add copyright notice 2020-02-09 12:03:14 +00:00
Andri Yngvason 61efca48f0 damage: Increment/decrement reference count before/after check
This is prudent. The user might throw away these buffers before the
damage check finishes.
2020-01-29 21:33:13 +00:00
Andri Yngvason 10473597c5 stream: Fix flushing when tls is disabled 2020-01-29 17:03:55 +00:00
Stefan Agner 1e0612a81e Remove unused/unexisting include util.h
The header file util.h has been remvoed from the codebase with
commit caf9fe0130 ("Remove unused code"), remove it from pngfb.c as
well. This allows to build the examples again.
2020-01-26 12:45:06 +01:00
Andri Yngvason 7d2b295b4a server: Read messages straight into message buffer
This avoids extra copying and removes a possible error condition that
would cause the connection to be closed
2020-01-25 16:42:10 +00:00
Andri Yngvason 547387f549 server: Close after sending VeNCrypt failure message 2020-01-25 16:04:04 +00:00
Andri Yngvason b30a5516d3 server: Send the proper reason string on security handshake failure 2020-01-25 15:59:04 +00:00
Andri Yngvason 1687b8c701 server: Apply stream API change 2020-01-25 15:52:44 +00:00
Andri Yngvason fef9ca1d7c stream: Change api for stream_write 2020-01-25 15:46:52 +00:00
Andri Yngvason caf9fe0130 Remove unused code 2020-01-25 15:39:23 +00:00
Andri Yngvason 19e4e42036 Implement VeNCrypt with x509 plain authentication 2020-01-25 15:35:14 +00:00
Andri Yngvason 2f99659077 Create a network stream object with TLS support 2020-01-25 15:33:36 +00:00
Andri Yngvason f8d53635e4 Create a reference counted buffer 2020-01-25 15:29:25 +00:00
Andri Yngvason 01522559d6 zrle: Fix pixel conversion for bits-per-pixel < 32 2020-01-24 23:16:08 +00:00
Andri Yngvason 230acf0560 zrle: Remove unused variable 2020-01-24 23:02:47 +00:00
Andri Yngvason 4ebd60b8cc pixels: Delete useless code 2020-01-24 22:29:29 +00:00
Scott Moreau 1d897b2ba1 Swap red and blue colors with tight encoding 2020-01-20 14:29:02 -07:00
Andri Yngvason 450ea90306 pixels: Fix rfb_pixfmt_from_fourcc 2020-01-19 23:13:12 +00:00
Andri Yngvason a80b314eea server: Set the pixel format for the client if it hasn't specified one 2020-01-19 22:54:52 +00:00
Andri Yngvason 4e919c69ce Unbreak raw encoding 2020-01-19 21:31:55 +00:00
Andri Yngvason aa917decf3 pixels: Make it work for 4 bytes per cpixel 2020-01-19 21:30:49 +00:00
Andri Yngvason 7fa074e60b server: Close client if no frame encoding method is available 2020-01-19 21:27:17 +00:00
Andri Yngvason ebfe4382ee server: Use size_t for encoding indices 2020-01-19 19:17:15 +00:00
Scott Moreau db6c063aea Include sys/param.h for MIN definition
Fixes #11.
2020-01-19 12:00:18 -07:00
Jan Beich 928d0c20ac Drop unused platform-specific header
../src/zrle.c:29:10: fatal error: 'endian.h' file not found
 #include <endian.h>
          ^~~~~~~~~~
2020-01-13 04:04:28 +00:00
Andri Yngvason ad0ff6b27c Make Tight encoding optional 2019-12-31 10:13:21 +00:00
Andri Yngvason ee3f2fefff server: Extract pixel format functions into pixels.c 2019-12-30 20:13:40 +00:00