[Spice-devel] [PATCH spice-streaming-agent] jpeg: Do not use next_output_byte buf_empty_output_buffer
Uri Lublin
uril at redhat.com
Wed Jul 18 09:02:16 UTC 2018
On 07/17/2018 06:28 PM, Frediano Ziglio wrote:
Hi Frediano,
> The pointer is not updated to the last byte used so using it
> to compute the bytes written into the buffer we ignore some bytes
> causing some image corruptions.
> Note that also free_in_buffer is not updated to last written byte.
> When buf_empty_output_buffer is called the buffer is full so use the
> size of it instead of relaying on next_output_byte or free_in_buffer.
I also found in /usr/share/doc/libjpeg-turbo-devel/libjpeg.txt,
under empty_output_buffer:
"(use the saved start address and buffer length;
ignore the current state of next_output_byte and free_in_buffer)."
Some printfs show that sometimes a few bytes are "missing".
I tested this patch and it does fix the problem for me.
typo: s/relaying/relying/
>
> Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
Acked-by: Uri Lublin <uril at redhat.com>
Thanks,
Uri.
> ---
> src/jpeg.cpp | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/jpeg.cpp b/src/jpeg.cpp
> index ceee359..5f6d128 100644
> --- a/src/jpeg.cpp
> +++ b/src/jpeg.cpp
> @@ -23,7 +23,7 @@ struct JpegBuffer: public jpeg_destination_mgr
> static boolean buf_empty_output_buffer(j_compress_ptr cinfo)
> {
> JpegBuffer *buf = (JpegBuffer *) cinfo->dest;
> - size_t size = buf->next_output_byte - &buf->buffer[0];
> + size_t size = buf->buffer.size();
> buf->buffer.resize(buf->buffer.capacity() * 2);
> buf->next_output_byte = &buf->buffer[0] + size;
> buf->free_in_buffer = buf->buffer.size() - size;
>
More information about the Spice-devel
mailing list