diff --git a/.clang-format b/.clang-format
index 6061e1b..4aeac83 100644
--- a/.clang-format
+++ b/.clang-format
@@ -91,7 +91,7 @@ SortIncludes: true
SpacesInParentheses: true
SpacesInSquareBrackets: false
Standard: Auto
-TabWidth: 8
+TabWidth: 2
UseTab: Never
...
diff --git a/app/FramePropertiesDock.cpp b/app/FramePropertiesDock.cpp
index 6448be4..68faab1 100644
--- a/app/FramePropertiesDock.cpp
+++ b/app/FramePropertiesDock.cpp
@@ -42,8 +42,8 @@ FramePropertiesDock::FramePropertiesDock( QWidget* parent, Bool* pbMainPlaySwitc
channelLabel->setAlignment( Qt::AlignVCenter | Qt::AlignRight );
channelCB = new QComboBox;
- channelCB->addItem( tr( "Luminance" ) );
- channelCB->setItemIcon( 0, QIcon( ":/images/channel-luma.png" ) );
+ //channelCB->addItem( tr( "Luminance" ) );
+ //channelCB->setItemIcon( 0, QIcon( ":/images/channel-luma.png" ) );
channelCB->setWhatsThis( tr( "
Select here the histogram channel to display:
"
"Luminance: Display luminance (perceived brightness).
"
@@ -218,8 +218,6 @@ FramePropertiesDock::FramePropertiesDock( QWidget* parent, Bool* pbMainPlaySwitc
statisticsLayout->addWidget( labelStdDevValue, gridRow++, 1 );
statisticsLayout->addWidget( medianLabel, gridRow, 0 );
statisticsLayout->addWidget( labelMedianValue, gridRow++, 1 );
- // statisticsLayout->addWidget( percentileLabel, 5, 0 );
- // statisticsLayout->addWidget( labelPercentileValue, 5, 1 );
QGroupBox* statisticsGroup = new QGroupBox( tr( "Statistics" ) );
statisticsGroup->setLayout( statisticsLayout );
@@ -298,21 +296,20 @@ Void FramePropertiesDock::setFrame( PlaYUVerFrame* pcFrame )
if( colorSpace == PlaYUVerPixel::COLOR_RGB || colorSpace == PlaYUVerPixel::COLOR_RGBA )
{
channelCB->clear();
- channelCB->clear();
- channelCB->insertItem( LuminosityChannel, QIcon( ":/images/channel-luma.png" ), "Luminance" );
- channelCB->insertItem( FirstChannel, QIcon( ":/images/channel-red.png" ), "Red" );
- channelCB->insertItem( SecondChannel, QIcon( ":/images/channel-green.png" ), "Green" );
- channelCB->insertItem( ThirdChannel, QIcon( ":/images/channel-blue.png" ), "Blue" );
+ channelCB->addItem( QIcon( ":/images/channel-luma.png" ), "Luminance", PlaYUVerFrame::HIST_LUMA );
+ channelCB->addItem( QIcon( ":/images/channel-red.png" ), "Red", PlaYUVerFrame::HIST_COLOR_R );
+ channelCB->addItem( QIcon( ":/images/channel-green.png" ), "Green", PlaYUVerFrame::HIST_COLOR_G );
+ channelCB->addItem( QIcon( ":/images/channel-blue.png" ), "Blue", PlaYUVerFrame::HIST_COLOR_B );
if( colorSpace == PlaYUVerPixel::COLOR_RGBA )
{
- channelCB->insertItem( AlphaChannel, QIcon( ":/images/channel-alpha.png" ), "Alpha" );
+ channelCB->addItem( QIcon( ":/images/channel-alpha.png" ), "Alpha", PlaYUVerFrame::HIST_COLOR_A );
}
- channelCB->insertItem( ColorChannels, QIcon( ":/images/channel-all.png" ), "Colors" );
+ channelCB->addItem( QIcon( ":/images/channel-all.png" ), "Colors", PlaYUVerFrame::HIST_ALL_CHANNELS );
colorsCB->clear();
- colorsCB->addItem( "Red" );
- colorsCB->addItem( "Green" );
- colorsCB->addItem( "Blue" );
+ colorsCB->addItem( "Red", PlaYUVerFrame::HIST_COLOR_R );
+ colorsCB->addItem( "Green", PlaYUVerFrame::HIST_COLOR_G );
+ colorsCB->addItem( "Blue", PlaYUVerFrame::HIST_COLOR_B );
colorsCB->setEnabled( false );
colorsCB->setWhatsThis( tr( "
Select here the main color displayed with Colors Channel mode:"
"
Red: Draw the Red image channel in the foreground.
"
@@ -324,15 +321,15 @@ Void FramePropertiesDock::setFrame( PlaYUVerFrame* pcFrame )
else if( colorSpace == PlaYUVerPixel::COLOR_YUV )
{
channelCB->clear();
- channelCB->insertItem( FirstChannel, QIcon( ":/images/channel-luma.png" ), "Luminance" );
- channelCB->insertItem( SecondChannel, QIcon( ":/images/channel-red.png" ), "Chroma U" );
- channelCB->insertItem( ThirdChannel, QIcon( ":/images/channel-green.png" ), "Chroma V" );
- channelCB->insertItem( ColorChannels, QIcon( ":/images/channel-all.png" ), "All Channels" );
+ channelCB->addItem( QIcon( ":/images/channel-luma.png" ), "Luminance", PlaYUVerFrame::HIST_LUMA );
+ channelCB->addItem( QIcon( ":/images/channel-red.png" ), "Chroma U", PlaYUVerFrame::HIST_CHROMA_U );
+ channelCB->addItem( QIcon( ":/images/channel-green.png" ), "Chroma V", PlaYUVerFrame::HIST_CHROMA_V );
+ channelCB->addItem( QIcon( ":/images/channel-all.png" ), "All Channels", PlaYUVerFrame::HIST_ALL_CHANNELS );
colorsCB->clear();
- colorsCB->addItem( "Luminance" );
- colorsCB->addItem( "Chroma U" );
- colorsCB->addItem( "Chroma V" );
+ colorsCB->addItem( "Luminance", PlaYUVerFrame::HIST_LUMA );
+ colorsCB->addItem( "Chroma U", PlaYUVerFrame::HIST_CHROMA_U );
+ colorsCB->addItem( "Chroma V", PlaYUVerFrame::HIST_CHROMA_V );
colorsCB->setEnabled( false );
colorsCB->setWhatsThis( tr( "
Select here the main color displayed with Colors Channel mode:"
"
Luminance: DraupdateDataw the Luminance channel in the "
@@ -346,8 +343,7 @@ Void FramePropertiesDock::setFrame( PlaYUVerFrame* pcFrame )
else
{
channelCB->clear();
- channelCB->addItem( tr( "Luminance" ) );
- channelCB->setItemIcon( 0, QIcon( ":/images/channel-luma.png" ) );
+ channelCB->addItem( QIcon( ":/images/channel-luma.png" ), "Luminance", PlaYUVerFrame::HIST_LUMA );
colorsCB->hide();
colorsLabel->hide();
}
@@ -436,8 +432,8 @@ Void FramePropertiesDock::updateStatistiques()
Int max = maxInterv->value();
Int channel = histogramWidget->m_channelType;
- if( channel == HistogramWidget::ColorChannelsHistogram )
- channel = colorsCB->currentIndex();
+ if( channel == PlaYUVerFrame::HIST_ALL_CHANNELS )
+ channel = colorsCB->itemData( colorsCB->currentIndex() ).toInt();
PlaYUVerFrame* frame;
@@ -449,7 +445,7 @@ Void FramePropertiesDock::updateStatistiques()
if( frame )
{
QString rangeText =
- "[" + QString::number( frame->getMin( channel ) ) + ":" + QString::number( frame->getMax( channel ) ) + "]";
+ "[" + QString::number( frame->getMinimumPelValue( channel ) ) + ":" + QString::number( frame->getMaximumPelValue( channel ) ) + "]";
labelRangeValue->setText( rangeText );
double mean = frame->getMean( channel, min, max );
@@ -461,7 +457,7 @@ Void FramePropertiesDock::updateStatistiques()
double stddev = frame->getStdDev( channel, min, max );
labelStdDevValue->setText( value.setNum( stddev, 'f', 1 ) );
- double counts = frame->getCount( channel, min, max );
+ double counts = frame->getNumPixelsRange( channel, min, max );
labelCountValue->setText( value.setNum( (float)counts, 'f', 0 ) );
double median = frame->getMedian( channel, min, max );
@@ -509,41 +505,15 @@ Void FramePropertiesDock::slotHistogramComputationFailed()
m_pcFrame = NULL;
}
-Void FramePropertiesDock::slotChannelChanged( Int channel )
+Void FramePropertiesDock::slotChannelChanged( Int index )
{
- if( m_pcFrame->getColorSpace() == PlaYUVerPixel::COLOR_YUV )
- channel += 1;
- if( channel == AlphaChannel && m_pcFrame->getColorSpace() != PlaYUVerPixel::COLOR_RGBA )
- channel = ColorChannels;
+ Int channel = channelCB->itemData( index ).toInt();
- switch( channel )
- {
- case FirstChannel:
- histogramWidget->m_channelType = HistogramWidget::FirstChannelHistogram;
- colorsCB->setEnabled( false );
- break;
- case SecondChannel:
- histogramWidget->m_channelType = HistogramWidget::SecondChannelHistogram;
- colorsCB->setEnabled( false );
- break;
- case ThirdChannel:
- histogramWidget->m_channelType = HistogramWidget::ThirdChannelHistogram;
- colorsCB->setEnabled( false );
- break;
- case AlphaChannel:
- histogramWidget->m_channelType = HistogramWidget::AlphaChannelHistogram;
- colorsCB->setEnabled( false );
- break;
- case ColorChannels:
- histogramWidget->m_channelType = HistogramWidget::ColorChannelsHistogram;
+ histogramWidget->m_channelType = channel;
+ if( channel == PlaYUVerFrame::HIST_ALL_CHANNELS )
colorsCB->setEnabled( true );
- break;
- default: // Luminance.
- // histogramWidget->m_channelType = HistogramWidget::LumaHistogram;
- histogramWidget->m_channelType = HistogramWidget::FirstChannelHistogram;
+ else
colorsCB->setEnabled( false );
- break;
- }
histogramWidget->update();
updateStatistiques();
}
@@ -554,21 +524,10 @@ Void FramePropertiesDock::slotScaleChanged( Int scale )
histogramWidget->update();
}
-Void FramePropertiesDock::slotColorsChanged( Int color )
+Void FramePropertiesDock::slotColorsChanged( Int index )
{
- switch( color )
- {
- case AllColorsGreen:
- histogramWidget->m_colorType = HistogramWidget::SecondChannelColor;
- break;
- case AllColorsBlue:
- histogramWidget->m_colorType = HistogramWidget::ThirdChannelColor;
- break;
- default: // Red.
- histogramWidget->m_colorType = HistogramWidget::FirstChannelColor;
- break;
- }
-
+ Int color = colorsCB->itemData( index ).toInt();
+ histogramWidget->m_colorType = color;
histogramWidget->update();
updateStatistiques();
}
diff --git a/app/FramePropertiesDock.h b/app/FramePropertiesDock.h
index 43af9c1..af8472d 100644
--- a/app/FramePropertiesDock.h
+++ b/app/FramePropertiesDock.h
@@ -48,23 +48,6 @@ public:
Void stopHistogram();
private:
- enum ColorChannel
- {
- LuminosityChannel = 0,
- FirstChannel = 1,
- SecondChannel = 2,
- ThirdChannel = 3,
- ColorChannels = 4,
- AlphaChannel = 5,
- };
-
- enum AllColorsColorType
- {
- AllColorsRed = 0,
- AllColorsGreen,
- AllColorsBlue
- };
-
PlaYUVerFrame* m_pcFrame;
PlaYUVerFrame* m_pcSelectedFrame;
Int m_iLastFrameType;
@@ -106,9 +89,9 @@ private:
private Q_SLOTS:
void slotRefreshOptions( int range );
void slotHistogramComputationFailed( void );
- void slotChannelChanged( int channel );
+ void slotChannelChanged( int index );
void slotScaleChanged( int scale );
- void slotColorsChanged( int color );
+ void slotColorsChanged( int index );
void slotRenderingChanged( int rendering );
void slotMinValueChanged( int );
void slotMaxValueChanged( int );
diff --git a/app/HistogramWidget.cpp b/app/HistogramWidget.cpp
index 8d2e125..18414a0 100644
--- a/app/HistogramWidget.cpp
+++ b/app/HistogramWidget.cpp
@@ -79,8 +79,8 @@ public:
}
/**
- * Custom Event
- */
+ * Custom Event
+ */
class EventData : public QEvent
{
public:
@@ -154,13 +154,13 @@ public:
bool statisticsVisible; // Display tooltip histogram statistics.
bool inSelected;
bool selectMode; // If true, a part of the histogram can be
- // selected !
+ // selected !
bool blinkFlag;
bool blinkComputation; // If true, a message will be displayed during
- // histogram computation, else nothing (limit
- // flicker effect in widget especially for small
- // image/computation time).
- bool lumaChannel; // Compute luminance channel if true.
+ // histogram computation, else nothing (limit
+ // flicker effect in widget especially for small
+ // image/computation time).
+ bool lumaChannel; // Compute luminance channel if true.
bool inInitialRepaintWait;
QTimer* blinkTimer;
@@ -180,10 +180,9 @@ HistogramWidget::HistogramWidget( Int width, Int height, QWidget* parent )
d = new HistogramWidgetPrivate;
- // m_channelType = LumaHistogram;
- m_channelType = FirstChannelHistogram;
+ m_channelType = PlaYUVerFrame::HIST_LUMA;
m_scaleType = LogScaleHistogram;
- m_colorType = FirstChannelColor;
+ m_colorType = -1;
m_renderingType = FullImageHistogram;
setOptions( HistogramWidget::BlinkComputation | HistogramWidget::SelectMode | HistogramWidget::ShowLumaChannel );
@@ -211,12 +210,6 @@ HistogramWidget::~HistogramWidget()
{
d->blinkTimer->stop();
- // if( m_imageHistogram )
- // delete m_imageHistogram;
- //
- // if( m_selectionHistogram )
- // delete m_selectionHistogram;
-
delete m_imageWorker;
delete m_selectionWorker;
@@ -327,16 +320,6 @@ Void HistogramWidget::customEvent( QEvent* event )
// Remove old histogram data from memory.
m_fullImage = NULL;
m_selectionImage = NULL;
- // if( m_imageHistogram )
- // {
- // delete m_imageHistogram;
- // m_imageHistogram = 0;
- // }
- // if( m_selectionHistogram )
- // {
- // delete m_selectionHistogram;
- // m_selectionHistogram = 0;
- // }
emit signalHistogramComputationFailed();
}
}
@@ -519,34 +502,12 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
yb = 0;
max = 0.0;
- switch( m_channelType )
- {
- case HistogramWidget::FirstChannelHistogram: // Y channel.
- max = frame->getMaximum( LUMA );
- break;
- case HistogramWidget::SecondChannelHistogram: // Cb channel.
- max = frame->getMaximum( CHROMA_U );
- break;
- case HistogramWidget::ThirdChannelHistogram: // Cr channel.
- max = frame->getMaximum( CHROMA_V );
- break;
- case HistogramWidget::AlphaChannelHistogram: // Alpha channel.
- max = frame->getMaximum( COLOR_A );
- break;
-
- case HistogramWidget::ColorChannelsHistogram: // All color channels.
- max = qMax( qMax( frame->getMaximum( LUMA ), frame->getMaximum( CHROMA_U ) ), frame->getMaximum( CHROMA_V ) );
- break;
- // case HistogramWidget::LumaHistogram: // Luminance.
- // max = frame->getMaximum( LUMA );
- // break;
- }
+ max = frame->getMaximum( m_channelType );
switch( m_scaleType )
{
case HistogramWidget::LinScaleHistogram:
break;
-
case HistogramWidget::LogScaleHistogram:
if( max > 0.0 )
max = log( max );
@@ -569,8 +530,8 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
double value_r = 0.0, value_g = 0.0, value_b = 0.0; // For all channels.
int i, j;
- i = ( x * frame->getHistogramSegment() ) / wWidth;
- j = ( ( x + 1 ) * frame->getHistogramSegment() ) / wWidth;
+ i = ( x * frame->getNumHistogramSegment() ) / wWidth;
+ j = ( ( x + 1 ) * frame->getNumHistogramSegment() ) / wWidth;
do
{
@@ -582,37 +543,12 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
vg = 0.0;
vb = 0.0;
- switch( m_channelType )
+ if( m_channelType == PlaYUVerFrame::HIST_ALL_CHANNELS )
{
- case HistogramWidget::FirstChannelHistogram: // Y channel.
- v = frame->getHistogramValue( LUMA, i++ );
- break;
- case HistogramWidget::SecondChannelHistogram: // Cb channel.
- v = frame->getHistogramValue( CHROMA_U, i++ );
- break;
- case HistogramWidget::ThirdChannelHistogram: // Cr channel.
- v = frame->getHistogramValue( CHROMA_V, i++ );
- break;
- case HistogramWidget::AlphaChannelHistogram: // Alpha channel.
- v = frame->getHistogramValue( COLOR_A, i++ );
- break;
- case HistogramWidget::ColorChannelsHistogram: // All color.
- vr = frame->getHistogramValue( LUMA, i );
- vg = frame->getHistogramValue( CHROMA_U, i );
- vb = frame->getHistogramValue( CHROMA_V, i++ );
- break;
- // case HistogramWidget::LumaHistogram: // Luminance.
- // v = frame->getHistogramValue( LUMA, i++ );
- // break;
- }
+ vr = frame->getHistogramValue( PlaYUVerFrame::HIST_CHAN_ONE, i );
+ vg = frame->getHistogramValue( PlaYUVerFrame::HIST_CHAN_TWO, i );
+ vb = frame->getHistogramValue( PlaYUVerFrame::HIST_CHAN_THREE, i );
- if( m_channelType != HistogramWidget::ColorChannelsHistogram )
- {
- if( v > value )
- value = v;
- }
- else
- {
if( vr > value_r )
value_r = vr;
if( vg > value_g )
@@ -620,9 +556,16 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
if( vb > value_b )
value_b = vb;
}
+ else
+ {
+ v = frame->getHistogramValue( m_channelType, i );
+ if( v > value )
+ value = v;
+ }
+ i++;
} while( i < j );
- if( m_channelType != HistogramWidget::ColorChannelsHistogram )
+ if( m_channelType != PlaYUVerFrame::HIST_ALL_CHANNELS )
{
switch( m_scaleType )
{
@@ -673,7 +616,7 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
// Drawing the histogram + selection or only the histogram.
- if( m_channelType != HistogramWidget::ColorChannelsHistogram )
+ if( m_channelType != PlaYUVerFrame::HIST_ALL_CHANNELS )
{
if( d->selectMode == true ) // Selection mode enable ?
{
@@ -726,17 +669,23 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
// colors channel mode?
switch( m_colorType )
{
- case HistogramWidget::FirstChannelColor:
+ case PlaYUVerFrame::HIST_LUMA:
+ case PlaYUVerFrame::HIST_COLOR_R:
p1.drawLine( x, wHeight, x, wHeight - yr );
break;
- case HistogramWidget::SecondChannelColor:
+ case PlaYUVerFrame::HIST_CHROMA_U:
+ case PlaYUVerFrame::HIST_COLOR_G:
p1.drawLine( x, wHeight, x, wHeight - yg );
break;
- default:
+ case PlaYUVerFrame::HIST_CHROMA_V:
+ case PlaYUVerFrame::HIST_COLOR_B:
p1.drawLine( x, wHeight, x, wHeight - yb );
break;
+
+ default:
+ Q_ASSERT( 0 );
}
}
else
@@ -745,12 +694,13 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
// colors channel mode?
switch( m_colorType )
{
- case HistogramWidget::FirstChannelColor:
- p1.setPen( QPen( g_eColorPallet[pallet][SecondChannelColor], 1, Qt::SolidLine ) );
+ case PlaYUVerFrame::HIST_LUMA:
+ case PlaYUVerFrame::HIST_COLOR_R:
+ p1.setPen( QPen( g_eColorPallet[pallet][1], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yg );
- p1.setPen( QPen( g_eColorPallet[pallet][ThirdChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][2], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yb );
- p1.setPen( QPen( g_eColorPallet[pallet][FirstChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][0], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yr );
p1.setPen( QPen( Qt::white, 1, Qt::SolidLine ) );
@@ -762,12 +712,13 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
break;
- case HistogramWidget::SecondChannelColor:
- p1.setPen( QPen( g_eColorPallet[pallet][ThirdChannelColor], 1, Qt::SolidLine ) );
+ case PlaYUVerFrame::HIST_CHROMA_U:
+ case PlaYUVerFrame::HIST_COLOR_G:
+ p1.setPen( QPen( g_eColorPallet[pallet][2], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yb );
- p1.setPen( QPen( g_eColorPallet[pallet][FirstChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][0], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yr );
- p1.setPen( QPen( g_eColorPallet[pallet][SecondChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][1], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yg );
p1.setPen( QPen( Qt::white, 1, Qt::SolidLine ) );
@@ -778,23 +729,25 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
p1.drawLine( x, wHeight - yg - 1, x, wHeight - yg );
break;
+ case PlaYUVerFrame::HIST_CHROMA_V:
+ case PlaYUVerFrame::HIST_COLOR_B:
+ p1.setPen( QPen( g_eColorPallet[pallet][0], 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight, x, wHeight - yr );
+ p1.setPen( QPen( g_eColorPallet[pallet][1], 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight, x, wHeight - yg );
+ p1.setPen( QPen( g_eColorPallet[pallet][2], 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight, x, wHeight - yb );
+ p1.setPen( QPen( Qt::white, 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight - qMax( qMax( yr, yg ), yb ), x, 0 );
+ p1.setPen( QPen( Qt::gray, 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight - yr - 1, x, wHeight - yr );
+ p1.drawLine( x, wHeight - yg - 1, x, wHeight - yg );
+ p1.drawLine( x, wHeight - yb - 1, x, wHeight - yb );
+
+ break;
default:
- p1.setPen( QPen( g_eColorPallet[pallet][FirstChannelColor], 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight, x, wHeight - yr );
- p1.setPen( QPen( g_eColorPallet[pallet][SecondChannelColor], 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight, x, wHeight - yg );
- p1.setPen( QPen( g_eColorPallet[pallet][ThirdChannelColor], 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight, x, wHeight - yb );
-
- p1.setPen( QPen( Qt::white, 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight - qMax( qMax( yr, yg ), yb ), x, 0 );
- p1.setPen( QPen( Qt::gray, 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight - yr - 1, x, wHeight - yr );
- p1.drawLine( x, wHeight - yg - 1, x, wHeight - yg );
- p1.drawLine( x, wHeight - yb - 1, x, wHeight - yb );
-
- break;
+ Q_ASSERT( 0 );
}
if( x == wWidth / 4 || x == wWidth / 2 || x == 3 * wWidth / 4 )
@@ -810,15 +763,16 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
// colors channel mode?
switch( m_colorType )
{
- case HistogramWidget::FirstChannelColor:
+ case PlaYUVerFrame::HIST_LUMA:
+ case PlaYUVerFrame::HIST_COLOR_R:
p1.setPen( QPen( Qt::green, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][SecondChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][1], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yg );
p1.setPen( QPen( Qt::blue, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][ThirdChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][2], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yb );
p1.setPen( QPen( Qt::red, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][FirstChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][0], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yr );
p1.setPen( QPen( Qt::white, 1, Qt::SolidLine ) );
@@ -830,15 +784,16 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
break;
- case HistogramWidget::SecondChannelColor:
+ case PlaYUVerFrame::HIST_CHROMA_U:
+ case PlaYUVerFrame::HIST_COLOR_G:
p1.setPen( QPen( Qt::blue, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][ThirdChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][2], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yb );
p1.setPen( QPen( Qt::red, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][FirstChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][0], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yr );
p1.setPen( QPen( Qt::green, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][SecondChannelColor], 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][1], 1, Qt::SolidLine ) );
p1.drawLine( x, wHeight, x, wHeight - yg );
p1.setPen( QPen( Qt::white, 1, Qt::SolidLine ) );
@@ -850,25 +805,28 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
break;
+ case PlaYUVerFrame::HIST_CHROMA_V:
+ case PlaYUVerFrame::HIST_COLOR_B:
+ p1.setPen( QPen( Qt::red, 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][0], 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight, x, wHeight - yr );
+ p1.setPen( QPen( Qt::green, 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][1], 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight, x, wHeight - yg );
+ p1.setPen( QPen( Qt::blue, 1, Qt::SolidLine ) );
+ p1.setPen( QPen( g_eColorPallet[pallet][2], 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight, x, wHeight - yb );
+
+ p1.setPen( QPen( Qt::white, 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight - qMax( qMax( yr, yg ), yb ), x, 0 );
+ p1.setPen( QPen( Qt::gray, 1, Qt::SolidLine ) );
+ p1.drawLine( x, wHeight - yr - 1, x, wHeight - yr );
+ p1.drawLine( x, wHeight - yg - 1, x, wHeight - yg );
+ p1.drawLine( x, wHeight - yb - 1, x, wHeight - yb );
+
+ break;
default:
- p1.setPen( QPen( Qt::red, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][FirstChannelColor], 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight, x, wHeight - yr );
- p1.setPen( QPen( Qt::green, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][SecondChannelColor], 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight, x, wHeight - yg );
- p1.setPen( QPen( Qt::blue, 1, Qt::SolidLine ) );
- p1.setPen( QPen( g_eColorPallet[pallet][ThirdChannelColor], 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight, x, wHeight - yb );
-
- p1.setPen( QPen( Qt::white, 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight - qMax( qMax( yr, yg ), yb ), x, 0 );
- p1.setPen( QPen( Qt::gray, 1, Qt::SolidLine ) );
- p1.drawLine( x, wHeight - yr - 1, x, wHeight - yr );
- p1.drawLine( x, wHeight - yg - 1, x, wHeight - yg );
- p1.drawLine( x, wHeight - yb - 1, x, wHeight - yb );
-
- break;
+ Q_ASSERT( 0 );
}
if( x == wWidth / 4 || x == wWidth / 2 || x == 3 * wWidth / 4 )
@@ -889,22 +847,23 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
{
switch( m_channelType )
{
- case HistogramWidget::FirstChannelHistogram:
+ case PlaYUVerFrame::HIST_CHROMA_V:
+ case PlaYUVerFrame::HIST_COLOR_R:
guidePos = d->colorGuide.red();
break;
- case HistogramWidget::SecondChannelHistogram:
+ case PlaYUVerFrame::HIST_COLOR_G:
guidePos = d->colorGuide.green();
break;
- case HistogramWidget::ThirdChannelHistogram:
+ case PlaYUVerFrame::HIST_CHROMA_U:
+ case PlaYUVerFrame::HIST_COLOR_B:
guidePos = d->colorGuide.blue();
break;
- // case HistogramWidget::LumaHistogram:
- // guidePos = qMax( qMax( d->colorGuide.red(), d->colorGuide.green()
- // ), d->colorGuide.blue() );
- // break;
+ case PlaYUVerFrame::HIST_LUMA:
+ guidePos = qMax( qMax( d->colorGuide.red(), d->colorGuide.green() ), d->colorGuide.blue() );
+ break;
default: // Alpha.
guidePos = -1;
@@ -913,7 +872,7 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
if( guidePos != -1 )
{
- int xGuide = ( guidePos * wWidth ) / frame->getHistogramSegment();
+ int xGuide = ( guidePos * wWidth ) / frame->getNumHistogramSegment();
p1.drawLine( xGuide, 0, xGuide, wHeight );
QString string = tr( "x:%1" ).arg( guidePos );
@@ -950,7 +909,7 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
tipText = "
";
tipText += cellBeg + tr( "Mean:" ) + cellMid;
- double mean = frame->getMean( m_channelType, 0, frame->getHistogramSegment() - 1 );
+ double mean = frame->getMean( m_channelType, 0, frame->getNumHistogramSegment() - 1 );
tipText += value.setNum( mean, 'f', 1 ) + cellEnd;
tipText += cellBeg + tr( "Pixels:" ) + cellMid;
@@ -958,15 +917,15 @@ Void HistogramWidget::paintEvent( QPaintEvent* )
tipText += value.setNum( (float)pixels, 'f', 0 ) + cellEnd;
tipText += cellBeg + tr( "Std dev.:" ) + cellMid;
- double stddev = frame->getStdDev( m_channelType, 0, frame->getHistogramSegment() - 1 );
+ double stddev = frame->getStdDev( m_channelType, 0, frame->getNumHistogramSegment() - 1 );
tipText += value.setNum( stddev, 'f', 1 ) + cellEnd;
tipText += cellBeg + tr( "Selected:" ) + cellMid;
- double counts = frame->getCount( m_channelType, 0, frame->getHistogramSegment() - 1 );
+ double counts = frame->getNumPixelsRange( m_channelType, 0, frame->getNumHistogramSegment() - 1 );
tipText += value.setNum( (float)counts, 'f', 0 ) + cellEnd;
tipText += cellBeg + tr( "Median:" ) + cellMid;
- double median = frame->getMedian( m_channelType, 0, frame->getHistogramSegment() - 1 );
+ double median = frame->getMedian( m_channelType, 0, frame->getNumHistogramSegment() - 1 );
tipText += value.setNum( median, 'f', 1 ) + cellEnd;
tipText += cellBeg + tr( "Percent:" ) + cellMid;
diff --git a/app/HistogramWidget.h b/app/HistogramWidget.h
index fa94295..dcf79cf 100644
--- a/app/HistogramWidget.h
+++ b/app/HistogramWidget.h
@@ -43,20 +43,6 @@ class HistogramWidget : public QWidget
Q_OBJECT
public:
- enum HistogramChannel
- {
- /** Luminance */
- // LumaHistogram = 0,
- /** Channels */
- FirstChannelHistogram = 0,
- SecondChannelHistogram,
- ThirdChannelHistogram,
- /** Alpha channel */
- AlphaChannelHistogram,
- /** All color channels */
- ColorChannelsHistogram,
- };
-
enum HistogramScale
{
/** Linear scale */
@@ -65,14 +51,6 @@ public:
LogScaleHistogram
};
- enum HistogramAllColorMode
- {
- // Select wich component is shown in foreground
- FirstChannelColor,
- SecondChannelColor,
- ThirdChannelColor,
- };
-
enum HistogramRendering
{
/** Full image histogram rendering */
diff --git a/app/VideoSubWindow.cpp b/app/VideoSubWindow.cpp
index 7900e86..b4b3bb5 100644
--- a/app/VideoSubWindow.cpp
+++ b/app/VideoSubWindow.cpp
@@ -990,7 +990,7 @@ Void VideoSubWindow::updatePixelValueStatusBar( const QPoint& pos )
strStatus = QString( "(%1,%2) " ).arg( posX ).arg( posY );
Int colorSpace = m_pcCurrFrame->getColorSpace();
- PlaYUVerPixel pixelValue = m_pcCurrFrame->getPixelValue( pos.x(), pos.y() );
+ PlaYUVerPixel pixelValue = m_pcCurrFrame->getPixel( pos.x(), pos.y() );
switch( colorSpace )
{
case PlaYUVerPixel::COLOR_GRAY:
diff --git a/app/ViewArea.cpp b/app/ViewArea.cpp
index 5077d52..ee8a78c 100644
--- a/app/ViewArea.cpp
+++ b/app/ViewArea.cpp
@@ -487,7 +487,7 @@ Void ViewArea::paintEvent( QPaintEvent* event )
{
Int imageWidth = m_pixmap.width();
Int imageHeight = m_pixmap.height();
- PlaYUVerPixel sPixelValue;
+ PlaYUVerPixel pixelValue;
QFont font( "Helvetica" );
font.setPixelSize( 12 );
@@ -508,51 +508,58 @@ Void ViewArea::paintEvent( QPaintEvent* event )
if( frFormat == PlaYUVerPixel::COLOR_YUV )
{
- sPixelValue = m_pcCurrFrame->getPixelValue( pixelTopLeft.x(), pixelTopLeft.y() );
+ pixelValue = m_pcCurrFrame->getPixel( pixelTopLeft.x(), pixelTopLeft.y() );
- if( sPixelValue.Y() < m_uiPixelHalfScale )
+ if( pixelValue.Y() < m_uiPixelHalfScale )
paInter.setPen( QColor( Qt::white ) );
else
paInter.setPen( QColor( Qt::black ) );
paInter.drawText( pixelRect, Qt::AlignCenter,
- "Y: " + QString::number( sPixelValue.Y() ) + "\n" +
- "U: " + QString::number( sPixelValue.Cb() ) + "\n" +
- "V: " + QString::number( sPixelValue.Cr() ) );
+ "Y: " + QString::number( pixelValue.Y() ) + "\n" +
+ "U: " + QString::number( pixelValue.Cb() ) + "\n" +
+ "V: " + QString::number( pixelValue.Cr() ) );
}
if( frFormat == PlaYUVerPixel::COLOR_GRAY )
{
- sPixelValue = m_pcCurrFrame->getPixelValue( pixelTopLeft.x(), pixelTopLeft.y() );
+ pixelValue = m_pcCurrFrame->getPixel( pixelTopLeft.x(), pixelTopLeft.y() );
- if( sPixelValue.Y() < m_uiPixelHalfScale )
+ if( pixelValue.Y() < m_uiPixelHalfScale )
paInter.setPen( QColor( Qt::white ) );
else
paInter.setPen( QColor( Qt::black ) );
- paInter.drawText( pixelRect, Qt::AlignCenter, "Y: " + QString::number( sPixelValue.Y() ) );
+ paInter.drawText( pixelRect, Qt::AlignCenter, "Y: " + QString::number( pixelValue.Y() ) );
}
if( ( frFormat == PlaYUVerPixel::COLOR_RGB ) )
{
- sPixelValue = m_pcCurrFrame->getPixelValue( pixelTopLeft.x(), pixelTopLeft.y() );
+ pixelValue = m_pcCurrFrame->getPixel( pixelTopLeft.x(), pixelTopLeft.y() );
- if( ( sPixelValue.R() + sPixelValue.G() + sPixelValue.B() ) < ( m_uiPixelHalfScale * 3 ) )
+ if( ( pixelValue.R() + pixelValue.G() + pixelValue.B() ) < ( m_uiPixelHalfScale * 3 ) )
paInter.setPen( QColor( Qt::white ) );
else
paInter.setPen( QColor( Qt::black ) );
- paInter.drawText( pixelRect, Qt::AlignCenter, "R: " + QString::number( sPixelValue.R() ) + "\nG: " + QString::number( sPixelValue.G() ) + "\nB: " + QString::number( sPixelValue.B() ) );
+ paInter.drawText( pixelRect, Qt::AlignCenter,
+ "R: " + QString::number( pixelValue.R() ) +
+ "\nG: " + QString::number( pixelValue.G() ) +
+ "\nB: " + QString::number( pixelValue.B() ) );
}
if( ( frFormat == PlaYUVerPixel::COLOR_RGBA ) )
{
- sPixelValue = m_pcCurrFrame->getPixelValue( pixelTopLeft.x(), pixelTopLeft.y() );
+ pixelValue = m_pcCurrFrame->getPixel( pixelTopLeft.x(), pixelTopLeft.y() );
- if( ( sPixelValue.R() + sPixelValue.G() + sPixelValue.B() ) < ( m_uiPixelHalfScale * 3 ) )
+ if( ( pixelValue.R() + pixelValue.G() + pixelValue.B() ) < ( m_uiPixelHalfScale * 3 ) )
paInter.setPen( QColor( Qt::white ) );
else
paInter.setPen( QColor( Qt::black ) );
- paInter.drawText( pixelRect, Qt::AlignCenter, "R: " + QString::number( sPixelValue.R() ) + "\nG: " + QString::number( sPixelValue.G() ) + "\nB: " + QString::number( sPixelValue.B() ) + "\nA: " + QString::number( sPixelValue.A() ) );
+ paInter.drawText( pixelRect, Qt::AlignCenter,
+ "R: " + QString::number( pixelValue.R() ) +
+ "\nG: " + QString::number( pixelValue.G() ) +
+ "\nB: " + QString::number( pixelValue.B() ) +
+ "\nA: " + QString::number( pixelValue.A() ) );
}
}
}
diff --git a/lib/PlaYUVerFrame.cpp b/lib/PlaYUVerFrame.cpp
index 30ab099..20532ac 100644
--- a/lib/PlaYUVerFrame.cpp
+++ b/lib/PlaYUVerFrame.cpp
@@ -293,27 +293,46 @@ PlaYUVerPixel PlaYUVerPixel::operator*( const Double& op )
PlaYUVerPixel PlaYUVerPixel::ConvertPixel( ColorSpace eOutputSpace )
{
- Int outA, outB, outC;
- PlaYUVerPixel outPixel( COLOR_INVALID, 0, 0, 0 );
-
- if( ColorSpace() == eOutputSpace || eOutputSpace == COLOR_RGBA || eOutputSpace == COLOR_GRAY )
+ if( d->iColorSpace == eOutputSpace )
return *this;
- if( eOutputSpace == COLOR_RGB )
+ Int outA = 0;
+ Int outB = 0;
+ Int outC = 0;
+ Int outD = 0;
+ if( d->iColorSpace == COLOR_YUV )
{
- yuvToRgb( Y(), Cb(), Cr(), outA, outB, outC );
- outPixel.R() = outA;
- outPixel.G() = outB;
- outPixel.B() = outC;
+ switch( eOutputSpace )
+ {
+ case COLOR_GRAY:
+ outA = Y();
+ break;
+ case COLOR_RGBA:
+ outD = 255;
+ case COLOR_RGB:
+ yuvToRgb( Y(), Cb(), Cr(), outA, outB, outC );
+ break;
+ default:
+ break;
+ }
}
- if( eOutputSpace == COLOR_YUV )
+ if( d->iColorSpace == COLOR_RGB )
{
- rgbToYuv( R(), G(), B(), outA, outB, outC );
- outPixel.Y() = outA;
- outPixel.Cb() = outB;
- outPixel.Cr() = outC;
+ switch( eOutputSpace )
+ {
+ case COLOR_GRAY:
+ rgbToYuv( R(), G(), B(), outA, outB, outC );
+ case COLOR_YUV:
+ rgbToYuv( R(), G(), B(), outA, outB, outC );
+ break;
+ case COLOR_RGBA:
+ outD = 255;
+ break;
+ default:
+ break;
+ }
}
- return outPixel;
+ return PlaYUVerPixel( eOutputSpace, outA, outB, outC, outD );
}
struct PlaYUVerFramePrivate
@@ -425,6 +444,38 @@ struct PlaYUVerFramePrivate
m_bInit = true;
}
+ Int getRealHistogramChannel( Int channel )
+ {
+ Int realChannel = -1;
+ if( channel == PlaYUVerFrame::HIST_ALL_CHANNELS )
+ {
+ realChannel = channel;
+ }
+ else if( channel >= 0 && channel < 4 )
+ {
+ realChannel = channel;
+ }
+ else if( m_pcPelFormat->colorSpace == PlaYUVerPixel::COLOR_YUV )
+ {
+ if( channel >= 10 && channel < 13 )
+ {
+ realChannel = channel - 10;
+ }
+ }
+ else if( m_pcPelFormat->colorSpace == PlaYUVerPixel::COLOR_RGB || m_pcPelFormat->colorSpace == PlaYUVerPixel::COLOR_RGBA )
+ {
+ if( channel == PlaYUVerFrame::HIST_LUMA )
+ {
+ realChannel = m_uiHistoChannels - 1;
+ }
+ if( channel >= 20 && channel < 24 )
+ {
+ realChannel = channel - 20;
+ }
+ }
+ return realChannel;
+ }
+
~PlaYUVerFramePrivate()
{
while( m_bHistogramRunning )
@@ -685,7 +736,7 @@ UChar* PlaYUVerFrame::getRGBBuffer()
return d->m_pcARGB32;
}
-PlaYUVerPixel PlaYUVerFrame::getPixelValue( Int xPos, Int yPos )
+PlaYUVerPixel PlaYUVerFrame::getPixel( Int xPos, Int yPos )
{
PlaYUVerPixel PixelValue( d->m_pcPelFormat->colorSpace );
for( UInt ch = 0; ch < d->m_pcPelFormat->numberChannels; ch++ )
@@ -697,7 +748,7 @@ PlaYUVerPixel PlaYUVerFrame::getPixelValue( Int xPos, Int yPos )
return PixelValue;
}
-PlaYUVerPixel PlaYUVerFrame::getPixelValue( Int xPos, Int yPos, PlaYUVerPixel::ColorSpace eColorSpace )
+PlaYUVerPixel PlaYUVerFrame::getPixel( Int xPos, Int yPos, PlaYUVerPixel::ColorSpace eColorSpace )
{
PlaYUVerPixel PixelValue( d->m_pcPelFormat->colorSpace );
for( UInt ch = 0; ch < d->m_pcPelFormat->numberChannels; ch++ )
@@ -710,7 +761,7 @@ PlaYUVerPixel PlaYUVerFrame::getPixelValue( Int xPos, Int yPos, PlaYUVerPixel::C
return PixelValue;
}
-Void PlaYUVerFrame::setPixelValue( Int xPos, Int yPos, PlaYUVerPixel pixel )
+Void PlaYUVerFrame::setPixel( Int xPos, Int yPos, PlaYUVerPixel pixel )
{
for( UInt ch = 0; ch < d->m_pcPelFormat->numberChannels; ch++ )
{
@@ -982,207 +1033,152 @@ Void PlaYUVerFrame::calcHistogram()
xMemSet( UInt, d->m_uiHistoSegments * d->m_uiHistoChannels, d->m_puiHistogram );
- UInt i, j;
UInt numberChannels = d->m_pcPelFormat->numberChannels;
- Int colorSpace = d->m_pcPelFormat->colorSpace;
- if( colorSpace == PlaYUVerPixel::COLOR_YUV )
+ for( UInt ch = 0; ch < numberChannels; ch++ )
{
- const Pel* data[3];
- data[LUMA] = d->m_pppcInputPel[LUMA][0];
- data[CHROMA_U] = d->m_pppcInputPel[CHROMA_U][0];
- data[CHROMA_V] = d->m_pppcInputPel[CHROMA_V][0];
- for( i = 0; i < d->m_uiHeight * d->m_uiWidth; i++ )
+ UInt size = CHROMASHIFT( d->m_uiWidth, ch > 0 ? d->m_pcPelFormat->log2ChromaWidth : 0 ) *
+ CHROMASHIFT( d->m_uiHeight, ch > 0 ? d->m_pcPelFormat->log2ChromaHeight : 0 );
+
+ Pel* chPel = &( d->m_pppcInputPel[ch][0][0] );
+ for( UInt i = 0; i < size; i++ )
{
- d->m_puiHistogram[*( data[LUMA] ) + LUMA * d->m_uiHistoSegments]++;
- data[LUMA] += 1;
- }
- for( i = 0; ( i < getChromaLength() ); i++ )
- {
- for( j = 1; j < numberChannels; j++ )
- {
- d->m_puiHistogram[*( data[j] ) + j * d->m_uiHistoSegments]++;
- data[j] += 1;
- }
+ d->m_puiHistogram[*chPel + ch * d->m_uiHistoSegments]++;
+ chPel++;
}
}
- else
- {
- const Pel* data[3];
- Pel luma;
- data[COLOR_R] = d->m_pppcInputPel[COLOR_R][0];
- data[COLOR_G] = d->m_pppcInputPel[COLOR_G][0];
- data[COLOR_B] = d->m_pppcInputPel[COLOR_B][0];
- for( i = 0; ( i < d->m_uiHeight * d->m_uiWidth ); i++ )
- {
- for( j = 0; j < numberChannels; j++ )
+ if( d->m_pcPelFormat->colorSpace == PlaYUVerPixel::COLOR_RGB ||
+ d->m_pcPelFormat->colorSpace == PlaYUVerPixel::COLOR_RGBA )
+ {
+ for( UInt y = 0; y < d->m_uiHeight; y++ )
+ for( UInt x = 0; x < d->m_uiWidth; x++ )
{
- d->m_puiHistogram[*( data[j] ) + j * d->m_uiHistoSegments]++;
+ Pel luma = getPixel( x, y ).ConvertPixel( PlaYUVerPixel::COLOR_YUV ).Y();
+ d->m_puiHistogram[luma + ( d->m_uiHistoChannels - 1 ) * d->m_uiHistoSegments]++;
}
- if( ( colorSpace == PlaYUVerPixel::COLOR_RGB || colorSpace == PlaYUVerPixel::COLOR_RGBA ) )
- {
- PlaYUVerPixel currPixel( colorSpace, *( data[COLOR_R] ), *( data[COLOR_G] ), *( data[COLOR_B] ) );
- luma = currPixel.ConvertPixel( PlaYUVerPixel::COLOR_YUV ).Y();
- d->m_puiHistogram[luma + j * d->m_uiHistoSegments]++;
- }
- for( j = 0; j < numberChannels; j++ )
- data[j] += 1;
- }
}
d->m_bHasHistogram = true;
d->m_bHistogramRunning = false;
}
-Int PlaYUVerFrame::getHistogramSegment()
+Int PlaYUVerFrame::getNumHistogramSegment()
{
return d->m_uiHistoSegments;
}
-Int getRealHistoChannel( Int colorSpace, Int channel )
+UInt PlaYUVerFrame::getMinimumPelValue( Int channel )
{
- Int histoChannel;
-
- switch( colorSpace )
- {
- case PlaYUVerPixel::COLOR_GRAY:
- if( channel != LUMA )
- {
- return -1;
- }
- histoChannel = 0;
- break;
- case PlaYUVerPixel::COLOR_RGB:
- if( channel != COLOR_R && channel != COLOR_G && channel != COLOR_B && channel != LUMA )
- {
- return -1;
- }
- else
- {
- // if( channel == LUMA )
- // {
- // histoChannel = 3;
- // }
- // else
- {
- histoChannel = channel;
- }
- }
- break;
- case PlaYUVerPixel::COLOR_RGBA:
- if( channel != COLOR_R && channel != COLOR_G && channel != COLOR_B && channel != COLOR_A && channel != LUMA )
- {
- return -1;
- }
- else
- {
- if( channel == LUMA )
- {
- histoChannel = 4;
- }
- else
- {
- histoChannel = channel;
- }
- }
- break;
- case PlaYUVerPixel::COLOR_YUV:
- if( channel != LUMA && channel != CHROMA_U && channel != CHROMA_V )
- {
- return -1;
- }
- else
- {
- histoChannel = channel;
- }
- break;
- default:
- histoChannel = -1;
- }
- return histoChannel;
-}
-
-UInt PlaYUVerFrame::getMin( Int channel )
-{
- UInt value;
- Int histoChannel;
- Int indexStart;
-
if( !d->m_bHasHistogram )
- {
return 0;
+
+ channel = d->getRealHistogramChannel( channel );
+ if( channel < 0 )
+ return 0;
+
+ Int indexStart;
+ Int indexEnd;
+ if( channel == HIST_ALL_CHANNELS )
+ {
+ indexStart = 0;
+ indexEnd = d->m_uiHistoChannels * d->m_uiHistoSegments;
+ }
+ else
+ {
+ indexStart = channel * d->m_uiHistoSegments;
+ indexEnd = indexStart + d->m_uiHistoSegments;
}
- histoChannel = getRealHistoChannel( getColorSpace(), channel );
-
- if( histoChannel == -1 )
+ for( Int i = indexStart; i < indexEnd; i++ )
{
- return 0;
- }
-
- indexStart = histoChannel * d->m_uiHistoSegments;
-
- for( value = 0; value <= d->m_uiHistoSegments; value++ )
- {
- if( d->m_puiHistogram[indexStart + value] > 0 )
+ if( d->m_puiHistogram[i] > 0 )
{
- break;
+ return i - indexStart;
}
}
- return value;
+ return 0;
}
-UInt PlaYUVerFrame::getMax( Int channel )
+UInt PlaYUVerFrame::getMaximumPelValue( Int channel )
{
- Int value;
- Int histoChannel;
- Int indexStart;
-
if( !d->m_bHasHistogram )
- {
return 0;
+
+ channel = d->getRealHistogramChannel( channel );
+ if( channel < 0 )
+ return 0;
+
+ Int indexStart;
+ Int indexEnd;
+ if( channel == HIST_ALL_CHANNELS )
+ {
+ indexStart = d->m_uiHistoChannels * d->m_uiHistoSegments;
+ indexEnd = 0;
+ }
+ else
+ {
+ indexStart = ( channel + 1 ) * d->m_uiHistoSegments - 1;
+ indexEnd = indexStart - d->m_uiHistoSegments;
}
- histoChannel = getRealHistoChannel( getColorSpace(), channel );
-
- if( histoChannel == -1 )
+ for( Int i = indexStart; i > indexEnd; i-- )
{
- return 0;
- }
-
- indexStart = histoChannel * d->m_uiHistoSegments;
-
- for( value = d->m_uiHistoSegments - 1; value >= 0; value-- )
- {
- if( d->m_puiHistogram[indexStart + value] > 0 )
+ if( d->m_puiHistogram[i] > 0 )
{
- break;
+ return i - indexEnd + 1;
}
}
- return value;
+ return 0;
}
-UInt PlaYUVerFrame::getCount( Int channel, UInt start, UInt end )
+UInt PlaYUVerFrame::getMaximum( Int channel )
{
- UInt i;
- Int histoChannel;
- Int indexStart;
- UInt count = 0;
+ if( !d->m_bHasHistogram )
+ return 0;
+ channel = d->getRealHistogramChannel( channel );
+ if( channel < 0 )
+ return 0;
+
+ UInt maxValue = 0;
+ Int indexStart;
+ Int indexEnd;
+ if( channel == HIST_ALL_CHANNELS )
+ {
+ indexStart = 0;
+ indexEnd = d->m_uiHistoChannels * d->m_uiHistoSegments;
+ }
+ else
+ {
+ indexStart = channel * d->m_uiHistoSegments;
+ indexEnd = indexStart + d->m_uiHistoSegments;
+ }
+
+ for( Int x = indexStart; x < indexEnd; x++ )
+ {
+ if( d->m_puiHistogram[x] > maxValue )
+ {
+ maxValue = d->m_puiHistogram[x];
+ }
+ }
+ return maxValue;
+}
+
+UInt PlaYUVerFrame::getNumPixelsRange( Int channel, UInt start, UInt end )
+{
if( !d->m_bHasHistogram || start < 0 || end > d->m_uiHistoSegments - 1 || start > end )
{
- return 0.0;
+ return 0;
}
-
- histoChannel = getRealHistoChannel( getColorSpace(), channel );
-
- if( histoChannel == -1 )
+ channel = d->getRealHistogramChannel( channel );
+ if( channel < 0 )
{
return 0;
}
- indexStart = histoChannel * d->m_uiHistoSegments;
-
- for( i = start; i <= end; i++ )
+ UInt count = 0;
+ Int indexStart;
+ indexStart = channel * d->m_uiHistoSegments;
+ for( UInt i = start; i <= end; i++ )
{
count += d->m_puiHistogram[indexStart + i];
}
@@ -1191,31 +1187,25 @@ UInt PlaYUVerFrame::getCount( Int channel, UInt start, UInt end )
Double PlaYUVerFrame::getMean( Int channel, UInt start, UInt end )
{
- Int indexStart;
- Int histoChannel;
- Double mean = 0.0;
- Double count;
-
if( !d->m_bHasHistogram || start < 0 || end > d->m_uiHistoSegments - 1 || start > end )
{
return 0.0;
}
-
- histoChannel = getRealHistoChannel( getColorSpace(), channel );
-
- if( histoChannel == -1 )
+ channel = d->getRealHistogramChannel( channel );
+ if( channel < 0 )
{
return 0.0;
}
- indexStart = histoChannel * d->m_uiHistoSegments;
-
+ Double mean = 0.0;
+ Double count;
+ Int indexStart = channel * d->m_uiHistoSegments;
for( UInt i = start; i <= end; i++ )
{
mean += i * d->m_puiHistogram[indexStart + i];
}
- count = getCount( channel, start, end );
+ count = getNumPixelsRange( channel, start, end );
if( count > 0.0 )
{
@@ -1227,27 +1217,20 @@ Double PlaYUVerFrame::getMean( Int channel, UInt start, UInt end )
Int PlaYUVerFrame::getMedian( Int channel, UInt start, UInt end )
{
- Int histoChannel;
- Int indexStart;
- Double sum = 0.0;
- Double count;
-
if( !d->m_bHasHistogram || start < 0 || end > d->m_uiHistoSegments - 1 || start > end )
{
return 0;
}
- histoChannel = getRealHistoChannel( getColorSpace(), channel );
-
- if( histoChannel == -1 )
+ channel = d->getRealHistogramChannel( channel );
+ if( channel < 0 )
{
return 0;
}
- indexStart = histoChannel * d->m_uiHistoSegments;
-
- count = getCount( channel, start, end );
-
+ Double sum = 0.0;
+ Int indexStart = channel * d->m_uiHistoSegments;
+ Double count = getNumPixelsRange( channel, start, end );
for( UInt i = start; i <= end; i++ )
{
sum += d->m_puiHistogram[indexStart + i];
@@ -1260,28 +1243,21 @@ Int PlaYUVerFrame::getMedian( Int channel, UInt start, UInt end )
Double PlaYUVerFrame::getStdDev( Int channel, UInt start, UInt end )
{
- Int histoChannel;
- Int indexStart;
- Double dev = 0.0;
- Double count;
- Double mean;
-
if( !d->m_bHasHistogram || start < 0 || end > d->m_uiHistoSegments - 1 || start > end )
{
return 0.0;
}
- histoChannel = getRealHistoChannel( getColorSpace(), channel );
-
- if( histoChannel == -1 )
+ channel = d->getRealHistogramChannel( channel );
+ if( channel < 0 )
{
return 0.0;
}
- indexStart = histoChannel * d->m_uiHistoSegments;
- mean = getMean( channel, start, end );
- count = getCount( channel, start, end );
-
+ Int indexStart = channel * d->m_uiHistoSegments;
+ Double mean = getMean( channel, start, end );
+ Double count = getNumPixelsRange( channel, start, end );
+ Double dev = 0.0;
if( count == 0.0 )
count = 1.0;
@@ -1306,55 +1282,17 @@ Double PlaYUVerFrame::getStdDev( Int channel, UInt start, UInt end )
Double PlaYUVerFrame::getHistogramValue( Int channel, UInt bin )
{
- Double value;
- Int histoChannel;
- Int indexStart;
-
if( !d->m_bHasHistogram || bin < 0 || bin > d->m_uiHistoSegments - 1 )
return 0.0;
- histoChannel = getRealHistoChannel( getColorSpace(), channel );
-
- if( histoChannel == -1 )
+ channel = d->getRealHistogramChannel( channel );
+ if( channel < 0 )
{
- return 0.0;
+ return 0;
}
- indexStart = histoChannel * d->m_uiHistoSegments;
-
- value = d->m_puiHistogram[indexStart + bin];
-
- return value;
-}
-
-Double PlaYUVerFrame::getMaximum( Int channel )
-{
- Double max = 0.0;
-
- Int histoChannel;
- Int indexStart;
-
- if( !d->m_bHasHistogram )
- return 0.0;
-
- histoChannel = getRealHistoChannel( getColorSpace(), channel );
-
- if( histoChannel == -1 )
- {
- return 0.0;
- }
-
- indexStart = histoChannel * d->m_uiHistoSegments;
-
- for( UInt x = 0; x < d->m_uiHistoSegments; x++ )
- {
- if( d->m_puiHistogram[indexStart + x] > max )
- {
- max = d->m_puiHistogram[indexStart + x];
- }
- }
-
- return max;
+ Int indexStart = channel * d->m_uiHistoSegments;
+ return d->m_puiHistogram[indexStart + bin];
}
/*
diff --git a/lib/PlaYUVerFrame.h b/lib/PlaYUVerFrame.h
index 0829dc1..2559577 100644
--- a/lib/PlaYUVerFrame.h
+++ b/lib/PlaYUVerFrame.h
@@ -117,7 +117,7 @@ class PlaYUVerFrame
{
public:
/** ColorSpace Enum
- * List of supported pixel formats - do not change order
+ * List of supported pixel formats
*/
enum PixelFormats
{
@@ -288,9 +288,9 @@ public:
UChar* getRGBBuffer() const;
UChar* getRGBBuffer();
- PlaYUVerPixel getPixelValue( Int xPos, Int yPos );
- PlaYUVerPixel getPixelValue( Int xPos, Int yPos, PlaYUVerPixel::ColorSpace eColorSpace );
- Void setPixelValue( Int xPos, Int yPos, PlaYUVerPixel pixel );
+ PlaYUVerPixel getPixel( Int xPos, Int yPos );
+ PlaYUVerPixel getPixel( Int xPos, Int yPos, PlaYUVerPixel::ColorSpace eColorSpace );
+ Void setPixel( Int xPos, Int yPos, PlaYUVerPixel pixel );
Void copyFrom( const PlaYUVerFrame& );
Void copyFrom( const PlaYUVerFrame* );
@@ -306,18 +306,35 @@ public:
/**
* Histogram
*/
+
+ enum HistogramChannels
+ {
+ HIST_CHAN_ONE = 0,
+ HIST_CHAN_TWO,
+ HIST_CHAN_THREE,
+ HIST_CHAN_FOUR,
+ HIST_LUMA = 10,
+ HIST_CHROMA_U,
+ HIST_CHROMA_V,
+ HIST_COLOR_R = 20,
+ HIST_COLOR_G,
+ HIST_COLOR_B,
+ HIST_COLOR_A,
+ HIST_ALL_CHANNELS = 254,
+ HISTOGRAM_MAX = 255,
+ };
Void calcHistogram();
- UInt getMin( Int channel );
- UInt getMax( Int channel );
+ UInt getMinimumPelValue( Int channel );
+ UInt getMaximumPelValue( Int channel );
- UInt getCount( Int channel, UInt start, UInt end );
+ UInt getMaximum( Int channel );
+ UInt getNumPixelsRange( Int channel, UInt start, UInt end );
Double getMean( Int channel, UInt start, UInt end );
Int getMedian( Int channel, UInt start, UInt end );
Double getStdDev( Int channel, UInt start, UInt end );
Double getHistogramValue( Int channel, UInt bin );
- Double getMaximum( Int channel );
- Int getHistogramSegment();
+ Int getNumHistogramSegment();
/**
* Interface with OpenCV lib
diff --git a/lib/PlaYUVerStream.cpp b/lib/PlaYUVerStream.cpp
index dbaa07d..e84deee 100644
--- a/lib/PlaYUVerStream.cpp
+++ b/lib/PlaYUVerStream.cpp
@@ -40,6 +40,59 @@
#include
+std::vector PlaYUVerStream::supportedReadFormats()
+{
+ INI_REGIST_PLAYUVER_SUPPORTED_FMT;
+ APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerRaw, Read );
+ APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerPortableMap, Read );
+//#ifdef USE_OPENCV
+// APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerOpenCV, Read );
+//#endif
+#ifdef USE_FFMPEG
+ APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerLibav, Read );
+#endif
+ END_REGIST_PLAYUVER_SUPPORTED_FMT;
+}
+
+std::vector PlaYUVerStream::supportedWriteFormats()
+{
+ INI_REGIST_PLAYUVER_SUPPORTED_FMT;
+ APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerRaw, Write );
+ APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerPortableMap, Write );
+#ifdef USE_FFMPEG
+ APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerLibav, Write );
+#endif
+#ifdef USE_OPENCV
+ APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerOpenCV, Write );
+#endif
+ END_REGIST_PLAYUVER_SUPPORTED_FMT;
+}
+
+std::vector PlaYUVerStream::stdResolutionSizes()
+{
+#define REGIST_PLAYUVER_STANDARD_RESOLUTION( name, width, height ) \
+ stdResElement.shortName = name; \
+ stdResElement.uiWidth = width; \
+ stdResElement.uiHeight = height; \
+ stdResList.push_back( stdResElement );
+
+ std::vector stdResList;
+ PlaYUVerStdResolution stdResElement;
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "CIF", 352, 288 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "VGA", 640, 480 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "WVGA", 832, 480 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "XVGA", 1024, 768 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "HD", 1280, 720 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "SXGA-", 1280, 900 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "SXGA", 1280, 1024 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "WSXGA", 1440, 900 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "FullHD", 1920, 1080 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "WQXGA", 2560, 1600 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "UltraHD", 3840, 2160 );
+ REGIST_PLAYUVER_STANDARD_RESOLUTION( "8K", 8192, 4608 );
+ return stdResList;
+}
+
class PlaYUVerStreamBufferPrivate
{
private:
@@ -112,34 +165,6 @@ struct PlaYUVerStreamPrivate
}
};
-std::vector PlaYUVerStream::supportedReadFormats()
-{
- INI_REGIST_PLAYUVER_SUPPORTED_FMT;
- APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerRaw, Read );
- APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerPortableMap, Read );
-#ifdef USE_FFMPEG
- APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerLibav, Read );
-#endif
-#ifdef USE_OPENCV
- APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerOpenCV, Read );
-#endif
- END_REGIST_PLAYUVER_SUPPORTED_FMT;
-}
-
-std::vector PlaYUVerStream::supportedWriteFormats()
-{
- INI_REGIST_PLAYUVER_SUPPORTED_FMT;
- APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerRaw, Write );
- APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerPortableMap, Write );
-#ifdef USE_FFMPEG
- APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerLibav, Write );
-#endif
-#ifdef USE_OPENCV
- APPEND_PLAYUVER_SUPPORTED_FMT( StreamHandlerOpenCV, Write );
-#endif
- END_REGIST_PLAYUVER_SUPPORTED_FMT;
-}
-
std::vector PlaYUVerSupportedFormat::getExts()
{
std::vector arrayExt;
@@ -154,31 +179,6 @@ std::vector PlaYUVerSupportedFormat::getExts()
return arrayExt;
}
-std::vector PlaYUVerStream::stdResolutionSizes()
-{
-#define REGIST_PLAYUVER_STANDARD_RESOLUTION( name, width, height ) \
- stdResElement.shortName = name; \
- stdResElement.uiWidth = width; \
- stdResElement.uiHeight = height; \
- stdResList.push_back( stdResElement );
-
- std::vector stdResList;
- PlaYUVerStdResolution stdResElement;
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "CIF", 352, 288 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "VGA", 640, 480 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "WVGA", 832, 480 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "XVGA", 1024, 768 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "HD", 1280, 720 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "SXGA-", 1280, 900 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "SXGA", 1280, 1024 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "WSXGA", 1440, 900 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "FullHD", 1920, 1080 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "WQXGA", 2560, 1600 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "UltraHD", 3840, 2160 );
- REGIST_PLAYUVER_STANDARD_RESOLUTION( "8K", 8192, 4608 );
- return stdResList;
-}
-
CreateStreamHandlerFn PlaYUVerStream::findStreamHandler( String strFilename, bool bRead )
{
String currExt = strFilename.substr( strFilename.find_last_of( "." ) + 1 );
@@ -208,7 +208,7 @@ CreateStreamHandlerFn PlaYUVerStream::findStreamHandler( String strFilename, boo
}
}
}
- return &StreamHandlerRaw::Create;
+ return &StreamHandlerLibav::Create;
}
PlaYUVerStream::PlaYUVerStream()
@@ -298,7 +298,7 @@ Bool PlaYUVerStream::open( String filename, UInt width, UInt height, Int input_f
if( d->handler->m_uiWidth <= 0 || d->handler->m_uiHeight <= 0 || d->handler->m_iPixelFormat < 0 )
{
close();
- throw PlaYUVerFailure( "PlaYUVerStream", "Incorrect configuration: width, height or pixel format" );
+ //throw PlaYUVerFailure( "PlaYUVerStream", "Incorrect configuration: width, height or pixel format" );
return d->isInit;
}
diff --git a/lib/StreamHandlerLibav.cpp b/lib/StreamHandlerLibav.cpp
index 4a262d5..2f94a35 100644
--- a/lib/StreamHandlerLibav.cpp
+++ b/lib/StreamHandlerLibav.cpp
@@ -43,7 +43,7 @@ std::vector StreamHandlerLibav::supportedReadFormats()
REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerLibav::Create, "Joint Photographic Experts Group", "jpg,jpeg" );
REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerLibav::Create, "Windows Bitmap", "bmp" );
REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerLibav::Create, "Tagged Image File Format", "tiff" );
- REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerLibav::Create, " Graphics Interchange Format", "gif" );
+ REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerLibav::Create, "Graphics Interchange Format", "gif" );
REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerLibav::Create, "Audio video interleaved", "avi" );
REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerLibav::Create, "Windows media video", "wmv" );
REGIST_PLAYUVER_SUPPORTED_FMT( &StreamHandlerLibav::Create, "MPEG-4", "mp4" );
@@ -209,8 +209,6 @@ Bool StreamHandlerLibav::openHandler( String strFilename, Bool bInput )
}
if( m_iPixelFormat == PlaYUVerFrame::NO_FMT )
{
- Int newPelFmt = PlaYUVerFrame::findPixelFormat( "YUV444p" );
- m_iPixelFormat = newPelFmt;
m_bNative = false;
//throw PlaYUVerFailure( "StreamHandlerLibav", "Cannot open file using FFmpeg libs - unsupported pixel format" );
//return false;
@@ -252,6 +250,30 @@ Bool StreamHandlerLibav::openHandler( String strFilename, Bool bInput )
if( !m_bNative )
{
+ Int newPelFmt = -1;
+ const AVPixFmtDescriptor* ffPelDesc = av_pix_fmt_desc_get( AVPixelFormat( m_ffPixFmt ) );
+ if( ffPelDesc->flags & AV_PIX_FMT_FLAG_PAL )
+ {
+ newPelFmt = PlaYUVerFrame::RGB24;
+ }
+ else if( ffPelDesc->flags & AV_PIX_FMT_FLAG_ALPHA )
+ {
+ newPelFmt = PlaYUVerFrame::RGBA;
+ }
+ else if( ffPelDesc->flags & AV_PIX_FMT_FLAG_RGB )
+ {
+ newPelFmt = PlaYUVerFrame::RGB24;
+ }
+ else if( ffPelDesc->nb_components == 1 )
+ {
+ newPelFmt = PlaYUVerFrame::GRAY;
+ }
+ else
+ {
+ newPelFmt = PlaYUVerFrame::YUV444p;
+ }
+ m_iPixelFormat = newPelFmt;
+
AVPixelFormat newAvFmt = AVPixelFormat( g_PlaYUVerPixFmtDescriptorsMap.at( m_iPixelFormat ).ffmpegPelFormat );
/* create scaling context */
@@ -267,7 +289,7 @@ Bool StreamHandlerLibav::openHandler( String strFilename, Bool bInput )
}
if( av_image_alloc( m_cConvertedFrame->data, m_cConvertedFrame->linesize,
- m_uiWidth, m_uiHeight, newAvFmt, 1 ) < 0 )
+ m_uiWidth, m_uiHeight, newAvFmt, 16 ) < 0 )
{
closeHandler();
return false;
diff --git a/modules/FrameMask.cpp b/modules/FrameMask.cpp
index e205817..5d5e3b2 100644
--- a/modules/FrameMask.cpp
+++ b/modules/FrameMask.cpp
@@ -97,11 +97,11 @@ PlaYUVerFrame* FrameMask::process( std::vector apcFrameList )
{
for( UInt x = 0; x < m_pcFrameProcessed->getWidth(); x++ )
{
- pixelImg = InputFrame->getPixelValue( x, y );
- pixelMask = MaskFrame->getPixelValue( x, y );
+ pixelImg = InputFrame->getPixel( x, y );
+ pixelMask = MaskFrame->getPixel( x, y );
pixelOut = pixelImg * ( 10 - m_iWeight ) + pixelMask * m_iWeight;
pixelOut = pixelOut * 0.1;
- m_pcFrameProcessed->setPixelValue( x, y, pixelOut );
+ m_pcFrameProcessed->setPixel( x, y, pixelOut );
}
}
return m_pcFrameProcessed;
diff --git a/modules/FrameRotate.cpp b/modules/FrameRotate.cpp
index 67ad477..b9be8f4 100644
--- a/modules/FrameRotate.cpp
+++ b/modules/FrameRotate.cpp
@@ -102,8 +102,8 @@ PlaYUVerFrame* FrameRotate::process( std::vector apcFrameList )
inY = x;
break;
}
- pixel = InputFrame->getPixelValue( inX, inY );
- m_pcFrameProcessed->setPixelValue( x, y, pixel );
+ pixel = InputFrame->getPixel( inX, inY );
+ m_pcFrameProcessed->setPixel( x, y, pixel );
}
}
return m_pcFrameProcessed;