Skip to content

Commit

Permalink
VAAPI: fix wrong reinterpret_cast in Flush()/NEWFRAME
Browse files Browse the repository at this point in the history
This was missing in commit 61dfb26

Found by GCC/ASAN:

 ASAN:DEADLYSIGNAL
 =================================================================
 ==3618==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x556a3a027be2 bp 0x7f517d4d2140 sp 0x7f517d4d2120 T41)
 ==3618==The signal is caused by a READ memory access.
 ==3618==Hint: address points to the zero page.
     #0 0x556a3a027be1 in VideoPicture::operator=(VideoPicture const&) (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x22dfbe1)
     #1 0x556a3a026e24 in VideoPicture::SetParams(VideoPicture const&) (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x22dee24)
     #2 0x556a3a061ebe in VAAPI::CVaapiDecodedPicture::operator=(VAAPI::CVaapiDecodedPicture const&) (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x2319ebe)
     #3 0x556a3a061e75 in VAAPI::CVaapiDecodedPicture::CVaapiDecodedPicture(VAAPI::CVaapiDecodedPicture const&) (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x2319e75)
     #4 0x556a3a0514d3 in VAAPI::COutput::Flush() (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x23094d3)
     #5 0x556a3a04eff4 in VAAPI::COutput::StateMachine(int, Actor::Protocol*, Actor::Message*) (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x2306ff4)
     #6 0x556a3a050752 in VAAPI::COutput::Process() (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x2308752)
     #7 0x556a3a82ca0c in CThread::Action() (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x2ae4a0c)
     #8 0x556a3a82c0f8 in CThread::staticThread(void*) (/usr/local/stow/kodi-asan/lib/kodi/kodi-x11+0x2ae40f8)
     #9 0x7f51a8e7f5a9 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x75a9)
     #10 0x7f51a0288cbe in __clone (/lib/x86_64-linux-gnu/libc.so.6+0xf6cbe)
  • Loading branch information
MaxKellermann committed May 10, 2018
1 parent 4e05287 commit 9ae12be
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions xbmc/cores/VideoPlayer/DVDCodecs/Video/VAAPI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1873,8 +1873,13 @@ void COutput::Flush()
{
if (msg->signal == COutputDataProtocol::NEWFRAME)
{
CVaapiDecodedPicture pic = *reinterpret_cast<CVaapiDecodedPicture*>(msg->data);
m_config.videoSurfaces->ClearRender(pic.videoSurface);
CPayloadWrap<CVaapiDecodedPicture> *payload;
payload = dynamic_cast<CPayloadWrap<CVaapiDecodedPicture>*>(msg->payloadObj.get());
if (payload)
{
CVaapiDecodedPicture pic = *(payload->GetPlayload());
m_config.videoSurfaces->ClearRender(pic.videoSurface);
}
}
else if (msg->signal == COutputDataProtocol::RETURNPIC)
{
Expand Down

0 comments on commit 9ae12be

Please sign in to comment.