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

Side by Side Diff: webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc

Issue 2099483002: Add native handle support to SimulcastEncoderAdapter. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: git pull Created 4 years, 5 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
« no previous file with comments | « no previous file | webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 streaminfos_[stream_idx].key_frame_request = false; 282 streaminfos_[stream_idx].key_frame_request = false;
283 } else { 283 } else {
284 stream_frame_types.push_back(kVideoFrameDelta); 284 stream_frame_types.push_back(kVideoFrameDelta);
285 } 285 }
286 286
287 int dst_width = streaminfos_[stream_idx].width; 287 int dst_width = streaminfos_[stream_idx].width;
288 int dst_height = streaminfos_[stream_idx].height; 288 int dst_height = streaminfos_[stream_idx].height;
289 // If scaling isn't required, because the input resolution 289 // If scaling isn't required, because the input resolution
290 // matches the destination or the input image is empty (e.g. 290 // matches the destination or the input image is empty (e.g.
291 // a keyframe request for encoders with internal camera 291 // a keyframe request for encoders with internal camera
292 // sources), pass the image on directly. Otherwise, we'll 292 // sources) or the source image has a native handle, pass the image on
293 // scale it to match what the encoder expects (below). 293 // directly. Otherwise, we'll scale it to match what the encoder expects
294 // (below).
295 // For texture frames, the underlying encoder is expected to be able to
296 // correctly sample/scale the source texture.
297 // TODO(perkj): ensure that works going forward, and figure out how this
298 // affects webrtc:5683.
294 if ((dst_width == src_width && dst_height == src_height) || 299 if ((dst_width == src_width && dst_height == src_height) ||
295 input_image.IsZeroSize()) { 300 input_image.IsZeroSize() ||
301 input_image.video_frame_buffer()->native_handle()) {
296 int ret = streaminfos_[stream_idx].encoder->Encode( 302 int ret = streaminfos_[stream_idx].encoder->Encode(
297 input_image, codec_specific_info, &stream_frame_types); 303 input_image, codec_specific_info, &stream_frame_types);
298 if (ret != WEBRTC_VIDEO_CODEC_OK) { 304 if (ret != WEBRTC_VIDEO_CODEC_OK) {
299 return ret; 305 return ret;
300 } 306 }
301 } else { 307 } else {
302 VideoFrame dst_frame; 308 VideoFrame dst_frame;
303 // Making sure that destination frame is of sufficient size. 309 // Making sure that destination frame is of sufficient size.
304 // Aligning stride values based on width. 310 // Aligning stride values based on width.
305 dst_frame.CreateEmptyFrame(dst_width, dst_height, dst_width, 311 dst_frame.CreateEmptyFrame(dst_width, dst_height, dst_width,
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 return !streaminfos_.empty(); 509 return !streaminfos_.empty();
504 } 510 }
505 511
506 void SimulcastEncoderAdapter::OnDroppedFrame() { 512 void SimulcastEncoderAdapter::OnDroppedFrame() {
507 streaminfos_[0].encoder->OnDroppedFrame(); 513 streaminfos_[0].encoder->OnDroppedFrame();
508 } 514 }
509 515
510 bool SimulcastEncoderAdapter::SupportsNativeHandle() const { 516 bool SimulcastEncoderAdapter::SupportsNativeHandle() const {
511 // We should not be calling this method before streaminfos_ are configured. 517 // We should not be calling this method before streaminfos_ are configured.
512 RTC_DCHECK(!streaminfos_.empty()); 518 RTC_DCHECK(!streaminfos_.empty());
513 // TODO(pbos): Support textures when using more than one encoder. 519 for (const auto& streaminfo : streaminfos_) {
514 if (streaminfos_.size() != 1) 520 if (!streaminfo.encoder->SupportsNativeHandle())
515 return false; 521 return false;
516 return streaminfos_[0].encoder->SupportsNativeHandle(); 522 }
523 return true;
517 } 524 }
518 525
519 const char* SimulcastEncoderAdapter::ImplementationName() const { 526 const char* SimulcastEncoderAdapter::ImplementationName() const {
520 return implementation_name_.c_str(); 527 return implementation_name_.c_str();
521 } 528 }
522 529
523 } // namespace webrtc 530 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698