All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: soham.ghosh@nutanix.com, peter.maydell@linaro.org,
	thuth@redhat.com, berrange@redhat.com, prerna.saxena@nutanix.com,
	qemu-devel@nongnu.org, Kshitij Suri <kshitij.suri@nutanix.com>,
	philippe.mathieu.daude@gmail.com, kraxel@redhat.com,
	pbonzini@redhat.com, prachatos.mitra@nutanix.com,
	eblake@redhat.com
Subject: Re: [PATCH v4 2/2] Added parameter to take screenshot with screendump as PNG
Date: Thu, 7 Apr 2022 18:58:47 +0100	[thread overview]
Message-ID: <Yk8mVyza54cbCim9@work-vm> (raw)
In-Reply-To: <87wng96oep.fsf@pond.sub.org>

* Markus Armbruster (armbru@redhat.com) wrote:
> Dave, please have a look at the HMP compatibility issue in
> hmp-command.hx below.
> 
> Kshitij Suri <kshitij.suri@nutanix.com> writes:
> 
> > Currently screendump only supports PPM format, which is un-compressed and not
> > standard.
> 
> If "standard" means "have to pay a standards organization $$$ to access
> the spec", PPM is not standard.  If it means "widely supported", it
> certainly is.  I'd drop "and not standard".  Suggestion, not demand.
> 
> >           Added a "format" parameter to qemu monitor screendump capabilites
> > to support PNG image capture using libpng. The param was added in QAPI schema
> > of screendump present in ui.json along with png_save() function which converts
> > pixman_image to PNG. HMP command equivalent was also modified to support the
> > feature.
> 
> Suggest to use imperative mood to describe the commit, and omit details
> that aren't necessary here:
> 
>             Add a "format" parameter to QMP and HMP screendump command
>   to support PNG image capture using libpng.
> 
> >
> > Example usage:
> > { "execute": "screendump", "arguments": { "filename": "/tmp/image",
> > "format":"png" } }
> 
> Providing an example in the commit message is always nice, thanks!
> 
> >
> > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/718
> >
> > Signed-off-by: Kshitij Suri <kshitij.suri@nutanix.com>
> >
> > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> >  hmp-commands.hx    |  11 ++---
> >  monitor/hmp-cmds.c |  12 +++++-
> >  qapi/ui.json       |  24 +++++++++--
> >  ui/console.c       | 101 +++++++++++++++++++++++++++++++++++++++++++--
> >  4 files changed, 136 insertions(+), 12 deletions(-)
> >
> > diff --git a/hmp-commands.hx b/hmp-commands.hx
> > index 8476277aa9..19b7cab595 100644
> > --- a/hmp-commands.hx
> > +++ b/hmp-commands.hx
> > @@ -244,11 +244,12 @@ ERST
> >  
> >      {
> >          .name       = "screendump",
> > -        .args_type  = "filename:F,device:s?,head:i?",
> > -        .params     = "filename [device [head]]",
> > -        .help       = "save screen from head 'head' of display device 'device' "
> > -                      "into PPM image 'filename'",
> > -        .cmd        = hmp_screendump,
> > +        .args_type  = "filename:F,format:s?,device:s?,head:i?",
> 
> Incompatible change: meaning of "screendump ONE TWO" changes from
> filename=ONE, device=TWO to filename=ONE, format=TWO.
> 
> As HMP is not a stable interface, incompatible change is permissible.
> But is this one wise?
> 
> Could we add the new argument at the end instead?
> 
>             .args_type  = "filename:F,device:s?,head:i?,format:s?",
> 
> Could we do *without* an argument, and derive the format from the
> filename extension?  .png means format=png, anything else format=ppm.
> Would be a bad idea for QMP.  Okay for HMP?

Could we use the new optional flag with value that Stefan Reiter
added in 26fcd76 ? (and used in 675fd3c)
In which case I think we'd have:
  "filename:F,format:-fs,device:s?,head:i?"

That would seem cleanest;  Extracting from the filename would be OKish
if it errored if the format wasn't obvious.

Dave


> > +        .params     = "filename [format] [device [head]]",
> 
> This tells us that parameter format can be omitted like so
> 
>     screendump foo.ppm device-id
> 
> which isn't true.  Better: "filename [format [device [head]]".
> 
> > +        .help       = "save screen from head 'head' of display device 'device'"
> > +                      "in specified format 'format' as image 'filename'."
> > +                      "Currently only 'png' and 'ppm' formats are supported.",
> > +         .cmd        = hmp_screendump,
> >          .coroutine  = true,
> >      },
> >  
> > diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
> > index 634968498b..2442bfa989 100644
> > --- a/monitor/hmp-cmds.c
> > +++ b/monitor/hmp-cmds.c
> > @@ -1720,9 +1720,19 @@ hmp_screendump(Monitor *mon, const QDict *qdict)
> >      const char *filename = qdict_get_str(qdict, "filename");
> >      const char *id = qdict_get_try_str(qdict, "device");
> >      int64_t head = qdict_get_try_int(qdict, "head", 0);
> > +    const char *input_format  = qdict_get_try_str(qdict, "format");
> >      Error *err = NULL;
> > +    ImageFormat format;
> >  
> > -    qmp_screendump(filename, id != NULL, id, id != NULL, head, &err);
> > +    format = qapi_enum_parse(&ImageFormat_lookup, input_format,
> > +                              IMAGE_FORMAT_PPM, &err);
> > +    if (err) {
> > +        goto end;
> > +    }
> > +
> > +    qmp_screendump(filename, id != NULL, id, id != NULL, head,
> > +                   input_format != NULL, format, &err);
> > +end:
> >      hmp_handle_error(mon, err);
> >  }
> >  
> > diff --git a/qapi/ui.json b/qapi/ui.json
> > index 664da9e462..24371fce05 100644
> > --- a/qapi/ui.json
> > +++ b/qapi/ui.json
> > @@ -157,12 +157,27 @@
> >  ##
> >  { 'command': 'expire_password', 'boxed': true, 'data': 'ExpirePasswordOptions' }
> >  
> > +##
> > +# @ImageFormat:
> > +#
> > +# Supported image format types.
> > +#
> > +# @png: PNG format
> > +#
> > +# @ppm: PPM format
> > +#
> > +# Since: 7.1
> > +#
> > +##
> > +{ 'enum': 'ImageFormat',
> > +  'data': ['ppm', 'png'] }
> > +
> >  ##
> >  # @screendump:
> >  #
> > -# Write a PPM of the VGA screen to a file.
> > +# Capture the contents of a screen and write it to a file.
> >  #
> > -# @filename: the path of a new PPM file to store the image
> > +# @filename: the path of a new file to store the image
> >  #
> >  # @device: ID of the display device that should be dumped. If this parameter
> >  #          is missing, the primary display will be used. (Since 2.12)
> > @@ -171,6 +186,8 @@
> >  #        parameter is missing, head #0 will be used. Also note that the head
> >  #        can only be specified in conjunction with the device ID. (Since 2.12)
> >  #
> > +# @format: image format for screendump is specified. (default: ppm) (Since 7.1)
> 
> Recommend
> 
>    # @format: image format for screendump (default: ppm) (Since 7.1)
> 
> > +#
> >  # Returns: Nothing on success
> >  #
> >  # Since: 0.14
> > @@ -183,7 +200,8 @@
> >  #
> >  ##
> >  { 'command': 'screendump',
> > -  'data': {'filename': 'str', '*device': 'str', '*head': 'int'},
> > +  'data': {'filename': 'str', '*device': 'str', '*head': 'int',
> > +           '*format': 'ImageFormat'},
> >    'coroutine': true }
> >  
> >  ##
> 
> QAPI schema
> Acked-by: Markus Armbruster <armbru@redhat.com>
> 
> [...]
> 
-- 
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



      parent reply	other threads:[~2022-04-07 17:59 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-30  6:11 [PATCH v4 0/2] Option to take screenshot with screendump as PNG Kshitij Suri
2022-03-30  6:11 ` [PATCH v4 1/2] Replacing CONFIG_VNC_PNG with CONFIG_PNG Kshitij Suri
2022-03-30  6:11 ` [PATCH v4 2/2] Added parameter to take screenshot with screendump as PNG Kshitij Suri
2022-04-01 11:20   ` Markus Armbruster
2022-04-05  5:48     ` Kshitij Suri
2022-04-05  7:24       ` Markus Armbruster
2022-04-07 17:58     ` Dr. David Alan Gilbert [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Yk8mVyza54cbCim9@work-vm \
    --to=dgilbert@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=eblake@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kshitij.suri@nutanix.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=philippe.mathieu.daude@gmail.com \
    --cc=prachatos.mitra@nutanix.com \
    --cc=prerna.saxena@nutanix.com \
    --cc=qemu-devel@nongnu.org \
    --cc=soham.ghosh@nutanix.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.