gem5 v24.0.0.0
Loading...
Searching...
No Matches
vncinput.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2010, 2015, 2017 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 */
37
42#include "base/vnc/vncinput.hh"
43
44#include <sys/types.h>
45
46#include "base/logging.hh"
47#include "base/output.hh"
48
49#include "base/trace.hh"
50#include "debug/VNC.hh"
51
52namespace gem5
53{
54
56 : SimObject(p), keyboard(NULL), mouse(NULL),
57 fb(&FrameBuffer::dummy),
58 _videoWidth(fb->width()), _videoHeight(fb->height()),
59 captureEnabled(p.frame_capture),
60 captureCurrentFrame(0), captureLastHash(0),
61 imgFormat(p.img_format)
62{
63 if (captureEnabled) {
64 // remove existing frame output directory if it exists, then create a
65 // clean empty directory
66 const std::string FRAME_OUTPUT_SUBDIR = "frames_" + name();
67 simout.remove(FRAME_OUTPUT_SUBDIR, true);
69 FRAME_OUTPUT_SUBDIR);
70 }
71}
72
73void
75{
76 if (!rfb)
77 panic("Trying to VNC frame buffer to NULL!");
78
79 fb = rfb;
80
81 // Create the Image Writer object in charge of dumping
82 // the frame buffer raw data into a file in a specific format.
83 if (captureEnabled) {
85 }
86
87 // Setting a new frame buffer means that we need to send an update
88 // to the client. Mark the internal buffers as dirty to do so.
89 setDirty();
90}
91
92void
94{
95 const unsigned width(fb->width());
96 const unsigned height(fb->height());
97
98 if (_videoWidth != width || _videoHeight != height) {
99 DPRINTF(VNC, "Updating video params: width: %d height: %d\n",
100 width, height);
101
103 _videoHeight = height;
104
106 }
107
108 if (captureEnabled)
110}
111
112void
114{
115 assert(captureImage);
116
117 // skip identical frames
118 uint64_t new_hash = fb->getHash();
119 if (captureLastHash == new_hash)
120 return;
121 captureLastHash = new_hash;
122
123 // get the filename for the current frame
124 char frameFilenameBuffer[64];
125 snprintf(frameFilenameBuffer, 64, "fb.%06d.%lld.%s.gz",
126 captureCurrentFrame, static_cast<long long int>(curTick()),
127 captureImage->getImgExtension());
128 const std::string frameFilename(frameFilenameBuffer);
129
130 // create the compressed framebuffer file
131 OutputStream *fb_out(captureOutputDirectory->create(frameFilename, true));
132 captureImage->write(*fb_out->stream());
134
136}
137
138} // namespace gem5
#define DPRINTF(x,...)
Definition trace.hh:210
Internal gem5 representation of a frame buffer.
uint64_t getHash() const
Create a hash of the image that can be used for quick comparisons.
unsigned height() const
Frame buffer height in pixels.
unsigned width() const
Frame buffer width in pixels.
virtual std::string name() const
Definition named.hh:47
void close(OutputStream *file)
Closes an output file and free the corresponding OutputFile.
Definition output.cc:147
void remove(const std::string &name, bool recursive=false)
Removes a specified file or subdirectory.
Definition output.cc:296
OutputDirectory * createSubdirectory(const std::string &name)
Creates a subdirectory within this directory.
Definition output.cc:283
OutputStream * create(const std::string &name, bool binary=false, bool no_gz=false)
Creates a file in this directory (optionally compressed).
Definition output.cc:210
std::ostream * stream() const
Get the output underlying output stream.
Definition output.hh:62
Abstract superclass for simulation objects.
const FrameBuffer * fb
pointer to the actual data that is stored in the frame buffer device
Definition vncinput.hh:218
uint64_t captureLastHash
Computed hash of the last captured frame.
Definition vncinput.hh:236
virtual void setDirty()
The frame buffer uses this call to notify the vnc server that the frame buffer has been updated and a...
Definition vncinput.cc:93
virtual void frameBufferResized()
Definition vncinput.hh:209
VncInput(const Params &p)
Definition vncinput.cc:55
virtual void setFrameBuffer(const FrameBuffer *rfb)
Set the address of the frame buffer we are going to show.
Definition vncinput.cc:74
void captureFrameBuffer()
Captures the current frame buffer to a file.
Definition vncinput.cc:113
VncInputParams Params
Definition vncinput.hh:166
enums::ImageFormat imgFormat
image format
Definition vncinput.hh:242
uint16_t _videoHeight
the height of the frame buffer we are sending to the client
Definition vncinput.hh:224
OutputDirectory * captureOutputDirectory
Directory to store captured frames to.
Definition vncinput.hh:233
uint16_t _videoWidth
the width of the frame buffer we are sending to the client
Definition vncinput.hh:221
bool captureEnabled
Flag indicating whether to capture snapshots of frame buffer or not.
Definition vncinput.hh:227
std::unique_ptr< ImgWriter > captureImage
Cached ImgWriter object for writing out frame buffers to file.
Definition vncinput.hh:239
int captureCurrentFrame
Current frame number being captured to a file.
Definition vncinput.hh:230
#define panic(...)
This implements a cprintf based panic() function.
Definition logging.hh:188
Bitfield< 4 > width
Definition misc_types.hh:72
Bitfield< 9 > fb
Bitfield< 0 > p
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
Tick curTick()
The universal simulation clock.
Definition cur_tick.hh:46
OutputDirectory simout
Definition output.cc:62
std::unique_ptr< ImgWriter > createImgWriter(enums::ImageFormat type, const FrameBuffer *fb)
Factory Function which allocates a ImgWriter object and returns a smart pointer to it.
Definition imgwriter.cc:53
Declaration of a VNC input.

Generated on Tue Jun 18 2024 16:24:01 for gem5 by doxygen 1.11.0