spice/server
Christophe Fergeau 4b15555fbd mjpeg: fix libjpeg assertion
After the changes to add libjpeg-turbo support to spice-server mjpeg
compression code, it's relatively easy to hit an assertion from
libjpeg in spice-server about "too few scanlines transferred" when
the mjpeg streaming code triggers. This assertion brings down qemu,
which is bad :)

This is because when we first initialize the mjpeg encoder, we do:

stream_width = SPICE_ALIGN(src_rect->right - src_rect->left, 2);
stream_height = SPICE_ALIGN(src_rect->bottom - src_rect->top, 2);

stream->mjpeg_encoder = mjpeg_encoder_new(stream_width, stream_height);

and then when we iterate over the image scanlines to feed them to
libjpeg, we do:

const int image_height = src->bottom - src->top;
const int image_width = src->right - src->left;

for (i = 0; i < image_height; i++) {
    mjpeg_encoder_encode_scanline(...);
}
mjpeg_encoder_end_frame(...);

When stream_height is odd, the mjpeg_encoder will be created with
an height that is 1 more than the number of lines we encode. Then
libjpeg asserts when we tell it we're done with the compression
while it's still waiting for one more scanline.

Looking through git history, this rounding seems to be an artifact
from when we were using ffmpeg for the mjpeg encoding. Since
spicec and spicy (the latter needs a few fixes) can handle streams
with odd height/width, the best way to solve this issue is to stop
rounding up the height and width of the streams we create. This
even saves some bandwidth :)
2011-08-01 11:01:04 +02:00
..
tests server/tests: test_util.h: fix double ASSERT definition 2011-07-20 11:05:44 +03:00
.gitignore gitignore: add generated_*, vim temps, pyc 2010-11-08 16:06:55 +02:00
agent-msg-filter.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
agent-msg-filter.h server: add discard all option to agent message filter 2011-04-04 11:30:30 +02:00
char_device.h server: add char_device.h header, use in reds.c 2010-12-06 18:09:14 +02:00
demarshallers.h Add destructor for demarshalled messages 2010-06-22 10:53:24 +02:00
glz_encode_match_tmpl.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
glz_encode_tmpl.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
glz_encoder_config.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
glz_encoder_dictionary_protected.h Fix spelling errors in comments and strings 2010-05-21 10:51:28 +02:00
glz_encoder_dictionary.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
glz_encoder_dictionary.h Fix spelling errors in comments and strings 2010-05-21 10:51:28 +02:00
glz_encoder.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
glz_encoder.h Fix spelling errors in comments and strings 2010-05-21 10:51:28 +02:00
inputs_channel.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
inputs_channel.h server/inputs_channel: remove unused declaration in inputs_channel.h 2010-12-07 21:32:34 +02:00
jpeg_encoder.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
jpeg_encoder.h JPEG support: introducing jpeg encoding for spice bitmaps 2010-06-09 11:40:25 +02:00
main_channel.c move get_time_stamp to main_channel.c 2011-05-03 14:44:12 +02:00
main_channel.h use foo(void) instead of foo() in prototypes 2011-05-02 11:24:44 +02:00
Makefile.am fix make distcheck 2011-07-22 10:24:30 +02:00
mjpeg_encoder.c mjpeg: rename jpeg_mem_dest 2011-07-22 16:53:56 +02:00
mjpeg_encoder.h mjpeg_encoder: remove unused functions 2011-07-22 16:53:56 +02:00
red_bitmap_utils.h Fix spelling errors in comments and strings 2010-05-21 10:51:28 +02:00
red_channel.c add missing static 2011-05-03 14:44:11 +02:00
red_channel.h server/red_channel: move out_bytes_counter from Outgoing to RedChannel 2011-03-02 17:27:53 +02:00
red_client_cache.h server/red_worker: use red_channel_pipe_item_init 2011-03-02 17:27:53 +02:00
red_client_shared_cache.h server: use red_channel_get_message_serial 2011-03-02 17:27:51 +02:00
red_common.h server/common: introduce common/spice_common.h 2011-03-02 17:27:51 +02:00
red_dispatcher.c server/red_dispatcher: fix wrong resolution set for tablet 2011-07-31 17:47:07 +03:00
red_dispatcher.h server: add async io support 2011-07-20 16:00:19 +03:00
red_memslots.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
red_memslots.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
red_parse_qxl.c server: add async io support 2011-07-20 16:00:19 +03:00
red_parse_qxl.h server: add async io support 2011-07-20 16:00:19 +03:00
red_tunnel_worker.c s/__visible__/SPICE_GNUC_VISIBLE 2011-06-22 16:29:52 +02:00
red_tunnel_worker.h server: Unset executable bit of red_tunnel_worker.h 2011-05-05 20:04:49 +03:00
red_worker.c mjpeg: fix libjpeg assertion 2011-08-01 11:01:04 +02:00
red_worker.h server: add QXLWorker.flush_surfaces_async for S3/S4 support 2011-07-20 16:00:19 +03:00
reds_gl_canvas.c common,server: use ASSERT from spice_common.h 2011-05-03 14:44:11 +02:00
reds_gl_canvas.h autotools: correctly build canvas-related code 2011-05-03 14:44:10 +02:00
reds_sw_canvas.c common,server: use ASSERT from spice_common.h 2011-05-03 14:44:11 +02:00
reds_sw_canvas.h autotools: correctly build canvas-related code 2011-05-03 14:44:10 +02:00
reds.c server: Don't call vdagent chardev state callback on client (dis)connect 2011-07-25 12:21:46 +02:00
reds.h s/__visible__/SPICE_GNUC_VISIBLE 2011-06-22 16:29:52 +02:00
smartcard.c server/smartcard: fix smartcard_channel_send_error 2011-07-22 22:36:12 +03:00
smartcard.h remove unused function 2011-07-19 13:31:10 +02:00
snd_worker.c s/__visible__/SPICE_GNUC_VISIBLE 2011-06-22 16:29:52 +02:00
snd_worker.h use foo(void) instead of foo() in prototypes 2011-05-02 11:24:44 +02:00
spice-experimental.h move chardevs out of experimental 2010-12-16 09:16:10 +01:00
spice-server.syms server: add QXLWorker.flush_surfaces_async for S3/S4 support 2011-07-20 16:00:19 +03:00
spice.h Bump version in server/spice,h to 0.9.1 2011-07-26 14:16:07 +02:00
stat.h Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
zlib_encoder.c add #include <config.h> to all source files 2011-05-03 14:44:10 +02:00
zlib_encoder.h applying zlib compression over glz on WAN connection 2010-06-21 15:05:37 +02:00