summaryrefslogtreecommitdiff
path: root/replay/cl_replaymovie.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'replay/cl_replaymovie.cpp')
-rw-r--r--replay/cl_replaymovie.cpp266
1 files changed, 266 insertions, 0 deletions
diff --git a/replay/cl_replaymovie.cpp b/replay/cl_replaymovie.cpp
new file mode 100644
index 0000000..79dbf3d
--- /dev/null
+++ b/replay/cl_replaymovie.cpp
@@ -0,0 +1,266 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+//=======================================================================================//
+
+#include "cl_replaymovie.h"
+#include "replay/replayutils.h"
+#include "replay/shared_defs.h"
+#include "KeyValues.h"
+#include "replay/replay.h"
+#include "cl_replaycontext.h"
+#include "cl_replaymanager.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+//----------------------------------------------------------------------------------------
+
+CReplayMovie::CReplayMovie()
+: m_hReplay( REPLAY_HANDLE_INVALID ),
+ m_bRendered( false ),
+ m_bUploaded( false ),
+ m_flRenderTime( 0.0f ),
+ m_flLength( 0.0f ),
+ m_pUserData( NULL )
+{
+ V_wcsncpy( m_wszTitle, L"Untitled", sizeof( m_wszTitle ) );
+}
+
+bool CReplayMovie::Read( KeyValues *pIn )
+{
+ if ( !BaseClass::Read( pIn ) )
+ return false;
+
+ m_hReplay = (ReplayHandle_t)pIn->GetInt( "replay_handle", REPLAY_HANDLE_INVALID );
+ m_bRendered = pIn->GetInt( "rendered" ) != 0;
+ V_wcsncpy( m_wszTitle, pIn->GetWString( "title" ), sizeof( m_wszTitle ) );
+ m_strFilename = pIn->GetString( "filename" );
+ m_strUploadURL = pIn->GetString( "upload_url" );
+ m_bUploaded = pIn->GetInt( "uploaded" ) != 0;
+ m_flRenderTime = pIn->GetFloat( "rendertime" );
+ m_flLength = pIn->GetFloat( "length" );
+ m_RecordTime.Read( pIn );
+
+ return ReadRenderSettings( pIn );
+}
+
+void CReplayMovie::Write( KeyValues* pOut )
+{
+ BaseClass::Write( pOut );
+
+ pOut->SetInt( "replay_handle", (int)m_hReplay );
+ pOut->SetInt( "rendered", (int)m_bRendered );
+ pOut->SetWString( "title", m_wszTitle );
+ pOut->SetString( "filename", m_strFilename.Get() );
+ pOut->SetString( "upload_url", m_strUploadURL.Get() );
+ pOut->SetInt( "uploaded", (int)m_bUploaded );
+ pOut->SetFloat( "rendertime", m_flRenderTime );
+ pOut->SetFloat( "length", m_flLength );
+ m_RecordTime.Write( pOut );
+
+ WriteRenderSettings( pOut );
+}
+
+bool CReplayMovie::ReadRenderSettings( KeyValues *pIn )
+{
+ KeyValues *pRenderSettingsSubKey = pIn->FindKey( "rendersettings" );
+ if ( !pRenderSettingsSubKey )
+ {
+ AssertMsg( 0, "No render settings sub key found for movie!" );
+ return true; // Continue to load anyway
+ }
+
+ m_RenderSettings.m_nWidth = pRenderSettingsSubKey->GetInt( "width" );
+ m_RenderSettings.m_nHeight = pRenderSettingsSubKey->GetInt( "height" );
+ m_RenderSettings.m_nMotionBlurQuality = pRenderSettingsSubKey->GetInt( "motionblurquality" );
+ m_RenderSettings.m_FPS.SetRaw( pRenderSettingsSubKey->GetInt( "fps.ups" ), pRenderSettingsSubKey->GetInt( "fps.upf" ) );
+ m_RenderSettings.m_Codec = ( VideoEncodeCodec_t )pRenderSettingsSubKey->GetInt( "codec" );
+ m_RenderSettings.m_nEncodingQuality = pRenderSettingsSubKey->GetInt( "encoding_quality" );
+ m_RenderSettings.m_bMotionBlurEnabled = pRenderSettingsSubKey->GetBool( "mb_enabled" );
+ m_RenderSettings.m_bAAEnabled = pRenderSettingsSubKey->GetBool( "aa_enabled" );
+ m_RenderSettings.m_bRaw = pRenderSettingsSubKey->GetBool( "raw" );
+
+ return true;
+}
+
+void CReplayMovie::WriteRenderSettings( KeyValues *pOut )
+{
+ KeyValues *pRenderSettingsSubKey = new KeyValues( "rendersettings" );
+ if ( !pRenderSettingsSubKey )
+ {
+ AssertMsg( 0, "Failed to allocate render settings sub key for movie!" );
+ return;
+ }
+
+ pOut->AddSubKey( pRenderSettingsSubKey );
+
+ pRenderSettingsSubKey->SetInt( "width", m_RenderSettings.m_nWidth );
+ pRenderSettingsSubKey->SetInt( "height", m_RenderSettings.m_nHeight );
+ pRenderSettingsSubKey->SetInt( "motionblurquality", m_RenderSettings.m_nMotionBlurQuality );
+ pRenderSettingsSubKey->SetInt( "fps.ups", m_RenderSettings.m_FPS.GetUnitsPerSecond() );
+ pRenderSettingsSubKey->SetInt( "fps.upf", m_RenderSettings.m_FPS.GetUnitsPerFrame() );
+ pRenderSettingsSubKey->SetInt( "codec", (int)m_RenderSettings.m_Codec );
+ pRenderSettingsSubKey->SetInt( "encoding_quality", m_RenderSettings.m_nEncodingQuality );
+ pRenderSettingsSubKey->SetInt( "mb_enabled", (int)m_RenderSettings.m_bMotionBlurEnabled );
+ pRenderSettingsSubKey->SetInt( "aa_enabled", (int)m_RenderSettings.m_bAAEnabled );
+ pRenderSettingsSubKey->SetInt( "raw", (int)m_RenderSettings.m_bRaw );
+}
+
+const char *CReplayMovie::GetSubKeyTitle() const
+{
+ return Replay_va( "movie_%i", GetHandle() );
+}
+
+const char *CReplayMovie::GetPath() const
+{
+ return Replay_va( "%s%s%c", g_pClientReplayContextInternal->GetBaseDir(), SUBDIR_MOVIES, CORRECT_PATH_SEPARATOR );
+}
+
+void CReplayMovie::OnDelete()
+{
+ // Remove the actual movie from disk
+ g_pFullFileSystem->RemoveFile( Replay_va( "%s%s", CL_GetMovieManager()->GetRenderDir(), m_strFilename.Get() ) );
+}
+
+ReplayHandle_t CReplayMovie::GetMovieHandle() const
+{
+ return GetHandle();
+}
+
+ReplayHandle_t CReplayMovie::GetReplayHandle() const
+{
+ return m_hReplay;
+}
+
+const ReplayRenderSettings_t &CReplayMovie::GetRenderSettings()
+{
+ return m_RenderSettings;
+}
+
+void CReplayMovie::GetFrameDimensions( int &nWidth, int &nHeight )
+{
+ nWidth = m_RenderSettings.m_nWidth;
+ nHeight = m_RenderSettings.m_nHeight;
+}
+
+void CReplayMovie::SetIsRendered( bool bIsRendered )
+{
+ m_bRendered = bIsRendered;
+}
+
+void CReplayMovie::SetMovieFilename( const char *pFilename )
+{
+ m_strFilename = pFilename;
+}
+
+const char *CReplayMovie::GetMovieFilename() const
+{
+ return m_strFilename.Get();
+}
+
+void CReplayMovie::SetMovieTitle( const wchar_t *pTitle )
+{
+ V_wcsncpy( m_wszTitle, pTitle, sizeof( m_wszTitle ) );
+}
+
+void CReplayMovie::SetRenderTime( float flRenderTime )
+{
+ m_flRenderTime = flRenderTime;
+}
+
+float CReplayMovie::GetRenderTime() const
+{
+ return m_flRenderTime;
+}
+
+void CReplayMovie::CaptureRecordTime()
+{
+ m_RecordTime.InitDateAndTimeToNow();
+}
+
+void CReplayMovie::SetLength( float flLength )
+{
+ m_flLength = flLength;
+}
+
+CReplay *CReplayMovie::GetReplay() const
+{
+ return static_cast< CReplay * >( ::GetReplay( m_hReplay ) );
+}
+
+bool CReplayMovie::IsUploaded() const
+{
+ return m_bUploaded;
+}
+
+void CReplayMovie::SetUploaded( bool bUploaded )
+{
+ m_bUploaded = bUploaded;
+}
+
+void CReplayMovie::SetUploadURL( const char *pURL )
+{
+ m_strUploadURL = pURL;
+}
+
+const char *CReplayMovie::GetUploadURL() const
+{
+ return m_strUploadURL.Get();
+}
+
+const CReplayTime &CReplayMovie::GetItemDate() const
+{
+ return m_RecordTime;
+}
+
+bool CReplayMovie::IsItemRendered() const
+{
+ return GetReplay()->IsItemRendered();
+}
+
+CReplay *CReplayMovie::GetItemReplay()
+{
+ return GetReplay();
+}
+
+ReplayHandle_t CReplayMovie::GetItemReplayHandle() const
+{
+ return m_hReplay;
+}
+
+QueryableReplayItemHandle_t CReplayMovie::GetItemHandle() const
+{
+ return (QueryableReplayItemHandle_t)GetHandle();
+}
+
+const wchar_t *CReplayMovie::GetItemTitle() const
+{
+ return m_wszTitle;
+}
+
+void CReplayMovie::SetItemTitle( const wchar_t *pTitle )
+{
+ V_wcsncpy( m_wszTitle, pTitle, sizeof( m_wszTitle ) );
+}
+
+float CReplayMovie::GetItemLength() const
+{
+ return m_flLength;
+}
+
+void *CReplayMovie::GetUserData()
+{
+ return m_pUserData;
+}
+
+void CReplayMovie::SetUserData( void *pUserData )
+{
+ m_pUserData = pUserData;
+}
+
+bool CReplayMovie::IsItemAMovie() const
+{
+ return true;
+}
+
+//----------------------------------------------------------------------------------------