Внутри моего приложения qt я объявил @class AVPlayerLayer
в моем заголовочном файле (frame.h
), который в исходном файле (frame.mm
) включает <AVFoundation/AVFoundation.h>
.
Когда я пытаюсь скомпилировать его с помощью qt creator, я получаю следующую ошибку:
Expected unqualified-id for @class AVPlayerLayer
unknown type name 'AVPlayerLayer'
Я пытаюсь переслать объявление класса, так как я хочу, чтобы мой заголовочный файл знал, что он ожидает AVPlayerLayer
, который включен в мой .mm
файл с AVFoundation
, причина, по которой я это делаю, заключается в том, что заголовочные файлы не может содержать Objective-C
код.
frame.h:
#include <QObject>
#include <QQuickItem>
typedef struct __CVBuffer *CVBufferRef;
typedef CVBufferRef CVImageBufferRef;
typedef CVImageBufferRef CVOpenGLESTextureRef;
typedef CVOpenGLESTextureRef CVOGLTextureRef;
@class AVPlayerLayer;
//-----------------
class FrameRenderer : public QObject
{
Q_OBJECT
private:
CVOGLTextureRef renderLayerToTexture(AVPlayerLayer *layer);
public:
FrameRenderer(QAbstractVideoSurface *surface, QObject *parent = 0);
};
frame.mm
#include "frame.h"
#import <AVFoundation/AVFoundation.h>
FrameRenderer::FrameRenderer(QObject *parent)
: QObject(parent)
{
}
CVOGLTextureRef FrameRenderer::renderLayerToTexture(AVPlayerLayer *layer)
{
size_t dummyWidth = 0, dummyHeight = 0;
return createCacheTextureFromLayer(layer, dummyWidth, dummyHeight);
}