diff options
author | 2019-08-09 19:57:10 -0400 | |
---|---|---|
committer | 2019-08-09 19:57:10 -0400 | |
commit | f6e204b4aeafa49294044b0a5e591291d722f2b5 (patch) | |
tree | fd26e438f79b4d829627b852412c9b33c9f24ac5 | |
parent | ccfc99ef599353a178a47a9dee5bcf319847833e (diff) |
Add still-frame PNG image device for use by digitizers/cameras/etc. [R. Belmont]
Other formats can be added, we already have libjpeg in 3rdparty/.
-rw-r--r-- | scripts/src/machine.lua | 2 | ||||
-rw-r--r-- | src/devices/imagedev/picture.cpp | 64 | ||||
-rw-r--r-- | src/devices/imagedev/picture.h | 58 | ||||
-rw-r--r-- | src/emu/diimage.cpp | 3 | ||||
-rw-r--r-- | src/emu/diimage.h | 3 |
5 files changed, 128 insertions, 2 deletions
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua index d5a5d145e67..ce227154ef0 100644 --- a/scripts/src/machine.lua +++ b/scripts/src/machine.lua @@ -57,6 +57,8 @@ files { MAME_DIR .. "src/devices/imagedev/midiin.h", MAME_DIR .. "src/devices/imagedev/midiout.cpp", MAME_DIR .. "src/devices/imagedev/midiout.h", + MAME_DIR .. "src/devices/imagedev/picture.cpp", + MAME_DIR .. "src/devices/imagedev/picture.h", MAME_DIR .. "src/devices/imagedev/printer.cpp", MAME_DIR .. "src/devices/imagedev/printer.h", MAME_DIR .. "src/devices/imagedev/snapquik.cpp", diff --git a/src/devices/imagedev/picture.cpp b/src/devices/imagedev/picture.cpp new file mode 100644 index 00000000000..2767d80a1d4 --- /dev/null +++ b/src/devices/imagedev/picture.cpp @@ -0,0 +1,64 @@ +// license:BSD-3-Clause +// copyright-holders:R. Belmont +/********************************************************************* + + picture.cpp + + Image device for still pictures. + +*********************************************************************/ + +#include "emu.h" +#include "picture.h" +#include "png.h" + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +// device type definition +DEFINE_DEVICE_TYPE(IMAGE_PICTURE, picture_image_device, "picture_image", "Still Image") + +//------------------------------------------------- +// microdrive_image_device - constructor +//------------------------------------------------- + +picture_image_device::picture_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : + device_t(mconfig, IMAGE_PICTURE, tag, owner, clock), + device_image_interface(mconfig, *this), + m_picture(nullptr) +{ +} + +//------------------------------------------------- +// microdrive_image_device - destructor +//------------------------------------------------- + +picture_image_device::~picture_image_device() +{ + if (m_picture) + { + delete m_picture; + m_picture = nullptr; + } +} + + +void picture_image_device::device_start() +{ +} + +image_init_result picture_image_device::call_load() +{ + m_picture = new bitmap_argb32; + if (png_read_bitmap(image_core_file(), *m_picture) != PNGERR_NONE) + { + return image_init_result::FAIL; + } + + return image_init_result::PASS; +} + +void picture_image_device::call_unload() +{ +} diff --git a/src/devices/imagedev/picture.h b/src/devices/imagedev/picture.h new file mode 100644 index 00000000000..7d41d53b4da --- /dev/null +++ b/src/devices/imagedev/picture.h @@ -0,0 +1,58 @@ +// license:BSD-3-Clause +// copyright-holders:R. Belmont +/********************************************************************* + + picture.h + + Image device that loads still pictures (currently PNG) + +*********************************************************************/ + +#ifndef MAME_DEVICES_IMAGEDEV_PICTURE_H +#define MAME_DEVICES_IMAGEDEV_PICTURE_H + +#pragma once + +#include "bitmap.h" + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +// ======================> microdrive_image_device + +class picture_image_device : public device_t, + public device_image_interface +{ +public: + // construction/destruction + picture_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + virtual ~picture_image_device(); + + // image-level overrides + virtual image_init_result call_load() override; + virtual void call_unload() override; + virtual iodevice_t image_type() const override { return IO_PICTURE; } + + virtual bool is_readable() const override { return 1; } + virtual bool is_writeable() const override { return 0; } + virtual bool is_creatable() const override { return 0; } + virtual bool must_be_loaded() const override { return 0; } + virtual bool is_reset_on_load() const override { return 0; } + virtual const char *file_extensions() const override { return "png"; } + + bitmap_argb32 &get_bitmap() { return *m_picture; } + +protected: + // device-level overrides + virtual void device_start() override; + +private: + bitmap_argb32 *m_picture; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(IMAGE_PICTURE, picture_image_device) + +#endif // MAME_DEVICES_IMAGEDEV_PICTURE_H diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp index d6d0a5e5247..69417db74db 100644 --- a/src/emu/diimage.cpp +++ b/src/emu/diimage.cpp @@ -45,7 +45,8 @@ const image_device_type_info device_image_interface::m_device_info_array[] = { IO_MAGTAPE, "magtape", "magt" }, /* 14 */ { IO_ROM, "romimage", "rom" }, /* 15 */ { IO_MIDIIN, "midiin", "min" }, /* 16 */ - { IO_MIDIOUT, "midiout", "mout" } /* 17 */ + { IO_MIDIOUT, "midiout", "mout" }, /* 17 */ + { IO_PICTURE, "picture", "pic" } /* 18 */ }; diff --git a/src/emu/diimage.h b/src/emu/diimage.h index 51a032d35e6..fb2a317d60a 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -50,7 +50,8 @@ enum iodevice_t IO_ROM, /* 16 - Individual ROM image - the Amstrad CPC has a few applications that were sold on 16kB ROMs */ IO_MIDIIN, /* 17 - MIDI In port */ IO_MIDIOUT, /* 18 - MIDI Out port */ - IO_COUNT /* 19 - Total Number of IO_devices for searching */ + IO_PICTURE, /* 19 - A single-frame image */ + IO_COUNT /* 20 - Total Number of IO_devices for searching */ }; enum image_error_t |