|
9 | 9 |
|
10 | 10 | namespace RTC |
11 | 11 | { |
12 | | - thread_local static Utils::ObjectPool<RtpPacket> RtpPacketPool; |
13 | | - // Memory to hold the cloned packet (with extra space for RTX encoding). |
14 | | - thread_local static Utils::ObjectPool<RtpPacket::RtpPacketBuffer> RtpPacketBufferPool; |
15 | | - |
16 | 12 | /* Class methods. */ |
17 | 13 |
|
18 | 14 | RtpPacket::SharedPtr RtpPacket::Parse(const uint8_t* data, size_t len) |
@@ -121,21 +117,8 @@ namespace RTC |
121 | 117 | payloadLength + size_t{ payloadPadding }, |
122 | 118 | "packet's computed size does not match received size"); |
123 | 119 |
|
124 | | - auto* packet = RtpPacketPool.Allocate(); |
125 | | - new (packet) RtpPacket(header, headerExtension, payload, payloadLength, payloadPadding, len); |
126 | | - |
127 | | - SharedPtr shared( |
128 | | - packet, |
129 | | - /*Deleter*/ |
130 | | - [](RtpPacket* packet) |
131 | | - { |
132 | | - // Call destructor manually since memory was pre-allocated upfront. |
133 | | - packet->~RtpPacket(); |
134 | | - // Return packet into object pool for future reuse of memory allocation. |
135 | | - RtpPacketPool.Return(packet); |
136 | | - }); |
137 | | - |
138 | | - return shared; |
| 120 | + return std::allocate_shared<RtpPacket, Utils::ObjectPoolAllocator<RtpPacket>>( |
| 121 | + RtpPacket::Allocator::Pool, header, headerExtension, payload, payloadLength, payloadPadding, len); |
139 | 122 | } |
140 | 123 |
|
141 | 124 | /* Instance methods. */ |
@@ -166,7 +149,7 @@ namespace RTC |
166 | 149 | if (this->buffer) |
167 | 150 | { |
168 | 151 | this->buffer->~array(); |
169 | | - RtpPacketBufferPool.Return(this->buffer); |
| 152 | + RtpPacket::BufferAllocator::Pool.deallocate(this->buffer, 1); |
170 | 153 | this->buffer = nullptr; |
171 | 154 | } |
172 | 155 | } |
@@ -657,8 +640,8 @@ namespace RTC |
657 | 640 | { |
658 | 641 | MS_TRACE(); |
659 | 642 |
|
660 | | - auto* buffer = RtpPacketBufferPool.Allocate(); |
661 | | - new (buffer) RtpPacketBuffer(); |
| 643 | + auto* buffer = RtpPacket::BufferAllocator::Pool.allocate(1); |
| 644 | + RtpPacket::BufferAllocatorTraits::construct(RtpPacket::BufferAllocator::Pool, buffer); |
662 | 645 |
|
663 | 646 | auto* ptr = const_cast<uint8_t*>(buffer->data()); |
664 | 647 | size_t numBytes{ 0 }; |
@@ -714,35 +697,29 @@ namespace RTC |
714 | 697 | } |
715 | 698 |
|
716 | 699 | // Create the new RtpPacket instance and return it. |
717 | | - auto* packet = RtpPacketPool.Allocate(); |
718 | | - new (packet) RtpPacket( |
719 | | - newHeader, newHeaderExtension, newPayload, this->payloadLength, this->payloadPadding, this->size); |
720 | | - |
721 | | - SharedPtr shared( |
722 | | - packet, |
723 | | - /*Deleter*/ |
724 | | - [](RtpPacket* packet) |
725 | | - { |
726 | | - // Call destructor manually since memory was pre-allocated upfront. |
727 | | - packet->~RtpPacket(); |
728 | | - // Return packet into object pool for future reuse of memory allocation. |
729 | | - RtpPacketPool.Return(packet); |
730 | | - }); |
| 700 | + SharedPtr shared = std::allocate_shared<RtpPacket, RtpPacket::Allocator>( |
| 701 | + RtpPacket::Allocator::Pool, |
| 702 | + newHeader, |
| 703 | + newHeaderExtension, |
| 704 | + newPayload, |
| 705 | + this->payloadLength, |
| 706 | + this->payloadPadding, |
| 707 | + this->size); |
731 | 708 |
|
732 | 709 | // Keep already set extension ids. |
733 | | - packet->midExtensionId = this->midExtensionId; |
734 | | - packet->ridExtensionId = this->ridExtensionId; |
735 | | - packet->rridExtensionId = this->rridExtensionId; |
736 | | - packet->absSendTimeExtensionId = this->absSendTimeExtensionId; |
737 | | - packet->transportWideCc01ExtensionId = this->transportWideCc01ExtensionId; |
738 | | - packet->frameMarking07ExtensionId = this->frameMarking07ExtensionId; // Remove once RFC. |
739 | | - packet->frameMarkingExtensionId = this->frameMarkingExtensionId; |
740 | | - packet->ssrcAudioLevelExtensionId = this->ssrcAudioLevelExtensionId; |
741 | | - packet->videoOrientationExtensionId = this->videoOrientationExtensionId; |
| 710 | + shared->midExtensionId = this->midExtensionId; |
| 711 | + shared->ridExtensionId = this->ridExtensionId; |
| 712 | + shared->rridExtensionId = this->rridExtensionId; |
| 713 | + shared->absSendTimeExtensionId = this->absSendTimeExtensionId; |
| 714 | + shared->transportWideCc01ExtensionId = this->transportWideCc01ExtensionId; |
| 715 | + shared->frameMarking07ExtensionId = this->frameMarking07ExtensionId; // Remove once RFC. |
| 716 | + shared->frameMarkingExtensionId = this->frameMarkingExtensionId; |
| 717 | + shared->ssrcAudioLevelExtensionId = this->ssrcAudioLevelExtensionId; |
| 718 | + shared->videoOrientationExtensionId = this->videoOrientationExtensionId; |
742 | 719 | // Clone payload descriptor handler. |
743 | | - packet->payloadDescriptorHandler = this->payloadDescriptorHandler; |
| 720 | + shared->payloadDescriptorHandler = this->payloadDescriptorHandler; |
744 | 721 | // Store allocated buffer. |
745 | | - packet->buffer = buffer; |
| 722 | + shared->buffer = buffer; |
746 | 723 |
|
747 | 724 | return shared; |
748 | 725 | } |
|
0 commit comments