现在, 对操控用Http协议控制的相机的封装类HttpCamera的结构进行一下整理, 同时, 整理一下CameraFactory类, 实现对根据相机的名字, 来生成相应的HttpCamera子类并返回给外部, 工厂只负责生产, 不负责对实例化的HttpCamera的子类的回收, 因此, 外部在获取实例化对象以后, 应该持有并负责其回收工作.
HttpCamera类的整理
首先, HttpCamera一定是一个抽象类, 开放的接口一定有: 打开相机, 关闭相机, 开始预览, 停止预览, 拍照, 自动对焦, 设置各种属性(常用的是ISO, 白平衡, zoom等) , 其次, 回调函数应该提供: 获得预览帧的回调, 获得拍照结果的回调, 镜头拉伸操作停止的回调(对于镜头可拉伸的相机), 相机错误的回调. 由不同型号的相机来继承实现实例化.
再有一点就是, 所有HttpCamera都应该持有相机的API入口URL, 这个信息应该保存在一个HttpConfigure类中. 下面是HttpCamera和回调类的声明:
#ifndef HTTPCAMERA_H
#define HTTPCAMERA_H
#include "httpconfigure.h"
/*Error define*/
#define Try_Open_An_Opening_Camera 0x2001
#define Try_Operate_On_A_Closed_Camera 0x2002
#define Try_Start_Preview_While_Previewing 0x2003
#define Try_Stop_Preview_While_Isnot_Previewing 0x2004
#define Try_Capture_While_Dealing_Capture 2005
namespace xfhttpcamera {
class HttpCameraCallback
{
public:
HttpCameraCallback() {}
virtual void newPreviewFrameGet(QByteArray image){
Q_UNUSED(image);
throw std::runtime_error("un-implement");
}
virtual void newCaptureGet(QByteArray image){
Q_UNUSED(image);
throw std::runtime_error("un-implement");
}
virtual void cameraError(QString error, int errorCode){
Q_UNUSED(error);
Q_UNUSED(errorCode);
throw std::runtime_error("un-implement");
}
virtual void cameraZoomStopped(){
throw std::runtime_error("un-implement");
}
};
class HttpCamera : public QObject
{
Q_OBJECT
public:
virtual void open();
virtual void close();
virtual void starPreview();
virtual void stopPreview();
virtual void capture();
virtual bool setIso(QString rate);
virtual void doAF();
virtual void cancelAF();
virtual void zoomInStart();
virtual void zoomInStop();
virtual void zoomInshort();
virtual void zoomOutStart();
virtual void zoomOutStop();
virtual void zoomOutShort();
virtual void setWhiteBalance(QString mode, bool enable, int colorTemperature);
void setCallback(HttpCameraCallback *callback);
protected:
explicit HttpCamera(HTTPConfigure *config, QObject *parent = 0);
HttpCamera(const HttpCamera &) Q_DECL_EQ_DELETE;
HttpCamera &operator =(HttpCamera xx) Q_DECL_EQ_DELETE;
HTTPConfigure *_config;
HttpCameraCallback *_callback;
};
}
#endif // HTTPCAMERA_H
CameraFactory的整理
将相机的型号传入, 用if去匹配, 生成对应的相机实例, 并返回HttpCamera的指针.