[Spice-devel] [spice v15 01/21] mjpeg: Use src_area as the authoritative source for the frame dimensions
Francois Gouget
fgouget at codeweavers.com
Thu May 26 15:15:35 UTC 2016
Video frames correspond to QXL_DRAW_COPY operations where the frame area
is defined by the SpiceCopy.src_area field.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
server/mjpeg-encoder.c | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/server/mjpeg-encoder.c b/server/mjpeg-encoder.c
index e3646db..7dcea50 100644
--- a/server/mjpeg-encoder.c
+++ b/server/mjpeg-encoder.c
@@ -706,7 +706,7 @@ static void mjpeg_encoder_adjust_fps(MJpegEncoder *encoder, uint64_t now)
*/
static int mjpeg_encoder_start_frame(MJpegEncoder *encoder,
SpiceBitmapFmt format,
- int width, int height,
+ const SpiceRect *src,
uint8_t **dest, size_t *dest_len,
uint32_t frame_mm_time)
{
@@ -777,10 +777,12 @@ static int mjpeg_encoder_start_frame(MJpegEncoder *encoder,
return VIDEO_ENCODER_FRAME_UNSUPPORTED;
}
+ encoder->cinfo.image_width = src->right - src->left;
+ encoder->cinfo.image_height = src->bottom - src->top;
if (encoder->pixel_converter != NULL) {
- unsigned int stride = width * 3;
+ JDIMENSION stride = encoder->cinfo.image_width * 3;
/* check for integer overflow */
- if (stride < width) {
+ if (stride < encoder->cinfo.image_width) {
return VIDEO_ENCODER_FRAME_UNSUPPORTED;
}
if (encoder->row_size < stride) {
@@ -790,9 +792,6 @@ static int mjpeg_encoder_start_frame(MJpegEncoder *encoder,
}
spice_jpeg_mem_dest(&encoder->cinfo, dest, dest_len);
-
- encoder->cinfo.image_width = width;
- encoder->cinfo.image_height = height;
jpeg_set_defaults(&encoder->cinfo);
encoder->cinfo.dct_method = JDCT_IFAST;
quality = mjpeg_quality_samples[encoder->rate_control.quality_id];
@@ -935,8 +934,7 @@ static int mjpeg_encoder_encode_frame(VideoEncoder *video_encoder,
{
MJpegEncoder *encoder = (MJpegEncoder*)video_encoder;
- int ret = mjpeg_encoder_start_frame(encoder, bitmap->format,
- width, height,
+ int ret = mjpeg_encoder_start_frame(encoder, bitmap->format, src,
outbuf, outbuf_size,
frame_mm_time);
if (ret != VIDEO_ENCODER_FRAME_ENCODE_DONE) {
--
2.8.1
More information about the Spice-devel
mailing list