From 1515ab8f4a849b3c71b78658f1e88fda093e7465 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 2 Feb 2017 23:21:21 +0100 Subject: [PATCH] - removed the long broken and obsolete PlayMovie code. --- src/CMakeLists.txt | 2 - src/i_movie.h | 52 ---- src/p_acs.cpp | 3 +- src/posix/i_movie.cpp | 7 - src/win32/fb_d3d9.cpp | 1 - src/win32/i_input.cpp | 18 -- src/win32/i_movie.cpp | 523 --------------------------------------- src/win32/win32iface.h | 1 - src/win32/win32video.cpp | 4 +- 9 files changed, 3 insertions(+), 608 deletions(-) delete mode 100644 src/i_movie.h delete mode 100644 src/posix/i_movie.cpp delete mode 100644 src/win32/i_movie.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 55d72809748..200164d7bdf 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -621,7 +621,6 @@ set( PLAT_WIN32_SOURCES win32/i_rawps2.cpp win32/i_xinput.cpp win32/i_main.cpp - win32/i_movie.cpp win32/i_system.cpp win32/i_specialpaths.cpp win32/st_start.cpp @@ -629,7 +628,6 @@ set( PLAT_WIN32_SOURCES win32/win32video.cpp ) set( PLAT_POSIX_SOURCES posix/i_cd.cpp - posix/i_movie.cpp posix/i_steam.cpp ) set( PLAT_SDL_SOURCES posix/sdl/crashcatcher.c diff --git a/src/i_movie.h b/src/i_movie.h deleted file mode 100644 index 9aa375d352c..00000000000 --- a/src/i_movie.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -** i_movie.h -** Defines the movie-related stuff -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#ifndef __I_MOVIE_H__ -#define __I_MOVIE_H__ - -#ifdef _MSC_VER -#pragma once -#endif - -int I_PlayMovie (const char *movieName); - -enum -{ - MOVIE_Played = 0, - MOVIE_Played_NoVideo = 1, - MOVIE_Played_Aborted = 2, - MOVIE_Failed = -1, -}; - -#endif //__I_MOVIE_H__ diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 8e7ba76881d..bddcd7f95d3 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -54,7 +54,6 @@ #include "c_dispatch.h" #include "s_sndseq.h" #include "i_system.h" -#include "i_movie.h" #include "sbar.h" #include "m_swap.h" #include "a_sharedglobal.h" @@ -8801,7 +8800,7 @@ int DLevelScript::RunScript () break; case PCD_PLAYMOVIE: - STACK(1) = I_PlayMovie (FBehavior::StaticLookupString (STACK(1))); + STACK(1) = -1; break; case PCD_SETACTORPOSITION: diff --git a/src/posix/i_movie.cpp b/src/posix/i_movie.cpp deleted file mode 100644 index 8aea4b50004..00000000000 --- a/src/posix/i_movie.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "i_movie.h" - -int I_PlayMovie (const char *movie) -{ - return MOVIE_Failed; -} - diff --git a/src/win32/fb_d3d9.cpp b/src/win32/fb_d3d9.cpp index 4d758783e0a..789eacd98d5 100644 --- a/src/win32/fb_d3d9.cpp +++ b/src/win32/fb_d3d9.cpp @@ -1706,7 +1706,6 @@ void D3DFB::NewRefreshRate () void D3DFB::Blank () { - // Only used by movie player, which isn't working with D3D9 yet. } void D3DFB::SetBlendingRect(int x1, int y1, int x2, int y2) diff --git a/src/win32/i_input.cpp b/src/win32/i_input.cpp index 1e63903927a..3e265d7620f 100644 --- a/src/win32/i_input.cpp +++ b/src/win32/i_input.cpp @@ -590,11 +590,9 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) break; case WTS_CONSOLE_DISCONNECT: SessionState |= 2; - //I_MovieDisableSound (); break; case WTS_CONSOLE_CONNECT: SessionState &= ~2; - //I_MovieResumeSound (); break; } } @@ -619,10 +617,6 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { GSnd->SuspendSound (); } - else if (oldstate && !SessionState) - { - GSnd->MovieResumeSound (); - } #endif } #ifdef _DEBUG @@ -948,18 +942,6 @@ FString I_GetFromClipboard (bool return_nothing) return retstr; } -#include "i_movie.h" - -CCMD (playmovie) -{ - if (argv.argc() != 2) - { - Printf ("Usage: playmovie \n"); - return; - } - I_PlayMovie (argv[1]); -} - //========================================================================== // // FInputDevice - Destructor diff --git a/src/win32/i_movie.cpp b/src/win32/i_movie.cpp deleted file mode 100644 index 66ffc84349d..00000000000 --- a/src/win32/i_movie.cpp +++ /dev/null @@ -1,523 +0,0 @@ -/* -** i_movie.cpp -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - * If you do not have dshow.h, either download the latest DirectX SDK - * or #define I_DO_NOT_LIKE_BIG_DOWNLOADS - * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - */ - -#ifndef I_DO_NOT_LIKE_BIG_DOWNLOADS -#define I_DO_NOT_LIKE_BIG_DOWNLOADS -#endif - -#define WIN32_LEAN_AND_MEAN -#include -#define USE_WINDOWS_DWORD - -#include "c_cvars.h" - -CUSTOM_CVAR (Float, snd_movievolume, 1.f, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) -{ - if (self < 0.f) - self = 0.f; - else if (self > 1.f) - self = 1.f; -} - -#ifdef I_DO_NOT_LIKE_BIG_DOWNLOADS - -#include "i_movie.h" - -int I_PlayMovie (const char *movie) -{ - return MOVIE_Failed; -} - -#else - -#include -#include "i_movie.h" -#include "i_sound.h" -#include "v_video.h" -#include "c_console.h" -#include "win32iface.h" -#include "sbar.h" - -EXTERN_CVAR (String, language) - -#define WM_GRAPHNOTIFY (WM_APP+321) - -#ifdef _DEBUG -#define INGAME_PRIORITY_CLASS NORMAL_PRIORITY_CLASS -#else -//#define INGAME_PRIORITY_CLASS HIGH_PRIORITY_CLASS -#define INGAME_PRIORITY_CLASS NORMAL_PRIORITY_CLASS -#endif - -extern HWND Window; -extern IVideo *Video; -extern LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); -extern void I_CheckNativeMouse (bool preferNative); - -static bool MovieNotDone; -static bool MovieInterrupted; -static bool MovieDestroyed; -static bool FullVideo; -static bool NoVideo; -static IVideoWindow *vidwin; -static IMediaEventEx *event; -static IGraphBuilder *graph; -static IMediaControl *control; -static IBasicAudio *audio; -static IBasicVideo *video; - -static void CheckIfVideo (); -static void SetMovieSize (); -static void SetTheVolume (); -static void SizeWindowForVideo (); - -LRESULT CALLBACK MovieWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) -{ - switch (message) - { - case WM_GRAPHNOTIFY: - { - long code; - LONG_PTR parm1, parm2; - - while (event->GetEvent (&code, &parm1, &parm2, 0) == S_OK) - { - if (code == EC_COMPLETE) - { - MovieNotDone = false; - } - event->FreeEventParams (code, parm1, parm2); - } - } - break; - - case WM_SIZE: - if (vidwin == NULL) - { - InvalidateRect (Window, NULL, FALSE); - } - else if ((wParam == SIZE_MAXIMIZED || wParam == SIZE_RESTORED) && !FullVideo) - { - SetMovieSize (); - return 0; - } - break; - - case WM_PAINT: - if (vidwin == NULL) - { - if (screen != NULL) - { - static_cast (screen)->PaintToWindow (); - } - } - else if (!FullVideo) - { - PAINTSTRUCT ps; - HBRUSH br; - HDC dc; - long left, top, width, height; - - if (S_OK == vidwin->GetWindowPosition (&left, &top, &width, &height)) - { - dc = BeginPaint (Window, &ps); - if (dc != NULL) - { - RECT rect = { left, top, left+width, top+height }; - ScreenToClient (hWnd, (LPPOINT)&rect.left); - ScreenToClient (hWnd, (LPPOINT)&rect.right); - br = (HBRUSH)GetStockObject (BLACK_BRUSH); - switch (ExcludeClipRect (dc, rect.left, rect.top, rect.right, rect.bottom)) - { - case SIMPLEREGION: - case COMPLEXREGION: - FillRect (dc, &ps.rcPaint, br); - break; - default: - break; - } - EndPaint (Window, &ps); - //return 0; - } - } - } - break; - - case WM_DESTROY: - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - /* - case WM_LBUTTONDOWN: - case WM_RBUTTONDOWN: - case WM_MBUTTONDOWN: - */ - if (MovieNotDone) - { - if (wParam == VK_ESCAPE || message == WM_CANCELMODE || message == WM_DESTROY) - { - control->Stop (); - MovieNotDone = false; - MovieInterrupted = true; - } - } - if (message == WM_DESTROY) - { - MovieDestroyed = true; - } - return 0; - - case WM_GETMINMAXINFO: - if (screen && !FullVideo) - { - LPMINMAXINFO mmi = (LPMINMAXINFO)lParam; - RECT rect = { 0, 0, screen->GetWidth(), screen->GetHeight() }; - AdjustWindowRectEx(&rect, WS_VISIBLE|WS_OVERLAPPEDWINDOW, FALSE, WS_EX_APPWINDOW); - mmi->ptMinTrackSize.x = rect.right - rect.left; - mmi->ptMinTrackSize.y = rect.bottom - rect.top; - return 0; - } - break; - - case WM_SETTINGCHANGE: - // In case regional settings were changed, reget preferred languages - language.Callback (); - return 0; - } - return DefWindowProc (hWnd, message, wParam, lParam); -} - -int I_PlayMovie (const char *name) -{ - HRESULT hr; - int returnval = MOVIE_Failed; - size_t namelen = strlen (name) + 1; - wchar_t *uniname = new wchar_t[namelen]; - bool returnSound = false; - bool runningFull = false; - bool hotkey = false; - size_t i; - MSG msg; - - MovieNotDone = true; - - if (MultiByteToWideChar (CP_ACP, MB_PRECOMPOSED, name, -1, uniname, (int)namelen) == 0) - { // Could not convert name to Unicode - goto bomb1; - } - - // Convert slashes to backslashes because IGraphBuilder cannot deal with them - for (i = 0; i < namelen; ++i) - { - if (uniname[i] == L'/') - uniname[i] = L'\\'; - } - - if (FAILED(hr = CoCreateInstance (CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, - IID_IGraphBuilder, (void **)&graph))) - { - goto bomb1; - } - - control = NULL; - event = NULL; - vidwin = NULL; - audio = NULL; - video = NULL; - - if (FAILED(hr = graph->RenderFile (uniname, NULL))) - { - goto bomb2; - } - - graph->QueryInterface (IID_IMediaControl, (void **)&control); - graph->QueryInterface (IID_IMediaEventEx, (void **)&event); - graph->QueryInterface (IID_IVideoWindow, (void **)&vidwin); - graph->QueryInterface (IID_IBasicAudio, (void **)&audio); - graph->QueryInterface (IID_IBasicVideo, (void **)&video); - - if (control == NULL || event == NULL) - { - goto bomb3; - } - - GSnd->MovieDisableSound (); - returnSound = true; - - CheckIfVideo (); - SetTheVolume (); - - FullVideo = false; - - if (vidwin != NULL) - { - FullVideo = runningFull = screen->IsFullscreen (); - - // If the message drain cannot be set, then we simply won't be able - // to catch mouse button presses in the video window. - HRESULT drainhr = vidwin->put_MessageDrain ((OAHWND)Window); - - if (FullVideo) - { - // Try to avoid nasty palette flashes by clearing the screen to black. - // Does not always work. :-( - static_cast (Video)->BlankForGDI (); - static_cast (Video)->GoFullscreen (false); - static_cast (screen)->ReleaseResources (); - if (FAILED (drainhr) || FAILED(hr = vidwin->put_FullScreenMode (OATRUE))) - { - SizeWindowForVideo (); - FullVideo = false; - } - } - if (!FullVideo) - { - vidwin->put_Owner ((OAHWND)Window); - vidwin->put_WindowStyle (WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN); - SetMovieSize (); - } - else - { - RegisterHotKey (Window, 0, MOD_ALT, VK_TAB); - hotkey = true; - } - } - - if (FAILED (hr = event->SetNotifyWindow ((OAHWND)Window, WM_GRAPHNOTIFY, 0))) - { - goto bomb3; - } - - SetPriorityClass (GetCurrentProcess(), NORMAL_PRIORITY_CLASS); - - I_CheckNativeMouse (true); - SetWindowLongPtr (Window, GWLP_WNDPROC, (LONG_PTR)MovieWndProc); - - if (FAILED (hr = control->Run ())) - { - goto bomb4; - } - - MovieInterrupted = false; - MovieDestroyed = false; - - while (MovieNotDone && GetMessage (&msg, NULL, 0, 0)) - { - TranslateMessage (&msg); - DispatchMessage (&msg); - } - - returnval = MovieInterrupted ? MOVIE_Played_Aborted : - NoVideo ? MOVIE_Played_NoVideo : - MOVIE_Played; - -bomb4: - SetWindowLongPtr (Window, GWLP_WNDPROC, (LONG_PTR)WndProc); - SetPriorityClass (GetCurrentProcess(), INGAME_PRIORITY_CLASS); - -bomb3: - if (hotkey) - { - UnregisterHotKey (Window, 0); - } - if (vidwin != NULL) - { - if (!FullVideo) - { - vidwin->put_Visible (OAFALSE); - vidwin->put_Owner (NULL); - } - vidwin->Release (); - } - if (video != NULL) - { - video->Release (); - } - if (audio != NULL) - { - audio->Release (); - } - if (event != NULL) - { - event->Release (); - } - if (control != NULL) - { - control->Release (); - } - - SetActiveWindow (Window); - -bomb2: - graph->Release (); - - if (returnSound) - { - GSnd->MovieResumeSound (); - C_FlushDisplay (); - } - if (runningFull) - { - static_cast (Video)->GoFullscreen (true); - static_cast (screen)->CreateResources (); - } - -bomb1: - delete[] uniname; - - if (MovieDestroyed) - { - exit (0); - } - - return returnval; -} - -static void CheckIfVideo () -{ - long visible; - - if (vidwin == NULL || video == NULL) - { - NoVideo = true; - return; - } - else if (vidwin->get_Visible (&visible) == E_NOINTERFACE) - { - NoVideo = true; - } - else - { - NoVideo = false; - } - - if (NoVideo) - { - if (vidwin != NULL) - { - vidwin->Release (); - vidwin = NULL; - } - - DHUDMessage *message = new DHUDMessage ( - "This movie either does not contain a video stream " - "or no suitable decompressor could be found.", - 1.5f, 0.375f, 0, 0, CR_RED, 1.f); - StatusBar->AttachMessage (message); - screen->Lock (false); - StatusBar->Draw (HUD_None); - StatusBar->DrawTopStuff (HUD_None); - screen->Update (); - StatusBar->DetachMessage (message); - delete message; - } -} - -static void SetTheVolume () -{ - if (audio != NULL) - { - // Convert snd_movievolume from a linear range to 1/100th - // decibels and pass that to the IBasicAudio interface. - long volume; - - if (snd_movievolume == 0.f) - { - volume = -10000; - } - else - { - volume = (long)(log10 (snd_movievolume) * 10000.0); - } - audio->put_Volume (volume); - } -} - -static void SizeWindowForVideo () -{ - LONG width, height; - - if (video == NULL || FAILED (video->GetVideoSize (&width, &height))) - return; - - SetWindowPos (Window, NULL, 0, 0, - width + 2*GetSystemMetrics(SM_CXBORDER), - height + GetSystemMetrics(SM_CYCAPTION) + 2*GetSystemMetrics(SM_CYBORDER), - SWP_NOMOVE|SWP_NOOWNERZORDER); -} - -static void SetMovieSize () -{ - LONG width, height, left, top; - RECT grc; - HRESULT hr; - - GetClientRect (Window, &grc); - - hr = video->GetVideoSize (&width, &height); - if (FAILED (hr)) - { - vidwin->SetWindowPosition (0, 0, grc.right, grc.bottom); - return; - } - - double aspect = (double)height / (double)width; - - // Calculate size of video window that fits in our window - if (grc.right > grc.bottom) - { - height = grc.bottom; - width = (LONG)((double)height / aspect); - } - if (grc.right <= grc.bottom || width > grc.right) - { - width = grc.right; - height = (LONG)((double)width * aspect); - } - - // Then center it - left = (grc.right - width) / 2; - top = (grc.bottom - height) / 2; - - // And use it - vidwin->SetWindowPosition (left, top, width, height); - - InvalidateRect (Window, NULL, FALSE); -} - -#endif // I_DO_NOT_LIKE_BIG_DOWNLOADS diff --git a/src/win32/win32iface.h b/src/win32/win32iface.h index a92672ad78a..13cf603fae2 100644 --- a/src/win32/win32iface.h +++ b/src/win32/win32iface.h @@ -136,7 +136,6 @@ class BaseWinFB : public DFrameBuffer bool Windowed; - friend int I_PlayMovie (const char *name); friend class Win32Video; BaseWinFB() {} diff --git a/src/win32/win32video.cpp b/src/win32/win32video.cpp index 015a344e091..0a32edc02c6 100644 --- a/src/win32/win32video.cpp +++ b/src/win32/win32video.cpp @@ -336,7 +336,7 @@ bool Win32Video::GoFullscreen (bool yes) HRESULT hr[2]; int count; - // FIXME: Do this right for D3D. (This function is only called by the movie player when using D3D.) + // FIXME: Do this right for D3D. if (D3D != NULL) { return yes; @@ -372,7 +372,7 @@ bool Win32Video::GoFullscreen (bool yes) return false; } -// Flips to the GDI surface and clears it; used by the movie player +// Flips to the GDI surface and clears it void Win32Video::BlankForGDI () { static_cast (screen)->Blank ();