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

1353 lines
48 KiB
C++

/*************************************************************************/
/* File : CKVideo.h */
/* Author : Leïla AIT KACI */
/* */
/* Virtools SDK */
/* Copyright (c) Virtools 2005, All Rights Reserved. */
/*************************************************************************/
#ifndef CKVIDEO_H
#define CKVIDEO_H "$Id:$"
#include "CKBeObject.h"
#include "VxThread.h"
class CKVideo;
/*******************************************************************
Name: CKVideoInfo
Summary: Information on a video file
See also: CKVideo
********************************************************************/
typedef struct CKVideoInfo
{
float m_Duration;
// Video Specific
int m_Width; // Image Width
int m_Height; // Image Height
CKBOOL m_IsInterlaced; // Is the video interlaced
float m_ImagePerSec; // Number of Images per second
XString m_VideoFormat; // Readable Video Format (Compression)
// Sound Specific
int m_AudioChannel; // Channel count if several available
int m_SamplingRate; // Number of Samples per second
int m_SamplingSize; // AvgBytesPerSec
XString m_AudioFormat; // Readable Sound Format (Compression)
CKBOOL m_IsValid; // Are the current info valid ?
int m_VideoInputFormatID; // Format actually used for video input.
} CKVideoInfo;
/*******************************************************************
Name: CK_VIDEO_EVENT
Summary: Events that happens on a video
Remarks:
+ This events may called from a different thread than Virtools
rendering thread. So, make sure to protect the objects you want
to access in these callbacks.
See also: CKVideoManager, CKVideo
*********************************************************************/
typedef enum CK_VIDEO_EVENT
{
CK_VIDEOEVENT_LOADED, // Not Supported Yet - The video has just been loaded [EventData = NULL]
CK_VIDEOEVENT_UNLOADED, // Not Supported Yet - The video has just unloaded [EventData = NULL]
CK_VIDEOEVENT_NEWIMAGE, // A new image is displayed [EventData = NULL]
CK_VIDEOEVENT_PROCESSIMAGE, // A new image is displayed [EventData = VxImageDescEx*]
CK_VIDEOEVENT_COUNT // Number of video events
} CK_VIDEO_EVENT;
/*******************************************************************
Name: CK_VIDEO_TYPE
Summary: Supported Video Types
Remarks: + Part of Video Flags
See also: CKVideoManager, CKVideo
*********************************************************************/
typedef enum CK_VIDEO_TYPE
{
CK_VIDEO_FILE = 0x10000000, // The video is readed from a file
CK_VIDEO_LIVE = 0x20000000, // The video is readed from a live source
CK_VIDEO_STREAM = 0x40000000 // The video comes from an internet stream
} CK_VIDEO_TYPE;
/*******************************************************************
Name: CK_VIDEO_DISPLAY
Summary: On what support do we display the video ?
Remarks: + Part of Video Flags
See also: CKVideoManager, CKVideo
*********************************************************************/
typedef enum CK_VIDEO_DISPLAY
{
CK_VIDEO_TEXTURE = 0x01000000, // The video is displayed on a texture
CK_VIDEO_SCREEN = 0x02000000 // The video is displayed on the screen
} CK_VIDEO_DISPLAY;
/*******************************************************************
Name: CK_VIDEO_SAVEOPTION
Summary: Possible saving options
See also: CKVideoManager
********************************************************************/
typedef enum CK_VIDEO_SAVEOPTION
{
CK_VIDEOSAVE_GLOBAL = 0x00100000, // Use global saving options
CK_VIDEOSAVE_INTERNAL = 0x00200000, // Save the video file within the .cmo
CK_VIDEOSAVE_EXTERNAL = 0x00400000 // Don't save the video file, keep it external
} CK_VIDEO_SAVEOPTION;
/*******************************************************************
Name: CK_VIDEO_FLAGS
Summary: Current video flags.
Remarks:
+ Part of Video Flags
+ Bit 1 is reserved for Type that is exclusive
+ Bit 2 is reserved for Display that is exclusive
+ Other flags are not exclusive
See also:
*********************************************************************/
typedef enum CK_VIDEO_AUTHOR_FLAGS
{
CK_VIDEO_TYPEMASK = 0xF0000000, // Mask for video type (CK_VIDEO_TYPE)
CK_VIDEO_DISPLAYMASK = 0x0F000000, // Mask for video display (CK_VIDEO_DISPLAY)
CK_VIDEO_SAVEOPTIONMASK = 0x00F00000, // Mask for saving options (CK_VIDEO_SAVEOPTION)
CK_VIDEO_AUTHORMASK = 0x000FFFFF, // Mask for other options defined here
CK_VIDEO_LOOP = 0x00000001, // Should the video loop (need to be able to seek)
CK_VIDEO_SOUND = 0x00000002, // Should we play the video sound.
CK_VIDEO_ASYNCLOAD = 0x00000004, // Should the video be loaded asynchronously
CK_VIDEO_TEXFILL = 0x00000008, // Should the video be resized to fill the texture
CK_VIDEO_TEXNONPOW2 = 0x00000010, // Should we change the texture size for best performance
CK_VIDEO_TEXAUTOSIZE = 0x00000020, // Not Implemented.
CK_VIDEO_TEXAUTOFORMAT = 0x00000040, // Should we change the texture format for best performance
CK_VIDEO_RESERVEDAFLAG0 = 0x00000080, // Reserved for future use
CK_VIDEO_RESERVEDAFLAG1 = 0x00000100, // Reserved for future use
CK_VIDEO_RESERVEDAFLAG2 = 0x00000200, // Reserved for future use
CK_VIDEO_RESERVEDAFLAG3 = 0x00000400, // Reserved for future use
CK_VIDEO_RESERVEDAFLAG4 = 0x00000800, // Reserved for future use
} CK_VIDEO_AUTHOR_FLAGS;
/*******************************************************************
Name: CK_VIDEO_STATE
Summary: Current Video State
Remarks: + Part of Runtime Flags
See also: CKVideoManager, CKVideo
*********************************************************************/
typedef enum CK_VIDEO_STATE
{
CK_VIDEO_INVALID = 0x01000000, // Video source is invalid
CK_VIDEO_LOADING = 0x02000000, // Video source is currently loading
CK_VIDEO_UNLOADING = 0x04000000, // Video source is currently unloading
CK_VIDEO_PAUSED = 0x08000000, // Video is paused
CK_VIDEO_PLAYING = 0x10000000, // Video is playing
CK_VIDEO_STOPPED = 0x20000000 // Video is stopped
} CK_VIDEO_STATE;
/*******************************************************************
Name: CK_VIDEO_FLAGS
Summary: Video runtime flags.
following flags.
Remarks:
+ Part of Runtime Flags
+ Bit 1 & 2 are reserved for Video State that is exclusive
+ Other flags are not exclusive
+ Runtime flags other than state are updated by the source directly.
See also:
*********************************************************************/
typedef enum CK_VIDEO_RUNTIME_FLAGS
{
CK_VIDEO_STATEMASK = 0xFF000000, // Mask for source state (CK_VIDEO_STATE)
CK_VIDEO_PREVIEWMASK = 0x00FF0000, // Mask for preview state (CK_VIDEO_STATE)
CK_VIDEO_RUNTIMEMASK = 0x0000FFFF, // Mask for other options defined here
CK_VIDEO_FINISHED = 0x00000001, // Video is finished and paused
CK_VIDEO_CANSEEK = 0x00000002, // Support video seeking
CK_VIDEO_CANSPEED = 0x00000004, // Support video speed change
CK_VIDEO_CANSPEEDBACK = 0x00000008, // Support video negative speed
CK_VIDEO_CANLOOP = 0x00000010, // Can the video loop
CK_VIDEO_HASSOUND = 0x00000020, // Does the video has sound
CK_VIDEO_TEXTUREREADY = 0x00000040, // Private - Video texture is ready (initialized)
CK_VIDEO_LOGOFF = 0x00000080, // Private - Video logging is stopped
CK_VIDEO_RESERVEDRFLAG0 = 0x00000100, // Reserved for future use
CK_VIDEO_RESERVEDRFLAG1 = 0x00000200, // Reserved for future use
CK_VIDEO_RESERVEDRFLAG2 = 0x00000400, // Reserved for future use
CK_VIDEO_RESERVEDRFLAG3 = 0x00000800, // Reserved for future use
CK_VIDEO_RESERVEDRFLAG4 = 0x00001000, // Reserved for future use
} CK_VIDEO_RUNTIME_FLAGS;
/*******************************************************************
Name: CK_VIDEO_ERRORS
Summary: Video possible errors
See also: CKVideoManager, CKVideo
********************************************************************/
typedef enum CK_VIDEO_ERRORS
{
CK_VIDEOERR_GENERIC = 500, // Support video files
CK_VIDEOERR_NOPLUGIN, // No video plugin available
CK_VIDEOERR_PLUGINCAPS, // Not supported by the current video engine
CK_VIDEOERR_VIDEOCAPS, // Not supported by the current video (compression format...)
CK_VIDEOERR_TIMEOUT, // The maximum wait time has been reached.
CK_VIDEOERR_INPUTTYPE, // Not supported by the current video input type
CK_VIDEOERR_OUTPUTTYPE, // Not supported by the current video output type
CK_VIDEOERR_MAXCOUNT, // The maximum number of playing videos has been reached. (1 for screen, no limit for texture one).
CK_VIDEOERR_TEXTURE, // The target texture is invalid.
CK_VIDEOERR_TEXTURELOCK, // A texture could not be locked (target or capture texture).
CK_VIDEOERR_SEEKTIME, // Seek times are not valid (>Duration)
CK_VIDEOERR_INFO, // Video info are not valid.
CK_VIDEOERR_STATE, // Not supported in the current video state
CK_VIDEOERR_PREVIEWSTATE, // Not supported in the current preview state
CK_VIDEOERR_LOADED, // Not supported when the video is loaded
CK_VIDEOERR_LOADING, // Not supported when the video is loading
CK_VIDEOERR_NOTLOADED, // Not supported when the video is not loaded
CK_VIDEOERR_UNLOADING, // Not supported when the video is unloading
CK_VIDEOERR_TEXTUREUSED, // The texture is already used
CK_VIDEOERR_PROTOCOL, // The stream protocol is unknown
CK_VIDEOERR_RESERVED0, // Reserved for future use
CK_VIDEOERR_RESERVED1, // Reserved for future use
CK_VIDEOERR_RESERVED2, // Reserved for future use
CK_VIDEOERR_RESERVED3, // Reserved for future use
CK_VIDEOERR_RESERVED4, // Reserved for future use
CK_VIDEOERR_RESERVED5, // Reserved for future use
CK_VIDEOERR_RESERVED6, // Reserved for future use
CK_VIDEOERR_RESERVED7, // Reserved for future use
CK_VIDEOERR_RESERVED8, // Reserved for future use
CK_VIDEOERR_RESERVED9, // Reserved for future use
CK_VIDEOERR_IMPSTART, // Error from here are implementation specific
} CK_VIDEO_ERRORS;
#define CK_VIDEOMSG_ENDED "OnVideoEnded"
#define CK_VIDEOMSG_LOADED "OnVideoLoaded"
#define CK_VIDEOMSG_UNLOADED "OnVideoUnloaded"
typedef CKBOOL (*CK_VIDEOEVENTCALLBACK) (CKVideo* iVideo, CK_VIDEO_EVENT iEvent, void *iEventData, void* iArg);
typedef enum CK_SAVEFLAGS_VIDEO
{
CK_SAVEFLAGS_VIDEOBASICS = 0x00001000, // For common video information
CK_SAVEFLAGS_VIDEOFILE = 0x00002000, // For video file specific information
CK_SAVEFLAGS_VIDEOLIVE = 0x00004000, // For video live specific information
CK_SAVEFLAGS_VIDEOSTREAM = 0x00008000, // For video stream specific information
CK_SAVEFLAGS_VIDEOTEXTURE = 0x00010000, // For video texture specific information
CK_SAVEFLAGS_VIDEOSCREEN = 0x00020000, // For video screen specific information
CK_SAVEFLAGS_VIDEOUSERFILTER = 0x00040000, // Reserved for future use
CK_SAVEFLAGS_VIDEOINTERNALS = 0x00080000, // Reserved for internal use
CK_SAVEFLAGS_VIDEORESERVED0 = 0x00100000, // Reserved for future use
CK_SAVEFLAGS_VIDEORESERVED1 = 0x00200000, // Reserved for future use
CK_SAVEFLAGS_VIDEORESERVED2 = 0x00400000, // Reserved for future use
CK_SAVEFLAGS_VIDEORESERVED3 = 0x00800000, // Reserved for future use
CK_SAVEFLAGS_VIDEORESERVED4 = 0x01000000 // Reserved for future use
} CK_SAVEFLAGS_VIDEO;
typedef enum CK_SAVEVERSION_VIDEO
{
CK_SAVEVERSION_VIDEO1 = 1, // Saving version for 3.5
CK_SAVEVERSION_VIDEO2 = 2, // Saving version for 3.5 SP1 (Also save camera index)
CK_SAVEVERSION_VIDEO3 = 3 // Reserved for future use
} CK_SAVEVERSION_VIDEO;
/*************************************************
{filename:CKVideo}
Name: CKVideo
Summary: Base Class for Video management
Remarks:
+ CKVideo provides only common method for all video types.
See also: CKVideoManager
*************************************************/
class CKVideo : public CKBeObject
{
friend
class CKVideoManager;
public:
/*************************************************
Summary: Get video information
Return value: The requested info
Remarks:
+ The video need to be loaded to get these informations
+ This method is thread safe. Never access the variable directly.
See also: CKVideoManager, CKVideo, GetLastError, GetErrorDescripion
*************************************************/
virtual XString GetErrorDescrition(int iError);
/*************************************************
Summary: Reset the last video error to CK_OK.
See also: CKVideoManager, CKVideo, GetLastError, SetLastError, GetErrorDescripion
*************************************************/
virtual void ResetLastError() { SetLastError(CK_OK); };
/*************************************************
Summary: Get the last video error.
Return value: last video error.
See also: CKVideoManager, CKVideo, ResetLastError, SetLastError, GetErrorDescripion
*************************************************/
virtual int GetLastError();
/*************************************************
Summary: Set the last video error.
Input Argument:
+ iError: video error to set as last.
See also: CKVideoManager, CKVideo, ResetLastError, GetLastError, GetErrorDescripion
*************************************************/
virtual void SetLastError(int iError);
/*************************************************
Summary: Get the current video state.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetState
*************************************************/
virtual DWORD GetAuthorFlags();
/*************************************************
Summary: Get the current video options.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetState
*************************************************/
virtual DWORD GetRuntimeFlags();
/*************************************************
Summary: Get the current video state.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetState
*************************************************/
virtual CK_VIDEO_STATE GetState();
/*************************************************
Summary: Get Video Type: File, Live or Streamed
See also: CKVideoManager, CKVideo
*************************************************/
virtual CK_VIDEO_TYPE GetType();
/*************************************************
Summary: Set the video Type: File, Live or Streamed
Input Arguments:
iType: video type
Remarks:
+ The video must be unloaded (state = invalid).
See also: CKVideoManager, CKVideo
*************************************************/
virtual CKERROR SetType(CK_VIDEO_TYPE iType);
/*************************************************
Summary: Get the current display mode.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetState
*************************************************/
virtual CK_VIDEO_DISPLAY GetDisplayMode();
/*************************************************
Summary: Set the video display mode: screen or texture
Input Arguments:
iMode: display mode
Remarks:
+ The video must be unloaded (state = invalid).
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetLoop
*************************************************/
virtual CKERROR SetDisplayMode(CK_VIDEO_DISPLAY iMode);
/*************************************************
Summary: Get video saving options
See also: CKVideoManager, CKVideo
*************************************************/
virtual CK_VIDEO_SAVEOPTION GetSaveOptions();
/*************************************************
Summary: Set the video saving options
Input Arguments:
iOption: saving option to set
See also: CKVideoManager, CKVideo
*************************************************/
virtual CKERROR SetSaveOptions(CK_VIDEO_SAVEOPTION iOption);
/*************************************************
Summary: Set the video File name.
Input Arguments:
iFileName: file name (absolute or relative).
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ For video file type only
+ The system tries to locate the file in the bitmap searche directories.
It has to exist, otherwise, we return CKERR_INVALIDFILE.
+ The video must be unloaded (state = invalid).
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetFileName
*************************************************/
virtual CKERROR SetFileName(XString& iFileName);
/*************************************************
Summary: Get the video File name.
Input Arguments:
Current file name. Path is not in the result.
Remarks:
+ For video file type only
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetFilePath, CKVideo::SetFileName
*************************************************/
virtual XString GetFileName();
/*************************************************
Summary: Get the video file full path.
Remarks:
+ For video file type only
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetFilePath, CKVideo::SetFileName
*************************************************/
virtual XString GetFilePath();
/*************************************************
Summary: Set current input ID for the video
Input Arguments:
iInputID: ID of the live source to use.
Return Value:
+ CK_OK if success,
+ CKERR_INVALIDFILE if the file is invalid
Remarks:
+ For video live only
+ The possible live source ID are given by the video manager
+ The video must be unloaded (state = invalid).
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR SetVideoInputID(int iInputID);
/*************************************************
Summary: Get current input ID for the video
Return Value:
+ ID of the live source used.
Remarks:
+ For video live only
+ The possible live source ID are given by the video manager
+ This method has no effect when the video is loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual int GetVideoInputID();
/*************************************************
Summary: Set current input ID for the video
Input Arguments:
iInputID: ID of the live source to use.
Return Value:
+ CK_OK if success,
+ CKERR_INVALIDFILE if the file is invalid
Remarks:
+ For video live only
+ The possible live source ID are given by the video manager
+ The video must be unloaded (state = invalid).
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR SetAudioInputID(int iInputID);
/*************************************************
Summary: Get current input ID for the video
Return Value:
+ ID of the live source used.
Remarks:
+ For video live only
+ The possible live source ID are given by the video manager
+ This method has no effect when the video is loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual int GetAudioInputID();
/*************************************************
Summary: Set the video url path.
Input Arguments:
iUrl: url to the video (http or mms protocol).
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ For video stream only
+ The video must be unloaded (state = invalid).
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetFileName
*************************************************/
virtual CKERROR SetUrl(XString& iUrl);
/*************************************************
Summary: Get the video url path.
Remarks:
+ For video stream only
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetFilePath, CKVideo::SetFileName
*************************************************/
virtual XString GetUrl();
/*************************************************
Summary: Set if the video should be loaded asynchronously
Input Arguments:
iAsynch: load asynchronously if TRUE, synchronously if FALSE
Remarks:
+ The video must be unloaded (state = invalid).
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::IsLoadingAsynchronous
*************************************************/
virtual CKERROR SetAsynchronous(CKBOOL iAsynch);
/*************************************************
Summary: Is the video loading asynchronous
Remarks:
+ Return TRUE is loading is asynchronous, FALSE otherwise
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::LoadAsynchronously
*************************************************/
virtual CKBOOL IsAsynchronous();
/*************************************************
Summary: Set the target texture.
Input Arguments:
iMode: display mode
Remarks:
+ Has no effect if current display mode is screen
+ The video must be unloaded (state = invalid).
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetLoop
*************************************************/
virtual CKERROR SetTexture(CKTexture* iTarget);
/*************************************************
Summary: Get the current target texture
Remarks:
+ Return NULL if current display mode is screen
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetState
*************************************************/
virtual CKTexture* GetTexture();
/*************************************************
Summary: Set the texture options
Input Arguments:
iAutoFormat: should the texture format be choosen by the video engine
automatically.
iAllowConditionalTexture: do we allow the system to create conditional
non pow2 textures for this video ?
Remarks:
+ Has no effect if current display mode is screen
+ The video must be unloaded (state = invalid).
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetLoop
*************************************************/
virtual CKERROR SetTextureOptions(CKBOOL iAllowFormatChange, CKBOOL iAllowConditionalTexture);
/*************************************************
Summary: Get the current target texture
Remarks:
+ Return NULL if current display mode is screen
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetState
*************************************************/
virtual void GetTextureOptions(CKBOOL &oAllowFormatChange, CKBOOL &oAllowConditionalTexture);
/*************************************************
Summary: Load the video with the current settings.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR Load();
/*************************************************
Summary: Unload a video.
Input Arguments:
iForceSync: when this parameter is true, we force a synchronous
unloading whatever syncrhonous parameter is set on the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR Unload(CKBOOL iForceSync=FALSE);
/*************************************************
Summary: Play the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ If the video is not loaded, it loads it. As it may take some time, it
is advised to load video before to play.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR Play();
/*************************************************
Summary: Pause the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR Pause();
/*************************************************
Summary: Stop the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR Stop();
/*************************************************
Summary: Seek a video file.
Input Arguments:
iValue: Position where to seek
iHomogeneous: are we seeking with an homogenous value (between 0 and 1)
or with a time in ms.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
+ Once rewinded, the video is paused
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR Seek(float iValue, CKBOOL iHomogeneous=FALSE);
/*************************************************
Summary: Capture the current video image in the given texture.
Input Arguments:
iVideo: video to get image from,
iTexture: texture where to save the captures image
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ This method should not change the target texture format, if needed,
we must warn the user by documenting it or returning a value saying
so.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR CaptureImage(CKTexture* iTarget);
/*************************************************
Summary: Get the current video time.
Input Arguments:
iHomogeneous: are we geting an homogenous value (between 0 and 1)
or a time in ms.
Return Value:
+ -1 if current time is not available. >=0 otherwise.
Remarks:
+ This method is thread safe.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual float GetPlayingTime(CKBOOL iHomogeneous=FALSE);
/*************************************************
Summary: Get the current video frame.
Return Value:
+ -1 if current frame is not available. >=0 otherwise.
Remarks:
+ This method is thread safe.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual int GetPlayingFrame();
/*************************************************
Summary: Set the video destination rect
Input Arguments:
iDestination: destination rect,
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetDestination
*************************************************/
virtual CKERROR SetDestination(VxRect& iDestination);
/*************************************************
Summary: Get the video destination rect
Return Value:
Desctination rect.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetDestination
*************************************************/
virtual VxRect GetDestination();
/*************************************************
Summary: Set the video 'Fill Texture' option
Input Arguments:
iFill: option value
Remarks:
+ When the video must fill the texture, it is resized each frame to
fit the texture video memory size. This may be usefull, but is less
less efficient.
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetFillTexture
*************************************************/
virtual CKERROR SetFillTexture(CKBOOL iFill);
/*************************************************
Summary: Get the video 'Fill Textrure' option.
Return Value:
Destination rect.
Remarks:
+ When the video must fill the texture, it is resized each frame to
fit the texture video memory size. This may be useful, but is less
less efficient.
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetFillTexture
*************************************************/
virtual CKBOOL GetFillTexture();
/*************************************************
Summary: Should we play the video sound ?
Input Arguments:
iEnable: TRUE to play sound, FALSE not to.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetVolume, CKVideo::SetBalance, CKVideo::GetBalance
*************************************************/
virtual CKERROR EnableAudio(CKBOOL iEnable);
/*************************************************
Summary: Is the video sound played ?
Return Value:
TRUE if sound is player, FALSE otherwise
Remarks:
+ If the video has no sound channed, the method will return FALSE
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetVolume, CKVideo::SetBalance, CKVideo::GetBalance
*************************************************/
virtual CKBOOL IsAudioEnabled();
/*************************************************
Summary: Set the sound volume
Input Arguments:
iVolume: percentage value between 0 and 1
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetVolume, CKVideo::SetBalance, CKVideo::GetBalance
*************************************************/
virtual CKERROR SetVolume(float iVolume);
/*************************************************
Summary: Get the sound volume.
Return Value:
Sound Volume between 0 and 1.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetVolume, CKVideo::SetBalance, CKVideo::GetBalance
*************************************************/
virtual float GetVolume();
/*************************************************
Summary: Set the sound balance
Input Arguments:
iBalance: value between -1 (left) and 1 (right)
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetBalance, CKVideo::SetVolume, CKVideo::GetVolume
*************************************************/
virtual CKERROR SetBalance(float iBalance);
/*************************************************
Summary: Get the sound balance.
Return Value:
Sound Balance between -1 and 1.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetBalance, CKVideo::SetVolume, CKVideo::GetVolume
*************************************************/
virtual float GetBalance();
/*************************************************
Summary: Set the video 'Loop' option value
Input Arguments:
iLoop: should the video loop ?
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetLoop
*************************************************/
virtual CKERROR SetLoop(CKBOOL iLoop);
/*************************************************
Summary: Get the video 'Loop' option value
Return Value:
+ iLoop: should the video loop ?
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetLoop
*************************************************/
virtual CKBOOL GetLoop();
/*************************************************
Summary: Change the speed of the speed.
Input Arguments:
iSpeed: speed to set.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ Speed cannot be changed on every video. It depends on the codec it
uses. Check the video capabilities to know if you can modify the
speed.
+ The video must be loaded.
+ This method is thread safe. Never access the variable directly.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR SetSpeed(float iSpeed);
/*************************************************
Summary: Get the video 'Loop' option value
Return Value:
+ The video speed
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetLoop
*************************************************/
virtual float GetSpeed();
/*************************************************
Summary: Set the video new seeking time for next restart
Remarks:
+ When value is <0, no change is done to the value
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetLoop
*************************************************/
virtual CKERROR SetLimitTimes(float iStartTime, float iStopTime);
/*************************************************
Summary: Get the video starting time
Output Arguments:
+ oStartTime: variable receiving the start time. May be NULL.
+ oStopTime: variable receiving the stop time. May be NULL.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetLoop
*************************************************/
virtual void GetLimitTimes(float* oStartTime, float* oStopTime);
/*************************************************
Summary: Set the loading thread priority
Return value: The requested info
Remarks:
+ The video need to be loaded to get these informations
+ This method is thread safe. Never access the variable directly.
See also: CKVideoManager, CKVideo, CKVideoLive, CKVideo
*************************************************/
virtual void SetVideoPriority(VXTHREAD_PRIORITY iPriority);
/*************************************************
Summary: Get the loading thread priority
Return value: The requested info
Remarks:
+ The video need to be loaded to get these informations
+ This method is thread safe. Never access the variable directly.
See also: CKVideoManager, CKVideo, CKVideoLive, CKVideo
*************************************************/
virtual VXTHREAD_PRIORITY GetVideoPriority();
/*************************************************
Summary: Get video information
Return value: The requested info
Remarks:
+ The video need to be loaded to get these informations
+ This method is thread safe. Never access the variable directly.
See also: CKVideoManager, CKVideo, CKVideoLive, CKVideo
*************************************************/
virtual const CKVideoInfo* GetVideoInfo();
/*************************************************
Summary: Add / Remove a callback on a given event
Return value: The requested info
Remarks:
+ The new image callbacks are only supported when playing the video on a
texture, not on the screen.
See also: CKVideoManager, CKVideo, CKVideoLive, CKVideo
*************************************************/
virtual CKBOOL AddEventCallBack(CK_VIDEO_EVENT iEvent, CK_VIDEOEVENTCALLBACK iFunction, void *iArgument);
virtual CKBOOL RemoveEventCallBack(CK_VIDEO_EVENT iEvent, CK_VIDEOEVENTCALLBACK iFunction);
CKVideoManager* m_VideoManager; // Current Video Manager
////////////////////////////////////////////////////////////////////////
#ifdef DOCJETDUMMY // DOCJET secret macro
#else
DWORD m_AuthorFlags; // Current Video Author Flags (including Type, Target)
VxRect m_Destination; // Destination rect for screen and texture display
VxColor m_BorderColor; // Color used for video borders
CKTexture* m_Texture; // Target for texture display
float m_Volume; // Sound Volume
float m_Balance; // Sound Balance
float m_Speed; // Video Speed
float m_StartTime; // Video Start Time in ms
float m_StopTime; // Video Stop Time in ms
XString m_FileName; // Video File Path
XString m_Url; // Video Stream Address. Must contain protocole.
int m_VideoInputID; // Video Live Source ID
int m_AudioInputID; // Video Live Source ID
// Runtime Informations
CKVideoInfo m_VideoInfo; // Information on the video
DWORD volatile m_RuntimeFlags; // Current Video Runtime Flags (include States, Caps...)
float m_SourceTime; // Current source time
float m_PreviewTime; // Current preview time
int m_LastError; // Last video error
/*************************************************
Summary: Verify if the current video plugin supports our video
Return Value: video caps
See also: CKVideoPlugin,CK_VIDEOMANAGER_CAPS
*************************************************/
virtual CKERROR VerifyPluginCaps();
/*************************************************
Summary: Set the video border color
Input Arguments:
iColor: border color,
Remarks:
+ This method is thread safe. Never access the variable directly.
+ Not supported yet
See also: CKVideo::GetBorderColor
*************************************************/
virtual CKERROR SetBorderColor(VxColor& iColor);
/*************************************************
Summary: Get the video border color
Return Value:
Video border color.
Remarks:
+ This method is thread safe. Never access the variable directly.
+ Not supported yet
See also: CKVideo::SetBorderColor
*************************************************/
virtual VxColor GetBorderColor();
/*************************************************
Summary: Set the video source and preview
Remarks:
+ This method is thread safe.
See also: CKVideo::GetState
*************************************************/
virtual void SetSource(void* iSource);
virtual void SetPreview(void* iPreview);
/*************************************************
Summary: Get the current video major state.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetState
*************************************************/
virtual inline CKBOOL IsSourceValid();
virtual inline CKBOOL IsPreviewValid();
/*************************************************
Summary: Modify the current .
Input Arguments:
iAdd: flags to add. Can be one or more of CK_VIDEO_AUTHOR_FLAGS.
iRemove: flags to remove. Can be one or more of CK_VIDEO_AUTHOR_FLAGS.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetState
*************************************************/
virtual void ModifyAuthorFlags(DWORD iAdd, DWORD iRemove);
/*************************************************
Summary: Modify the current runtime flags.
Input Arguments:
iAdd: flags to add. Can be one or more of CK_VIDEO_RUNTIME_FLAGS.
iRemove: flags to remove. Can be one or more of CK_VIDEO_RUNTIME_FLAGS.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetState
*************************************************/
virtual void ModifyRuntimeFlags(DWORD iAdd, DWORD iRemove);
/*************************************************
Summary: Get the current preview state.
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::SetState
*************************************************/
virtual CK_VIDEO_STATE GetPreviewState();
/*************************************************
Summary: Set current video state
Input Arguments:
iState: video state
Remarks:
+ This method is thread safe. Never access the variable directly.
See also: CKVideo::GetState
*************************************************/
virtual void SetState(CK_VIDEO_STATE iState);
virtual void SetPreviewState(CK_VIDEO_STATE iState);
/*************************************************
Summary: Load the video with the current settings.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR LoadPreview(void* iPreviewWindow=NULL);
/*************************************************
Summary: Unload a video.
Input Arguments:
iForceSync: when this parameter is true, we force a synchronous
unloading whatever syncrhonous parameter is set on the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR UnloadPreview(CKBOOL iForceSync=FALSE);
/*************************************************
Summary: Play the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ If the video is not loaded, it loads it. As it may take some time, it
is advised to load video before to play.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR PlayPreview();
/*************************************************
Summary: Pause the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR PausePreview();
/*************************************************
Summary: Stop the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR StopPreview();
/*************************************************
Summary: Seek a video file.
Input Arguments:
iValue: Position where to seek
iHomogeneous: are we seeking with an homogeneous value (between 0 and 1)
or with a time in ms.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ The video must be loaded.
+ Once rewinded, the video is paused
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR SeekPreview(float iValue, CKBOOL iHomogeneous=FALSE);
/*************************************************
Summary: Get the current preview time.
Input Arguments:
iHomogeneous: are we geting an homogenous value (between 0 and 1)
or a time in ms.
Return Value:
+ -1 if current time is not available. A value in ms otherwise.
Remarks:
+ This method is thread safe.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual float GetPreviewTime(CKBOOL iHomogeneous=FALSE);
/*************************************************
Summary: Post a message to the video
Input Arguments:
iMsg: message to post
See also: CKVideoManager
*************************************************/
virtual void PostVideoMsg(CKSTRING iMsg);
/*************************************************
Summary: Does the video has a callback defined for the given event.
Return value: TRUE if has at least one callback, FALSE otherwise
Remarks:
See also: CKVideoManager, CKVideo, CKVideoLive, CKVideo
*************************************************/
virtual CKBOOL HasEventCallBacks(CK_VIDEO_EVENT iEvent);
/*************************************************
Summary: Add / Remove a callback on a given event
Return value: The requested info
Remarks:
See also: CKVideoManager, CKVideo, CKVideoLive, CKVideo
*************************************************/
virtual void ExecuteEventCallBacks(CK_VIDEO_EVENT iEvent, void *iEventData);
/*************************************************
Summary: Update all times
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remarks:
+ Update m_SourceTime,
+ Update m_PreviewTime.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual CKERROR InternalUpdate();
/*************************************************
Summary: Free the video memory of the target texture
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual void FreeTargetTexture();
/*************************************************
Summary: Check that the video texture do not belong to the ToDelete
input list. If it does, unload the video.
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
See also: CKVideoManager::CreateSource, CKVideoManager::HasSource, CKVideo
*************************************************/
virtual void IsTextureToBeDeleted(XArray<CKTexture*> &iToDelete);
//-------------------------------------------------
// Virtools Play/Pause Management: no state update
virtual void InternalPlay ();
virtual void InternalStop ();
virtual void InternalPause ();
virtual void InternalContinue ();
//-------------------------------------------------
// Constructor / Destructor
CKVideo(CKContext *iCtx,CKSTRING iName=NULL);
virtual ~CKVideo();
//-------------------------------------------------
// VSL Binding
static void BindForVSL(CKContext* iCtx);
//-------------------------------------------------
// Class General
virtual CK_CLASSID GetClassID();
virtual int GetMemoryOccupation();
//-------------------------------------------------
// Load / Save
virtual CKStateChunk* Save(CKFile *iFile, CKDWORD iFlags);
virtual CKERROR Load(CKStateChunk *iChunk, CKFile* iFile);
virtual CKERROR Copy(CKObject& o,CKDependenciesContext& context);
//-------------------------------------------------
// Class Registering
static CKSTRING GetClassName();
static int GetDependenciesCount(int iMode);
static CKSTRING GetDependencies(int i,int iMode);
static void Register();
static CKVideo* CreateInstance(CKContext *iCtx);
static void ReleaseInstance(CKContext* iCtx, CKVideo* iVideo);
static CK_CLASSID m_ClassID;
//-------------------------------------------------
// Dynamic Cast method. Returns NULL if the object can't be casted
static CKVideo* Cast(CKObject* iObj)
{
return CKIsChildClassOf(iObj,CKCID_VIDEO)?(CKVideo*)iObj:NULL;
}
////////////////////////////////////////////////////////////////////////
// User Undocumented Variables
////////////////////////////////////////////////////////////////////////
VxMutex m_VideoLock; // A mutex to protect some video members access.
void* m_Source; // Source used by the Video Manager
void* m_Preview; // Source used by the Preview Window
void* m_PreviewWindow; // Preview Window
int m_VideoPriority; // Asynchronous Video Priority
DWORD m_EngineData; // Data that can be used by the implementation Engine.
typedef struct CallbkContainer {
CK_VIDEOEVENTCALLBACK m_Callbk;
void* m_Argument;
} CallbkContainer;
XArray<CallbkContainer> m_EventCallbacks[CK_VIDEOEVENT_COUNT];
////////////////////////////////////////////////////////////////////////
// Methods added after 3.5.0.24
////////////////////////////////////////////////////////////////////////
int m_VideoInputFormatID; // Video Live Input Format. Keep default value when =-1
float m_VideoInputFrequency; // Video Live Input Frequency. Keep default value when =-1
VxMutex m_CallbackLock; // A mutex to protect the video callback array.
/*************************************************
Summary: Get the video format to use for live input.
Argument:
+ oFormatID: format used (<0 means default). This value can be NULL.
+ oFrequency: frequency used (<=0 means default). This value can be NULL.
See also: SetVideoInputFormat, CKVideoPlugin::GetVideoInputCount, CKVideoPlugin::GetVideoInputFormatCount
*************************************************/
virtual void GetVideoInputFormat(int* oFormatID, float* oFrequency=NULL);
/*************************************************
Summary: Set the video format to use for live input.
Argument:
+ iFormatID: index of the format to set (<0 not to modify it)
+ iFrequency: frequency to use (<=0 not to modify it)
Return Value:
+ CK_OK if success,
+ Any video error otherwise.
Remark:
+ When the video is unloaded, there is no restriction, you can set any
available format.
+ When the video is loaded, it has to be stopped to be able to change
the input format and switching from one format to another is not always
possible (this depends on your camera drivers). For instance, it is often
impossible to switch from a RGB format to a YUV format while the video is
loaded. You should therefore test the capabilities of your camera if you
need to forbid the non working format changes.
See also: GetVideoInputFormat, CKVideoPlugin::GetVideoInputCount, CKVideoPlugin::GetVideoInputFormatDesc
*************************************************/
virtual CKERROR SetVideoInputFormat(int iFormatID, float iFrequency=-1);
virtual CKERROR PrepareDependencies(CKDependenciesContext& context, CKBOOL iCaller = TRUE);
#endif // DOCJET secret macro
};
#endif