diff options
Diffstat (limited to 'src/devices/imagedev/avivideo.cpp')
-rw-r--r-- | src/devices/imagedev/avivideo.cpp | 58 |
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(); } |