summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorYonit Halperin <yhalperi@redhat.com>2013-01-24 17:09:15 -0500
committerYonit Halperin <yhalperi@redhat.com>2013-04-22 16:30:54 -0400
commited1654eb11fbed9db48ea04fe19b08cad61e4087 (patch)
tree750ee12e75d4ae6ef8a7300bc649346d6e2bf43e /server
parent0df94503996664212e927e2c5dea7c33f65eae12 (diff)
downloadspice-ed1654eb11fbed9db48ea04fe19b08cad61e4087.tar.gz
spice-ed1654eb11fbed9db48ea04fe19b08cad61e4087.tar.xz
spice-ed1654eb11fbed9db48ea04fe19b08cad61e4087.zip
red_worker: notify mjpeg_encoder on server frame drops
Diffstat (limited to 'server')
-rw-r--r--server/red_worker.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/server/red_worker.c b/server/red_worker.c
index 27e5380a..2fe9a3ac 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -3169,13 +3169,19 @@ static inline void pre_stream_item_swap(RedWorker *worker, Stream *stream)
index = get_stream_id(worker, stream);
DRAWABLE_FOREACH_DPI(stream->current, ring_item, dpi) {
dcc = dpi->dcc;
- if (!display_channel_client_is_low_bandwidth(dcc)) {
+ agent = &dcc->stream_agents[index];
+
+ if (!dcc->use_mjpeg_encoder_rate_control &&
+ !display_channel_client_is_low_bandwidth(dcc)) {
continue;
}
- agent = &dcc->stream_agents[index];
if (pipe_item_is_linked(&dpi->dpi_pipe_item)) {
- ++agent->drops;
+ if (dcc->use_mjpeg_encoder_rate_control) {
+ mjpeg_encoder_notify_server_frame_drop(agent->mjpeg_encoder);
+ } else {
+ ++agent->drops;
+ }
}
}
@@ -3184,11 +3190,14 @@ static inline void pre_stream_item_swap(RedWorker *worker, Stream *stream)
double drop_factor;
agent = &dcc->stream_agents[index];
+
+ if (dcc->use_mjpeg_encoder_rate_control) {
+ continue;
+ }
if (agent->frames / agent->fps < FPS_TEST_INTERVAL) {
agent->frames++;
continue;
}
-
drop_factor = ((double)agent->frames - (double)agent->drops) /
(double)agent->frames;
spice_debug("stream %d: #frames %u #drops %u", index, agent->frames, agent->drops);