diff options
Diffstat (limited to 'replay/cl_replaymovie.cpp')
| -rw-r--r-- | replay/cl_replaymovie.cpp | 266 |
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; +} + +//---------------------------------------------------------------------------------------- |