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

Side by Side Diff: webrtc/modules/video_coding/codec_database.cc

Issue 1428293003: Add VideoCodec::PreferDecodeLate (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebased Created 5 years 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 /* 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 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 int number_of_cores, 78 int number_of_cores,
79 bool require_key_frame) 79 bool require_key_frame)
80 : settings(settings), 80 : settings(settings),
81 number_of_cores(number_of_cores), 81 number_of_cores(number_of_cores),
82 require_key_frame(require_key_frame) { 82 require_key_frame(require_key_frame) {
83 assert(number_of_cores >= 0); 83 assert(number_of_cores >= 0);
84 } 84 }
85 85
86 VCMExtDecoderMapItem::VCMExtDecoderMapItem( 86 VCMExtDecoderMapItem::VCMExtDecoderMapItem(
87 VideoDecoder* external_decoder_instance, 87 VideoDecoder* external_decoder_instance,
88 uint8_t payload_type, 88 uint8_t payload_type)
89 bool internal_render_timing)
90 : payload_type(payload_type), 89 : payload_type(payload_type),
91 external_decoder_instance(external_decoder_instance), 90 external_decoder_instance(external_decoder_instance) {}
92 internal_render_timing(internal_render_timing) {
93 }
94 91
95 VCMCodecDataBase::VCMCodecDataBase( 92 VCMCodecDataBase::VCMCodecDataBase(
96 VideoEncoderRateObserver* encoder_rate_observer, 93 VideoEncoderRateObserver* encoder_rate_observer,
97 VCMEncodedFrameCallback* encoded_frame_callback) 94 VCMEncodedFrameCallback* encoded_frame_callback)
98 : number_of_cores_(0), 95 : number_of_cores_(0),
99 max_payload_size_(kDefaultPayloadSize), 96 max_payload_size_(kDefaultPayloadSize),
100 periodic_key_frames_(false), 97 periodic_key_frames_(false),
101 pending_encoder_reset_(true), 98 pending_encoder_reset_(true),
102 send_codec_(), 99 send_codec_(),
103 receive_codec_(), 100 receive_codec_(),
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 ptr_decoder_ = nullptr; 409 ptr_decoder_ = nullptr;
413 } 410 }
414 DeregisterReceiveCodec(payload_type); 411 DeregisterReceiveCodec(payload_type);
415 delete it->second; 412 delete it->second;
416 dec_external_map_.erase(it); 413 dec_external_map_.erase(it);
417 return true; 414 return true;
418 } 415 }
419 416
420 // Add the external encoder object to the list of external decoders. 417 // Add the external encoder object to the list of external decoders.
421 // Won't be registered as a receive codec until RegisterReceiveCodec is called. 418 // Won't be registered as a receive codec until RegisterReceiveCodec is called.
422 void VCMCodecDataBase::RegisterExternalDecoder( 419 void VCMCodecDataBase::RegisterExternalDecoder(VideoDecoder* external_decoder,
423 VideoDecoder* external_decoder, 420 uint8_t payload_type) {
424 uint8_t payload_type,
425 bool internal_render_timing) {
426 // Check if payload value already exists, if so - erase old and insert new. 421 // Check if payload value already exists, if so - erase old and insert new.
427 VCMExtDecoderMapItem* ext_decoder = new VCMExtDecoderMapItem( 422 VCMExtDecoderMapItem* ext_decoder =
428 external_decoder, payload_type, internal_render_timing); 423 new VCMExtDecoderMapItem(external_decoder, payload_type);
429 DeregisterExternalDecoder(payload_type); 424 DeregisterExternalDecoder(payload_type);
430 dec_external_map_[payload_type] = ext_decoder; 425 dec_external_map_[payload_type] = ext_decoder;
431 } 426 }
432 427
433 bool VCMCodecDataBase::DecoderRegistered() const { 428 bool VCMCodecDataBase::DecoderRegistered() const {
434 return !dec_map_.empty(); 429 return !dec_map_.empty();
435 } 430 }
436 431
437 bool VCMCodecDataBase::RegisterReceiveCodec( 432 bool VCMCodecDataBase::RegisterReceiveCodec(
438 const VideoCodec* receive_codec, 433 const VideoCodec* receive_codec,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 if (decoder) { 512 if (decoder) {
518 assert(decoder->_decoder); 513 assert(decoder->_decoder);
519 decoder->Release(); 514 decoder->Release();
520 if (!decoder->External()) { 515 if (!decoder->External()) {
521 delete decoder->_decoder; 516 delete decoder->_decoder;
522 } 517 }
523 delete decoder; 518 delete decoder;
524 } 519 }
525 } 520 }
526 521
527 bool VCMCodecDataBase::SupportsRenderScheduling() const { 522 bool VCMCodecDataBase::PrefersLateDecoding() const {
528 const VCMExtDecoderMapItem* ext_item = FindExternalDecoderItem( 523 if (!ptr_decoder_)
529 receive_codec_.plType);
530 if (!ext_item)
531 return true; 524 return true;
532 return ext_item->internal_render_timing; 525 return ptr_decoder_->PrefersLateDecoding();
533 } 526 }
534 527
535 bool VCMCodecDataBase::MatchesCurrentResolution(int width, int height) const { 528 bool VCMCodecDataBase::MatchesCurrentResolution(int width, int height) const {
536 return send_codec_.width == width && send_codec_.height == height; 529 return send_codec_.width == width && send_codec_.height == height;
537 } 530 }
538 531
539 VCMGenericDecoder* VCMCodecDataBase::CreateAndInitDecoder( 532 VCMGenericDecoder* VCMCodecDataBase::CreateAndInitDecoder(
540 const VCMEncodedFrame& frame, 533 const VCMEncodedFrame& frame,
541 VideoCodec* new_codec) const { 534 VideoCodec* new_codec) const {
542 uint8_t payload_type = frame.PayloadType(); 535 uint8_t payload_type = frame.PayloadType();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 610
618 const VCMExtDecoderMapItem* VCMCodecDataBase::FindExternalDecoderItem( 611 const VCMExtDecoderMapItem* VCMCodecDataBase::FindExternalDecoderItem(
619 uint8_t payload_type) const { 612 uint8_t payload_type) const {
620 ExternalDecoderMap::const_iterator it = dec_external_map_.find(payload_type); 613 ExternalDecoderMap::const_iterator it = dec_external_map_.find(payload_type);
621 if (it != dec_external_map_.end()) { 614 if (it != dec_external_map_.end()) {
622 return (*it).second; 615 return (*it).second;
623 } 616 }
624 return nullptr; 617 return nullptr;
625 } 618 }
626 } // namespace webrtc 619 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/codec_database.h ('k') | webrtc/modules/video_coding/generic_decoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698