summaryrefslogtreecommitdiff
path: root/game/client/replay/replayvideo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/replay/replayvideo.cpp')
-rw-r--r--game/client/replay/replayvideo.cpp142
1 files changed, 142 insertions, 0 deletions
diff --git a/game/client/replay/replayvideo.cpp b/game/client/replay/replayvideo.cpp
new file mode 100644
index 0000000..f3588db
--- /dev/null
+++ b/game/client/replay/replayvideo.cpp
@@ -0,0 +1,142 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+//=======================================================================================//
+
+#include "cbase.h"
+
+#if defined( REPLAY_ENABLED )
+
+#include "replayvideo.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+//-----------------------------------------------------------------------------
+
+static ReplayVideoMode_t s_VideoModes[] =
+{
+ { 720, 480, 24, true, "#Replay_Res_480p" },
+ { 1280, 720, 24, true, "#Replay_Res_720p" },
+ { 1920, 1080, 24, true, "#Replay_Res_1080p" },
+
+ { 320, 240, 15, false, "#Replay_Res_Web" },
+ { 960, 640, 24, true, "#Replay_Res_iPhone_Horizontal" },
+ { 640, 960, 24, true, "#Replay_Res_iPhone_Vertical" },
+};
+
+#define VIDEO_MODE_COUNT ( sizeof( s_VideoModes ) / sizeof( s_VideoModes[0] ) )
+
+//-----------------------------------------------------------------------------
+#ifdef USE_WEBM_FOR_REPLAY
+static ReplayCodec_t s_Codecs[] =
+{
+ { VideoEncodeCodec::WEBM_CODEC, "#Replay_Codec_WEBM" },
+};
+static int s_nNumCodecs = ARRAYSIZE( s_Codecs );
+
+//-----------------------------------------------------------------------------
+
+static ReplayQualityPreset_t s_QualityPresets[] =
+{
+ { "#Replay_RenderSetting_Low", VideoEncodeCodec::WEBM_CODEC, 0, false, 0 },
+ { "#Replay_RenderSetting_Medium", VideoEncodeCodec::WEBM_CODEC, 50, false, 1 },
+ { "#Replay_RenderSetting_High", VideoEncodeCodec::WEBM_CODEC, 100, true, 2 },
+ { "#Replay_RenderSetting_Max", VideoEncodeCodec::WEBM_CODEC, 100, true, 3 },
+};
+static int s_NumQualityPresets = ARRAYSIZE( s_QualityPresets );
+static int s_DefaultQualityPreset = 1;
+
+#else
+static ReplayCodec_t s_Codecs[] =
+{
+ { VideoEncodeCodec::MJPEG_A_CODEC, "#Replay_Codec_MJPEGA" },
+ { VideoEncodeCodec::H264_CODEC, "#Replay_Codec_H264" },
+};
+static int s_nNumCodecs = ARRAYSIZE( s_Codecs );
+
+//-----------------------------------------------------------------------------
+
+static ReplayQualityPreset_t s_QualityPresets[] =
+{
+ { "#Replay_RenderSetting_Low", VideoEncodeCodec::MJPEG_A_CODEC, 0, false, 0 },
+ { "#Replay_RenderSetting_Medium", VideoEncodeCodec::MJPEG_A_CODEC, 50, false, 1 },
+ { "#Replay_RenderSetting_High", VideoEncodeCodec::MJPEG_A_CODEC, 100, true, 2 },
+ { "#Replay_RenderSetting_Max", VideoEncodeCodec::H264_CODEC, 100, true, 3 },
+};
+static int s_NumQualityPresets = ARRAYSIZE( s_QualityPresets );
+static int s_DefaultQualityPreset = 1;
+
+#endif
+
+
+//-----------------------------------------------------------------------------
+
+static const int s_QualityRange = 4;
+static const int s_QualityInterval = 100 / s_QualityRange;
+
+//-----------------------------------------------------------------------------
+
+int ReplayVideo_GetVideoModeCount()
+{
+ return VIDEO_MODE_COUNT;
+}
+
+const ReplayVideoMode_t &ReplayVideo_GetVideoMode( int i )
+{
+ AssertMsg( i >= 0 && i < VIDEO_MODE_COUNT, "Replay video mode out of range!" );
+ return s_VideoModes[ i ];
+}
+
+int ReplayVideo_GetDefaultQualityPreset()
+{
+ return s_DefaultQualityPreset;
+}
+
+int ReplayVideo_GetQualityInterval()
+{
+ return s_QualityInterval;
+}
+
+int ReplayVideo_GetQualityRange()
+{
+ return s_QualityRange;
+}
+
+int ReplayVideo_GetQualityPresetCount()
+{
+ return s_NumQualityPresets;
+}
+
+const ReplayQualityPreset_t &ReplayVideo_GetQualityPreset( int i )
+{
+ return s_QualityPresets[ i ];
+}
+
+int ReplayVideo_GetCodecCount()
+{
+ return s_nNumCodecs;
+}
+
+const ReplayCodec_t &ReplayVideo_GetCodec( int i )
+{
+ AssertMsg( i >= 0 && i < s_nNumCodecs, "Replay codec out of range!" );
+ return s_Codecs[ i ];
+}
+
+int ReplayVideo_FindCodecPresetFromCodec( VideoEncodeCodec_t nCodecId )
+{
+ AssertMsg( nCodecId < VideoEncodeCodec::CODEC_COUNT, "Codec ID out of range!" );
+ for ( int i = 0; i < VideoEncodeCodec::CODEC_COUNT; ++i )
+ {
+ if ( s_Codecs[ i ].m_nCodecId == nCodecId )
+ return i;
+ }
+
+ AssertMsg( 0, "Codec not found! This should never happen!" );
+
+ return 0;
+}
+
+//-----------------------------------------------------------------------------
+
+#endif