From a473abc49840707b8defa9a386f0a72e8e666ccb Mon Sep 17 00:00:00 2001 From: Joao Carreira Date: Sun, 14 Oct 2018 22:13:41 +0100 Subject: [PATCH] Fix some code and remove old SSE code --- app/VideoHandle.cpp | 4 +- app/VideoHandle.h | 4 +- lib/CalypFrame.cpp | 3 +- lib/PixelFormats.cpp | 154 ------------------------------------------- 4 files changed, 6 insertions(+), 159 deletions(-) diff --git a/app/VideoHandle.cpp b/app/VideoHandle.cpp index 25a9b4e..3299fd3 100644 --- a/app/VideoHandle.cpp +++ b/app/VideoHandle.cpp @@ -660,8 +660,8 @@ void VideoHandle::playEvent() { bool bEndOfSequence = false; #if( _CONTROL_PLAYING_TIME_ == 1 ) - m_dAverageFps = Double( m_dAverageFps * m_uiNumberPlayedFrames + m_pcPlayControlTimer->elapsed() ) / - Double( m_uiNumberPlayedFrames + 1 ); + m_dAverageFps = double( m_dAverageFps * m_uiNumberPlayedFrames + m_pcPlayControlTimer->elapsed() ) / + double( m_uiNumberPlayedFrames + 1 ); m_uiNumberPlayedFrames++; m_pcPlayControlTimer->restart(); #endif diff --git a/app/VideoHandle.h b/app/VideoHandle.h index 73cd2d0..ff1fedd 100644 --- a/app/VideoHandle.h +++ b/app/VideoHandle.h @@ -34,7 +34,7 @@ #include #include -#define _CONTROL_PLAYING_TIME_ 0 +#define _CONTROL_PLAYING_TIME_ 1 class QToolBar; class QDockWidget; @@ -124,7 +124,7 @@ private: #if( _CONTROL_PLAYING_TIME_ == 1 ) unsigned int m_uiNumberPlayedFrames; - Double m_dAverageFps; + double m_dAverageFps; QElapsedTimer* m_pcPlayControlTimer; #endif diff --git a/lib/CalypFrame.cpp b/lib/CalypFrame.cpp index cf923ad..fbf5451 100644 --- a/lib/CalypFrame.cpp +++ b/lib/CalypFrame.cpp @@ -669,6 +669,7 @@ void CalypFrame::frameToBuffer( ClpByte* output_buffer, int iEndianness ) } } + void CalypFrame::fillRGBBuffer() { #define PEL_ARGB( a, r, g, b ) ( ( a & 0xff ) << 24 ) | ( ( r & 0xff ) << 16 ) | ( ( g & 0xff ) << 8 ) | ( b & 0xff ) @@ -694,7 +695,7 @@ void CalypFrame::fillRGBBuffer() unsigned char finalPel; for( unsigned int i = 0; i < d->m_uiHeight * d->m_uiWidth; i++ ) { - finalPel = (*pY++) >> shiftBits; + finalPel = ( *pY++ ) >> shiftBits; *pARGB++ = PEL_RGB( finalPel, finalPel, finalPel ); } } diff --git a/lib/PixelFormats.cpp b/lib/PixelFormats.cpp index 6ee0600..b3cc0ad 100644 --- a/lib/PixelFormats.cpp +++ b/lib/PixelFormats.cpp @@ -30,11 +30,6 @@ #ifdef USE_FFMPEG #include "StreamHandlerLibav.h" #endif -#ifdef USE_SSE -#include -#include -#include -#endif /* ************************************************************** @@ -49,155 +44,6 @@ #define ADD_FFMPEG_PEL_FMT( fmt ) 0 #endif -#if 0 -void fillARGB32bufferYUV420p( Pel*** in, UChar* out, unsigned int width, unsigned int height, unsigned int depth ) -{ -#ifdef USE_SSE - if( ( width % 16 ) == 0 ) - { - uint8_t *yp = in[LUMA][0]; - uint8_t *up = in[CHROMA_U][0]; - uint8_t *vp = in[CHROMA_V][0]; - uint32_t suv = width >> 1; - uint32_t *rgb = ( uint32_t* )out; - - __m128i y0r0, y0r1, u0, v0; - __m128i y00r0, y01r0, y00r1, y01r1; - __m128i u00, u01, v00, v01; - __m128i rv00, rv01, gu00, gu01, gv00, gv01, bu00, bu01; - __m128i r00, r01, g00, g01, b00, b01; - __m128i rgb0123, rgb4567, rgb89ab, rgbcdef; - __m128i gbgb; - __m128i ysub, uvsub; - __m128i zero, facy, facrv, facgu, facgv, facbu; - __m128i *srcy128r0, *srcy128r1; - __m128i *dstrgb128r0, *dstrgb128r1; - __m64 *srcu64, *srcv64; - unsigned int x, y; - - ysub = _mm_set1_epi32( 0x00100010 ); - uvsub = _mm_set1_epi32( 0x00800080 ); - - facy = _mm_set1_epi32( 0x004a004a ); - facrv = _mm_set1_epi32( 0x00660066 ); - facgu = _mm_set1_epi32( 0x00190019 ); - facgv = _mm_set1_epi32( 0x00340034 ); - facbu = _mm_set1_epi32( 0x00810081 ); - - zero = _mm_set1_epi32( 0x00000000 ); - - for( y = 0; y < height; y += 2 ) - { - - srcy128r0 = ( __m128i * )( yp + width * y ); - srcy128r1 = ( __m128i * )( yp + width * y + width ); - srcu64 = ( __m64 * )( up + suv * ( y / 2 ) ); - srcv64 = ( __m64 * )( vp + suv * ( y / 2 ) ); - - dstrgb128r0 = ( __m128i * )( rgb + width * y ); - dstrgb128r1 = ( __m128i * )( rgb + width * y + width ); - - for( x = 0; x < width; x += 16 ) - { - - u0 = _mm_loadl_epi64( ( __m128i * )srcu64 ); - srcu64++; - v0 = _mm_loadl_epi64( ( __m128i * )srcv64 ); - srcv64++; - - y0r0 = _mm_load_si128( srcy128r0++ ); - y0r1 = _mm_load_si128( srcy128r1++ ); - - // constant y factors - y00r0 = _mm_mullo_epi16( _mm_sub_epi16( _mm_unpacklo_epi8( y0r0, zero ), ysub ), facy ); - y01r0 = _mm_mullo_epi16( _mm_sub_epi16( _mm_unpackhi_epi8( y0r0, zero ), ysub ), facy ); - y00r1 = _mm_mullo_epi16( _mm_sub_epi16( _mm_unpacklo_epi8( y0r1, zero ), ysub ), facy ); - y01r1 = _mm_mullo_epi16( _mm_sub_epi16( _mm_unpackhi_epi8( y0r1, zero ), ysub ), facy ); - - // expand u and v so they're aligned with y values - u0 = _mm_unpacklo_epi8( u0, zero ); - u00 = _mm_sub_epi16( _mm_unpacklo_epi16( u0, u0 ), uvsub ); - u01 = _mm_sub_epi16( _mm_unpackhi_epi16( u0, u0 ), uvsub ); - - v0 = _mm_unpacklo_epi8( v0, zero ); - v00 = _mm_sub_epi16( _mm_unpacklo_epi16( v0, v0 ), uvsub ); - v01 = _mm_sub_epi16( _mm_unpackhi_epi16( v0, v0 ), uvsub ); - - // common factors on both rows. - rv00 = _mm_mullo_epi16( facrv, v00 ); - rv01 = _mm_mullo_epi16( facrv, v01 ); - gu00 = _mm_mullo_epi16( facgu, u00 ); - gu01 = _mm_mullo_epi16( facgu, u01 ); - gv00 = _mm_mullo_epi16( facgv, v00 ); - gv01 = _mm_mullo_epi16( facgv, v01 ); - bu00 = _mm_mullo_epi16( facbu, u00 ); - bu01 = _mm_mullo_epi16( facbu, u01 ); - - // row 0 - r00 = _mm_srai_epi16( _mm_add_epi16( y00r0, rv00 ), 6 ); - r01 = _mm_srai_epi16( _mm_add_epi16( y01r0, rv01 ), 6 ); - g00 = _mm_srai_epi16( _mm_sub_epi16( _mm_sub_epi16( y00r0, gu00 ), gv00 ), 6 ); - g01 = _mm_srai_epi16( _mm_sub_epi16( _mm_sub_epi16( y01r0, gu01 ), gv01 ), 6 ); - b00 = _mm_srai_epi16( _mm_add_epi16( y00r0, bu00 ), 6 ); - b01 = _mm_srai_epi16( _mm_add_epi16( y01r0, bu01 ), 6 ); - - r00 = _mm_packus_epi16( r00, r01 );// rrrr.. saturated - g00 = _mm_packus_epi16( g00, g01 );// gggg.. saturated - b00 = _mm_packus_epi16( b00, b01 );// bbbb.. saturated - - r01 = _mm_unpacklo_epi8( r00, zero );// 0r0r.. - gbgb = _mm_unpacklo_epi8( b00, g00 );// gbgb.. - rgb0123 = _mm_unpacklo_epi16( gbgb, r01 );// 0rgb0rgb.. - rgb4567 = _mm_unpackhi_epi16( gbgb, r01 );// 0rgb0rgb.. - - r01 = _mm_unpackhi_epi8( r00, zero ); - gbgb = _mm_unpackhi_epi8( b00, g00 ); - rgb89ab = _mm_unpacklo_epi16( gbgb, r01 ); - rgbcdef = _mm_unpackhi_epi16( gbgb, r01 ); - - _mm_store_si128( dstrgb128r0++, rgb0123 ); - _mm_store_si128( dstrgb128r0++, rgb4567 ); - _mm_store_si128( dstrgb128r0++, rgb89ab ); - _mm_store_si128( dstrgb128r0++, rgbcdef ); - - // row 1 - r00 = _mm_srai_epi16( _mm_add_epi16( y00r1, rv00 ), 6 ); - r01 = _mm_srai_epi16( _mm_add_epi16( y01r1, rv01 ), 6 ); - g00 = _mm_srai_epi16( _mm_sub_epi16( _mm_sub_epi16( y00r1, gu00 ), gv00 ), 6 ); - g01 = _mm_srai_epi16( _mm_sub_epi16( _mm_sub_epi16( y01r1, gu01 ), gv01 ), 6 ); - b00 = _mm_srai_epi16( _mm_add_epi16( y00r1, bu00 ), 6 ); - b01 = _mm_srai_epi16( _mm_add_epi16( y01r1, bu01 ), 6 ); - - r00 = _mm_packus_epi16( r00, r01 );// rrrr.. saturated - g00 = _mm_packus_epi16( g00, g01 );// gggg.. saturated - b00 = _mm_packus_epi16( b00, b01 );// bbbb.. saturated - - r01 = _mm_unpacklo_epi8( r00, zero );// 0r0r.. - gbgb = _mm_unpacklo_epi8( b00, g00 );// gbgb.. - rgb0123 = _mm_unpacklo_epi16( gbgb, r01 );// 0rgb0rgb.. - rgb4567 = _mm_unpackhi_epi16( gbgb, r01 );// 0rgb0rgb.. - - r01 = _mm_unpackhi_epi8( r00, zero ); - gbgb = _mm_unpackhi_epi8( b00, g00 ); - rgb89ab = _mm_unpacklo_epi16( gbgb, r01 ); - rgbcdef = _mm_unpackhi_epi16( gbgb, r01 ); - - _mm_store_si128( dstrgb128r1++, rgb0123 ); - _mm_store_si128( dstrgb128r1++, rgb4567 ); - _mm_store_si128( dstrgb128r1++, rgb89ab ); - _mm_store_si128( dstrgb128r1++, rgbcdef ); - - } - } - } - else -#endif - { - fillARGB32bufferYUV( in, out, width, height, depth, 1, 1 ); - } -} -#endif - const std::map g_CalypPixFmtDescriptorsMap = { { CLP_YUV420P,