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