diff --git a/app/HistogramWidget.cpp b/app/HistogramWidget.cpp index 6e06867..3c8e40c 100644 --- a/app/HistogramWidget.cpp +++ b/app/HistogramWidget.cpp @@ -58,7 +58,7 @@ public: if( m_histogram && m_parent ) { EventData *eventData = new EventData(); -// eventData->starting = true; +// eventDm_imageHistogramata->starting = true; // eventData->success = false; // eventData->histogram = m_histogram; // QCoreApplication::postEvent( m_parent, eventData ); diff --git a/app/ViewArea.cpp b/app/ViewArea.cpp index 5b3377c..fa57c7a 100644 --- a/app/ViewArea.cpp +++ b/app/ViewArea.cpp @@ -71,6 +71,7 @@ ViewArea::ViewArea( QWidget *parent ) : void ViewArea::setImage( PlaYUVerFrame* pcFrame ) { m_pcCurrFrame = pcFrame; + m_uiPixelHalfScale = 1 << ( m_pcCurrFrame->getBitsPel() - 1 ); m_pcCurrFrame->fillRGBBuffer(); QImage qimg = QImage( m_pcCurrFrame->getRGBBuffer(), m_pcCurrFrame->getWidth(), m_pcCurrFrame->getHeight(), QImage::Format_RGB32 ); setImage( QPixmap::fromImage( qimg ) ); @@ -122,29 +123,28 @@ Double ViewArea::scaleZoomFactor( Double scale, QPoint center, QSize minimumSize return new_scale; Double zoomFactor = m_zoomFactor * scale * 100.0; - zoomFactor=round(zoomFactor); - zoomFactor=zoomFactor/100.0; - scale = zoomFactor/m_zoomFactor; + zoomFactor = round( zoomFactor ); + zoomFactor = zoomFactor / 100.0; + scale = zoomFactor / m_zoomFactor; - - if(!minimumSize.isNull()) + if( !minimumSize.isNull() ) { - Double cw = m_pixmap.width()*m_zoomFactor; - Double ch = m_pixmap.height()*m_zoomFactor; - Double fw = m_pixmap.width()*zoomFactor; - Double fh = m_pixmap.height()*zoomFactor; + Double cw = m_pixmap.width() * m_zoomFactor; + Double ch = m_pixmap.height() * m_zoomFactor; + Double fw = m_pixmap.width() * zoomFactor; + Double fh = m_pixmap.height() * zoomFactor; Double mw = minimumSize.width(); Double mh = minimumSize.height(); - if( (cw < mw) && (ch < mh) && (scale < 1) ) + if( ( cw < mw ) && ( ch < mh ) && ( scale < 1 ) ) { return new_scale; } - if( (fw < mw) && (fh < mh) && (scale < 1) ) + if( ( fw < mw ) && ( fh < mh ) && ( scale < 1 ) ) { - Double wfactor = mw/fw; - Double hfactor = mh/fh; + Double wfactor = mw / fw; + Double hfactor = mh / fh; if( wfactor < hfactor ) scale = wfactor; @@ -152,9 +152,9 @@ Double ViewArea::scaleZoomFactor( Double scale, QPoint center, QSize minimumSize scale = hfactor; zoomFactor = zoomFactor * scale * 100.0; - zoomFactor=round(zoomFactor); - zoomFactor=zoomFactor/100.0; - scale = zoomFactor/m_zoomFactor; + zoomFactor = round( zoomFactor ); + zoomFactor = zoomFactor / 100.0; + scale = zoomFactor / m_zoomFactor; } } @@ -163,14 +163,14 @@ Double ViewArea::scaleZoomFactor( Double scale, QPoint center, QSize minimumSize if( zoomFactor < minZoom ) { zoomFactor = minZoom; - new_scale = zoomFactor/m_zoomFactor; + new_scale = zoomFactor / m_zoomFactor; } else { if( zoomFactor > maxZoom ) { zoomFactor = maxZoom; - new_scale = zoomFactor/m_zoomFactor; + new_scale = zoomFactor / m_zoomFactor; } } @@ -335,7 +335,7 @@ void ViewArea::paintEvent( QPaintEvent *event ) { QRect winRect = event->rect(); - if(visibleRegion().isEmpty()) + if( visibleRegion().isEmpty() ) return; if( size().isEmpty() || m_pixmap.isNull() ) @@ -384,13 +384,12 @@ void ViewArea::paintEvent( QPaintEvent *event ) painter.restore(); - // Draw a border around the image. -/* if( m_xOffset || m_yOffset ) - { - painter.setPen( Qt::black ); - painter.drawRect( m_xOffset - 1, m_yOffset - 1, m_pixmap.width() * m_zoomFactor + 1, m_pixmap.height() * m_zoomFactor + 1 ); - }*/ + /* if( m_xOffset || m_yOffset ) + { + painter.setPen( Qt::black ); + painter.drawRect( m_xOffset - 1, m_yOffset - 1, m_pixmap.width() * m_zoomFactor + 1, m_pixmap.height() * m_zoomFactor + 1 ); + }*/ // Draw pixel values in grid if( m_zoomFactor >= 50.0 ) @@ -420,7 +419,7 @@ void ViewArea::paintEvent( QPaintEvent *event ) { sPixelValue = m_pcCurrFrame->getPixelValue( pixelTopLeft.x(), pixelTopLeft.y() ); - if( sPixelValue.Y() < 128 ) + if( sPixelValue.Y() < m_uiPixelHalfScale ) painter.setPen( QColor( Qt::white ) ); else painter.setPen( QColor( Qt::black ) ); @@ -433,7 +432,7 @@ void ViewArea::paintEvent( QPaintEvent *event ) { sPixelValue = m_pcCurrFrame->getPixelValue( pixelTopLeft.x(), pixelTopLeft.y() ); - if( sPixelValue.Y() < 128 ) + if( sPixelValue.Y() < m_uiPixelHalfScale ) painter.setPen( QColor( Qt::white ) ); else painter.setPen( QColor( Qt::black ) ); @@ -445,7 +444,7 @@ void ViewArea::paintEvent( QPaintEvent *event ) { sPixelValue = m_pcCurrFrame->getPixelValue( pixelTopLeft.x(), pixelTopLeft.y() ); - if( ( sPixelValue.R() + sPixelValue.G() + sPixelValue.B() ) < 128 * 3 ) + if( ( sPixelValue.R() + sPixelValue.G() + sPixelValue.B() ) < ( m_uiPixelHalfScale * 3 ) ) painter.setPen( QColor( Qt::white ) ); else painter.setPen( QColor( Qt::black ) ); @@ -457,7 +456,6 @@ void ViewArea::paintEvent( QPaintEvent *event ) } } - QColor color( Qt::white ); QPen mainPen = QPen( color, 1, Qt::SolidLine ); painter.setPen( mainPen ); @@ -513,7 +511,7 @@ void ViewArea::paintEvent( QPaintEvent *event ) QRect imgr = viewToWindow( QRect( 0, 0, m_pixmap.width(), m_pixmap.height() ) ); myPath.addRect( imgr ); - myPath.addRect( sr); //m_selectedArea + myPath.addRect( sr ); //m_selectedArea painter.drawPath( myPath ); // 2) Draw the selection rectangle @@ -600,14 +598,14 @@ void ViewArea::wheelEvent( QWheelEvent *event ) if( event->modifiers() & Qt::ControlModifier ) { scale = 0.001 * event->delta(); - if(scale>0) - scale=1.25; + if( scale > 0 ) + scale = 1.25; else - scale=0.8; + scale = 0.8; QWidget *p = parentWidget(); QSize minimumSize = QSize( p->size().width() - 5, p->size().height() - 5 ); - usedScale = scaleZoomFactor( scale , event->pos(), minimumSize ); + usedScale = scaleZoomFactor( scale, event->pos(), minimumSize ); if( usedScale != 1.0 ) { emit zoomFactorChanged_byWheel( usedScale, event->pos() ); @@ -736,7 +734,7 @@ void ViewArea::mouseMoveEvent( QMouseEvent *event ) // From left to right if( m_lastPos.x() < actualPos.x() ) { - QPoint bottomR = actualPos;// - QPoint( 1, 1 ); + QPoint bottomR = actualPos; // - QPoint( 1, 1 ); m_selectedArea = QRect( m_lastPos, bottomR ); } // From right to left @@ -761,7 +759,7 @@ void ViewArea::mouseMoveEvent( QMouseEvent *event ) // From right to left else { - QPoint bottomR = m_lastPos;// - QPoint( 1, 1 ); + QPoint bottomR = m_lastPos; // - QPoint( 1, 1 ); m_selectedArea = QRect( actualPos, bottomR ); } } @@ -868,57 +866,56 @@ void ViewArea::mouseReleaseEvent( QMouseEvent *event ) } } - //////////////////////////////////////////////////////////////////////////////// bool ViewArea::isPosValid( const QPoint &pos ) const { -if( pos.x() < 0 || pos.y() < 0 || pos.x() >= m_pixmap.width() || pos.y() >= m_pixmap.height() ) - return false; -else - return true; + if( pos.x() < 0 || pos.y() < 0 || pos.x() >= m_pixmap.width() || pos.y() >= m_pixmap.height() ) + return false; + else + return true; } //////////////////////////////////////////////////////////////////////////////// QPoint ViewArea::windowToView( const QPoint& pt ) const { -QPoint p; -p.setX( static_cast( ( pt.x() - m_xOffset ) / m_zoomFactor ) ); -p.setY( static_cast( ( pt.y() - m_yOffset ) / m_zoomFactor ) ); + QPoint p; + p.setX( static_cast( ( pt.x() - m_xOffset ) / m_zoomFactor ) ); + p.setY( static_cast( ( pt.y() - m_yOffset ) / m_zoomFactor ) ); -return p; + return p; } QRect ViewArea::windowToView( const QRect& rc ) const { -QRect r; + QRect r; -r.setTopLeft( windowToView( rc.topLeft() ) ); + r.setTopLeft( windowToView( rc.topLeft() ) ); // r.setRight ( (int)( ceil(( rc.right() - m_xOffset)/m_zoomFactor ))); // r.setBottom( (int)( ceil(( rc.bottom()- m_yOffset)/m_zoomFactor ))); // r.setRight ( static_cast(( rc.right() - m_xOffset ) / m_zoomFactor +1)); // r.setBottom( static_cast(( rc.bottom() - m_xOffset ) / m_zoomFactor+1)); -r.setBottomRight( windowToView( rc.bottomRight() ) ); -return r; + r.setBottomRight( windowToView( rc.bottomRight() ) ); + return r; } QPoint ViewArea::viewToWindow( const QPoint& pt ) const { -QPoint p; + QPoint p; -p.setX( static_cast( pt.x() * m_zoomFactor + m_xOffset ) ); -p.setY( static_cast( pt.y() * m_zoomFactor + m_yOffset ) ); + p.setX( static_cast( pt.x() * m_zoomFactor + m_xOffset ) ); + p.setY( static_cast( pt.y() * m_zoomFactor + m_yOffset ) ); -return p; + return p; } QRect ViewArea::viewToWindow( const QRect& rc ) const { -QRect r; + QRect r; -r.setTopLeft( viewToWindow( rc.topLeft() ) ); + r.setTopLeft( viewToWindow( rc.topLeft() ) ); // r.setRight ( (int)( ceil(( rc.right() +1+m_xOffset )*m_zoomFactor ) - 1 )); // r.setBottom( (int)( ceil(( rc.bottom()+1+m_yOffset )*m_zoomFactor ) - 1 )); // r.setRight ( (int)( ceil(( rc.right()+0.5)*m_zoomFactor )+ m_xOffset )-1); @@ -926,9 +923,9 @@ r.setTopLeft( viewToWindow( rc.topLeft() ) ); // qDebug()<<"Right = "<< r.right(); // r.setRight ( static_cast(( rc.right()+1) * m_zoomFactor + m_xOffset -1) ); // r.setBottom( static_cast(( rc.bottom()+1) * m_zoomFactor + m_yOffset -1)); -r.setBottomRight( viewToWindow( rc.bottomRight() ) ); + r.setBottomRight( viewToWindow( rc.bottomRight() ) ); -return r; + return r; } //////////////////////////////////////////////////////////////////////////////// @@ -936,41 +933,41 @@ return r; //////////////////////////////////////////////////////////////////////////////// void ViewArea::updateMask( const QRect &rect ) { -switch( tool() ) -{ -case MaskTool: -{ - // Add rect to the mask - QPainter painter( &m_mask ); - painter.setBrush( Qt::color1 ); - painter.setPen( Qt::NoPen ); - painter.drawRect( rect ); - painter.end(); - break; -} -case EraserTool: -{ - // Clears rect area in the mask - QPainter painter( &m_mask ); - painter.setBrush( Qt::color0 ); - painter.setPen( Qt::NoPen ); - painter.drawRect( rect ); - painter.end(); - break; -} -default: /* Do Nothing */ - ; -} + switch( tool() ) + { + case MaskTool: + { + // Add rect to the mask + QPainter painter( &m_mask ); + painter.setBrush( Qt::color1 ); + painter.setPen( Qt::NoPen ); + painter.drawRect( rect ); + painter.end(); + break; + } + case EraserTool: + { + // Clears rect area in the mask + QPainter painter( &m_mask ); + painter.setBrush( Qt::color0 ); + painter.setPen( Qt::NoPen ); + painter.drawRect( rect ); + painter.end(); + break; + } + default: /* Do Nothing */ + ; + } } void ViewArea::setInputStream( PlaYUVerStream *stream ) { -m_pStream = stream; + m_pStream = stream; } PlaYUVerStream* ViewArea::getInputStream() { -return m_pStream; + return m_pStream; } } // NameSpace plaYUVer diff --git a/app/ViewArea.h b/app/ViewArea.h index 4a1d4bd..de6f10f 100644 --- a/app/ViewArea.h +++ b/app/ViewArea.h @@ -163,6 +163,7 @@ private: QRect viewToWindow( const QRect& rc ) const; PlaYUVerFrame *m_pcCurrFrame; + UInt m_uiPixelHalfScale; QPixmap m_pixmap; QBitmap m_mask; QRect m_selectedArea; diff --git a/lib/PlaYUVerDefs.h b/lib/PlaYUVerDefs.h index 40652cd..0d597d6 100644 --- a/lib/PlaYUVerDefs.h +++ b/lib/PlaYUVerDefs.h @@ -75,8 +75,7 @@ typedef unsigned long long UInt64; // Type definition // ==================================================================================================================== -//typedef UChar Pel; ///< 8-bit pixel type -typedef Short Pel; ///< 16-bit pixel type +typedef UShort Pel; ///< 16-bit pixel type typedef UChar Byte; // ==================================================================================================================== diff --git a/lib/PlaYUVerFrame.cpp b/lib/PlaYUVerFrame.cpp index 37be54f..25f7a9f 100644 --- a/lib/PlaYUVerFrame.cpp +++ b/lib/PlaYUVerFrame.cpp @@ -285,18 +285,16 @@ Void PlaYUVerFrame::frameFromBuffer( Byte *Buff, UInt64 uiBuffSize ) for( i = 0; i < CHROMASHIFT( m_uiHeight, ratioH ) * CHROMASHIFT( m_uiWidth, ratioW ); i++ ) { - *pTmpPel = 0; - for( b = 0; b < bytesPixel; b++ ) + *pTmpPel = *pTmpBuff; + for( b = 1; b < bytesPixel; b++ ) { - *pTmpPel = ( *pTmpPel << ( m_iBitsPel - 8 * b ) ); - *pTmpPel += *pTmpBuff++; + pTmpBuff++; + *pTmpPel |= ( *pTmpBuff << ( 8 * b ) ); } - pTmpBuff--; pTmpPel++; pTmpBuff += step; } } - m_bHasRGBPel = false; m_bHasHistogram = false; } @@ -308,14 +306,14 @@ Void PlaYUVerFrame::frameToBuffer( Byte *output_buffer ) Byte* pTmpBuff; Pel* pTmpPel; Int ratioH, ratioW, step; - UInt i, ch; + UInt i, ch, b; ppBuff[0] = output_buffer; for( Int i = 1; i < MAX_NUMBER_PLANES; i++ ) { ratioW = i > 1 ? m_pcPelFormat->log2ChromaWidth : 0; ratioH = i > 1 ? m_pcPelFormat->log2ChromaHeight : 0; - ppBuff[i] = ppBuff[i - 1] + CHROMASHIFT( m_uiHeight, ratioH ) * CHROMASHIFT( m_uiWidth, ratioW ); + ppBuff[i] = ppBuff[i - 1] + CHROMASHIFT( m_uiHeight, ratioH ) * CHROMASHIFT( m_uiWidth, ratioW ) * bytesPixel; } for( ch = 0; ch < m_pcPelFormat->numberChannels; ch++ ) @@ -329,7 +327,13 @@ Void PlaYUVerFrame::frameToBuffer( Byte *output_buffer ) for( i = 0; i < CHROMASHIFT( m_uiHeight, ratioH ) * CHROMASHIFT( m_uiWidth, ratioW ); i++ ) { - *pTmpBuff = *pTmpPel++; + *pTmpBuff = ( *pTmpPel & 0x00FF ); + for( b = 1; b < bytesPixel; b++ ) + { + pTmpBuff++; + *pTmpBuff = ( *pTmpPel >> ( 8 * b ) ) & 0x00FF; + } + pTmpPel++; pTmpBuff += step; } } @@ -340,7 +344,6 @@ Void PlaYUVerFrame::fillRGBBuffer() { if( m_bHasRGBPel ) return; - UInt bytesPixel = ( m_iBitsPel - 1 ) / 8 + 1; Int iR, iG, iB; UInt* pARGB = ( UInt* )m_pcARGB32; if( m_pcPelFormat->colorSpace == COLOR_GRAY ) @@ -348,8 +351,8 @@ Void PlaYUVerFrame::fillRGBBuffer() Pel* pY = m_pppcInputPel[LUMA][0]; for( UInt i = 0; i < m_uiHeight * m_uiWidth; i++ ) { - iR = *pY++; - iG = *pY++; + iR = *pY; + iG = *pY; iB = *pY++; *pARGB++ = PEL_RGB( iR, iG, iB ); } @@ -394,11 +397,14 @@ Void PlaYUVerFrame::fillRGBBuffer() pARGB = pARGBLine; for( x = 0; x < m_uiWidth >> m_pcPelFormat->log2ChromaWidth; x++ ) { - iU = ( *pU++ ) >> shiftBits; - iV = ( *pV++ ) >> shiftBits; + iU = *pU++; + iU >>= shiftBits; + iV = *pV++; + iV >>= shiftBits; for( j = 0; j < ( 1 << m_pcPelFormat->log2ChromaWidth ); j++ ) { - iY = *pY++ >> shiftBits; + iY = *pY++; + iY >>= shiftBits; YUV2RGB( iY, iU, iV, iR, iG, iB ); *pARGB++ = PEL_RGB( iR, iG, iB ); } diff --git a/lib/PlaYUVerStream.cpp b/lib/PlaYUVerStream.cpp index 0b78e7c..70225b5 100644 --- a/lib/PlaYUVerStream.cpp +++ b/lib/PlaYUVerStream.cpp @@ -623,7 +623,7 @@ Bool PlaYUVerStream::saveFrame( const std::string& filename, PlaYUVerFrame *save if( fmtExt == "yuv" ) { PlaYUVerStream auxFrameStream; - if( !auxFrameStream.open( filename, saveFrame->getWidth(), saveFrame->getHeight(), saveFrame->getPelFormat(), 1, false ) ) + if( !auxFrameStream.open( filename, saveFrame->getWidth(), saveFrame->getHeight(), saveFrame->getPelFormat(), saveFrame->getBitsPel(), 1, false ) ) { return false; }