Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Video playback #16

Closed
AJenbo opened this issue Jan 20, 2019 · 8 comments
Closed

Video playback #16

AJenbo opened this issue Jan 20, 2019 · 8 comments
Labels
enhancement New feature or request

Comments

@AJenbo
Copy link
Member

AJenbo commented Jan 20, 2019

Currently video playback isn't supported by devilutionX, the good news here is that we should be able to make use of (libsmacker)[https://sourceforge.net/projects/libsmacker/] for decoding the video streams. OpenApoc also makes similar use of libsmacker with SDL2 so this might be a good place to glean a possible way of implementing this.
https://github.com/OpenApoc/OpenApoc/blob/master/framework/video/smk.cpp

@VonKossa
Copy link

VonKossa commented Feb 21, 2019

After the addition of libsmacker it fails to build for, halting on /stub/movie.cpp. With errors like:

/Stub/movie.cpp:49:52: error: cannot convert ‘unsigned int*’ to ‘long unsigned int*’ for argument ‘3’ to ‘char smk_info_all(smk, long unsigned int*, long unsigned int*, double*)’
smk_info_all(smacker, NULL, &nFrames, &usPerFrame);

/Stub/movie.cpp:50:48: error: cannot convert ‘unsigned int*’ to ‘long unsigned int*’ for argument ‘2’ to ‘char smk_info_video(smk, long unsigned int*, long unsigned int*, unsigned char*)’
smk_info_video(smacker, &width, &height, NULL);

@AJenbo
Copy link
Member Author

AJenbo commented Feb 21, 2019

Please try deleting the content of you build folder and do a fresh build with cmake

@VonKossa
Copy link

Already did. Same result.

@VonKossa
Copy link

Can it be because of missing dependencies or missing compile flag on libsdl2 or sdl2-mixer?

@AJenbo
Copy link
Member Author

AJenbo commented Feb 21, 2019

It worked on 32bit, but not on 64bit. It's fixed now so that it will work on both.

@VonKossa
Copy link

Yepp, now it works!
Thanks a lot. :)

@AJenbo
Copy link
Member Author

AJenbo commented Feb 27, 2019

Video playback has been implemented. There are still improvements that could be made:

  • Switch to libsmackerdec for a more liberal license
  • Fix audio stuttering by streaming to the music channel

@AJenbo AJenbo closed this as completed Feb 27, 2019
@AJenbo
Copy link
Member Author

AJenbo commented Mar 1, 2019

Audio playback has now been corrected

@AJenbo AJenbo added the enhancement New feature or request label Mar 23, 2019
AJenbo pushed a commit that referenced this issue Sep 26, 2019
glebm added a commit to glebm/devilutionX that referenced this issue Mar 23, 2021
Single-player difficulty selection was implemented in a very hacky way.

Documents what's going on there and fixes a memory leak.

Memory leaks that this fixes looked like this:

```
Direct leak of 64 byte(s) in 1 object(s) allocated from:
    #0 0x7f435b789f17 in operator new(unsigned long) (/lib/x86_64-linux-gnu/libasan.so.6+0xb1f17)
    #1 0x5567766c62b8 in dvl::selgame_GameSelection_Select(int) ../SourceX/DiabloUI/selgame.cpp:163
    #2 0x5567766d8ee8 in dvl::selhero_Load_Select(int) ../SourceX/DiabloUI/selhero.cpp:464
    #3 0x5567766d6ed1 in dvl::selhero_List_Select(int) ../SourceX/DiabloUI/selhero.cpp:325
    #4 0x556776692683 in dvl::UiFocusNavigationSelect() ../SourceX/DiabloUI/diabloui.cpp:396
    #5 0x55677669158e in HandleMenuAction ../SourceX/DiabloUI/diabloui.cpp:223
    #6 0x5567766917b9 in dvl::UiFocusNavigation(SDL_Event*) ../SourceX/DiabloUI/diabloui.cpp:277
    #7 0x556776695dff in dvl::UiPollAndRender() ../SourceX/DiabloUI/diabloui.cpp:626
    #8 0x5567766d94ef in UiSelHeroDialog ../SourceX/DiabloUI/selhero.cpp:512
    diasurgical#9 0x5567766d997f in dvl::UiSelHeroSingDialog(int (*)(int (*)(dvl::_uiheroinfo*)), int (*)(dvl::_uiheroinfo*), int (*)(dvl::_uiheroinfo*), void (*)(unsigned int, dvl::_uidefaultstats*), int*, char (*) [16], int*) ../SourceX/DiabloUI/selhero.cpp:547
    diasurgical#10 0x556776a44f45 in mainmenu_select_hero_dialog ../Source/mainmenu.cpp:98
    diasurgical#11 0x5567765f9f15 in SNetInitializeProvider ../SourceX/storm/storm_net.cpp:102
    diasurgical#12 0x556776c996b9 in multi_init_single ../Source/multi.cpp:826
    diasurgical#13 0x556776c98b1e in NetInit ../Source/multi.cpp:770
    diasurgical#14 0x5567767d0c0b in StartGame ../Source/diablo.cpp:375
    diasurgical#15 0x556776a4493d in mainmenu_init_menu ../Source/mainmenu.cpp:45
    diasurgical#16 0x556776a44c05 in mainmenu_single_player ../Source/mainmenu.cpp:61
    diasurgical#17 0x556776a454a9 in mainmenu_loop ../Source/mainmenu.cpp:152
    diasurgical#18 0x5567767d2892 in DiabloMain ../Source/diablo.cpp:602
    diasurgical#19 0x5567766e3c69 in main ../SourceX/main.cpp:34
    diasurgical#20 0x7f435a69ecb1 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x28cb1)
```
AJenbo pushed a commit that referenced this issue Mar 23, 2021
Single-player difficulty selection was implemented in a very hacky way.

