1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-06-15 00:05:02 +02:00
Commit Graph

91 Commits

Author SHA1 Message Date
a72af34d9f vcmi: fix build and run with ffmpeg 6.0 2023-03-11 00:12:05 +03:00
7c58a46279 Removed some instances of access to screen surface 2023-02-03 18:23:53 +02:00
108a42e4ba Reorganized includes for new layout. New class - IImageLoader 2023-02-01 20:42:06 +02:00
0ba74fea73 Merge pull request #1515 from IvanSavenko/time_based_animations
Time based animations
2023-02-01 12:25:54 +02:00
9c3030603d Removed most SDL includes from headers, removed SDL int's 2023-01-30 19:55:32 +02:00
42df5626d9 Added Color class to replace SDL_Color 2023-01-30 00:12:43 +02:00
a9fefffc65 Video playback is now time-based, using video file timings 2023-01-28 13:19:35 +02:00
fc0f5a9fb3 Reduced SDL includes 2023-01-20 16:11:43 +02:00
9be38780cd Removed remaining parts of Geomeotries.h/cpp 2023-01-20 16:11:43 +02:00
ee7a573cb8 Refactoring of SDL API usage:
- Rect no longer inherits from SDL_Rect
- renamed vcmi functions that used SDL naming format
- moved all functions in SDL_Extensions file into CSDL_Ext namespace
- SDL_Rect is now used only by SDL_Extensions, all other code uses Rect
2023-01-20 16:11:43 +02:00
7fdad4e0f6 Code refactor following C++ standard and condition fixes 2022-11-15 03:20:55 +03:00
8757a577e3 CVideoHandler: fix codecContext according to docs 2022-05-14 13:22:41 +03:00
e7b753c222 CVideoHandler: use new ffmpeg 2022-05-14 13:22:41 +03:00
23215e039c client/CVideoHandler.cpp: fix crash on video playback
Avoid buffer overflow caused by sws_scale():
    http://trac.ffmpeg.org/ticket/9254
Currently (ffmpeg-4.4 with SSE3 enabled) sws_scale()
has a few requirements for target data buffers on rescaling:
1. buffer has to be aligned to be usable for SIMD instructions
2. buffer has to be padded to allow small overflow by SIMD instructions
Unfortunately SDL_Surface does not provide these guarantees.
This means that atempt to rescale directly into SDL surface causes
memory corruption. Usually it happens on campaign selection screen
where short video moves start spinning on mouse hover.

To fix [1.] we use av_malloc() for memory allocation.
To fix [2.] we add an `ffmpeg_pad` that provides plenty of space.
We have to use intermdiate buffer and then use memcpy() to land it
to SDL_Surface.

Without the change crash has the following backtrace:

```
(gdb) bt
    (c=0x47508940, src=0x1ffeffef50, srcStride=0x1ffeffef30, srcSliceY=0, srcSliceH=116, dst=0x1ffeffef70, dstStride=0x1ffeffef40) at src/libswscale/x86/yuv2rgb_template.c:119
    (c=<optimized out>, srcSlice=<optimized out>, srcStride=0x432afa20, srcSliceY=<optimized out>, srcSliceH=116, dst=<optimized out>, dstStride=0x1ffefff0a0) at src/libswscale/swscale.c:969
    (this=0x1abaa330, x=90, y=72, dst=0x1a85a4c0, forceRedraw=<optimized out>, update=<optimized out>)
    at ../vcmi-9999/client/CVideoHandler.cpp:332
    at ../vcmi-9999/client/gui/CIntObject.cpp:83
    at ../vcmi-9999/client/gui/CGuiHandler.cpp:462
```

valgrind points to corruption right in sws_scale():

