技术解决方案swf2video, ppt2video基本完成,但要与原来的视频播放接口保持一至,这样就不用处理大量的类似的逻辑问题,具体的有差异逻辑处理再作针对性处理,目前还在构想中。 以前工作中由于不同产品属于不同的开发小组,它们之间没有实现真正的技术上的代码共享,而是各自根据自己的情况来实现,开发的工作量也不小。事实里面的很多逻辑是一致的,只是具体的并实现方式有些差异,做成同一接口,不同实现。接口代码:
#ifndef IMPLAYBASE_H
#define IMPLAYBASE_H
#include "UIApi.h"
#include "UILib.h"
class ImPlayBase
{
public:
ImPlayBase (lpShareMemData data)
:handle(NULL)
,m_lpSMD(data){};
virtual ~ImPlayBase () { }
virtual int init() = 0;
virtual int open() = 0;
virtual int start() = 0;
virtual int pause() = 0;
virtual int resume() = 0;
virtual int stop() = 0;
virtual int close() = 0;
virtual int seek() = 0;
virtual int shotsnap() = 0;
virtual void setVolume() = 0;
virtual int getVolume() = 0;
lpShareMemData getData(){ return m_lpSMD; }
protected:
/* data */
void* handle;
lpShareMemData m_lpSMD;
};
#endif //ppt header:
class PPTMGR_EXPORT ImPPTPlayer : public ImPlayBase
{
public:
ImPPTPlayer(lpShareMemData data);
~ImPPTPlayer();
int init();
int open();
int start();
int pause();
int resume();
int stop();
int close();
int seek();
int shotsnap();
void setVolume();
int getVolume();
void setListItem(ImListTreeItem *item);
QString getVersion();
bool isInstallPPT();
signals:
protected slots:
private:
HRESULT createPPTEvents();
private:
_ApplicationPtr m_app;
PPTEventSink *m_sink; //Global variables
IConnectionPoint* m_connectPoint;
SlideShowWindowPtr m_sldeWindow;
int m_slideNum;
HWND m_pptHwnd;
lpShareMemData m_lpSMD;
ImListTreeItem *m_listItem;
};
// flash header:
class FLASHMGR_EXPORT ImFlashPlayer : public ImPlayBase
{
public:
ImFlashPlayer(lpShareMemData data);
~ImFlashPlayer();
int init();
int open();
int start();
int pause();
int resume();
int stop();
int close();
int seek();
int shotsnap();
void setVolume();
int getVolume();
void setListItem(ImListTreeItem *item);
signals:
protected slots:
private:
private:
ImListTreeItem *m_listItem;
};
// video header: class FLASHMGR_EXPORT ImVideoPlayer : public ImPlayBase { public: ImVideoPlayer(lpShareMemData data); ~ImVideoPlayer(); int init(); int open(); int start(); int pause(); int resume(); int stop(); int close(); int seek(); int shotsnap(); void setVolume(); int getVolume(); void setListItem(ImListTreeItem *item); signals: protected slots: private: private: ImListTreeItem *m_listItem; }; 目前由于还在处于构想之中,具体实现下一步再做。 参考:C++的多态与适配器模式 http://blog.csdn.net/fjb2080/archive/2010/04/15/5488948.aspx