Documents what's going on there and fixes a memory leak.

Memory leaks that this fixes looked like this:

```
Direct leak of 64 byte(s) in 1 object(s) allocated from:
    #0 0x7f435b789f17 in operator new(unsigned long) (/lib/x86_64-linux-gnu/libasan.so.6+0xb1f17)
    #1 0x5567766c62b8 in dvl::selgame_GameSelection_Select(int) ../SourceX/DiabloUI/selgame.cpp:163
    #2 0x5567766d8ee8 in dvl::selhero_Load_Select(int) ../SourceX/DiabloUI/selhero.cpp:464
    #3 0x5567766d6ed1 in dvl::selhero_List_Select(int) ../SourceX/DiabloUI/selhero.cpp:325
    #4 0x556776692683 in dvl::UiFocusNavigationSelect() ../SourceX/DiabloUI/diabloui.cpp:396
    #5 0x55677669158e in HandleMenuAction ../SourceX/DiabloUI/diabloui.cpp:223
    #6 0x5567766917b9 in dvl::UiFocusNavigation(SDL_Event*) ../SourceX/DiabloUI/diabloui.cpp:277
    #7 0x556776695dff in dvl::UiPollAndRender() ../SourceX/DiabloUI/diabloui.cpp:626
    #8 0x5567766d94ef in UiSelHeroDialog ../SourceX/DiabloUI/selhero.cpp:512
    #9 0x5567766d997f in dvl::UiSelHeroSingDialog(int (*)(int (*)(dvl::_uiheroinfo*)), int (*)(dvl::_uiheroinfo*), int (*)(dvl::_uiheroinfo*), void (*)(unsigned int, dvl::_uidefaultstats*), int*, char (*) [16], int*) ../SourceX/DiabloUI/selhero.cpp:547
    #10 0x556776a44f45 in mainmenu_select_hero_dialog ../Source/mainmenu.cpp:98
    #11 0x5567765f9f15 in SNetInitializeProvider ../SourceX/storm/storm_net.cpp:102
    #12 0x556776c996b9 in multi_init_single ../Source/multi.cpp:826
    #13 0x556776c98b1e in NetInit ../Source/multi.cpp:770
    #14 0x5567767d0c0b in StartGame ../Source/diablo.cpp:375
    #15 0x556776a4493d in mainmenu_init_menu ../Source/mainmenu.cpp:45
    #16 0x556776a44c05 in mainmenu_single_player ../Source/mainmenu.cpp:61
    #17 0x556776a454a9 in mainmenu_loop ../Source/mainmenu.cpp:152
    #18 0x5567767d2892 in DiabloMain ../Source/diablo.cpp:602
    #19 0x5567766e3c69 in main ../SourceX/main.cpp:34
    #20 0x7f435a69ecb1 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x28cb1)
```
kphoenix137 added a commit to kphoenix137/devilutionX that referenced this issue Mar 27, 2024
kphoenix137 added a commit to kphoenix137/devilutionX that referenced this issue Mar 31, 2024
kphoenix137 added a commit to kphoenix137/devilutionX that referenced this issue Apr 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants