summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dev/arm/RealView.py6
-rw-r--r--src/dev/arm/hdlcd.cc10
-rw-r--r--src/dev/arm/hdlcd.hh7
3 files changed, 17 insertions, 6 deletions
diff --git a/src/dev/arm/RealView.py b/src/dev/arm/RealView.py
index 51aa1cf3c..08145bf66 100644
--- a/src/dev/arm/RealView.py
+++ b/src/dev/arm/RealView.py
@@ -56,6 +56,7 @@ from Gic import *
from EnergyCtrl import EnergyCtrl
from ClockDomain import SrcClockDomain
from SubSystem import SubSystem
+from Graphics import ImageFormat
# Platforms with KVM support should generally use in-kernel GIC
# emulation. Use a GIC model that automatically switches between
@@ -298,7 +299,10 @@ class HDLcd(AmbaDmaDevice):
"selector order in some kernels")
workaround_dma_line_count = Param.Bool(True, "Workaround incorrect "
"DMA line count (off by 1)")
- enable_capture = Param.Bool(True, "capture frame to system.framebuffer.bmp")
+ enable_capture = Param.Bool(True, "capture frame to "
+ "system.framebuffer.{extension}")
+ frame_format = Param.ImageFormat("Auto",
+ "image format of the captured frame")
pixel_buffer_size = Param.MemorySize32("2kB", "Size of address range")
diff --git a/src/dev/arm/hdlcd.cc b/src/dev/arm/hdlcd.cc
index 98f2a3d44..20dc7d44e 100644
--- a/src/dev/arm/hdlcd.cc
+++ b/src/dev/arm/hdlcd.cc
@@ -47,6 +47,7 @@
#include "debug/HDLcd.hh"
#include "dev/arm/amba_device.hh"
#include "dev/arm/base_gic.hh"
+#include "enums/ImageFormat.hh"
#include "mem/packet.hh"
#include "mem/packet_access.hh"
#include "params/HDLcd.hh"
@@ -85,11 +86,13 @@ HDLcd::HDLcd(const HDLcdParams *p)
virtRefreshEvent([this]{ virtRefresh(); }, name()),
// Other
- bmp(&pixelPump.fb), pic(NULL), conv(PixelConverter::rgba8888_le),
+ imgFormat(p->frame_format), pic(NULL), conv(PixelConverter::rgba8888_le),
pixelPump(*this, *p->pxl_clk, p->pixel_chunk)
{
if (vnc)
vnc->setFrameBuffer(&pixelPump.fb);
+
+ imgWriter = createImgWriter(imgFormat, &pixelPump.fb);
}
HDLcd::~HDLcd()
@@ -572,13 +575,14 @@ HDLcd::pxlFrameDone()
if (enableCapture) {
if (!pic) {
pic = simout.create(
- csprintf("%s.framebuffer.bmp", sys->name()),
+ csprintf("%s.framebuffer.%s",
+ sys->name(), imgWriter->getImgExtension()),
true);
}
assert(pic);
pic->stream()->seekp(0);
- bmp.write(*pic->stream());
+ imgWriter->write(*pic->stream());
}
}
diff --git a/src/dev/arm/hdlcd.hh b/src/dev/arm/hdlcd.hh
index dd52e202c..f737710bd 100644
--- a/src/dev/arm/hdlcd.hh
+++ b/src/dev/arm/hdlcd.hh
@@ -79,8 +79,8 @@
#include <fstream>
#include <memory>
-#include "base/bmpwriter.hh"
#include "base/framebuffer.hh"
+#include "base/imgwriter.hh"
#include "base/output.hh"
#include "dev/arm/amba_device.hh"
#include "dev/pixelpump.hh"
@@ -350,7 +350,10 @@ class HDLcd: public AmbaDmaDevice
EventFunctionWrapper virtRefreshEvent;
/** Helper to write out bitmaps */
- BmpWriter bmp;
+ std::unique_ptr<ImgWriter> imgWriter;
+
+ /** Image Format */
+ Enums::ImageFormat imgFormat;
/** Picture of what the current frame buffer looks like */
OutputStream *pic;