summaryrefslogtreecommitdiffstats
path: root/server/mjpeg_encoder.h
diff options
context:
space:
mode:
authorYonit Halperin <yhalperi@redhat.com>2013-02-14 17:23:51 -0500
committerYonit Halperin <yhalperi@redhat.com>2013-04-22 11:45:59 -0400
commitf68b539d70b914455a0b280260786ffc530988d4 (patch)
tree43c853f2e31e7228a2913c3c65de358645de2a60 /server/mjpeg_encoder.h
parent41d740075879f31ddc2b5f8bb177b6523d9be3cb (diff)
downloadspice-f68b539d70b914455a0b280260786ffc530988d4.tar.gz
spice-f68b539d70b914455a0b280260786ffc530988d4.tar.xz
spice-f68b539d70b914455a0b280260786ffc530988d4.zip
mjpeg_encoder: configure mjpeg quality and frame rate according to a given bit rate
Previously, the mjpeg quality was always 70. The frame rate was tuned according to the frames' congestion in the pipe. This patch sets the quality and frame rate according to a given bit rate and the size of the first encoded frames. The following patches will introduce an adaptive video streaming, in which the bit rate, the quality, and the frame rate, change in response to different parameters. Patches that make red_worker adopt this feature will also follow.
Diffstat (limited to 'server/mjpeg_encoder.h')
-rw-r--r--server/mjpeg_encoder.h26
1 files changed, 25 insertions, 1 deletions
diff --git a/server/mjpeg_encoder.h b/server/mjpeg_encoder.h
index b9a2ed7a..902dcbe7 100644
--- a/server/mjpeg_encoder.h
+++ b/server/mjpeg_encoder.h
@@ -23,7 +23,21 @@
typedef struct MJpegEncoder MJpegEncoder;
-MJpegEncoder *mjpeg_encoder_new(void);
+/*
+ * Callbacks required for controling and adjusting
+ * the stream bit rate:
+ * get_roundtrip_ms: roundtrip time in milliseconds
+ * get_source_fps: the input frame rate (#frames per second), i.e.,
+ * the rate of frames arriving from the guest to spice-server,
+ * before any drops.
+ */
+typedef struct MJpegEncoderRateControlCbs {
+ uint32_t (*get_roundtrip_ms)(void *opaque);
+ uint32_t (*get_source_fps)(void *opaque);
+} MJpegEncoderRateControlCbs;
+
+MJpegEncoder *mjpeg_encoder_new(int bit_rate_control, uint64_t starting_bit_rate,
+ MJpegEncoderRateControlCbs *cbs, void *opaque);
void mjpeg_encoder_destroy(MJpegEncoder *encoder);
uint8_t mjpeg_encoder_get_bytes_per_pixel(MJpegEncoder *encoder);
@@ -39,5 +53,15 @@ int mjpeg_encoder_encode_scanline(MJpegEncoder *encoder, uint8_t *src_pixels,
size_t image_width);
size_t mjpeg_encoder_end_frame(MJpegEncoder *encoder);
+/*
+ * bit rate control
+ */
+
+/*
+ * The recommended output frame rate (per second) for the
+ * current available bit rate.
+ */
+uint32_t mjpeg_encoder_get_fps(MJpegEncoder *encoder);
+
#endif