[PATCH] screenshooter: Record one extra frame when recording stops

Kristian Høgsberg hoegsberg at gmail.com
Tue Dec 17 11:00:19 PST 2013


On Tue, Dec 17, 2013 at 02:18:01PM +0200, Ander Conselvan de Oliveira wrote:
> From: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
> 
> If the compositor hasn't been rendering for a while when the recording
> stops, the time difference between the last rendered frame and that
> moment won't be in the encoded video. Fix that by forcing one extra
> frame to be recorded when the user presses the recorder key binding.
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=71142

Thanks, applied.

Kristian

> ---
>  src/screenshooter.c |   12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/src/screenshooter.c b/src/screenshooter.c
> index 0c657bc..2d05ad6 100644
> --- a/src/screenshooter.c
> +++ b/src/screenshooter.c
> @@ -267,7 +267,7 @@ struct weston_recorder {
>  	uint32_t total;
>  	int fd;
>  	struct wl_listener frame_listener;
> -	int count;
> +	int count, destroying;
>  };
>  
>  static uint32_t *
> @@ -356,6 +356,9 @@ transform_rect(struct weston_output *output, pixman_box32_t *r)
>  }
>  
>  static void
> +weston_recorder_destroy(struct weston_recorder *recorder);
> +
> +static void
>  weston_recorder_frame_notify(struct wl_listener *listener, void *data)
>  {
>  	struct weston_recorder *recorder =
> @@ -456,6 +459,9 @@ weston_recorder_frame_notify(struct wl_listener *listener, void *data)
>  
>  	pixman_region32_fini(&damage);
>  	recorder->count++;
> +
> +	if (recorder->destroying)
> +		weston_recorder_destroy(recorder);
>  }
>  
>  static void
> @@ -477,6 +483,7 @@ weston_recorder_create(struct weston_output *output, const char *filename)
>  	recorder->rect = malloc(size);
>  	recorder->total = 0;
>  	recorder->count = 0;
> +	recorder->destroying = 0;
>  	recorder->output = output;
>  
>  	if (do_yflip)
> @@ -553,7 +560,8 @@ recorder_binding(struct weston_seat *seat, uint32_t time, uint32_t key, void *da
>  			"stopping recorder, total file size %dM, %d frames\n",
>  			recorder->total / (1024 * 1024), recorder->count);
>  
> -		weston_recorder_destroy(recorder);
> +		recorder->destroying = 1;
> +		weston_output_schedule_repaint(recorder->output);
>  	} else {
>  		weston_log("starting recorder, file %s\n", filename);
>  		weston_recorder_create(output, filename);
> -- 
> 1.7.9.5
> 
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list