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

Side by Side Diff: extensions/renderer/api/display_source/wifi_display/wifi_display_media_pipeline.cc

Issue 1911403003: [chrome.displaySource] Move video stream info creation to encoders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Rebase, thead checker DCHECK Created 4 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "extensions/renderer/api/display_source/wifi_display/wifi_display_media _pipeline.h" 5 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_media _pipeline.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/public/renderer/render_thread.h" 8 #include "content/public/renderer/render_thread.h"
9 #include "content/public/renderer/video_encode_accelerator.h" 9 #include "content/public/renderer/video_encode_accelerator.h"
10 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_eleme ntary_stream_descriptor.h" 10 #include "extensions/renderer/api/display_source/wifi_display/wifi_display_eleme ntary_stream_descriptor.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 video_encoder_->InsertRawVideoFrame(video_frame, reference_time); 66 video_encoder_->InsertRawVideoFrame(video_frame, reference_time);
67 } 67 }
68 68
69 void WiFiDisplayMediaPipeline::RequestIDRPicture() { 69 void WiFiDisplayMediaPipeline::RequestIDRPicture() {
70 DCHECK(video_encoder_); 70 DCHECK(video_encoder_);
71 video_encoder_->RequestIDRPicture(); 71 video_encoder_->RequestIDRPicture();
72 } 72 }
73 73
74 enum WiFiDisplayMediaPipeline::InitializationStep : unsigned { 74 enum WiFiDisplayMediaPipeline::InitializationStep : unsigned {
75 INITIALIZE_FIRST, 75 INITIALIZE_FIRST,
76 INITIALIZE_MEDIA_PACKETIZER = INITIALIZE_FIRST, 76 INITIALIZE_VIDEO_ENCODER = INITIALIZE_FIRST,
77 INITIALIZE_VIDEO_ENCODER, 77 INITIALIZE_MEDIA_PACKETIZER,
78 INITIALIZE_MEDIA_SERVICE, 78 INITIALIZE_MEDIA_SERVICE,
79 INITIALIZE_LAST = INITIALIZE_MEDIA_SERVICE 79 INITIALIZE_LAST = INITIALIZE_MEDIA_SERVICE
80 }; 80 };
81 81
82 void WiFiDisplayMediaPipeline::Initialize( 82 void WiFiDisplayMediaPipeline::Initialize(
83 const InitCompletionCallback& callback) { 83 const InitCompletionCallback& callback) {
84 DCHECK(!video_encoder_ && !packetizer_); 84 DCHECK(!video_encoder_ && !packetizer_);
85 OnInitialize(callback, INITIALIZE_FIRST, true); 85 OnInitialize(callback, INITIALIZE_FIRST, true);
86 } 86 }
87 87
88 void WiFiDisplayMediaPipeline::OnInitialize( 88 void WiFiDisplayMediaPipeline::OnInitialize(
89 const InitCompletionCallback& callback, 89 const InitCompletionCallback& callback,
90 InitializationStep current_step, 90 InitializationStep current_step,
91 bool success) { 91 bool success) {
92 if (!success) { 92 if (!success) {
93 callback.Run(false); 93 callback.Run(false);
94 return; 94 return;
95 } 95 }
96 96
97 InitStepCompletionCallback init_step_callback; 97 InitStepCompletionCallback init_step_callback;
98 if (current_step < INITIALIZE_LAST) { 98 if (current_step < INITIALIZE_LAST) {
99 InitializationStep next_step = 99 InitializationStep next_step =
100 static_cast<InitializationStep>(current_step + 1u); 100 static_cast<InitializationStep>(current_step + 1u);
101 init_step_callback = base::Bind(&WiFiDisplayMediaPipeline::OnInitialize, 101 init_step_callback = base::Bind(&WiFiDisplayMediaPipeline::OnInitialize,
102 weak_factory_.GetWeakPtr(), callback, next_step); 102 weak_factory_.GetWeakPtr(), callback, next_step);
103 } 103 }
104 104
105 switch (current_step) { 105 switch (current_step) {
106 case INITIALIZE_MEDIA_PACKETIZER:
107 DCHECK(!packetizer_);
108 CreateMediaPacketizer();
109 init_step_callback.Run(true);
110 break;
111 case INITIALIZE_VIDEO_ENCODER: 106 case INITIALIZE_VIDEO_ENCODER:
112 DCHECK(!video_encoder_); 107 DCHECK(!video_encoder_);
113 if (type_ & wds::VideoSession) { 108 if (type_ & wds::VideoSession) {
114 auto result_callback = 109 auto result_callback =
115 base::Bind(&WiFiDisplayMediaPipeline::OnVideoEncoderCreated, 110 base::Bind(&WiFiDisplayMediaPipeline::OnVideoEncoderCreated,
116 weak_factory_.GetWeakPtr(), init_step_callback); 111 weak_factory_.GetWeakPtr(), init_step_callback);
117 WiFiDisplayVideoEncoder::Create(video_parameters_, result_callback); 112 WiFiDisplayVideoEncoder::Create(video_parameters_, result_callback);
118 } else { 113 } else {
119 init_step_callback.Run(true); 114 init_step_callback.Run(true);
120 } 115 }
121 break; 116 break;
117 case INITIALIZE_MEDIA_PACKETIZER:
118 DCHECK(!packetizer_);
119 CreateMediaPacketizer();
120 init_step_callback.Run(true);
121 break;
122 case INITIALIZE_MEDIA_SERVICE: 122 case INITIALIZE_MEDIA_SERVICE:
123 service_callback_.Run( 123 service_callback_.Run(
124 mojo::GetProxy(&media_service_), 124 mojo::GetProxy(&media_service_),
125 base::Bind(&WiFiDisplayMediaPipeline::OnMediaServiceRegistered, 125 base::Bind(&WiFiDisplayMediaPipeline::OnMediaServiceRegistered,
126 weak_factory_.GetWeakPtr(), callback)); 126 weak_factory_.GetWeakPtr(), callback));
127 break; 127 break;
128 } 128 }
129 } 129 }
130 130
131 void WiFiDisplayMediaPipeline::CreateMediaPacketizer() { 131 void WiFiDisplayMediaPipeline::CreateMediaPacketizer() {
132 DCHECK(!packetizer_); 132 DCHECK(!packetizer_);
133 std::vector<WiFiDisplayElementaryStreamInfo> stream_infos; 133 std::vector<WiFiDisplayElementaryStreamInfo> stream_infos;
134
134 if (type_ & wds::VideoSession) { 135 if (type_ & wds::VideoSession) {
135 std::vector<WiFiDisplayElementaryStreamDescriptor> descriptors; 136 DCHECK(video_encoder_);
136 descriptors.emplace_back( 137 stream_infos.push_back(video_encoder_->CreateElementaryStreamInfo());
137 WiFiDisplayElementaryStreamDescriptor::AVCTimingAndHRD::Create());
138 stream_infos.emplace_back(WiFiDisplayElementaryStreamInfo::VIDEO_H264,
139 std::move(descriptors));
140 } 138 }
141 139
142 if (type_ & wds::AudioSession) { 140 if (type_ & wds::AudioSession) {
143 using LPCMAudioStreamDescriptor = 141 using LPCMAudioStreamDescriptor =
144 WiFiDisplayElementaryStreamDescriptor::LPCMAudioStream; 142 WiFiDisplayElementaryStreamDescriptor::LPCMAudioStream;
145 std::vector<WiFiDisplayElementaryStreamDescriptor> descriptors; 143 std::vector<WiFiDisplayElementaryStreamDescriptor> descriptors;
146 descriptors.emplace_back( 144 descriptors.emplace_back(
147 LPCMAudioStreamDescriptor::Create( 145 LPCMAudioStreamDescriptor::Create(
148 audio_codec_.modes.test(wds::LPCM_48K_16B_2CH) 146 audio_codec_.modes.test(wds::LPCM_48K_16B_2CH)
149 ? LPCMAudioStreamDescriptor::SAMPLING_FREQUENCY_48K 147 ? LPCMAudioStreamDescriptor::SAMPLING_FREQUENCY_48K
150 : LPCMAudioStreamDescriptor::SAMPLING_FREQUENCY_44_1K, 148 : LPCMAudioStreamDescriptor::SAMPLING_FREQUENCY_44_1K,
151 LPCMAudioStreamDescriptor::BITS_PER_SAMPLE_16, 149 LPCMAudioStreamDescriptor::BITS_PER_SAMPLE_16,
152 false, // emphasis_flag 150 false, // emphasis_flag
153 LPCMAudioStreamDescriptor::NUMBER_OF_CHANNELS_STEREO)); 151 LPCMAudioStreamDescriptor::NUMBER_OF_CHANNELS_STEREO));
154 stream_infos.emplace_back(WiFiDisplayElementaryStreamInfo::AUDIO_LPCM, 152 stream_infos.emplace_back(WiFiDisplayElementaryStreamInfo::AUDIO_LPCM,
155 std::move(descriptors)); 153 std::move(descriptors));
156 } 154 }
157 155
158 packetizer_.reset(new WiFiDisplayMediaPacketizer( 156 packetizer_.reset(new WiFiDisplayMediaPacketizer(
159 base::TimeDelta::FromMilliseconds(200), 157 base::TimeDelta::FromMilliseconds(200), stream_infos,
160 std::move(stream_infos),
161 base::Bind(&WiFiDisplayMediaPipeline::OnPacketizedMediaDatagramPacket, 158 base::Bind(&WiFiDisplayMediaPipeline::OnPacketizedMediaDatagramPacket,
162 base::Unretained(this)))); 159 base::Unretained(this))));
163 } 160 }
164 161
165 void WiFiDisplayMediaPipeline::OnVideoEncoderCreated( 162 void WiFiDisplayMediaPipeline::OnVideoEncoderCreated(
166 const InitStepCompletionCallback& callback, 163 const InitStepCompletionCallback& callback,
167 scoped_refptr<WiFiDisplayVideoEncoder> video_encoder) { 164 scoped_refptr<WiFiDisplayVideoEncoder> video_encoder) {
168 DCHECK(!video_encoder_); 165 DCHECK(!video_encoder_);
169 166
170 if (!video_encoder) { 167 if (!video_encoder) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 } 201 }
205 202
206 bool WiFiDisplayMediaPipeline::OnPacketizedMediaDatagramPacket( 203 bool WiFiDisplayMediaPipeline::OnPacketizedMediaDatagramPacket(
207 WiFiDisplayMediaDatagramPacket media_datagram_packet) { 204 WiFiDisplayMediaDatagramPacket media_datagram_packet) {
208 DCHECK(media_service_); 205 DCHECK(media_service_);
209 media_service_->SendMediaPacket(std::move(media_datagram_packet)); 206 media_service_->SendMediaPacket(std::move(media_datagram_packet));
210 return true; 207 return true;
211 } 208 }
212 209
213 } // namespace extensions 210 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698