mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
xbmc: add PR2158 patch
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
6f4cb57328
commit
f0a6ca107a
39
packages/mediacenter/xbmc/patches/xbmc-990.01-PR2158.patch
Normal file
39
packages/mediacenter/xbmc/patches/xbmc-990.01-PR2158.patch
Normal file
@ -0,0 +1,39 @@
|
||||
From ac86e23aa11861a4fa063fb2fa05f10cbc4eea19 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Fri, 1 Feb 2013 18:37:20 +0000
|
||||
Subject: [PATCH] [rbp] Avoid blocking the video thread keeping the video fifo
|
||||
full. OpenMAX IL is an asynchronous media player. The key
|
||||
to getting good performance is to ensure the audio and
|
||||
video fifo have sufficient data to withstand any processing
|
||||
spikes by the ARM. Ideally the fifos would allow the arm to
|
||||
crash, and video and audio playback to continue smoothly
|
||||
for a couple of seconds.
|
||||
|
||||
I've examined the fifo behaviour, and found the video fifo is always almost empty. (The audio fifo is full).
|
||||
It turns out that the PlayerVideo task (which submits video frames to GPU fifo) blocks until the presentation time has arrived before calling FlipPage (in order to keep subtitles etc. synced).
|
||||
This is very bad. We generally only one frame of video data in the GPU fifo. This means a spike in ARM workload (e.g. bringing up OSD, or a peak in bitrate) causes the fifo to empty and video to stutter.
|
||||
|
||||
The patch here avoids blocking, and lets the FlipPage happen on a later packet.
|
||||
I've found with this patch, my test clip (1080p with software DTS audio decode) I can play without stuttering at 700MHz. Without this patch it fails to play even at 1000MHz.
|
||||
---
|
||||
xbmc/cores/omxplayer/OMXPlayerVideo.cpp | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
|
||||
index 90f94aa..5f3f050 100644
|
||||
--- a/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
|
||||
+++ b/xbmc/cores/omxplayer/OMXPlayerVideo.cpp
|
||||
@@ -455,8 +455,8 @@ void OMXPlayerVideo::Output(int iGroupId, double pts, bool bDropPacket)
|
||||
double pts_media = m_av_clock->OMXMediaTime(false, false);
|
||||
ProcessOverlays(iGroupId, pts_media);
|
||||
|
||||
- while(!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < (iCurrentClock + iSleepTime + DVD_MSEC_TO_TIME(500)) )
|
||||
- Sleep(1);
|
||||
+ if (!CThread::m_bStop && m_av_clock->GetAbsoluteClock(false) < (iCurrentClock + iSleepTime + DVD_MSEC_TO_TIME(500)) )
|
||||
+ return;
|
||||
|
||||
g_renderManager.FlipPage(CThread::m_bStop, (iCurrentClock + iSleepTime) / DVD_TIME_BASE, -1, FS_NONE);
|
||||
|
||||
--
|
||||
1.7.10
|
||||
|
Loading…
x
Reference in New Issue
Block a user