dev: Add option to disable framebuffer .bmp dump in run folder

There is an option to enable/disable all framebuffer dumps, but the
last frame always gets dumped in the run folder with no other way to
disable it. These files can add up very quickly running many experiments.

This patch adds an option to disable them. The default behavior
remains unchanged.
This commit is contained in:
Dam Sunwoo
2013-10-17 10:20:45 -05:00
parent 1746eb4a11
commit ad614bf24d
5 changed files with 27 additions and 15 deletions

View File

@@ -139,6 +139,8 @@ class Pl111(AmbaDmaDevice):
pixel_clock = Param.Clock('24MHz', "Pixel clock")
vnc = Param.VncInput(Parent.any, "Vnc server for remote frame buffer display")
amba_id = 0x00141111
enable_capture = Param.Bool(True, "capture frame to system.framebuffer.bmp")
class HDLcd(AmbaDmaDevice):
type = 'HDLcd'
@@ -149,6 +151,7 @@ class HDLcd(AmbaDmaDevice):
vnc = Param.VncInput(Parent.any, "Vnc server for remote frame buffer "
"display")
amba_id = 0x00141000
enable_capture = Param.Bool(True, "capture frame to system.framebuffer.bmp")
class RealView(Platform):
type = 'RealView'

View File

@@ -72,7 +72,8 @@ HDLcd::HDLcd(const Params *p)
startFrameEvent(this), endFrameEvent(this), renderPixelEvent(this),
fillPixelBufferEvent(this), intEvent(this),
dmaDoneEventAll(MAX_OUTSTANDING_DMA_REQ_CAPACITY, this),
dmaDoneEventFree(MAX_OUTSTANDING_DMA_REQ_CAPACITY)
dmaDoneEventFree(MAX_OUTSTANDING_DMA_REQ_CAPACITY),
enableCapture(p->enable_capture)
{
pioSize = 0xFFFF;
@@ -560,13 +561,15 @@ HDLcd::endFrame() {
if (vnc)
vnc->setDirty();
if (!pic)
pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true);
if (enableCapture) {
if (!pic)
pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true);
assert(bmp);
assert(pic);
pic->seekp(0);
bmp->write(pic);
assert(bmp);
assert(pic);
pic->seekp(0);
bmp->write(pic);
}
// start the next frame
frameUnderway = false;

View File

@@ -474,6 +474,8 @@ class HDLcd: public AmbaDmaDevice
std::vector<DmaDoneEvent *> dmaDoneEventFree;
/**@}*/
bool enableCapture;
public:
typedef HDLcdParams Params;

View File

@@ -69,7 +69,7 @@ Pl111::Pl111(const Params *p)
waterMark(0), dmaPendingNum(0), readEvent(this), fillFifoEvent(this),
dmaDoneEventAll(maxOutstandingDma, this),
dmaDoneEventFree(maxOutstandingDma),
intEvent(this)
intEvent(this), enableCapture(p->enable_capture)
{
pioSize = 0xFFFF;
@@ -497,15 +497,17 @@ Pl111::dmaDone()
if (vnc)
vnc->setDirty();
DPRINTF(PL111, "-- write out frame buffer into bmp\n");
if (enableCapture) {
DPRINTF(PL111, "-- write out frame buffer into bmp\n");
if (!pic)
pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true);
if (!pic)
pic = simout.create(csprintf("%s.framebuffer.bmp", sys->name()), true);
assert(bmp);
assert(pic);
pic->seekp(0);
bmp->write(pic);
assert(bmp);
assert(pic);
pic->seekp(0);
bmp->write(pic);
}
// schedule the next read based on when the last frame started
// and the desired fps (i.e. maxFrameTime), we turn the

View File

@@ -348,6 +348,8 @@ class Pl111: public AmbaDmaDevice
/** Wrapper to create an event out of the interrupt */
EventWrapper<Pl111, &Pl111::generateInterrupt> intEvent;
bool enableCapture;
public:
typedef Pl111Params Params;