blob: 066c0db317a8e8158dae5bba0f7d5718335f0afc [file] [log] [blame]
kjellander6f8ce062015-11-16 21:52:241/*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Rasmus Brandt20879e12022-09-30 08:02:5611#ifndef VIDEO_RENDER_INCOMING_VIDEO_STREAM_H_
12#define VIDEO_RENDER_INCOMING_VIDEO_STREAM_H_
kjellander6f8ce062015-11-16 21:52:2413
Yves Gerey988cc082018-10-23 10:03:0114#include <stdint.h>
15
Danil Chapovalovf1fc6ab2024-01-22 09:51:5316#include <memory>
17
Artem Titovd15a5752021-02-10 13:31:2418#include "api/sequence_checker.h"
Danil Chapovalovf1fc6ab2024-01-22 09:51:5319#include "api/task_queue/task_queue_base.h"
Sebastian Jansson74682c12019-03-01 10:50:2020#include "api/task_queue/task_queue_factory.h"
Yves Gerey988cc082018-10-23 10:03:0121#include "api/video/video_frame.h"
Niels Möllerc6ce9c52018-05-11 09:15:3022#include "api/video/video_sink_interface.h"
Mirko Bonadei92ea95e2017-09-15 04:47:3123#include "rtc_base/race_checker.h"
Niels Möller4a5c8552020-12-16 15:30:0124#include "rtc_base/thread_annotations.h"
Rasmus Brandt20879e12022-09-30 08:02:5625#include "video/render/video_render_frames.h"
kjellander6f8ce062015-11-16 21:52:2426
27namespace webrtc {
kjellander6f8ce062015-11-16 21:52:2428
nisse30f118e2016-05-03 08:09:1129class IncomingVideoStream : public rtc::VideoSinkInterface<VideoFrame> {
kjellander6f8ce062015-11-16 21:52:2430 public:
Sebastian Jansson74682c12019-03-01 10:50:2031 IncomingVideoStream(TaskQueueFactory* task_queue_factory,
32 int32_t delay_ms,
tommi2e82f382016-06-21 07:26:4333 rtc::VideoSinkInterface<VideoFrame>* callback);
34 ~IncomingVideoStream() override;
kjellander6f8ce062015-11-16 21:52:2435
kjellander6f8ce062015-11-16 21:52:2436 private:
tommi2e82f382016-06-21 07:26:4337 void OnFrame(const VideoFrame& video_frame) override;
tommiede07592017-02-27 15:16:1038 void Dequeue();
39
Artem Titovc8421c42021-02-02 09:57:1940 SequenceChecker main_thread_checker_;
Peter Boström02bafc62016-07-01 10:45:1541 rtc::RaceChecker decoder_race_checker_;
tommi2e82f382016-06-21 07:26:4342
Danil Chapovalovf1fc6ab2024-01-22 09:51:5343 VideoRenderFrames render_buffers_ RTC_GUARDED_BY(incoming_render_queue_);
tommiede07592017-02-27 15:16:1044 rtc::VideoSinkInterface<VideoFrame>* const callback_;
Danil Chapovalovf1fc6ab2024-01-22 09:51:5345 std::unique_ptr<TaskQueueBase, TaskQueueDeleter> incoming_render_queue_;
kjellander6f8ce062015-11-16 21:52:2446};
47
kjellander6f8ce062015-11-16 21:52:2448} // namespace webrtc
49
Rasmus Brandt20879e12022-09-30 08:02:5650#endif // VIDEO_RENDER_INCOMING_VIDEO_STREAM_H_