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

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

Issue 288103002: [Cast] EncodedAudioFrame+EncodedVideoFrame+reference_time --> EncodedFrame (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed hclam@'s first round comments. Fixed chrome unit_tests compiles. 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 | Annotate | Revision Log
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "media/base/video_frame.h" 10 #include "media/base/video_frame.h"
11 #include "media/cast/transport/pacing/paced_sender.h" 11 #include "media/cast/transport/pacing/paced_sender.h"
12 12
13 namespace media { 13 namespace media {
14 namespace cast { 14 namespace cast {
15 namespace transport { 15 namespace transport {
16 16
17 TransportVideoSender::TransportVideoSender( 17 TransportVideoSender::TransportVideoSender(
18 const CastTransportVideoConfig& config, 18 const CastTransportVideoConfig& config,
19 base::TickClock* clock, 19 base::TickClock* clock,
20 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner, 20 const scoped_refptr<base::SingleThreadTaskRunner>& transport_task_runner,
21 PacedSender* const paced_packet_sender) 21 PacedSender* const paced_packet_sender)
22 : rtp_sender_(clock, transport_task_runner, paced_packet_sender) { 22 : rtp_sender_(clock, transport_task_runner, paced_packet_sender) {
23 initialized_ = rtp_sender_.InitializeVideo(config) && 23 initialized_ = rtp_sender_.InitializeVideo(config) &&
24 encryptor_.Initialize(config.rtp.config.aes_key, 24 encryptor_.Initialize(config.rtp.config.aes_key,
25 config.rtp.config.aes_iv_mask); 25 config.rtp.config.aes_iv_mask);
26 } 26 }
27 27
28 TransportVideoSender::~TransportVideoSender() {} 28 TransportVideoSender::~TransportVideoSender() {}
29 29
30 void TransportVideoSender::InsertCodedVideoFrame( 30 void TransportVideoSender::SendFrame(const EncodedFrame& video_frame) {
31 const EncodedVideoFrame* coded_frame,
32 const base::TimeTicks& capture_time) {
33 if (!initialized_) { 31 if (!initialized_) {
34 return; 32 return;
35 } 33 }
36 if (encryptor_.initialized()) { 34 if (encryptor_.initialized()) {
37 EncodedVideoFrame encrypted_video_frame; 35 EncodedFrame encrypted_frame;
38 36 if (!EncryptVideoFrame(video_frame, &encrypted_frame)) {
39 if (!EncryptVideoFrame(*coded_frame, &encrypted_video_frame)) 37 NOTREACHED();
40 return; 38 return;
41 39 }
42 rtp_sender_.IncomingEncodedVideoFrame(&encrypted_video_frame, capture_time); 40 rtp_sender_.SendFrame(encrypted_frame);
43 } else { 41 } else {
44 rtp_sender_.IncomingEncodedVideoFrame(coded_frame, capture_time); 42 rtp_sender_.SendFrame(video_frame);
45 }
46 if (coded_frame->key_frame) {
47 VLOG(1) << "Send encoded key frame; frame_id:"
48 << static_cast<int>(coded_frame->frame_id);
49 } 43 }
50 } 44 }
51 45
52 bool TransportVideoSender::EncryptVideoFrame( 46 bool TransportVideoSender::EncryptVideoFrame(
53 const EncodedVideoFrame& video_frame, 47 const EncodedFrame& video_frame, EncodedFrame* encrypted_frame) {
54 EncodedVideoFrame* encrypted_frame) {
55 if (!initialized_) { 48 if (!initialized_) {
56 return false; 49 return false;
57 } 50 }
58 if (!encryptor_.Encrypt( 51 if (!encryptor_.Encrypt(
59 video_frame.frame_id, video_frame.data, &(encrypted_frame->data))) 52 video_frame.frame_id, video_frame.data, &(encrypted_frame->data)))
60 return false; 53 return false;
61 54
62 encrypted_frame->codec = video_frame.codec; 55 encrypted_frame->relationship = video_frame.relationship;
63 encrypted_frame->key_frame = video_frame.key_frame;
64 encrypted_frame->frame_id = video_frame.frame_id; 56 encrypted_frame->frame_id = video_frame.frame_id;
65 encrypted_frame->last_referenced_frame_id = 57 encrypted_frame->referenced_frame_id = video_frame.referenced_frame_id;
66 video_frame.last_referenced_frame_id; 58 encrypted_frame->rtp_timestamp = video_frame.rtp_timestamp;
59 encrypted_frame->reference_time = video_frame.reference_time;
67 return true; 60 return true;
68 } 61 }
69 62
70 void TransportVideoSender::ResendPackets( 63 void TransportVideoSender::ResendPackets(
71 const MissingFramesAndPacketsMap& missing_frames_and_packets) { 64 const MissingFramesAndPacketsMap& missing_frames_and_packets) {
72 if (!initialized_) { 65 if (!initialized_) {
73 return; 66 return;
74 } 67 }
75 rtp_sender_.ResendPackets(missing_frames_and_packets); 68 rtp_sender_.ResendPackets(missing_frames_and_packets);
76 } 69 }
77 70
78 void TransportVideoSender::SubscribeVideoRtpStatsCallback( 71 void TransportVideoSender::SubscribeVideoRtpStatsCallback(
79 const CastTransportRtpStatistics& callback) { 72 const CastTransportRtpStatistics& callback) {
80 rtp_sender_.SubscribeRtpStatsCallback(callback); 73 rtp_sender_.SubscribeRtpStatsCallback(callback);
81 } 74 }
82 75
83 } // namespace transport 76 } // namespace transport
84 } // namespace cast 77 } // namespace cast
85 } // namespace media 78 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698