/*************************************************************************/ /* File : CKVideoManager.h */ /* Author : Leïla AIT KACI */ /* */ /* Virtools SDK */ /* Copyright (c) Virtools 2005, All Rights Reserved. */ /*************************************************************************/ #ifndef CKVIDEOMANAGER_H #define CKVIDEOMANAGER_H "$Id:$" #include "CKVideoPlugin.h" #define VIDEO_MANAGER_GUID CKGUID(0x708e5583,0x5fb76e88) #define CKPGUID_VIDEOCAPTURE CKGUID(0x2b6b0813,0x1a8060a) #define CKPGUID_AUDIOCAPTURE CKGUID(0x476d205c,0x1c7375e) #define CKPGUID_VIDEOINTYPE CKGUID(0x58e654b5,0x6a0b5336) #define CKPGUID_VIDEOOUTTYPE CKGUID(0x40904f0,0x39d50d96) #define CKPGUID_VIDEOSTATE CKGUID(0xb510214,0x16c12ee3) #define VIDEOVAR_SAVEOPTIONS "File Options/Videos" #define VIDEOVAR_SAVELIVEID "File Options/Videos Input IDs" #define VIDEOVAR_ENGINE "Video/Engine" #define VIDEOVAR_PRIORITY "Video/Priority" #define VIDEOVAR_FPS "Video/Rate Limit For Screen" #define VIDEOVAR_EXPORTGRAPH "Video/Export Decompression Graph" #define VIDEO_MAX_WAIT 4000 // Max wait time is 4s #define VIDEO_STEP_WAIT 100 // Step wait time is 100ms #define VIDEO_MAX_PATH 512 /******************************************************************* Name: CKVideoInputFormatDesc Summary: Describes a supported format for a video live source See also: CKVideoManager, CKVideo *********************************************************************/ typedef struct CKVideoInputFormatDesc { XString m_Format; // Readable name for the format (RGB32, YUY2... etc...) Vx2DVector m_Size; // Size of the input stream image Vx2DVector m_Frequency; // Minimum and Maximum possible FPS } CKVideoInputFormatDesc; /******************************************************************* Name: CK_VIDEO_MANAGERSAVEOPTION Summary: Possible saving options for a video from the video manager. See also: CKVideoManager ********************************************************************/ typedef enum CK_VIDEO_MANAGERSAVEOPTION { CK_VIDEOSAVE_IDBYNAME = 0x00000001, // Save Live IDs by Name CK_VIDEOSAVE_IDBYINDEX = 0x00000002 // Save Live IDs by Index } CK_VIDEO_MANAGERSAVEOPTION; /******************************************************************* Name: CKVideoManager Summary: Video Plugin Manager. Remarks: + The video manager is implemented by an external plugin. + The currently used instance of this class may be retrieved through the CKContext::GetVideoManager() method See also: CKContext::GetVideoManager,CKVideo *********************************************************************/ class CKVideoManager : public CKBaseManager, public CKVariableManager::Watcher { public : //////////////////////////////////////////////////////////////////////// // User Documented Methods //////////////////////////////////////////////////////////////////////// /************************************************* Summary: Get the video capabilities of the current video manager Return Value: video caps See also: CKVideoManager,CK_VIDEOMANAGER_CAPS *************************************************/ static CKGUID GetGUID() { return VIDEO_MANAGER_GUID; }; /************************************************* Summary: Create a new CKVideo. Return value: The requested info Remark: + This method is implemented for VSL Binding. See also: CKVideoManager, CKVideo *************************************************/ virtual CKVideo* CreateVideo(CKSTRING iName, CK_OBJECTCREATION_OPTIONS iOptions); /************************************************* Summary: Register a new video object Input Arguments: iVideo: video object to register Remark: Called at CKVideo creation See also: CKVideo::CKVideo *************************************************/ virtual CKERROR RegisterVideo(CKVideo* iVideo); /************************************************* Summary: Unregister a video object Input Arguments: iVideo: video object to register Remark: Called at CKVideo destruction See also: CKVideo::~CKVideo *************************************************/ virtual CKERROR UnregisterVideo(CKVideo* iVideo); /************************************************* Summary: Get the number of registered videos See also: CKVideo::CKVideo *************************************************/ virtual int GetVideoCount(); /************************************************* Summary: Get the number of registered videos Input Arguments: iIndex: Video to retrieve See also: CKVideo::CKVideo *************************************************/ virtual CKVideo* GetVideo(int iIndex); /************************************************* Summary: Register a new video implementation Plugin Input Arguments: iPlugin: plugin implementing the video See also: CKVideoPlugin *************************************************/ virtual CKERROR RegisterVideoPlugin(CKVideoPlugin* iPlugin); /************************************************* Summary: Unregister a video implementation plugin Input Arguments: iPlugin: plugin implementing the video See also: CKVideoPlugin *************************************************/ virtual CKERROR UnregisterVideoPlugin(CKVideoPlugin* iPlugin); /************************************************* Summary: Get a video plugin. Give 0 for best plugin. Return Value: A video plugin Remark: If several are available, returns the first one. See also: CKVideoPlugin *************************************************/ virtual CKVideoPlugin* GetVideoPlugin(int iIndex=0); /************************************************* Summary: Get a video plugin from its name Return Value: A video plugin Remark: If several are available, returns the first one. See also: CKVideoPlugin *************************************************/ virtual CKVideoPlugin* GetVideoPluginByName(XString& iName); /************************************************* Summary: Get a video plugin from its GUID Return Value: a video plugin See also: CKVideoPlugin *************************************************/ virtual CKVideoPlugin* GetVideoPluginByGuid(CKGUID iGuid); /************************************************* Summary: Get the currently selected video plugin Return Value: A video plugin See also: CKVideoPlugin *************************************************/ virtual CKVideoPlugin* GetActivePlugin(); /************************************************* Summary: Get the video global save options Return Value: saving options See also: CKVideoPlugin *************************************************/ virtual CK_VIDEO_SAVEOPTION GetSaveOptions(); /************************************************* Summary: Set the video global save options Return Value: saving options See also: CKVideoPlugin *************************************************/ virtual void SetSaveOptions(CK_VIDEO_SAVEOPTION iOptions); /************************************************* Summary: Get the current process rate limitation in the screen mode. Return Value: + Rate Limitation. A <=0 value means that no behavior rate limitation is set in screen mode. See also: CKVideoPlugin *************************************************/ virtual float GetFrameRateForScreenMode(); /************************************************* Summary: Set a process rate limitation in the screen mode. Input Arguments: iFPS: rate limitation. When this value is <=0, no limitation is set. See also: CKVideoPlugin *************************************************/ virtual void SetFrameRateForScreenMode(float iFPS); /************************************************* Summary: Unload all videos' sources and/or preview Input Arguments: iSource: Should we unload the sources iPreview: Should we unload the previews iForceSync: when this parameter is true, we force a synchronous unloading whatever synchronous parameter is set on the video. See also: CKVideoPlugin *************************************************/ virtual void UnloadAllVideos(CKBOOL iSource, CKBOOL iPreview, CKBOOL iForceSync=FALSE); //////////////////////////////////////////////////////////////////////// // User Undocumented Methods //////////////////////////////////////////////////////////////////////// #ifdef DOCJETDUMMY // DOCJET secret macro #else CKVideoManager(CKContext *iCtx); virtual ~CKVideoManager(); //////////////////////////////////////////////////////////////////////// // User Undocumented Methods //////////////////////////////////////////////////////////////////////// static void RegisterCKVideo (); virtual void PostWrite (const char* iName); virtual void BindForVSL (CKContext* iCtx); virtual CKERROR OnCKInit (); virtual CKERROR OnCKEnd (); virtual CKERROR OnCKPlay (); virtual CKERROR OnCKReset (); virtual CKERROR OnCKPause (); virtual CKERROR PreProcess (); virtual CKERROR SequenceToBeDeleted (CK_ID *objids,int count); CKDWORD GetValidFunctionsMask() { return CKMANAGER_FUNC_OnCKInit | CKMANAGER_FUNC_OnCKEnd | CKMANAGER_FUNC_OnCKPlay | CKMANAGER_FUNC_OnCKPause | CKMANAGER_FUNC_OnCKReset | CKMANAGER_FUNC_PreProcess | CKMANAGER_FUNC_OnSequenceToBeDeleted ; }; virtual int GetFunctionPriority(CKMANAGER_FUNCTIONS Function) { if (Function==CKMANAGER_FUNC_OnCKInit) return (-MAX_MANAGERFUNC_PRIORITY); // latest Priority else return 0; } //////////////////////////////////////////////////////////////////////// // User Undocumented Variables //////////////////////////////////////////////////////////////////////// XArray m_Videos; // List of existing videos XArray m_VideoPlugins; // List of available video plugin XString m_PluginDescription; // Description for the variable manager int m_ActivePlugin; // Video engine that is currently active int m_SelectedPlugin; // Video engine currently selected XString m_SaveOptionsDescription; // Description for the variable manager int m_SelectedSaveOptions; // Global video saving option XString m_PriorityDescription; // Description for the variable manager int m_SelectedPriority; // Default priority for asynchronous videos float m_ScreenFrameRate; // FPS to use when in screen mode. CKBOOL m_ExportGraph; // Export the decompression graph //////////////////////////////////////////////////////////////////////// // Methods added after 3.5.0.24 //////////////////////////////////////////////////////////////////////// XString m_LiveInputSaveDescription; // Live input save mode enum string. int m_LiveInputSave; // Live input save mode. Value from: CK_VIDEO_LIVEIDSAVEOPTION /************************************************* Summary: Get the number of formats available for a given input ID. Argument: + iLiveID: index of the live source in the manager list. Return Value: + Number of input formats available. -1 if index is invalid. See also: CKVideoPlugin::GetVideoInputCount, CKVideoPlugin::GetVideoInputFormat *************************************************/ virtual int GetVideoInputFormatCount(int iLiveID); /************************************************* Summary: Get the description of an available format for the given input ID. Argument: + iFormatID: index of the format to retrieve + iLiveID: index of the live source in the manager list. Return Value: + NULL for an invalid index or when no video plug-in is available + The format description otherwise. See also: CKVideoPlugin::GetVideoInputCount, CKVideoPlugin::GetVideoInputFormatCount *************************************************/ virtual const CKVideoInputFormatDesc* GetVideoInputFormatDesc(int iLiveID, int iFormatID); //------------------------------------------------- // Dynamic Cast method. Returns NULL if the object can't be casted static CKVideoManager* Cast(CKBaseManager* iMan) { return ((CKVideoManager*) iMan); } #endif // DOCJET secret macro }; #endif