summaryrefslogtreecommitdiffstats
path: root/server/mjpeg_encoder.c
diff options
context:
space:
mode:
authorYonit Halperin <yhalperi@redhat.com>2013-02-17 22:48:05 -0500
committerYonit Halperin <yhalperi@redhat.com>2013-04-22 16:30:53 -0400
commit6f883d0eb54ba8b0a1e7d45cd1ae77cd48178c08 (patch)
treeb9dfcdd12592fb4c569abef96c16c3c009e561fe /server/mjpeg_encoder.c
parent44ce87b55a2f96fd83d1aeec3582cc945f0ec452 (diff)
downloadspice-6f883d0eb54ba8b0a1e7d45cd1ae77cd48178c08.tar.gz
spice-6f883d0eb54ba8b0a1e7d45cd1ae77cd48178c08.tar.xz
spice-6f883d0eb54ba8b0a1e7d45cd1ae77cd48178c08.zip
mjpeg_encoder: move the control over frame drops to mjpeg_encoder
Diffstat (limited to 'server/mjpeg_encoder.c')
-rw-r--r--server/mjpeg_encoder.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/server/mjpeg_encoder.c b/server/mjpeg_encoder.c
index 69cd20c5..ac929248 100644
--- a/server/mjpeg_encoder.c
+++ b/server/mjpeg_encoder.c
@@ -651,9 +651,15 @@ int mjpeg_encoder_start_frame(MJpegEncoder *encoder, SpiceBitmapFmt format,
MJpegEncoderRateControl *rate_control = &encoder->rate_control;
struct timespec time;
uint64_t now;
+ uint64_t interval;
clock_gettime(CLOCK_MONOTONIC, &time);
now = ((uint64_t) time.tv_sec) * 1000000000 + time.tv_nsec;
+ interval = (now - rate_control->bit_rate_info.last_frame_time);
+
+ if (interval < (1000*1000*1000) / rate_control->fps) {
+ return MJPEG_ENCODER_FRAME_DROP;
+ }
mjpeg_encoder_adjust_params_to_bit_rate(encoder);
@@ -700,14 +706,14 @@ int mjpeg_encoder_start_frame(MJpegEncoder *encoder, SpiceBitmapFmt format,
break;
default:
spice_warning("unsupported format %d", format);
- return FALSE;
+ return MJPEG_ENCODER_FRAME_UNSUPPORTED;
}
if (encoder->pixel_converter != NULL) {
unsigned int stride = width * 3;
/* check for integer overflow */
if (stride < width) {
- return FALSE;
+ return MJPEG_ENCODER_FRAME_UNSUPPORTED;
}
if (encoder->row_size < stride) {
encoder->row = spice_realloc(encoder->row, stride);
@@ -725,7 +731,7 @@ int mjpeg_encoder_start_frame(MJpegEncoder *encoder, SpiceBitmapFmt format,
jpeg_set_quality(&encoder->cinfo, quality, TRUE);
jpeg_start_compress(&encoder->cinfo, encoder->first_frame);
- return TRUE;
+ return MJPEG_ENCODER_FRAME_ENCODE_START;
}
int mjpeg_encoder_encode_scanline(MJpegEncoder *encoder, uint8_t *src_pixels,
@@ -783,14 +789,6 @@ size_t mjpeg_encoder_end_frame(MJpegEncoder *encoder)
return encoder->rate_control.last_enc_size;
}
-uint32_t mjpeg_encoder_get_fps(MJpegEncoder *encoder)
-{
- if (!encoder->rate_control_is_active) {
- spice_warning("bit rate control is not active");
- }
- return encoder->rate_control.fps;
-}
-
static void mjpeg_encoder_quality_eval_stop(MJpegEncoder *encoder)
{
MJpegEncoderRateControl *rate_control = &encoder->rate_control;