From 2483439a18d545efc01b43199f056551df022429 Mon Sep 17 00:00:00 2001 From: MooglyGuy Date: Mon, 22 Jul 2019 17:30:14 +0200 Subject: More work towards generic AVI playback, nw --- src/lib/util/aviio.cpp | 3 +++ src/osd/modules/input/input_windows.cpp | 5 +++++ src/osd/modules/osdwindow.h | 1 + src/osd/modules/render/drawbgfx.h | 1 + src/osd/modules/render/drawd3d.cpp | 12 ++++++++---- src/osd/modules/render/drawd3d.h | 1 + src/osd/modules/render/drawgdi.h | 1 + src/osd/modules/render/drawnone.h | 1 + src/osd/modules/render/drawogl.h | 1 + src/osd/windows/video.cpp | 4 ++++ src/osd/windows/window.cpp | 18 ++++++++++++++++++ src/osd/windows/window.h | 1 + 12 files changed, 45 insertions(+), 4 deletions(-) diff --git a/src/lib/util/aviio.cpp b/src/lib/util/aviio.cpp index b7849ee36cc..764db744bef 100644 --- a/src/lib/util/aviio.cpp +++ b/src/lib/util/aviio.cpp @@ -1687,7 +1687,10 @@ avi_file::error avi_file_impl::read_uncompressed_video_frame(std::uint32_t frame return error::INVALID_STREAM; if (stream->format() != FORMAT_UNCOMPRESSED && stream->format() != FORMAT_DIB && stream->format() != FORMAT_RGB && stream->format() != FORMAT_RAW && stream->format() != FORMAT_I420) + { + printf("Invalid format: %08x\n", stream->format()); return error::UNSUPPORTED_VIDEO_FORMAT; + } if (bitmap.width() < stream->width() || bitmap.height() < stream->height()) bitmap.resize(stream->width(), stream->height()); diff --git a/src/osd/modules/input/input_windows.cpp b/src/osd/modules/input/input_windows.cpp index 164ee0e3c31..3f62172c84d 100644 --- a/src/osd/modules/input/input_windows.cpp +++ b/src/osd/modules/input/input_windows.cpp @@ -156,6 +156,11 @@ void windows_osd_interface::customize_input_type_list(simple_listrecord_movie(); - //} + if (m_shaders != nullptr) + { + m_shaders->record_movie(); + } +} + +void renderer_d3d9::play() +{ play_avi("pacman.avi"); } diff --git a/src/osd/modules/render/drawd3d.h b/src/osd/modules/render/drawd3d.h index c626463265a..4e83ae4eb77 100644 --- a/src/osd/modules/render/drawd3d.h +++ b/src/osd/modules/render/drawd3d.h @@ -64,6 +64,7 @@ public: virtual int draw(const int update) override; virtual void save() override; virtual void record() override; + virtual void play() override; virtual void toggle_fsfx() override; virtual void add_audio_to_recording(const int16_t *buffer, int samples_this_frame) override; virtual std::vector get_slider_list() override; diff --git a/src/osd/modules/render/drawgdi.h b/src/osd/modules/render/drawgdi.h index 49d05c18daa..d203ea4e7ad 100644 --- a/src/osd/modules/render/drawgdi.h +++ b/src/osd/modules/render/drawgdi.h @@ -44,6 +44,7 @@ public: virtual int draw(const int update) override; virtual void save() override {}; virtual void record() override {}; + virtual void play() override {}; virtual void toggle_fsfx() override {}; private: diff --git a/src/osd/modules/render/drawnone.h b/src/osd/modules/render/drawnone.h index c884f969204..711345015ff 100644 --- a/src/osd/modules/render/drawnone.h +++ b/src/osd/modules/render/drawnone.h @@ -27,6 +27,7 @@ public: virtual int draw(const int update) override { return 0; } virtual void save() override { } virtual void record() override { } + virtual void play() override { } virtual void toggle_fsfx() override { } }; diff --git a/src/osd/modules/render/drawogl.h b/src/osd/modules/render/drawogl.h index 5444f203141..dfafcdf8ea1 100644 --- a/src/osd/modules/render/drawogl.h +++ b/src/osd/modules/render/drawogl.h @@ -160,6 +160,7 @@ public: #ifdef OSD_WINDOWS virtual void save() override { } virtual void record() override { } + virtual void play() override { } virtual void toggle_fsfx() override { } #endif diff --git a/src/osd/windows/video.cpp b/src/osd/windows/video.cpp index 889e76caa6b..2306b2d97ef 100644 --- a/src/osd/windows/video.cpp +++ b/src/osd/windows/video.cpp @@ -126,6 +126,10 @@ void windows_osd_interface::check_osd_inputs() // check for taking fullscreen video if (machine().ui_input().pressed(IPT_OSD_4)) winwindow_toggle_fsfx(); + + // check for taking fullscreen video + if (machine().ui_input().pressed(IPT_OSD_5)) + winwindow_play_video(); } diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp index 3066be3d6ec..4e8ec3593ee 100644 --- a/src/osd/windows/window.cpp +++ b/src/osd/windows/window.cpp @@ -629,6 +629,24 @@ void winwindow_take_video(void) +//============================================================ +// winwindow_play_video +// (main thread) +//============================================================ + +void winwindow_play_video(void) +{ + assert(GetCurrentThreadId() == main_threadid); + + // iterate over windows and request a snap + for (auto window : osd_common_t::s_window_list) + { + window->renderer().play(); + } +} + + + //============================================================ // winwindow_toggle_full_screen // (main thread) diff --git a/src/osd/windows/window.h b/src/osd/windows/window.h index 3db5177cf6d..2b7630595c0 100644 --- a/src/osd/windows/window.h +++ b/src/osd/windows/window.h @@ -165,6 +165,7 @@ extern LRESULT CALLBACK winwindow_video_window_proc_ui(HWND wnd, UINT message, W void winwindow_toggle_full_screen(void); void winwindow_take_snap(void); void winwindow_take_video(void); +void winwindow_play_video(void); void winwindow_toggle_fsfx(void); void winwindow_process_events_periodic(running_machine &machine); -- cgit v1.2.3