summaryrefslogtreecommitdiff
path: root/video/quicktime_material.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /video/quicktime_material.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'video/quicktime_material.h')
-rw-r--r--video/quicktime_material.h221
1 files changed, 221 insertions, 0 deletions
diff --git a/video/quicktime_material.h b/video/quicktime_material.h
new file mode 100644
index 0000000..a80b644
--- /dev/null
+++ b/video/quicktime_material.h
@@ -0,0 +1,221 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+
+#ifndef QUICKTIME_MATERIAL_H
+#define QUICKTIME_MATERIAL_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+
+//-----------------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------------
+class IFileSystem;
+class IMaterialSystem;
+class CQuickTimeMaterial;
+
+//-----------------------------------------------------------------------------
+// Global interfaces - you already did the needed includes, right?
+//-----------------------------------------------------------------------------
+extern IFileSystem *g_pFileSystem;
+extern IMaterialSystem *materials;
+
+//-----------------------------------------------------------------------------
+// Quicktime includes
+//-----------------------------------------------------------------------------
+#if defined ( OSX )
+ #include <quicktime/QTML.h>
+ #include <quicktime/Movies.h>
+ #include <quicktime/MediaHandlers.h>
+#elif defined ( WIN32 )
+ #include <QTML.h>
+ #include <Movies.h>
+ #include <windows.h>
+ #include <MediaHandlers.h>
+#elif
+ #error "Quicktime not supported on this target platform"
+#endif
+
+
+#include "video/ivideoservices.h"
+
+#include "video_macros.h"
+#include "quicktime_common.h"
+
+#include "materialsystem/itexture.h"
+#include "materialsystem/imaterialsystem.h"
+#include "materialsystem/MaterialSystemUtil.h"
+
+
+// -----------------------------------------------------------------------------
+// Texture regenerator - callback to get new movie pixels into the texture
+// -----------------------------------------------------------------------------
+class CQuicktimeMaterialRGBTextureRegenerator : public ITextureRegenerator
+{
+ public:
+ CQuicktimeMaterialRGBTextureRegenerator();
+ ~CQuicktimeMaterialRGBTextureRegenerator();
+
+ void SetSourceGWorld( GWorldPtr theGWorld, int nWidth, int nHeight );
+
+ // Inherited from ITextureRegenerator
+ virtual void RegenerateTextureBits( ITexture *pTexture, IVTFTexture *pVTFTexture, Rect_t *pRect );
+ virtual void Release();
+
+ private:
+ GWorldPtr m_SrcGWorld;
+ int m_nSourceWidth;
+ int m_nSourceHeight;
+};
+
+
+
+// -----------------------------------------------------------------------------
+// Class used to play a QuickTime video onto a texture
+// -----------------------------------------------------------------------------
+class CQuickTimeMaterial : public IVideoMaterial
+{
+ public:
+ CQuickTimeMaterial();
+ ~CQuickTimeMaterial();
+
+ static const int MAX_QT_FILENAME_LEN = 255;
+ static const int MAX_MATERIAL_NAME_LEN = 255;
+ static const int TEXTURE_SIZE_ALIGNMENT = 8;
+
+ // Initializes, shuts down the material
+ bool Init( const char *pMaterialName, const char *pFileName, VideoPlaybackFlags_t flags );
+ void Shutdown();
+
+ // Video information functions
+ virtual const char *GetVideoFileName(); // Gets the file name of the video this material is playing
+ virtual VideoResult_t GetLastResult(); // Gets detailed info on the last operation
+
+ virtual VideoFrameRate_t &GetVideoFrameRate(); // Returns the frame rate of the associated video in FPS
+
+ // Audio Functions
+ virtual bool HasAudio(); // Query if the video has an audio track
+
+ virtual bool SetVolume( float fVolume ); // Adjust the playback volume
+ virtual float GetVolume(); // Query the current volume
+ virtual void SetMuted( bool bMuteState ); // Mute/UnMutes the audio playback
+ virtual bool IsMuted(); // Query muted status
+
+ virtual VideoResult_t SoundDeviceCommand( VideoSoundDeviceOperation_t operation, void *pDevice = nullptr, void *pData = nullptr ); // Assign Sound Device for this Video Material
+
+ // Video playback state functions
+ virtual bool IsVideoReadyToPlay(); // Queries if the video material was initialized successfully and is ready for playback, but not playing or finished
+ virtual bool IsVideoPlaying(); // Is the video currently playing (and needs update calls, etc)
+ virtual bool IsNewFrameReady(); // Do we have a new frame to get & display?
+ virtual bool IsFinishedPlaying(); // Have we reached the end of the movie
+
+ virtual bool StartVideo(); // Starts the video playing
+ virtual bool StopVideo(); // Terminates the video playing
+
+ virtual void SetLooping( bool bLoopVideo ); // Sets the video to loop (or not)
+ virtual bool IsLooping(); // Queries if the video is looping
+
+ virtual void SetPaused( bool bPauseState ); // Pauses or Unpauses video playback
+ virtual bool IsPaused(); // Queries if the video is paused
+
+ // Position in playback functions
+ virtual float GetVideoDuration(); // Returns the duration of the associated video in seconds
+ virtual int GetFrameCount(); // Returns the total number of (unique) frames in the video
+
+ virtual bool SetFrame( int FrameNum ); // Sets the current frame # in the video to play next
+ virtual int GetCurrentFrame(); // Gets the current frame # for the video playback, 0 Based
+
+ virtual bool SetTime( float flTime ); // Sets the video playback to specified time (in seconds)
+ virtual float GetCurrentVideoTime(); // Gets the current time in the video playback
+
+ // Update function
+ virtual bool Update(); // Updates the video frame to reflect the time passed, true = new frame available
+
+ // Material / Texture Info functions
+ virtual IMaterial *GetMaterial(); // Gets the IMaterial associated with an video material
+
+ virtual void GetVideoTexCoordRange( float *pMaxU, float *pMaxV ) ; // Returns the max texture coordinate of the video portion of the material surface ( 0.0, 0.0 to U, V )
+ virtual void GetVideoImageSize( int *pWidth, int *pHeight ); // Returns the frame size of the Video Image Frame in pixels ( the stored in a subrect of the material itself)
+
+
+
+ private:
+ friend class CQuicktimeMaterialRGBTextureRegenerator;
+
+ void Reset(); // clears internal state
+ void SetQTFileName( const char *theQTMovieFileName );
+ VideoResult_t SetResult( VideoResult_t status );
+
+ // Initializes, shuts down the video stream
+ void OpenQTMovie( const char *theQTMovieFileName );
+ void CloseQTFile();
+
+ // Initializes, shuts down the procedural texture
+ void CreateProceduralTexture( const char *pTextureName );
+ void DestroyProceduralTexture();
+
+ // Initializes, shuts down the procedural material
+ void CreateProceduralMaterial( const char *pMaterialName );
+ void DestroyProceduralMaterial();
+
+ CQuicktimeMaterialRGBTextureRegenerator m_TextureRegen;
+
+ VideoResult_t m_LastResult;
+
+ CMaterialReference m_Material; // Ref to Material used for rendering the video frame
+ CTextureReference m_Texture; // Ref to the renderable texture which contains the most recent video frame (in a sub-rect)
+
+ float m_TexCordU; // Max U texture coordinate of the texture sub-rect which holds the video frame
+ float m_TexCordV; // Max V texture coordinate of the texture sub-rect which holds the video frame
+
+ int m_VideoFrameWidth; // Size of the movie frame in pixels
+ int m_VideoFrameHeight;
+
+ char *m_pFileName; // resolved filename of the movie being played
+ VideoPlaybackFlags_t m_PlaybackFlags; // option flags user supplied
+
+ bool m_bInitCalled;
+ bool m_bMovieInitialized;
+ bool m_bMoviePlaying;
+ bool m_bMovieFinishedPlaying;
+ bool m_bMoviePaused;
+ bool m_bLoopMovie;
+
+ bool m_bHasAudio;
+ bool m_bMuted;
+
+ float m_CurrentVolume;
+
+ // QuickTime Stuff
+ Movie m_QTMovie;
+
+ TimeScale m_QTMovieTimeScale; // Units per second
+ TimeValue m_QTMovieDuration; // movie duration in TimeScale Units Per Second
+ float m_QTMovieDurationinSec; // movie duration in seconds
+ VideoFrameRate_t m_QTMovieFrameRate; // Frame Rate of movie
+ int m_QTMovieFrameCount;
+
+ Rect m_QTMovieRect;
+ GWorldPtr m_MovieGWorld;
+
+ QTAudioContextRef m_AudioContext;
+
+ TimeValue m_MovieFirstFrameTime;
+ TimeValue m_NextInterestingTimeToPlay;
+ TimeValue m_MoviePauseTime;
+
+};
+
+
+
+
+
+
+
+#endif // QUICKTIME_MATERIAL_H