OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 rtc::VideoSinkInterface<VideoFrame>* callback) | 22 rtc::VideoSinkInterface<VideoFrame>* callback) |
23 : incoming_render_thread_(&IncomingVideoStreamThreadFun, | 23 : incoming_render_thread_(&IncomingVideoStreamThreadFun, |
24 this, | 24 this, |
25 "IncomingVideoStreamThread"), | 25 "IncomingVideoStreamThread"), |
26 deliver_buffer_event_(EventTimerWrapper::Create()), | 26 deliver_buffer_event_(EventTimerWrapper::Create()), |
27 external_callback_(callback), | 27 external_callback_(callback), |
28 render_buffers_(new VideoRenderFrames(delay_ms)) { | 28 render_buffers_(new VideoRenderFrames(delay_ms)) { |
29 RTC_DCHECK(external_callback_); | 29 RTC_DCHECK(external_callback_); |
30 | 30 |
31 render_thread_checker_.DetachFromThread(); | 31 render_thread_checker_.DetachFromThread(); |
32 decoder_thread_checker_.DetachFromThread(); | |
33 | 32 |
34 incoming_render_thread_.Start(); | 33 incoming_render_thread_.Start(); |
35 incoming_render_thread_.SetPriority(rtc::kRealtimePriority); | 34 incoming_render_thread_.SetPriority(rtc::kRealtimePriority); |
36 deliver_buffer_event_->StartTimer(false, kEventStartupTimeMs); | 35 deliver_buffer_event_->StartTimer(false, kEventStartupTimeMs); |
37 } | 36 } |
38 | 37 |
39 IncomingVideoStream::~IncomingVideoStream() { | 38 IncomingVideoStream::~IncomingVideoStream() { |
40 RTC_DCHECK(main_thread_checker_.CalledOnValidThread()); | 39 RTC_DCHECK(main_thread_checker_.CalledOnValidThread()); |
41 | 40 |
42 { | 41 { |
43 rtc::CritScope cs(&buffer_critsect_); | 42 rtc::CritScope cs(&buffer_critsect_); |
44 render_buffers_.reset(); | 43 render_buffers_.reset(); |
45 } | 44 } |
46 | 45 |
47 deliver_buffer_event_->Set(); | 46 deliver_buffer_event_->Set(); |
48 incoming_render_thread_.Stop(); | 47 incoming_render_thread_.Stop(); |
49 deliver_buffer_event_->StopTimer(); | 48 deliver_buffer_event_->StopTimer(); |
50 } | 49 } |
51 | 50 |
52 void IncomingVideoStream::OnFrame(const VideoFrame& video_frame) { | 51 void IncomingVideoStream::OnFrame(const VideoFrame& video_frame) { |
53 RTC_DCHECK_RUN_ON(&decoder_thread_checker_); | 52 // Most of the time we'll be on a decoder thread here, but when using |
| 53 // VideoToolbox on iOS, we'll get called on a thread from a thread pool. |
54 | 54 |
55 // Hand over or insert frame. | 55 // Hand over or insert frame. |
56 rtc::CritScope csB(&buffer_critsect_); | 56 rtc::CritScope csB(&buffer_critsect_); |
57 if (render_buffers_->AddFrame(video_frame) == 1) { | 57 if (render_buffers_->AddFrame(video_frame) == 1) { |
58 deliver_buffer_event_->Set(); | 58 deliver_buffer_event_->Set(); |
59 } | 59 } |
60 } | 60 } |
61 | 61 |
62 bool IncomingVideoStream::IncomingVideoStreamThreadFun(void* obj) { | 62 bool IncomingVideoStream::IncomingVideoStreamThreadFun(void* obj) { |
63 return static_cast<IncomingVideoStream*>(obj)->IncomingVideoStreamProcess(); | 63 return static_cast<IncomingVideoStream*>(obj)->IncomingVideoStreamProcess(); |
(...skipping 24 matching lines...) Expand all Loading... |
88 deliver_buffer_event_->StartTimer(false, wait_time); | 88 deliver_buffer_event_->StartTimer(false, wait_time); |
89 | 89 |
90 if (frame_to_render) { | 90 if (frame_to_render) { |
91 external_callback_->OnFrame(*frame_to_render); | 91 external_callback_->OnFrame(*frame_to_render); |
92 } | 92 } |
93 } | 93 } |
94 return true; | 94 return true; |
95 } | 95 } |
96 | 96 |
97 } // namespace webrtc | 97 } // namespace webrtc |
OLD | NEW |