mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-08-08 09:04:33 +00:00
worker: move stream functions to a new stream.c file
Signed-off-by: Marc-André Lureau <marcandre.lureau@gmail.com> Signed-off-by: Frediano Ziglio <fziglio@redhat.com> Acked-by: Jonathon Jongsma <jjongsma@redhat.com> Acked-by: Fabiano Fidêncio <fidencio@redhat.com>
This commit is contained in:
parent
1e4abdc15d
commit
885557f117
@ -136,6 +136,7 @@ libspice_server_la_SOURCES = \
|
||||
spice-bitmap-utils.h \
|
||||
spice-bitmap-utils.c \
|
||||
utils.h \
|
||||
stream.c \
|
||||
stream.h \
|
||||
$(NULL)
|
||||
|
||||
|
||||
@ -1540,21 +1540,9 @@ static inline void red_detach_stream(RedWorker *worker, Stream *stream, int deta
|
||||
stream->current = NULL;
|
||||
}
|
||||
|
||||
static StreamClipItem *__new_stream_clip(DisplayChannelClient* dcc, StreamAgent *agent)
|
||||
{
|
||||
StreamClipItem *item = spice_new(StreamClipItem, 1);
|
||||
red_channel_pipe_item_init(RED_CHANNEL_CLIENT(dcc)->channel,
|
||||
(PipeItem *)item, PIPE_ITEM_TYPE_STREAM_CLIP);
|
||||
|
||||
item->stream_agent = agent;
|
||||
agent->stream->refs++;
|
||||
item->refs = 1;
|
||||
return item;
|
||||
}
|
||||
|
||||
static void push_stream_clip(DisplayChannelClient* dcc, StreamAgent *agent)
|
||||
{
|
||||
StreamClipItem *item = __new_stream_clip(dcc, agent);
|
||||
StreamClipItem *item = stream_clip_item_new(dcc, agent);
|
||||
int n_rects;
|
||||
|
||||
if (!item) {
|
||||
@ -1628,42 +1616,6 @@ static void red_attach_stream(RedWorker *worker, Drawable *drawable, Stream *str
|
||||
}
|
||||
}
|
||||
|
||||
static void red_print_stream_stats(DisplayChannelClient *dcc, StreamAgent *agent)
|
||||
{
|
||||
#ifdef STREAM_STATS
|
||||
StreamStats *stats = &agent->stats;
|
||||
double passed_mm_time = (stats->end - stats->start) / 1000.0;
|
||||
MJpegEncoderStats encoder_stats = {0};
|
||||
|
||||
if (agent->mjpeg_encoder) {
|
||||
mjpeg_encoder_get_stats(agent->mjpeg_encoder, &encoder_stats);
|
||||
}
|
||||
|
||||
spice_debug("stream=%"PRIdPTR" 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 "
|
||||
"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",
|
||||
agent - dcc->stream_agents, agent->stream->width, agent->stream->height,
|
||||
stats->num_input_frames,
|
||||
stats->num_input_frames / passed_mm_time,
|
||||
stats->num_frames_sent,
|
||||
(stats->num_frames_sent + 0.0) / stats->num_input_frames,
|
||||
stats->num_drops_pipe +
|
||||
stats->num_drops_fps,
|
||||
stats->num_drops_pipe,
|
||||
stats->num_drops_fps,
|
||||
stats->num_frames_sent / passed_mm_time,
|
||||
passed_mm_time,
|
||||
stats->size_sent / 1024.0 / 1024.0,
|
||||
((stats->size_sent * 8.0) / (1024.0 * 1024)) / passed_mm_time,
|
||||
stats->size_sent / 1000.0 / stats->num_frames_sent,
|
||||
encoder_stats.avg_quality,
|
||||
encoder_stats.starting_bit_rate / (1024.0 * 1024),
|
||||
encoder_stats.cur_bit_rate / (1024.0 * 1024));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void red_stop_stream(RedWorker *worker, Stream *stream)
|
||||
{
|
||||
DisplayChannelClient *dcc;
|
||||
@ -1691,7 +1643,7 @@ static void red_stop_stream(RedWorker *worker, Stream *stream)
|
||||
}
|
||||
stream->refs++;
|
||||
red_channel_client_pipe_add(RED_CHANNEL_CLIENT(dcc), &stream_agent->destroy_item);
|
||||
red_print_stream_stats(dcc, stream_agent);
|
||||
stream_agent_stats_print(stream_agent);
|
||||
}
|
||||
worker->streams_size_total -= stream->width * stream->height;
|
||||
ring_remove(&stream->link);
|
||||
|
||||
70
server/stream.c
Normal file
70
server/stream.c
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
Copyright (C) 2009-2015 Red Hat, Inc.
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "stream.h"
|
||||
#include "display-channel.h"
|
||||
|
||||
void stream_agent_stats_print(StreamAgent *agent)
|
||||
{
|
||||
#ifdef STREAM_STATS
|
||||
StreamStats *stats = &agent->stats;
|
||||
double passed_mm_time = (stats->end - stats->start) / 1000.0;
|
||||
MJpegEncoderStats encoder_stats = {0};
|
||||
|
||||
if (agent->mjpeg_encoder) {
|
||||
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 "
|
||||
"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",
|
||||
agent, agent->stream->width, agent->stream->height,
|
||||
stats->num_input_frames,
|
||||
stats->num_input_frames / passed_mm_time,
|
||||
stats->num_frames_sent,
|
||||
(stats->num_frames_sent + 0.0) / stats->num_input_frames,
|
||||
stats->num_drops_pipe +
|
||||
stats->num_drops_fps,
|
||||
stats->num_drops_pipe,
|
||||
stats->num_drops_fps,
|
||||
stats->num_frames_sent / passed_mm_time,
|
||||
passed_mm_time,
|
||||
stats->size_sent / 1024.0 / 1024.0,
|
||||
((stats->size_sent * 8.0) / (1024.0 * 1024)) / passed_mm_time,
|
||||
stats->size_sent / 1000.0 / stats->num_frames_sent,
|
||||
encoder_stats.avg_quality,
|
||||
encoder_stats.starting_bit_rate / (1024.0 * 1024),
|
||||
encoder_stats.cur_bit_rate / (1024.0 * 1024));
|
||||
#endif
|
||||
}
|
||||
|
||||
StreamClipItem *stream_clip_item_new(DisplayChannelClient* dcc, StreamAgent *agent)
|
||||
{
|
||||
StreamClipItem *item = spice_new(StreamClipItem, 1);
|
||||
red_channel_pipe_item_init(RED_CHANNEL_CLIENT(dcc)->channel,
|
||||
(PipeItem *)item, PIPE_ITEM_TYPE_STREAM_CLIP);
|
||||
|
||||
item->stream_agent = agent;
|
||||
agent->stream->refs++;
|
||||
item->refs = 1;
|
||||
return item;
|
||||
}
|
||||
@ -103,6 +103,9 @@ typedef struct StreamClipItem {
|
||||
SpiceClipRects *rects;
|
||||
} StreamClipItem;
|
||||
|
||||
StreamClipItem *stream_clip_item_new(DisplayChannelClient* dcc,
|
||||
StreamAgent *agent);
|
||||
|
||||
struct Stream {
|
||||
uint8_t refs;
|
||||
Drawable *current;
|
||||
@ -119,4 +122,6 @@ struct Stream {
|
||||
uint32_t input_fps;
|
||||
};
|
||||
|
||||
void stream_agent_stats_print(StreamAgent *agent);
|
||||
|
||||
#endif /* STREAM_H */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user