| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2  *  Copyright (c) 2013 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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 56 #endif | 56 #endif | 
| 57 } | 57 } | 
| 58 | 58 | 
| 59 VideoReceiver::~VideoReceiver() { | 59 VideoReceiver::~VideoReceiver() { | 
| 60   delete _receiveCritSect; | 60   delete _receiveCritSect; | 
| 61 #ifdef DEBUG_DECODER_BIT_STREAM | 61 #ifdef DEBUG_DECODER_BIT_STREAM | 
| 62   fclose(_bitStreamBeforeDecoder); | 62   fclose(_bitStreamBeforeDecoder); | 
| 63 #endif | 63 #endif | 
| 64 } | 64 } | 
| 65 | 65 | 
| 66 int32_t VideoReceiver::Process() { | 66 void VideoReceiver::Process() { | 
| 67   int32_t returnValue = VCM_OK; |  | 
| 68 |  | 
| 69   // Receive-side statistics | 67   // Receive-side statistics | 
| 70   if (_receiveStatsTimer.TimeUntilProcess() == 0) { | 68   if (_receiveStatsTimer.TimeUntilProcess() == 0) { | 
| 71     _receiveStatsTimer.Processed(); | 69     _receiveStatsTimer.Processed(); | 
| 72     CriticalSectionScoped cs(process_crit_sect_.get()); | 70     CriticalSectionScoped cs(process_crit_sect_.get()); | 
| 73     if (_receiveStatsCallback != NULL) { | 71     if (_receiveStatsCallback != NULL) { | 
| 74       uint32_t bitRate; | 72       uint32_t bitRate; | 
| 75       uint32_t frameRate; | 73       uint32_t frameRate; | 
| 76       _receiver.ReceiveStatistics(&bitRate, &frameRate); | 74       _receiver.ReceiveStatistics(&bitRate, &frameRate); | 
| 77       _receiveStatsCallback->OnReceiveRatesUpdated(bitRate, frameRate); | 75       _receiveStatsCallback->OnReceiveRatesUpdated(bitRate, frameRate); | 
| 78     } | 76     } | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 101   } | 99   } | 
| 102 | 100 | 
| 103   // Key frame requests | 101   // Key frame requests | 
| 104   if (_keyRequestTimer.TimeUntilProcess() == 0) { | 102   if (_keyRequestTimer.TimeUntilProcess() == 0) { | 
| 105     _keyRequestTimer.Processed(); | 103     _keyRequestTimer.Processed(); | 
| 106     bool request_key_frame = false; | 104     bool request_key_frame = false; | 
| 107     { | 105     { | 
| 108       CriticalSectionScoped cs(process_crit_sect_.get()); | 106       CriticalSectionScoped cs(process_crit_sect_.get()); | 
| 109       request_key_frame = _scheduleKeyRequest && _frameTypeCallback != NULL; | 107       request_key_frame = _scheduleKeyRequest && _frameTypeCallback != NULL; | 
| 110     } | 108     } | 
| 111     if (request_key_frame) { | 109     if (request_key_frame) | 
| 112       const int32_t ret = RequestKeyFrame(); | 110       RequestKeyFrame(); | 
| 113       if (ret != VCM_OK && returnValue == VCM_OK) { |  | 
| 114         returnValue = ret; |  | 
| 115       } |  | 
| 116     } |  | 
| 117   } | 111   } | 
| 118 | 112 | 
| 119   // Packet retransmission requests | 113   // Packet retransmission requests | 
| 120   // TODO(holmer): Add API for changing Process interval and make sure it's | 114   // TODO(holmer): Add API for changing Process interval and make sure it's | 
| 121   // disabled when NACK is off. | 115   // disabled when NACK is off. | 
| 122   if (_retransmissionTimer.TimeUntilProcess() == 0) { | 116   if (_retransmissionTimer.TimeUntilProcess() == 0) { | 
| 123     _retransmissionTimer.Processed(); | 117     _retransmissionTimer.Processed(); | 
| 124     bool callback_registered = false; | 118     bool callback_registered = false; | 
| 125     uint16_t length; | 119     uint16_t length; | 
| 126     { | 120     { | 
| 127       CriticalSectionScoped cs(process_crit_sect_.get()); | 121       CriticalSectionScoped cs(process_crit_sect_.get()); | 
| 128       length = max_nack_list_size_; | 122       length = max_nack_list_size_; | 
| 129       callback_registered = _packetRequestCallback != NULL; | 123       callback_registered = _packetRequestCallback != NULL; | 
| 130     } | 124     } | 
| 131     if (callback_registered && length > 0) { | 125     if (callback_registered && length > 0) { | 
| 132       // Collect sequence numbers from the default receiver. | 126       // Collect sequence numbers from the default receiver. | 
| 133       bool request_key_frame = false; | 127       bool request_key_frame = false; | 
| 134       std::vector<uint16_t> nackList = _receiver.NackList(&request_key_frame); | 128       std::vector<uint16_t> nackList = _receiver.NackList(&request_key_frame); | 
| 135       int32_t ret = VCM_OK; | 129       int32_t ret = VCM_OK; | 
| 136       if (request_key_frame) { | 130       if (request_key_frame) { | 
| 137         ret = RequestKeyFrame(); | 131         ret = RequestKeyFrame(); | 
| 138         if (ret != VCM_OK && returnValue == VCM_OK) { |  | 
| 139           returnValue = ret; |  | 
| 140         } |  | 
| 141       } | 132       } | 
| 142       if (ret == VCM_OK && !nackList.empty()) { | 133       if (ret == VCM_OK && !nackList.empty()) { | 
| 143         CriticalSectionScoped cs(process_crit_sect_.get()); | 134         CriticalSectionScoped cs(process_crit_sect_.get()); | 
| 144         if (_packetRequestCallback != NULL) { | 135         if (_packetRequestCallback != NULL) { | 
| 145           _packetRequestCallback->ResendPackets(&nackList[0], nackList.size()); | 136           _packetRequestCallback->ResendPackets(&nackList[0], nackList.size()); | 
| 146         } | 137         } | 
| 147       } | 138       } | 
| 148     } | 139     } | 
| 149   } | 140   } | 
| 150 |  | 
| 151   return returnValue; |  | 
| 152 } | 141 } | 
| 153 | 142 | 
| 154 int64_t VideoReceiver::TimeUntilNextProcess() { | 143 int64_t VideoReceiver::TimeUntilNextProcess() { | 
| 155   int64_t timeUntilNextProcess = _receiveStatsTimer.TimeUntilProcess(); | 144   int64_t timeUntilNextProcess = _receiveStatsTimer.TimeUntilProcess(); | 
| 156   if (_receiver.NackMode() != kNoNack) { | 145   if (_receiver.NackMode() != kNoNack) { | 
| 157     // We need a Process call more often if we are relying on | 146     // We need a Process call more often if we are relying on | 
| 158     // retransmissions | 147     // retransmissions | 
| 159     timeUntilNextProcess = | 148     timeUntilNextProcess = | 
| 160         VCM_MIN(timeUntilNextProcess, _retransmissionTimer.TimeUntilProcess()); | 149         VCM_MIN(timeUntilNextProcess, _retransmissionTimer.TimeUntilProcess()); | 
| 161   } | 150   } | 
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 538 } | 527 } | 
| 539 | 528 | 
| 540 void VideoReceiver::RegisterPreDecodeImageCallback( | 529 void VideoReceiver::RegisterPreDecodeImageCallback( | 
| 541     EncodedImageCallback* observer) { | 530     EncodedImageCallback* observer) { | 
| 542   CriticalSectionScoped cs(_receiveCritSect); | 531   CriticalSectionScoped cs(_receiveCritSect); | 
| 543   pre_decode_image_callback_ = observer; | 532   pre_decode_image_callback_ = observer; | 
| 544 } | 533 } | 
| 545 | 534 | 
| 546 }  // namespace vcm | 535 }  // namespace vcm | 
| 547 }  // namespace webrtc | 536 }  // namespace webrtc | 
| OLD | NEW | 
|---|