diff options
Diffstat (limited to 'src/dev/arm')
-rw-r--r-- | src/dev/arm/RealView.py | 6 | ||||
-rw-r--r-- | src/dev/arm/hdlcd.cc | 10 | ||||
-rw-r--r-- | src/dev/arm/hdlcd.hh | 7 |
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; |