最近有用到qml写安卓程序,相对视频做人脸识别需要获取NV21格式视频帧,最开始是从VideoOutput上去截取的,然而格式居然是BGR32的,各种想办法转NV21都失败了,崩溃了。最后通过上网查阅才知道安卓摄像头原始就是NV21格式,不知道VideoOutput搞了什么小动作,居然把别人整变种。话不多说整理下代码权当记录下。
#ifndef CameraFilter_H
#define CameraFilter_H
#include <QObject>
#include <QVideoProbe>
#include <QCamera>
class CameraFilter : public QObject
{
Q_OBJECT
Q_PROPERTY(QObject* qmlCamera READ getQmlCamera WRITE setQmlCamera)
public:
explicit CameraFilter(QObject *parent = nullptr);
QObject *getQmlCamera() const;
void setQmlCamera(QObject *qmlCamera);
private slots:
void _onProcssFram(const QVideoFrame &);
private:
QObject *_qmlCamera = nullptr;
QCamera *_camera = nullptr;
QVideoProbe _probe;
};
#endif // CameraFilter_H
摄像头过滤实现
#include "CameraFilter.h"
#incl