[Interest] QAbstractVideoSurface as viewfinder on iOS
Igor Mironchik
igor.mironchik at gmail.com
Tue Sep 29 13:21:54 CEST 2015
Hi guys,
I decided to implement my custom video surface and use it as view finder
with QCamera.
I wrote:
ViewFinderSurface::ViewFinderSurface( const QCamera & camera, QObject *
parent )
: QAbstractVideoSurface( parent )
, m_camera( camera )
{
}
bool
ViewFinderSurface::present( const QVideoFrame & frame )
{
if( !isActive() )
return false;
qDebug() << "FRAME" << frame.bits() << frame.width() <<
frame.height() << frame.bytesPerLine();
QImage image( frame.bits(), frame.width(), frame.height(),
frame.bytesPerLine(),
QVideoFrame::imageFormatFromPixelFormat( frame.pixelFormat() ) );
qDebug() << "IMAGE is NULL" << image.isNull();
QCameraInfo cameraInfo( m_camera );
const QScreen * screen = QGuiApplication::primaryScreen();
const int screenAngle = screen->angleBetween(
screen->nativeOrientation(),
screen->orientation() );
int rotation = 0;
if( cameraInfo.position() == QCamera::BackFace )
rotation = ( cameraInfo.orientation() - screenAngle ) % 360;
else
rotation = ( 360 - cameraInfo.orientation() + screenAngle ) % 360;
image = image.transformed( QTransform().rotate( rotation ) );
emit newFrame( QPixmap::fromImage( image ) );
return true;
}
QList< QVideoFrame::PixelFormat >
ViewFinderSurface::supportedPixelFormats(
QAbstractVideoBuffer::HandleType type ) const
{
Q_UNUSED( type )
return QList< QVideoFrame::PixelFormat > ()
<< QVideoFrame::Format_ARGB32
<< QVideoFrame::Format_ARGB32_Premultiplied
<< QVideoFrame::Format_RGB32
<< QVideoFrame::Format_RGB24
<< QVideoFrame::Format_RGB565
<< QVideoFrame::Format_RGB555
<< QVideoFrame::Format_ARGB8565_Premultiplied
<< QVideoFrame::Format_BGRA32
<< QVideoFrame::Format_BGRA32_Premultiplied
<< QVideoFrame::Format_BGR32
<< QVideoFrame::Format_BGR24
<< QVideoFrame::Format_BGR565
<< QVideoFrame::Format_BGR555
<< QVideoFrame::Format_BGRA5658_Premultiplied
<< QVideoFrame::Format_AYUV444
<< QVideoFrame::Format_AYUV444_Premultiplied
<< QVideoFrame::Format_YUV444
<< QVideoFrame::Format_YUV420P
<< QVideoFrame::Format_YV12
<< QVideoFrame::Format_UYVY
<< QVideoFrame::Format_YUYV
<< QVideoFrame::Format_NV12
<< QVideoFrame::Format_NV21
<< QVideoFrame::Format_IMC1
<< QVideoFrame::Format_IMC2
<< QVideoFrame::Format_IMC3
<< QVideoFrame::Format_IMC4
<< QVideoFrame::Format_Y8
<< QVideoFrame::Format_Y16
<< QVideoFrame::Format_Jpeg
<< QVideoFrame::Format_CameraRaw
<< QVideoFrame::Format_AdobeDng;
}
But I always receive empty QVideoFrame... What's wrong?
More information about the Interest
mailing list