Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Side by Side Diff: media/cast/transport/transport_video_sender.cc

Issue 252923007: Cast: Fix two video freezing problems (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mac fix Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/cast/transport/transport_video_sender.h" 5 #include "media/cast/transport/transport_video_sender.h"
6 6
7 #include <list>
8
9 #include "base/bind.h" 7 #include "base/bind.h"
10 #include "base/logging.h" 8 #include "base/logging.h"
11 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
12 #include "media/base/video_frame.h" 10 #include "media/base/video_frame.h"
13 #include "media/cast/transport/pacing/paced_sender.h" 11 #include "media/cast/transport/pacing/paced_sender.h"
14 12
15 namespace media { 13 namespace media {
16 namespace cast { 14 namespace cast {
17 namespace transport { 15 namespace transport {
18 16
19 TransportVideoSender::TransportVideoSender( 17 TransportVideoSender::TransportVideoSender(
20 const CastTransportVideoConfig& config, 18 const CastTransportVideoConfig& config,
21 base::TickClock* clock, 19 base::TickClock* clock,
22 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner, 20 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner,
23 PacedSender* const paced_packet_sender) 21 PacedSender* const paced_packet_sender)
24 : rtp_max_delay_(base::TimeDelta::FromMilliseconds( 22 : rtp_sender_(clock, transport_task_runner, paced_packet_sender) {
25 config.base.rtp_config.max_delay_ms)), 23 initialized_ = rtp_sender_.InitializeVideo(config) &&
26 encryptor_(), 24 encryptor_.Initialize(config.rtp.config.aes_key,
27 rtp_sender_(clock, transport_task_runner, paced_packet_sender) { 25 config.rtp.config.aes_iv_mask);
28 rtp_sender_.InitializeVideo(config);
29 initialized_ =
30 encryptor_.Initialize(config.base.aes_key, config.base.aes_iv_mask);
31 } 26 }
32 27
33 TransportVideoSender::~TransportVideoSender() {} 28 TransportVideoSender::~TransportVideoSender() {}
34 29
35 void TransportVideoSender::InsertCodedVideoFrame( 30 void TransportVideoSender::InsertCodedVideoFrame(
36 const EncodedVideoFrame* coded_frame, 31 const EncodedVideoFrame* coded_frame,
37 const base::TimeTicks& capture_time) { 32 const base::TimeTicks& capture_time) {
33 if (!initialized_) {
34 return;
35 }
38 if (encryptor_.initialized()) { 36 if (encryptor_.initialized()) {
39 EncodedVideoFrame encrypted_video_frame; 37 EncodedVideoFrame encrypted_video_frame;
40 38
41 if (!EncryptVideoFrame(*coded_frame, &encrypted_video_frame)) 39 if (!EncryptVideoFrame(*coded_frame, &encrypted_video_frame))
42 return; 40 return;
43 41
44 rtp_sender_.IncomingEncodedVideoFrame(&encrypted_video_frame, capture_time); 42 rtp_sender_.IncomingEncodedVideoFrame(&encrypted_video_frame, capture_time);
45 } else { 43 } else {
46 rtp_sender_.IncomingEncodedVideoFrame(coded_frame, capture_time); 44 rtp_sender_.IncomingEncodedVideoFrame(coded_frame, capture_time);
47 } 45 }
48 if (coded_frame->key_frame) { 46 if (coded_frame->key_frame) {
49 VLOG(1) << "Send encoded key frame; frame_id:" 47 VLOG(1) << "Send encoded key frame; frame_id:"
50 << static_cast<int>(coded_frame->frame_id); 48 << static_cast<int>(coded_frame->frame_id);
51 } 49 }
52 } 50 }
53 51
54 bool TransportVideoSender::EncryptVideoFrame( 52 bool TransportVideoSender::EncryptVideoFrame(
55 const EncodedVideoFrame& video_frame, 53 const EncodedVideoFrame& video_frame,
56 EncodedVideoFrame* encrypted_frame) { 54 EncodedVideoFrame* encrypted_frame) {
55 if (!initialized_) {
56 return false;
57 }
57 if (!encryptor_.Encrypt( 58 if (!encryptor_.Encrypt(
58 video_frame.frame_id, video_frame.data, &(encrypted_frame->data))) 59 video_frame.frame_id, video_frame.data, &(encrypted_frame->data)))
59 return false; 60 return false;
60 61
61 encrypted_frame->codec = video_frame.codec; 62 encrypted_frame->codec = video_frame.codec;
62 encrypted_frame->key_frame = video_frame.key_frame; 63 encrypted_frame->key_frame = video_frame.key_frame;
63 encrypted_frame->frame_id = video_frame.frame_id; 64 encrypted_frame->frame_id = video_frame.frame_id;
64 encrypted_frame->last_referenced_frame_id = 65 encrypted_frame->last_referenced_frame_id =
65 video_frame.last_referenced_frame_id; 66 video_frame.last_referenced_frame_id;
66 return true; 67 return true;
67 } 68 }
68 69
69 void TransportVideoSender::ResendPackets( 70 void TransportVideoSender::ResendPackets(
70 const MissingFramesAndPacketsMap& missing_frames_and_packets) { 71 const MissingFramesAndPacketsMap& missing_frames_and_packets) {
72 if (!initialized_) {
73 return;
74 }
71 rtp_sender_.ResendPackets(missing_frames_and_packets); 75 rtp_sender_.ResendPackets(missing_frames_and_packets);
72 } 76 }
73 77
74 void TransportVideoSender::SubscribeVideoRtpStatsCallback( 78 void TransportVideoSender::SubscribeVideoRtpStatsCallback(
75 const CastTransportRtpStatistics& callback) { 79 const CastTransportRtpStatistics& callback) {
76 rtp_sender_.SubscribeRtpStatsCallback(callback); 80 rtp_sender_.SubscribeRtpStatsCallback(callback);
77 } 81 }
78 82
79 } // namespace transport 83 } // namespace transport
80 } // namespace cast 84 } // namespace cast
81 } // namespace media 85 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/transport/transport_audio_sender.cc ('k') | media/cast/video_sender/external_video_encoder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698