mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-26 22:48:19 +00:00
worker: move stream to display channel
Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
parent
5a216d2eb1
commit
4987df8e67
@ -225,3 +225,47 @@ void dcc_push_monitors_config(DisplayChannelClient *dcc)
|
||||
red_monitors_config_item_add(dcc);
|
||||
red_channel_client_push(&dcc->common.base);
|
||||
}
|
||||
|
||||
int display_channel_get_streams_timeout(DisplayChannel *display)
|
||||
{
|
||||
int timeout = INT_MAX;
|
||||
Ring *ring = &display->streams;
|
||||
RingItem *item = ring;
|
||||
|
||||
red_time_t now = red_get_monotonic_time();
|
||||
while ((item = ring_next(ring, item))) {
|
||||
Stream *stream;
|
||||
|
||||
stream = SPICE_CONTAINEROF(item, Stream, link);
|
||||
red_time_t delta = (stream->last_time + RED_STREAM_TIMEOUT) - now;
|
||||
|
||||
if (delta < 1000 * 1000) {
|
||||
return 0;
|
||||
}
|
||||
timeout = MIN(timeout, (unsigned int)(delta / (1000 * 1000)));
|
||||
}
|
||||
return timeout;
|
||||
}
|
||||
|
||||
void display_channel_set_stream_video(DisplayChannel *display, int stream_video)
|
||||
{
|
||||
spice_return_if_fail(display);
|
||||
spice_return_if_fail(stream_video != SPICE_STREAM_VIDEO_INVALID);
|
||||
|
||||
switch (stream_video) {
|
||||
case SPICE_STREAM_VIDEO_ALL:
|
||||
spice_info("sv all");
|
||||
break;
|
||||
case SPICE_STREAM_VIDEO_FILTER:
|
||||
spice_info("sv filter");
|
||||
break;
|
||||
case SPICE_STREAM_VIDEO_OFF:
|
||||
spice_info("sv off");
|
||||
break;
|
||||
default:
|
||||
spice_warn_if_reached();
|
||||
return;
|
||||
}
|
||||
|
||||
display->stream_video = stream_video;
|
||||
}
|
||||
|
||||
@ -57,9 +57,6 @@
|
||||
#include "stream.h"
|
||||
|
||||
typedef struct DisplayChannel DisplayChannel;
|
||||
typedef struct DisplayChannelClient DisplayChannelClient;
|
||||
|
||||
typedef struct Drawable Drawable;
|
||||
|
||||
#define PALETTE_CACHE_HASH_SHIFT 8
|
||||
#define PALETTE_CACHE_HASH_SIZE (1 << PALETTE_CACHE_HASH_SHIFT)
|
||||
@ -270,6 +267,10 @@ MonitorsConfig* monitors_config_new (QXLHead *h
|
||||
MonitorsConfig * monitors_config_ref (MonitorsConfig *config);
|
||||
void monitors_config_unref (MonitorsConfig *config);
|
||||
|
||||
#define TRACE_ITEMS_SHIFT 3
|
||||
#define NUM_TRACE_ITEMS (1 << TRACE_ITEMS_SHIFT)
|
||||
#define ITEMS_TRACE_MASK (NUM_TRACE_ITEMS - 1)
|
||||
|
||||
struct DisplayChannel {
|
||||
CommonChannel common; // Must be the first thing
|
||||
|
||||
@ -286,6 +287,15 @@ struct DisplayChannel {
|
||||
|
||||
RedCompressBuf *free_compress_bufs;
|
||||
|
||||
int stream_video;
|
||||
uint32_t stream_count;
|
||||
Stream streams_buf[NUM_STREAMS];
|
||||
Stream *free_streams;
|
||||
Ring streams;
|
||||
ItemTrace items_trace[NUM_TRACE_ITEMS];
|
||||
uint32_t next_item_trace;
|
||||
uint64_t streams_size_total;
|
||||
|
||||
ImageCache image_cache;
|
||||
|
||||
#ifdef RED_STATISTICS
|
||||
@ -304,6 +314,12 @@ struct DisplayChannel {
|
||||
#endif
|
||||
};
|
||||
|
||||
void display_channel_set_stream_video (DisplayChannel *display,
|
||||
int stream_video);
|
||||
void display_channel_attach_stream (DisplayChannel *display,
|
||||
Drawable *drawable,
|
||||
Stream *stream);
|
||||
int display_channel_get_streams_timeout (DisplayChannel *display);
|
||||
void display_channel_compress_stats_print (const DisplayChannel *display);
|
||||
void display_channel_compress_stats_reset (DisplayChannel *display);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -32,8 +32,8 @@ void stream_agent_stats_print(StreamAgent *agent)
|
||||
mjpeg_encoder_get_stats(agent->mjpeg_encoder, &encoder_stats);
|
||||
}
|
||||
|
||||
spice_debug("stream=%p dim=(%dx%d) #in-frames=%"PRIu64" #in-avg-fps=%.2f #out-frames=%"PRIu64" "
|
||||
"out/in=%.2f #drops=%"PRIu64" (#pipe=%"PRIu64" #fps=%"PRIu64") out-avg-fps=%.2f "
|
||||
spice_debug("stream=%p dim=(%dx%d) #in-frames=%lu #in-avg-fps=%.2f #out-frames=%lu "
|
||||
"out/in=%.2f #drops=%lu (#pipe=%lu #fps=%lu) out-avg-fps=%.2f "
|
||||
"passed-mm-time(sec)=%.2f size-total(MB)=%.2f size-per-sec(Mbps)=%.2f "
|
||||
"size-per-frame(KBpf)=%.2f avg-quality=%.2f "
|
||||
"start-bit-rate(Mbps)=%.2f end-bit-rate(Mbps)=%.2f",
|
||||
|
||||
@ -106,6 +106,16 @@ typedef struct StreamClipItem {
|
||||
StreamClipItem *stream_clip_item_new(DisplayChannelClient* dcc,
|
||||
StreamAgent *agent);
|
||||
|
||||
typedef struct ItemTrace {
|
||||
red_time_t time;
|
||||
int frames_count;
|
||||
int gradual_frames_count;
|
||||
int last_gradual_frame;
|
||||
int width;
|
||||
int height;
|
||||
SpiceRect dest_area;
|
||||
} ItemTrace;
|
||||
|
||||
struct Stream {
|
||||
uint8_t refs;
|
||||
Drawable *current;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user