diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /video/webm_recorder.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'video/webm_recorder.h')
| -rw-r--r-- | video/webm_recorder.h | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/video/webm_recorder.h b/video/webm_recorder.h new file mode 100644 index 0000000..1c68a69 --- /dev/null +++ b/video/webm_recorder.h @@ -0,0 +1,111 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +//---------------------------------------------------------------------------------------- + +#ifndef WEBM_RECORDER_H +#define WEBM_RECORDER_H + +#ifdef _WIN32 +#pragma once +#endif + +//-------------------------------------------------------------------------------- +//#include "" + +#include "video/ivideoservices.h" + +#include "video_macros.h" +#include "webm_common.h" + +// comment out to prevent logging of creation data +//#define LOG_ENCODER_OPERATIONS + +#if defined( LOG_ENCODER_OPERATIONS ) || defined( LOG_ENCODER_AUDIO_OPERATIONS ) || defined ( LOG_FRAMES_TO_TGA ) || defined ( ENABLE_EXTERNAL_ENCODER_LOGGING ) + #include <filesystem.h> +#endif + + +class CWebMVideoRecorder : public IVideoRecorder +{ +public: + CWebMVideoRecorder(); + ~CWebMVideoRecorder(); + + virtual bool EstimateMovieFileSize( size_t *pEstSize, int movieWidth, int movieHeight, VideoFrameRate_t movieFps, float movieDuration, VideoEncodeCodec_t theCodec, int videoQuality, AudioEncodeSourceFormat_t srcAudioFormat = AudioEncodeSourceFormat::AUDIO_NONE, int audioSampleRate = 0 ); + + virtual bool CreateNewMovieFile( const char *pFilename, bool hasAudioTrack = false ); + + virtual bool SetMovieVideoParameters( VideoEncodeCodec_t theCodec, int videoQuality, int movieFrameWidth, int movieFrameHeight, VideoFrameRate_t movieFPS, VideoEncodeGamma_t gamma = VideoEncodeGamma::NO_GAMMA_ADJUST ); + virtual bool SetMovieSourceImageParameters( VideoEncodeSourceFormat_t srcImageFormat, int imgWidth, int imgHeight ); + virtual bool SetMovieSourceAudioParameters( AudioEncodeSourceFormat_t srcAudioFormat = AudioEncodeSourceFormat::AUDIO_NONE, int audioSampleRate = 0, AudioEncodeOptions_t audioOptions = AudioEncodeOptions::NO_AUDIO_OPTIONS, int audioSampleGroupSize = 0 ); + + virtual bool IsReadyToRecord(); + virtual VideoResult_t GetLastResult(); + + virtual bool AppendVideoFrame( void *pFrameBuffer, int nStrideAdjustBytes = 0 ); + virtual bool AppendAudioSamples( void *pSampleBuffer, size_t sampleSize ); + + virtual int GetFrameCount(); + virtual int GetSampleCount(); + virtual int GetSampleRate(); + virtual VideoFrameRate_t GetFPS(); + + virtual bool AbortMovie(); + virtual bool FinishMovie( bool SaveMovieToDisk = true ); + +private: + bool FlushAudioSamples(); + void ConvertBGRAToYV12( void *pFrameBuffer, int nStrideAdjustBytes, vpx_image_t *m_SrcImageYV12Buffer, bool fIncludesAlpha ); + void SetResult( VideoResult_t resultCode ); + + float GetVideoDataRate( int quality, int width, int height ); + float GetAudioDataRate( int quality, int width, int height ); + + VideoResult_t m_LastResult; + bool m_bHasAudio; + bool m_bMovieFinished; + + int m_nFramesAdded; + int m_nAudioFramesAdded; + int m_nSamplesAdded; + + VideoFrameRate_t m_MovieRecordFPS; + int m_MovieTimeScale; + int m_DurationPerFrame; + + unsigned long m_FrameDuration; + + int m_MovieFrameWidth; + int m_MovieFrameHeight; + + vpx_image_t *m_SrcImageYV12Buffer; + + VideoEncodeGamma_t m_MovieGamma; + + VideoEncodeSourceFormat_t m_SrcImageFormat; + int m_SrcImageWidth; + int m_SrcImageHeight; + + // WebM VPX + vpx_codec_ctx_t m_vpxContext; + vpx_codec_enc_cfg_t m_vpxConfig; + mkvmuxer::MkvWriter m_mkvWriter; + mkvmuxer::Segment m_mkvMuxerSegment; + uint64 m_vid_track; + + // Vorbis audio + uint64 m_aud_track; + int m_audioChannels; + int m_audioSampleRate; + int m_audioSampleGroupSize; + int m_audioBitDepth; + + vorbis_info m_vi; + vorbis_dsp_state m_vd; + vorbis_block m_vb; + vorbis_comment m_vc; +}; + + + +#endif // WEBM_RECORDER_H |