deargui-vpl/ref/virtools/Includes/CKVideoManager.h

347 lines
12 KiB
C++

/*************************************************************************/
/* 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<CKVideo*> m_Videos; // List of existing videos
XArray<CKVideoPlugin*> 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