OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |