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

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: Also renamed method in generic_decoder. 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 } 91 }
94 92
95 VCMCodecDataBase::VCMCodecDataBase( 93 VCMCodecDataBase::VCMCodecDataBase(
96 VideoEncoderRateObserver* encoder_rate_observer, 94 VideoEncoderRateObserver* encoder_rate_observer,
97 VCMEncodedFrameCallback* encoded_frame_callback) 95 VCMEncodedFrameCallback* encoded_frame_callback)
98 : number_of_cores_(0), 96 : number_of_cores_(0),
99 max_payload_size_(kDefaultPayloadSize), 97 max_payload_size_(kDefaultPayloadSize),
100 periodic_key_frames_(false), 98 periodic_key_frames_(false),
101 pending_encoder_reset_(true), 99 pending_encoder_reset_(true),
102 send_codec_(), 100 send_codec_(),
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 DeregisterReceiveCodec(payload_type); 412 DeregisterReceiveCodec(payload_type);
415 delete it->second; 413 delete it->second;
416 dec_external_map_.erase(it); 414 dec_external_map_.erase(it);
417 return true; 415 return true;
418 } 416 }
419 417
420 // Add the external encoder object to the list of external decoders. 418 // Add the external encoder object to the list of external decoders.
421 // Won't be registered as a receive codec until RegisterReceiveCodec is called. 419 // Won't be registered as a receive codec until RegisterReceiveCodec is called.
422 void VCMCodecDataBase::RegisterExternalDecoder( 420 void VCMCodecDataBase::RegisterExternalDecoder(
423 VideoDecoder* external_decoder, 421 VideoDecoder* external_decoder,
424 uint8_t payload_type, 422 uint8_t payload_type) {
425 bool internal_render_timing) {
426 // Check if payload value already exists, if so - erase old and insert new. 423 // Check if payload value already exists, if so - erase old and insert new.
427 VCMExtDecoderMapItem* ext_decoder = new VCMExtDecoderMapItem( 424 VCMExtDecoderMapItem* ext_decoder = new VCMExtDecoderMapItem(
428 external_decoder, payload_type, internal_render_timing); 425 external_decoder, payload_type);
429 DeregisterExternalDecoder(payload_type); 426 DeregisterExternalDecoder(payload_type);
430 dec_external_map_[payload_type] = ext_decoder; 427 dec_external_map_[payload_type] = ext_decoder;
431 } 428 }
432 429
433 bool VCMCodecDataBase::DecoderRegistered() const { 430 bool VCMCodecDataBase::DecoderRegistered() const {
434 return !dec_map_.empty(); 431 return !dec_map_.empty();
435 } 432 }
436 433
437 bool VCMCodecDataBase::RegisterReceiveCodec( 434 bool VCMCodecDataBase::RegisterReceiveCodec(
438 const VideoCodec* receive_codec, 435 const VideoCodec* receive_codec,
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 if (decoder) { 514 if (decoder) {
518 assert(decoder->_decoder); 515 assert(decoder->_decoder);
519 decoder->Release(); 516 decoder->Release();
520 if (!decoder->External()) { 517 if (!decoder->External()) {
521 delete decoder->_decoder; 518 delete decoder->_decoder;
522 } 519 }
523 delete decoder; 520 delete decoder;
524 } 521 }
525 } 522 }
526 523
527 bool VCMCodecDataBase::SupportsRenderScheduling() const { 524 bool VCMCodecDataBase::PreferDecodeLate() const {
528 const VCMExtDecoderMapItem* ext_item = FindExternalDecoderItem( 525 if (!ptr_decoder_)
529 receive_codec_.plType); 526 return false;
530 if (!ext_item) 527 return ptr_decoder_->PreferDecodeLate();
531 return true;
532 return ext_item->internal_render_timing;
533 } 528 }
534 529
535 bool VCMCodecDataBase::MatchesCurrentResolution(int width, int height) const { 530 bool VCMCodecDataBase::MatchesCurrentResolution(int width, int height) const {
536 return send_codec_.width == width && send_codec_.height == height; 531 return send_codec_.width == width && send_codec_.height == height;
537 } 532 }
538 533
539 VCMGenericDecoder* VCMCodecDataBase::CreateAndInitDecoder( 534 VCMGenericDecoder* VCMCodecDataBase::CreateAndInitDecoder(
540 const VCMEncodedFrame& frame, 535 const VCMEncodedFrame& frame,
541 VideoCodec* new_codec) const { 536 VideoCodec* new_codec) const {
542 uint8_t payload_type = frame.PayloadType(); 537 uint8_t payload_type = frame.PayloadType();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 612
618 const VCMExtDecoderMapItem* VCMCodecDataBase::FindExternalDecoderItem( 613 const VCMExtDecoderMapItem* VCMCodecDataBase::FindExternalDecoderItem(
619 uint8_t payload_type) const { 614 uint8_t payload_type) const {
620 ExternalDecoderMap::const_iterator it = dec_external_map_.find(payload_type); 615 ExternalDecoderMap::const_iterator it = dec_external_map_.find(payload_type);
621 if (it != dec_external_map_.end()) { 616 if (it != dec_external_map_.end()) {
622 return (*it).second; 617 return (*it).second;
623 } 618 }
624 return nullptr; 619 return nullptr;
625 } 620 }
626 } // namespace webrtc 621 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698