From c3a82f758b9636ae731fc32a023ccaf36484a027 Mon Sep 17 00:00:00 2001 From: Joao Carreira Date: Thu, 26 Feb 2015 15:26:18 +0000 Subject: [PATCH] Avoid using fillRGBBuffer when no necessary --- app/VideoHandle.cpp | 2 -- app/VideoSubWindow.cpp | 1 + lib/PlaYUVerFrame.cpp | 2 +- lib/PlaYUVerFrame.h | 54 +++++++++++++++++++++++++++++++++--------- lib/PlaYUVerStream.cpp | 8 ++++++- lib/PlaYUVerStream.h | 4 +++- 6 files changed, 55 insertions(+), 16 deletions(-) diff --git a/app/VideoHandle.cpp b/app/VideoHandle.cpp index c48200a..99f89e7 100644 --- a/app/VideoHandle.cpp +++ b/app/VideoHandle.cpp @@ -467,7 +467,6 @@ Void VideoHandle::stop() } } emit changed(); - //update(); m_arrayActions[VIDEO_LOCK_ACT]->setVisible( false ); } @@ -496,7 +495,6 @@ Void VideoHandle::playEvent() m_pcCurrentVideoSubWindow->close(); } emit changed(); - //update(); } Void VideoHandle::seekEvent( Int direction ) diff --git a/app/VideoSubWindow.cpp b/app/VideoSubWindow.cpp index caedd80..c245d30 100644 --- a/app/VideoSubWindow.cpp +++ b/app/VideoSubWindow.cpp @@ -459,6 +459,7 @@ Bool VideoSubWindow::playEvent() return true; } m_pCurrStream->readFrame(); + m_pCurrStream->getNextFrame()->fillRGBBuffer(); } return false; } diff --git a/lib/PlaYUVerFrame.cpp b/lib/PlaYUVerFrame.cpp index e546cba..15af2f8 100644 --- a/lib/PlaYUVerFrame.cpp +++ b/lib/PlaYUVerFrame.cpp @@ -163,7 +163,7 @@ Void PlaYUVerFrame::frameFromBuffer( Pel *Buff, UInt64 uiBuffSize ) m_pcPelFormat->frameFromBuffer( Buff, m_pppcInputPel, m_uiWidth, m_uiHeight ); m_bHasRGBPel = false; m_bHasHistogram = false; - fillRGBBuffer(); + //fillRGBBuffer(); } Void PlaYUVerFrame::frameToBuffer( Pel *output_buffer ) diff --git a/lib/PlaYUVerFrame.h b/lib/PlaYUVerFrame.h index d0562a4..c301331 100644 --- a/lib/PlaYUVerFrame.h +++ b/lib/PlaYUVerFrame.h @@ -37,7 +37,7 @@ class PixFcSSE; namespace plaYUVer { -class PlaYUVerFrame : public PlaYUVerFrameStats +class PlaYUVerFrame: public PlaYUVerFrameStats { public: class Pixel @@ -60,14 +60,38 @@ public: PixelComponents[1] = c1; PixelComponents[2] = c2; } - Int ColorSpace() { return m_iColorSpace; } - Pel* Components() { return PixelComponents; } - Pel& Y() { return PixelComponents[0]; } - Pel& Cb() { return PixelComponents[1]; } - Pel& Cr() { return PixelComponents[2]; } - Pel& R() { return PixelComponents[0]; } - Pel& G() { return PixelComponents[1]; } - Pel& B() { return PixelComponents[2]; } + Int ColorSpace() + { + return m_iColorSpace; + } + Pel* Components() + { + return PixelComponents; + } + Pel& Y() + { + return PixelComponents[0]; + } + Pel& Cb() + { + return PixelComponents[1]; + } + Pel& Cr() + { + return PixelComponents[2]; + } + Pel& R() + { + return PixelComponents[0]; + } + Pel& G() + { + return PixelComponents[1]; + } + Pel& B() + { + return PixelComponents[2]; + } }; enum ColorSpace @@ -161,8 +185,16 @@ public: m_bHasRGBPel = false; return m_pppcInputPel; } - UChar* getRGBBuffer() const +// UChar* getRGBBuffer() const +// { +// return m_pcRGB32; +// } + UChar* getRGBBuffer() { + if( !m_bHasRGBPel ) + { + fillRGBBuffer(); + } return m_pcRGB32; } @@ -185,7 +217,7 @@ public: NUMBER_METRICS, }; - static std::vector supportedQualityMetricsList() + static std::vector supportedQualityMetricsList() { std::vector metrics; metrics.push_back( "PSNR" ); diff --git a/lib/PlaYUVerStream.cpp b/lib/PlaYUVerStream.cpp index 79225a8..0021a8e 100644 --- a/lib/PlaYUVerStream.cpp +++ b/lib/PlaYUVerStream.cpp @@ -514,7 +514,7 @@ Void PlaYUVerStream::readFrame() } m_pcNextFrame->frameFromBuffer( m_pStreamBuffer, bytes_read ); } - m_pcNextFrame->fillRGBBuffer(); + //m_pcNextFrame->fillRGBBuffer(); return; } @@ -639,6 +639,12 @@ PlaYUVerFrame* PlaYUVerStream::getCurrFrame() return m_pcCurrFrame; } +PlaYUVerFrame* PlaYUVerStream::getNextFrame() +{ + return m_pcNextFrame; +} + + Bool PlaYUVerStream::seekInput( UInt64 new_frame_num ) { if( !m_bInit || new_frame_num < 0 || new_frame_num >= m_uiTotalFrameNum || ( Int64 )new_frame_num == m_iCurrFrameNum ) diff --git a/lib/PlaYUVerStream.h b/lib/PlaYUVerStream.h index 09245ef..7c26796 100644 --- a/lib/PlaYUVerStream.h +++ b/lib/PlaYUVerStream.h @@ -134,8 +134,10 @@ public: static Bool saveFrame( const std::string& filename, PlaYUVerFrame *saveFrame ); Void setNextFrame(); - PlaYUVerFrame* getCurrFrame(); + PlaYUVerFrame* getCurrFrame( PlaYUVerFrame * ); + PlaYUVerFrame* getCurrFrame(); + PlaYUVerFrame* getNextFrame(); Bool seekInput( UInt64 new_frame_num );