summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/imagedev/avivideo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/imagedev/avivideo.cpp')
-rw-r--r--src/devices/imagedev/avivideo.cpp58
1 files changed, 23 insertions, 35 deletions
diff --git a/src/devices/imagedev/avivideo.cpp b/src/devices/imagedev/avivideo.cpp
index 0c3559a127a..bfa095fd331 100644
--- a/src/devices/imagedev/avivideo.cpp
+++ b/src/devices/imagedev/avivideo.cpp
@@ -26,8 +26,8 @@ DEFINE_DEVICE_TYPE(IMAGE_AVIVIDEO, avivideo_image_device, "avivideo_image", "AVI
avivideo_image_device::avivideo_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, IMAGE_AVIVIDEO, tag, owner, clock),
device_image_interface(mconfig, *this),
- m_frame(nullptr),
- m_avi(nullptr),
+ m_frame(),
+ m_avi(),
m_frame_timer(nullptr),
m_frame_count(0),
m_frame_num(0)
@@ -46,7 +46,7 @@ avivideo_image_device::~avivideo_image_device()
void avivideo_image_device::device_start()
{
- m_frame_timer = timer_alloc(TIMER_FRAME);
+ m_frame_timer = timer_alloc(FUNC(avivideo_image_device::frame_timer), this);
m_frame_timer->adjust(attotime::never);
save_item(NAME(m_frame_count));
@@ -58,40 +58,36 @@ void avivideo_image_device::device_reset()
m_frame_num = 0;
}
-void avivideo_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+TIMER_CALLBACK_MEMBER(avivideo_image_device::frame_timer)
{
- if (id == TIMER_FRAME)
+ if (m_avi)
{
- if (m_avi != nullptr)
+ avi_file::error avierr = m_avi->read_uncompressed_video_frame(m_frame_num, *m_frame);
+ if (avierr != avi_file::error::NONE)
{
- avi_file::error avierr = m_avi->read_uncompressed_video_frame(m_frame_num, *m_frame);
- if (avierr != avi_file::error::NONE)
- {
- m_frame_timer->adjust(attotime::never);
- return;
- }
- m_frame_num++;
- if (m_frame_num >= m_frame_count)
- {
- m_frame_num = 0;
- }
+ m_frame_timer->adjust(attotime::never);
+ return;
}
- else
+ m_frame_num++;
+ if (m_frame_num >= m_frame_count)
{
- m_frame_timer->adjust(attotime::never);
+ m_frame_num = 0;
}
}
+ else
+ {
+ m_frame_timer->adjust(attotime::never);
+ }
}
-image_init_result avivideo_image_device::call_load()
+std::pair<std::error_condition, std::string> avivideo_image_device::call_load()
{
- m_frame = new bitmap_argb32;
+ m_frame.reset(new bitmap_argb32);
avi_file::error avierr = avi_file::open(filename(), m_avi);
if (avierr != avi_file::error::NONE)
{
- delete m_frame;
- m_frame = nullptr;
- return image_init_result::FAIL;
+ m_frame.reset();
+ return std::make_pair(image_error::UNSPECIFIED, std::string());
}
const avi_file::movie_info &aviinfo = m_avi->get_movie_info();
@@ -100,19 +96,11 @@ image_init_result avivideo_image_device::call_load()
m_frame_timer->adjust(frame_time, 0, frame_time);
m_frame_count = aviinfo.video_numsamples;
m_frame_num = 0;
- return image_init_result::PASS;
+ return std::make_pair(std::error_condition(), std::string());
}
void avivideo_image_device::call_unload()
{
- if (m_frame)
- {
- delete m_frame;
- m_frame = nullptr;
- }
- if (m_avi)
- {
- m_avi.release();
- m_avi = nullptr;
- }
+ m_frame.reset();
+ m_avi.reset();
}