```
Invalid write of size 8
   at 0x6C50BD3: ??? (in /usr/lib64/libswscale.so.5.7.100)
   by 0x6C4FAE6: yuv420_rgb32_ssse3 (yuv2rgb_template.c:119)
   by 0x6C28DF2: sws_scale (swscale.c:969)
   by 0x4566F6: CVideoPlayer::nextFrame() (CVideoHandler.cpp:293)
   by 0x4573A6: CVideoPlayer::update(int, int, SDL_Surface*, bool, bool) (CVideoHandler.cpp:332)
   by 0x25EC94: CIntObject::show(SDL_Surface*) [clone .part.0] (CIntObject.cpp:83)
   by 0x34E855: CMainMenu::update() (CMainMenu.cpp:319)
   by 0x25D589: CGuiHandler::renderFrame() (CGuiHandler.cpp:462)
   by 0x1F7450: mainLoop (CMT.cpp:1387)
   by 0x1F7450: main (CMT.cpp:513)
 Address 0x475088a8 is 0 bytes after a block of size 92,840 alloc'd
   at 0x483F7E5: malloc (vg_replace_malloc.c:380)
   by 0x52B4E23: SDL_malloc_REAL (SDL_malloc.c:5387)
   by 0x5266237: SDL_SIMDAlloc_REAL (SDL_cpuinfo.c:963)
   by 0x52EF042: SDL_CreateRGBSurfaceWithFormat_REAL (SDL_surface.c:123)
   by 0x2649AC: CSDL_Ext::newSurface(int, int, SDL_Surface*) (SDL_Extensions.cpp:42)
   by 0x457B20: CVideoPlayer::open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, bool) (CVideoHandler.cpp:182)
   by 0x457C60: CVideoPlayer::open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool) (CVideoHandler.cpp:84)
   by 0x35B14E: CCampaignScreen::CCampaignButton::show(SDL_Surface*) (CCampaignScreen.cpp:126)
   by 0x25EC94: CIntObject::show(SDL_Surface*) [clone .part.0] (CIntObject.cpp:83)
   by 0x34E855: CMainMenu::update() (CMainMenu.cpp:319)
   by 0x25D589: CGuiHandler::renderFrame() (CGuiHandler.cpp:462)
   by 0x1F7450: mainLoop (CMT.cpp:1387)
   by 0x1F7450: main (CMT.cpp:513)
```

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2021-07-31 14:35:31 +03:00
a05ae78e67 Fixed lots of warnings.
Disabled the following (for MSVC only) that couldn't (or shouldn't) be fixed.

