[Spice-devel] [PATCH spice 2/11] server: Remove the rate_control_is_active field from MJpegEncoder.
Marc-André Lureau
marcandre.lureau at gmail.com
Tue May 19 06:05:15 PDT 2015
ack
On Wed, May 13, 2015 at 10:26 PM, Francois Gouget <fgouget at codeweavers.com>
wrote:
> It is redundant with the corresponding callbacks.
> ---
>
> This patch only depends on patch 1/11 and is independent from the rest
> of the series.
>
> server/mjpeg_encoder.c | 22 +++++++++++++---------
> server/mjpeg_encoder.h | 2 +-
> server/red_worker.c | 4 ++--
> 3 files changed, 16 insertions(+), 12 deletions(-)
>
> diff --git a/server/mjpeg_encoder.c b/server/mjpeg_encoder.c
> index 95d841f..9a41ef3 100644
> --- a/server/mjpeg_encoder.c
> +++ b/server/mjpeg_encoder.c
> @@ -164,7 +164,6 @@ struct MJpegEncoder {
> unsigned int bytes_per_pixel; /* bytes per pixel of the input buffer
> */
> void (*pixel_converter)(uint8_t *src, uint8_t *dest);
>
> - int rate_control_is_active;
> MJpegEncoderRateControl rate_control;
> MJpegEncoderRateControlCbs cbs;
> void *cbs_opaque;
> @@ -185,21 +184,25 @@ static uint32_t
> get_min_required_playback_delay(uint64_t frame_enc_size,
> uint64_t byte_rate,
> uint32_t latency);
>
> -MJpegEncoder *mjpeg_encoder_new(int bit_rate_control, uint64_t
> starting_bit_rate,
> +static inline int rate_control_is_active(MJpegEncoder* encoder)
> +{
> + return encoder->cbs.get_roundtrip_ms != NULL;
> +}
> +
> +MJpegEncoder *mjpeg_encoder_new(uint64_t starting_bit_rate,
> MJpegEncoderRateControlCbs *cbs, void
> *opaque)
> {
> MJpegEncoder *enc;
>
> - spice_assert(!bit_rate_control || (cbs && cbs->get_roundtrip_ms &&
> cbs->get_source_fps));
> + spice_assert(!cbs || (cbs && cbs->get_roundtrip_ms &&
> cbs->get_source_fps));
>
> enc = spice_new0(MJpegEncoder, 1);
>
> enc->first_frame = TRUE;
> - enc->rate_control_is_active = bit_rate_control;
> enc->rate_control.byte_rate = starting_bit_rate / 8;
> enc->starting_bit_rate = starting_bit_rate;
>
> - if (bit_rate_control) {
> + if (cbs) {
> struct timespec time;
>
> clock_gettime(CLOCK_MONOTONIC, &time);
> @@ -211,6 +214,7 @@ MJpegEncoder *mjpeg_encoder_new(int bit_rate_control,
> uint64_t starting_bit_rate
> enc->rate_control.quality_eval_data.reason =
> MJPEG_QUALITY_EVAL_REASON_RATE_CHANGE;
> enc->rate_control.warmup_start_time = ((uint64_t) time.tv_sec) *
> 1000000000 + time.tv_nsec;
> } else {
> + enc->cbs.get_roundtrip_ms = NULL;
> mjpeg_encoder_reset_quality(enc, MJPEG_LEGACY_STATIC_QUALITY_ID,
> MJPEG_MAX_FPS, 0);
> }
>
> @@ -607,7 +611,7 @@ static void
> mjpeg_encoder_adjust_params_to_bit_rate(MJpegEncoder *encoder)
> uint32_t latency = 0;
> uint32_t src_fps;
>
> - spice_assert(encoder->rate_control_is_active);
> + spice_assert(rate_control_is_active(encoder));
>
> rate_control = &encoder->rate_control;
> quality_eval = &rate_control->quality_eval_data;
> @@ -692,7 +696,7 @@ static void mjpeg_encoder_adjust_fps(MJpegEncoder
> *encoder, uint64_t now)
> MJpegEncoderRateControl *rate_control = &encoder->rate_control;
> uint64_t adjusted_fps_time_passed;
>
> - spice_assert(encoder->rate_control_is_active);
> + spice_assert(rate_control_is_active(encoder));
>
> adjusted_fps_time_passed = (now -
> rate_control->adjusted_fps_start_time) / 1000 / 1000;
>
> @@ -734,7 +738,7 @@ int mjpeg_encoder_start_frame(MJpegEncoder *encoder,
> SpiceBitmapFmt format,
> {
> uint32_t quality;
>
> - if (encoder->rate_control_is_active) {
> + if (rate_control_is_active(encoder)) {
> MJpegEncoderRateControl *rate_control = &encoder->rate_control;
> struct timespec time;
> uint64_t now;
> @@ -1131,7 +1135,7 @@ void mjpeg_encoder_client_stream_report(MJpegEncoder
> *encoder,
> end_frame_mm_time - start_frame_mm_time,
> end_frame_delay, audio_delay);
>
> - if (!encoder->rate_control_is_active) {
> + if (!rate_control_is_active(encoder)) {
> spice_debug("rate control was not activated: ignoring");
> return;
> }
> diff --git a/server/mjpeg_encoder.h b/server/mjpeg_encoder.h
> index 741ea1c..d584b92 100644
> --- a/server/mjpeg_encoder.h
> +++ b/server/mjpeg_encoder.h
> @@ -49,7 +49,7 @@ typedef struct MJpegEncoderStats {
> double avg_quality;
> } MJpegEncoderStats;
>
> -MJpegEncoder *mjpeg_encoder_new(int bit_rate_control, uint64_t
> starting_bit_rate,
> +MJpegEncoder *mjpeg_encoder_new(uint64_t starting_bit_rate,
> MJpegEncoderRateControlCbs *cbs, void
> *opaque);
> void mjpeg_encoder_destroy(MJpegEncoder *encoder);
>
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 5deb30b..e0ff8e9 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -3100,9 +3100,9 @@ static void
> red_display_create_stream(DisplayChannelClient *dcc, Stream *stream)
> mjpeg_cbs.update_client_playback_delay =
> red_stream_update_client_playback_latency;
>
> initial_bit_rate = red_stream_get_initial_bit_rate(dcc, stream);
> - agent->mjpeg_encoder = mjpeg_encoder_new(TRUE, initial_bit_rate,
> &mjpeg_cbs, agent);
> + agent->mjpeg_encoder = mjpeg_encoder_new(initial_bit_rate,
> &mjpeg_cbs, agent);
> } else {
> - agent->mjpeg_encoder = mjpeg_encoder_new(FALSE, 0, NULL, NULL);
> + agent->mjpeg_encoder = mjpeg_encoder_new(0, NULL, NULL);
> }
> red_channel_client_pipe_add(&dcc->common.base, &agent->create_item);
>
> --
> 2.1.4
>
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>
--
Marc-André Lureau
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/spice-devel/attachments/20150519/3bb9b3de/attachment.html>
More information about the Spice-devel
mailing list