summaryrefslogtreecommitdiffstats
path: root/server/mjpeg_encoder.c
diff options
context:
space:
mode:
authorChristophe Fergeau <cfergeau@redhat.com>2011-06-28 14:28:22 +0200
committerChristophe Fergeau <cfergeau@redhat.com>2011-07-22 16:53:56 +0200
commitc12bafbc5326babf3cbab96d6d1537075c49c927 (patch)
treedbe092ae1717abb9aa85b3050d06aa40e6559b91 /server/mjpeg_encoder.c
parent3a433912e91727c5cc733f5c0305b3453f2b2f8c (diff)
downloadspice-c12bafbc5326babf3cbab96d6d1537075c49c927.tar.gz
spice-c12bafbc5326babf3cbab96d6d1537075c49c927.tar.xz
spice-c12bafbc5326babf3cbab96d6d1537075c49c927.zip
mjpeg_encoder: allocate "row" on demand
It's not used when we use jpeg-turbo colorspaces, so it's better to allocate it when we know we'll need it rather than always allocating it even if it won't be used.
Diffstat (limited to 'server/mjpeg_encoder.c')
-rw-r--r--server/mjpeg_encoder.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/server/mjpeg_encoder.c b/server/mjpeg_encoder.c
index 8b323ed4..ed242db3 100644
--- a/server/mjpeg_encoder.c
+++ b/server/mjpeg_encoder.c
@@ -27,7 +27,6 @@
struct MJpegEncoder {
int width;
int height;
- int stride;
uint8_t *row;
int first_frame;
int quality;
@@ -48,15 +47,8 @@ MJpegEncoder *mjpeg_encoder_new(int width, int height)
enc->first_frame = TRUE;
enc->width = width;
enc->height = height;
- enc->stride = width * 3;
enc->quality = 70;
- if (enc->stride < width) {
- abort();
- }
- enc->row = spice_malloc(enc->stride);
-
enc->cinfo.err = jpeg_std_error(&enc->jerr);
-
jpeg_create_compress(&enc->cinfo);
return enc;
@@ -240,6 +232,15 @@ int mjpeg_encoder_start_frame(MJpegEncoder *encoder, SpiceBitmapFmt format,
return FALSE;
}
+ if ((encoder->pixel_converter != NULL) && (encoder->row == NULL)) {
+ unsigned int stride = encoder->width * 3;
+ /* check for integer overflow */
+ if (stride < encoder->width) {
+ return FALSE;
+ }
+ encoder->row = spice_malloc(stride);
+ }
+
jpeg_mem_dest(&encoder->cinfo, dest, dest_len);
encoder->cinfo.image_width = encoder->width;