4003: not enough actual parameters for macro 'identifier'
4250: 'class1' : inherits 'class2::member' via dominance
4251: 'type' : class 'type1' needs to have dll-interface to be used by clients of class 'type2'
4275: non dll-interface class 'type1' used as base for dll-interface class 'type2'
2020-10-04 02:20:18 -07:00
75f8c8b29a Gui cleanup4 (#446)
* use smart pointers for almost all widget fields
* use SDL2 texture for cursor
* a lot af small tweaks and formatting
* removed CompImage class, it is actually useless as long as regular SDLImage support margins
* CGuiHandler: use smart pointers for [push|pop]Int
2018-07-25 01:36:48 +03:00
64d9dadd64 Logging cleanup. 2017-08-11 15:47:50 +03:00
a4c0ad94b1 Code style: remove default value hints in definitions (#342)
Some are outdated and this is something IDE are useful for.
2017-07-15 14:08:20 +03:00
f1e5797834 Code style: move or add licensing information on top of every file 2017-07-14 01:26:03 +03:00
c4ab962cc0 Fixed a few CWE-457 2016-11-27 17:48:18 +03:00
e20f861727 try to fix travis build.
What an ancient version of ffmpeg does it have?
2015-11-11 15:44:17 +03:00
f9dfa8d0c2 try to fix libav 9.18 2015-11-11 15:18:05 +03:00
33c933c208 All "old" APIs are deprecated in ffmgeg 2.2.3 - remove them entirely 2015-11-11 13:07:56 +03:00
4b94efe6b5 Hopefully proper fix for ffmpeg on MSVS 2015-11-11 12:41:28 +03:00
d95a999e23 Fixed ffmpeg compilation on Visual Studio. 2015-11-11 09:41:28 +01:00
f80c1410b3 Replace deprecated FFmpeg API for compatibility with ffmpeg 2.9 2015-11-05 12:38:04 +01:00
dca1e28bc1 SDL1 wipe, part 1. Untested. 2015-06-21 01:59:30 +03:00
Fay
b03eb56706 Possibly fixes looping videos; 2015-01-25 14:28:11 +01:00
b551bdb725 Final part of the merge
Merging VCMI Dirs refactoring + GUI refactoring with current develop
2014-09-04 20:59:07 +03:00
1b6f2ea3b7 VCMIDirs update #5 fix
- Updated old OS detect macros.
- Fixed 1 misspell.
2014-08-26 12:19:04 +02:00
679dd64ff9 Make scale a parameter of "open" methods 2014-07-10 14:18:21 +04:00
11d73f2ac9 fix CVideoHandler compilation 2014-07-09 18:01:12 +03:00
18f34e14f8 set scale to off by default 2014-07-08 22:01:01 +04:00
0efb6e2890 Use scaling
(*) into - fullscreen
(*) spellbook - no scaling
2014-07-08 18:20:22 +04:00
61b31e5c60 add api to enable|disable scaling (unimplemented) 2014-07-08 17:39:47 +04:00
c71237bba3 Mingw build with ffmpeg
(*) get rid of BIK SMK dlls
(-) missing sound
(-) spellbook is scaled to fullscreen
2014-07-08 16:40:25 +04:00
6205d07223 Re-enabled video player, should now work with SDL 2 2014-06-13 07:55:46 +04:00
8eb661461c - vcmi compiles with SDL2 on Linux, video player is disabled for now 2014-06-13 07:55:45 +04:00
8a3b997fa5 fix a few comments. No code changes. 2014-05-21 13:02:20 +04:00
0b2ca4416a It is possible to use ffmpeg with Visual Studio 2013 build by definining USE_FFMPEG macro. 2014-01-06 19:12:21 +00:00
d8594576e2 One more compile fix, works now fine on Windows. 2013-07-29 12:15:50 +00:00
77496bcea9 - fixed several cases of accessing full path to files in archives 2013-07-29 11:38:18 +00:00
a314a81fd5 Compile fixes. Game doesn't even launch, however. 2013-07-28 18:57:07 +00:00
b87897096c Filesystem handling is now more flexible
- removed CResourceLoader class in favor of one that implements resource loader interface
- removed global pool of files, in favour of more dynamic approach
- renamed some files to match current situation
All these changes are needed mostly for future mod manager + .zip support
2013-07-28 14:49:50 +00:00
2b45e13c5c c++03 -> c++11 switch:
- use std versions of function, bind and ref
- OVERRIDE -> override
- NULL -> nullptr
- use std versions of random distributions

NOTE: this may be last revision that supports gcc-4.5
2013-06-26 11:18:27 +00:00
c7c2686379 - Integrated the logging API into the client and the lib - Remove some more comments and switched to /// style - Fixed recursive locks - Added Global.h to CMakeLists(now visible in qt-creator) - Removed usage of shared_mutex - Added unique_ptr to CLogger targets 2013-04-09 14:31:36 +00:00
30bcec42c6 - Renamed client/BattleInterface to client/battle and client/UIFramework to client/gui 2013-04-07 11:52:07 +00:00
ee51c5beb5 - Renamed /lib subfolders to lowercase 2013-04-07 10:48:07 +00:00
9c1c337a3d - fixed #1220 and #1218
- vcmibuilder will correctly install campaign video
2013-02-27 15:46:14 +00:00
3f309f0c5e - removed support for ancient versions of ffmpeg
- some cleanup in Linux video player
2013-02-05 23:11:48 +00:00