Regarding the saving the image in Android using QVideoProbe
- 
Hi, I want to get the frames in video mode, i have used QML Camera, and QVideoProbe Class to get the frames. I am getting the frames but all the images are blank, i saw the size it is not 0 kb size, it was of 51.14 kb. And retreived the image and displayed in QLabel. 
 It is blank.Here is the image https://postimg.org/image/ircprtnd7/ Guidance is required. Thanks, 
- 
Hi, I want to get the frames in video mode, i have used QML Camera, and QVideoProbe Class to get the frames. I am getting the frames but all the images are blank, i saw the size it is not 0 kb size, it was of 51.14 kb. And retreived the image and displayed in QLabel. 
 It is blank.Here is the image https://postimg.org/image/ircprtnd7/ Guidance is required. Thanks, @Pradeep-Kumar said in Regarding the saving the image in Android using QVideoProbe: Guidance is required. code is required ;) 
- 
Hi the code snippet void className::funcName(){ cam_ = new QQuickWidget(); context_ = cam_->engine()->rootContext(); context_->setContextProperty("MyWidget", this); cam_->setSource(QUrl("qrc:///declarative-camera.qml")); m_qmlCameraQObject = cam_->rootObject()->children().at(0)->findChild<QObject*>("CameraObject"); QVariant mediaObject = m_qmlCameraQObject->property("mediaObject"); if(mediaObject.isValid()){ qDebug()<<"----Variant object is valid----- \n"; m_QCameraObj = mediaObject.value<QCamera*>(); if(m_QCameraObj && m_QCameraObj->availability() == QMultimedia::Available){ m_videoProbe = new QVideoProbe(this); if(m_videoProbe->setSource(m_QCameraObj)){ connect(m_videoProbe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(manageVideoFrame(QVideoFrame))); } } } }And in the slot: void ClassName::manageVideoFrame(QVideoFrame frame) { QVideoFrame cloneFrame(frame); cloneFrame.map(QAbstractVideoBuffer::ReadOnly); QImage::Format imageFormat; if((imageFormat = QVideoFrame::imageFormatFromPixelFormat(cloneFrame.pixelFormat())) == QImage::Format_Invalid) { QImage image(cloneFrame.size(), QImage::Format_ARGB32); if (!image.isNull()) { QDateTime dateTime = dateTime.currentDateTime(); QString dateTimeString = dateTime.toString("yyyyMMddhhmmss"); QString appendString = "image_"; appendString.append(dateTimeString); QString str = "/storage/sdcard1/DCIM/"; str.append(appendString+".jpg"); } } }
- 
Hi the code snippet void className::funcName(){ cam_ = new QQuickWidget(); context_ = cam_->engine()->rootContext(); context_->setContextProperty("MyWidget", this); cam_->setSource(QUrl("qrc:///declarative-camera.qml")); m_qmlCameraQObject = cam_->rootObject()->children().at(0)->findChild<QObject*>("CameraObject"); QVariant mediaObject = m_qmlCameraQObject->property("mediaObject"); if(mediaObject.isValid()){ qDebug()<<"----Variant object is valid----- \n"; m_QCameraObj = mediaObject.value<QCamera*>(); if(m_QCameraObj && m_QCameraObj->availability() == QMultimedia::Available){ m_videoProbe = new QVideoProbe(this); if(m_videoProbe->setSource(m_QCameraObj)){ connect(m_videoProbe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(manageVideoFrame(QVideoFrame))); } } } }And in the slot: void ClassName::manageVideoFrame(QVideoFrame frame) { QVideoFrame cloneFrame(frame); cloneFrame.map(QAbstractVideoBuffer::ReadOnly); QImage::Format imageFormat; if((imageFormat = QVideoFrame::imageFormatFromPixelFormat(cloneFrame.pixelFormat())) == QImage::Format_Invalid) { QImage image(cloneFrame.size(), QImage::Format_ARGB32); if (!image.isNull()) { QDateTime dateTime = dateTime.currentDateTime(); QString dateTimeString = dateTime.toString("yyyyMMddhhmmss"); QString appendString = "image_"; appendString.append(dateTimeString); QString str = "/storage/sdcard1/DCIM/"; str.append(appendString+".jpg"); } } }@Pradeep-Kumar said in Regarding the saving the image in Android using QVideoProbe: if((imageFormat = QVideoFrame::imageFormatFromPixelFormat(cloneFrame.pixelFormat())) == QImage::Format_Invalid) Shouldn't it be != instead of == here: if((imageFormat = QVideoFrame::imageFormatFromPixelFormat(cloneFrame.pixelFormat())) == QImage::Format_Invalid)You create a image: QImage image(cloneFrame.size(), QImage::Format_ARGB32);but you do not write any data into that image and I cannot see where you actualy save the image. 
- 
Hi, Sorry about that , i have used save method. if (!image.isNull()) { QDateTime dateTime = dateTime.currentDateTime(); QString dateTimeString = dateTime.toString("yyyyMMddhhmmss"); QString appendString = "image_"; appendString.append(dateTimeString); QString str = "/storage/sdcard1/DCIM/"; str.append(appendString+".jpg"); if (image.save(str, "JPG")) { qDebug()<<"Image saved successfully \n"; } else { qDebug()<<"There is problem in image saving \n"; } }Image is inserted successfully. Thanks, 
- 
Hi, Is the code not valid or am i missing something?. Thanks, 
- 
Hi, Is the code not valid or am i missing something?. Thanks, @Pradeep-Kumar As I said before I cannot see where you're writing anything into image. 
 You only create one:QImage image(cloneFrame.size(), QImage::Format_ARGB32);but never write any pixel data into it. 
- 
Can u clarify and correct the previous code snippet . 
 Correct me if i am wrong , i didnt assign the frames captured to QImage, is that the point?.Thanks, 
- 
Can u clarify and correct the previous code snippet . 
 Correct me if i am wrong , i didnt assign the frames captured to QImage, is that the point?.Thanks, @Pradeep-Kumar Yes, you do not write anything into the image. 
 QVideoFrame documentation says:
 "The pixel contents of a video frame can be mapped to memory using the map() function. While mapped, the video data can accessed using the bits() function, which returns a pointer to a buffer."
 So, first you need to map the frame data into memory calling http://doc.qt.io/qt-5/qvideoframe.html#map, then you can access the frame data using http://doc.qt.io/qt-5/qvideoframe.html#bits and write the data into the image via http://doc.qt.io/qt-5/qimage.html#loadFromData.
 
