From 798276160469ec83eb03bd9088c18295b4fdfc97 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 10 Dec 2018 16:10:17 +0000 Subject: MMALCodec: Keep videBuffer valid until next decode picture VideoPlayerVideo expects this and it is required for DVD menus to be updated correctly. --- xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALCodec.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALCodec.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALCodec.cpp index f17e509417..63d4c573be 100644 --- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALCodec.cpp +++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALCodec.cpp @@ -720,10 +720,6 @@ CDVDVideoCodec::VCReturn CMMALVideo::GetPicture(VideoPicture* picture) bool drain = (m_codecControlFlags & DVD_CODEC_CTRL_DRAIN) ? true : false; bool send_eos = drain && !m_got_eos && m_packet_num_eos != m_packet_num; - if (picture->videoBuffer) - picture->videoBuffer->Release(); - picture->videoBuffer = nullptr; - // we don't get an EOS response if no packets have been sent if (!drain) m_got_eos = false; @@ -799,6 +795,8 @@ CDVDVideoCodec::VCReturn CMMALVideo::GetPicture(VideoPicture* picture) if (ret == CDVDVideoCodec::VC_PICTURE) { assert(buffer && buffer->mmal_buffer); + if (picture->videoBuffer) + picture->videoBuffer->Release(); picture->videoBuffer = dynamic_cast(buffer); assert(picture->videoBuffer); picture->color_range = 0; -- cgit v1.2.3 From ca5ce46da815a6c8cd86cac90dadf622c3096859 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 10 Dec 2018 16:11:27 +0000 Subject: MMALRenderer: Destroy pool before component I did catch a seg-fault inside mmal_port_pool_destroy that was presumably caused by component being deleted first --- xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp index 6202e66dab..99e0356121 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp @@ -172,11 +172,12 @@ CMMALPool::~CMMALPool() CLog::Log(LOGERROR, "%s::%s Failed to disable component %s (status=%x %s)", CLASSNAME, __func__, m_component->name, status, mmal_status_to_string(status)); } + mmal_port_pool_destroy(port, m_mmal_pool); + if (m_component) mmal_component_destroy(m_component); m_component = nullptr; - mmal_port_pool_destroy(port, m_mmal_pool); m_mmal_pool = nullptr; for (auto buf : m_all) { -- cgit v1.2.3