You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
266 lines
6.9 KiB
266 lines
6.9 KiB
//========= 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; |
|
} |
|
|
|
//----------------------------------------------------------------------------------------
|
|
|