summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2019-08-09 19:57:10 -0400
committer arbee <rb6502@users.noreply.github.com>2019-08-09 19:57:10 -0400
commitf6e204b4aeafa49294044b0a5e591291d722f2b5 (patch)
treefd26e438f79b4d829627b852412c9b33c9f24ac5
parentccfc99ef599353a178a47a9dee5bcf319847833e (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.lua2
-rw-r--r--src/devices/imagedev/picture.cpp64
-rw-r--r--src/devices/imagedev/picture.h58
-rw-r--r--src/emu/diimage.cpp3
-rw-r--r--src/emu/diimage.h3
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