diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/mediarecorder/track_recorder.h')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/mediarecorder/track_recorder.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/chromium/third_party/blink/renderer/modules/mediarecorder/track_recorder.h b/chromium/third_party/blink/renderer/modules/mediarecorder/track_recorder.h new file mode 100644 index 00000000000..bd13d24f5ba --- /dev/null +++ b/chromium/third_party/blink/renderer/modules/mediarecorder/track_recorder.h @@ -0,0 +1,46 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIARECORDER_TRACK_RECORDER_H_ +#define THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIARECORDER_TRACK_RECORDER_H_ + +#include "third_party/blink/public/platform/modules/mediastream/web_media_stream_sink.h" +#include "third_party/blink/renderer/modules/modules_export.h" +#include "third_party/blink/renderer/platform/heap/garbage_collected.h" + +namespace blink { + +// This class exists to give MediaRecorder support for behavior related to +// all tracks ending. +// It's a template because VideoTrackRecorder and AudioTrackRecorder inherit +// from different base classes. +// Note: this class supports instantiation with classes that inherit from +// WebMediaStreamSink. +template <class MediaStreamSink> +class TrackRecorder : public MediaStreamSink { + public: + explicit TrackRecorder(base::OnceClosure track_ended_cb); + ~TrackRecorder() override = default; + + // WebMediaStreamSink + void OnReadyStateChanged(WebMediaStreamSource::ReadyState state) override; + + private: + base::OnceClosure track_ended_cb_; +}; + +template <class MediaStreamSink> +TrackRecorder<MediaStreamSink>::TrackRecorder(base::OnceClosure track_ended_cb) + : track_ended_cb_(std::move(track_ended_cb)) {} + +template <class MediaStreamSink> +void TrackRecorder<MediaStreamSink>::OnReadyStateChanged( + WebMediaStreamSource::ReadyState state) { + if (state == WebMediaStreamSource::kReadyStateEnded) + std::move(track_ended_cb_).Run(); +} + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_MEDIARECORDER_TRACK_RECORDER_H_ |