diff options
author | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2017-09-28 13:01:08 +0100 |
---|---|---|
committer | Giacomo Travaglini <giacomo.travaglini@arm.com> | 2017-10-31 11:17:29 +0000 |
commit | 12fb1ca0b5f4ba139889e6005a4aed6d03467864 (patch) | |
tree | 455740b7e0cc3cf8e088a2473ef1c7f9b9814d30 /src/base/vnc/vncinput.cc | |
parent | 1025ef1598b8b7c3d00b82d30458e375697b8eff (diff) | |
download | gem5-12fb1ca0b5f4ba139889e6005a4aed6d03467864.tar.xz |
base: Introducing utility for writing raw data in png format
Originally it was possible to use a Bitmap writer class for dumping a
framebuffer snapshot in a .bmp file. This patch enables you to choose
another format. In particular it implements the writing of PNG Images
using libpng library. The latter has to be already installed in your
machine, otherwise gem5 will default to the Bitmap format. This
configurable writer has been introduced in the VNC frame dumping mechanism,
which is storing changed frame buffers from the VNC server
Change-Id: Id7e5763c82235f1ce90381c8486b85a7cce734ce
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/5181
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/base/vnc/vncinput.cc')
-rw-r--r-- | src/base/vnc/vncinput.cc | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/base/vnc/vncinput.cc b/src/base/vnc/vncinput.cc index 541b77143..b9d1d2546 100644 --- a/src/base/vnc/vncinput.cc +++ b/src/base/vnc/vncinput.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2015 ARM Limited + * Copyright (c) 2010, 2015, 2017 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -48,6 +48,7 @@ #include "base/misc.hh" #include "base/output.hh" + #include "base/trace.hh" #include "debug/VNC.hh" @@ -58,7 +59,8 @@ VncInput::VncInput(const Params *p) fb(&FrameBuffer::dummy), _videoWidth(fb->width()), _videoHeight(fb->height()), captureEnabled(p->frame_capture), - captureCurrentFrame(0), captureLastHash(0) + captureCurrentFrame(0), captureLastHash(0), + imgFormat(p->img_format) { if (captureEnabled) { // remove existing frame output directory if it exists, then create a @@ -78,9 +80,11 @@ VncInput::setFrameBuffer(const FrameBuffer *rfb) fb = rfb; - // create bitmap of the frame with new attributes - if (captureEnabled) - captureBitmap.reset(new Bitmap(rfb)); + // Create the Image Writer object in charge of dumping + // the frame buffer raw data into a file in a specific format. + if (captureEnabled) { + captureImage = createImgWriter(imgFormat, rfb); + } // Setting a new frame buffer means that we need to send an update // to the client. Mark the internal buffers as dirty to do so. @@ -110,7 +114,7 @@ VncInput::setDirty() void VncInput::captureFrameBuffer() { - assert(captureBitmap); + assert(captureImage); // skip identical frames uint64_t new_hash = fb->getHash(); @@ -120,13 +124,14 @@ VncInput::captureFrameBuffer() // get the filename for the current frame char frameFilenameBuffer[64]; - snprintf(frameFilenameBuffer, 64, "fb.%06d.%lld.bmp.gz", - captureCurrentFrame, static_cast<long long int>(curTick())); + snprintf(frameFilenameBuffer, 64, "fb.%06d.%lld.%s.gz", + captureCurrentFrame, static_cast<long long int>(curTick()), + captureImage->getImgExtension()); const string frameFilename(frameFilenameBuffer); // create the compressed framebuffer file OutputStream *fb_out(captureOutputDirectory->create(frameFilename, true)); - captureBitmap->write(*fb_out->stream()); + captureImage->write(*fb_out->stream()); captureOutputDirectory->close(fb_out); ++captureCurrentFrame; |