blob: 15c22aced5b38095afbc6c0930c8c6927f2ec1b1 [file] [log] [blame]
// 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_WEBCODECS_VIDEO_TRACK_READER_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_VIDEO_TRACK_READER_H_
#include "third_party/blink/public/web/modules/mediastream/media_stream_video_sink.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_video_frame_output_callback.h"
#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h"
#include "third_party/blink/renderer/modules/mediastream/media_stream_track.h"
#include "third_party/blink/renderer/modules/modules_export.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
namespace blink {
class ScriptState;
// Note: This class is deprecated. Use MediaStreamTrackProcessor instead.
// TODO(crbug.com/1157610): remove this class.
class MODULES_EXPORT VideoTrackReader final
: public ScriptWrappable,
public ExecutionContextLifecycleObserver,
public MediaStreamVideoSink {
DEFINE_WRAPPERTYPEINFO();
public:
static VideoTrackReader* Create(ScriptState*,
MediaStreamTrack*,
ExceptionState&);
VideoTrackReader(ScriptState*, MediaStreamTrack*);
// Connects |this| to |track_| and starts delivering frames via |callback_|.
void start(V8VideoFrameOutputCallback*, ExceptionState&);
// Disconnects from |track_| and clears |callback_|.
void stop(ExceptionState&);
void Trace(Visitor* visitor) const override;
private:
VideoTrackReader(const VideoTrackReader&) = delete;
VideoTrackReader& operator=(const VideoTrackReader&) = delete;
// ExecutionContextLifecycleObserver implementation.
void ContextDestroyed() override { DisconnectFromTrack(); }
// MediaStreamVideoSink implementation.
void OnReadyStateChanged(WebMediaStreamSource::ReadyState) override;
// Callback For MediaStreamVideoSink::ConnectToTrack.
void OnFrameFromVideoTrack(
scoped_refptr<media::VideoFrame> media_frame,
std::vector<scoped_refptr<media::VideoFrame>> scaled_media_frames,
base::TimeTicks estimated_capture_time);
void StopInternal();
void ExecuteCallbackOnMainThread(
scoped_refptr<media::VideoFrame> media_frame,
std::vector<scoped_refptr<media::VideoFrame>> scaled_media_frames);
// Whether we are connected to |track_| and using |callback_| to deliver
// frames.
bool started_;
const scoped_refptr<base::SingleThreadTaskRunner>
real_time_media_task_runner_;
Member<V8VideoFrameOutputCallback> callback_;
Member<MediaStreamTrack> track_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_WEBCODECS_VIDEO_TRACK_READER_H_