From af411e6b1e04e216f98138f8deeae5cd0cd899e0 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sat, 25 Jan 2014 14:57:31 -0800 Subject: [PATCH] Check for AV_NOPTS_VALUE from ffmpeg pts values. Apparently it's returning this now. If we don't have it, just increment. Fixes #5217. --- Core/HW/MediaEngine.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Core/HW/MediaEngine.cpp b/Core/HW/MediaEngine.cpp index 1ec182c0e0..3d8b6aeb09 100644 --- a/Core/HW/MediaEngine.cpp +++ b/Core/HW/MediaEngine.cpp @@ -443,8 +443,6 @@ void MediaEngine::updateSwsFormat(int videoPixelMode) { } bool MediaEngine::stepVideo(int videoPixelMode) { - // if video engine is broken, force to add timestamp - m_videopts += 3003; #ifdef USE_FFMPEG auto codecIter = m_pCodecCtxs.find(m_videoStream); AVCodecContext *m_pCodecCtx = codecIter == m_pCodecCtxs.end() ? 0 : codecIter->second; @@ -478,7 +476,10 @@ bool MediaEngine::stepVideo(int videoPixelMode) { sws_scale(m_sws_ctx, m_pFrame->data, m_pFrame->linesize, 0, m_pCodecCtx->height, m_pFrameRGB->data, m_pFrameRGB->linesize); - m_videopts = m_pFrame->pkt_dts + av_frame_get_pkt_duration(m_pFrame) - m_firstTimeStamp; + if (av_frame_get_best_effort_timestamp(m_pFrame) != AV_NOPTS_VALUE) + m_videopts = av_frame_get_best_effort_timestamp(m_pFrame) + av_frame_get_pkt_duration(m_pFrame) - m_firstTimeStamp; + else + m_videopts += av_frame_get_pkt_duration(m_pFrame); bGetFrame = true; } if (result <= 0 && dataEnd) { @@ -494,6 +495,8 @@ bool MediaEngine::stepVideo(int videoPixelMode) { } return bGetFrame; #else + // If video engine is not available, just add to the timestamp at least. + m_videopts += 3003; return true; #endif // USE_FFMPEG }