Index: webrtc/modules/rtp_rtcp/source/rtp_format_vp8.h |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_format_vp8.h b/webrtc/modules/rtp_rtcp/source/rtp_format_vp8.h |
index cddf51f04e07e751e6137fe60f4231687aa34f35..25a2739dc73e5bfb21bd0d2555c253ac395089f8 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_format_vp8.h |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_format_vp8.h |
@@ -52,24 +52,25 @@ class RtpPacketizerVp8 : public RtpPacketizer { |
// The payload_data must be exactly one encoded VP8 frame. |
RtpPacketizerVp8(const RTPVideoHeaderVP8& hdr_info, |
size_t max_payload_len, |
+ size_t last_packet_reduction_len, |
VP8PacketizerMode mode); |
// Initialize without fragmentation info. Mode kEqualSize will be used. |
// The payload_data must be exactly one encoded VP8 frame. |
- RtpPacketizerVp8(const RTPVideoHeaderVP8& hdr_info, size_t max_payload_len); |
+ RtpPacketizerVp8(const RTPVideoHeaderVP8& hdr_info, |
+ size_t max_payload_len, |
+ size_t last_packet_reduction_len); |
virtual ~RtpPacketizerVp8(); |
- void SetPayloadData(const uint8_t* payload_data, |
- size_t payload_size, |
- const RTPFragmentationHeader* fragmentation) override; |
+ size_t SetPayloadData(const uint8_t* payload_data, |
+ size_t payload_size, |
+ const RTPFragmentationHeader* fragmentation) override; |
// Get the next payload with VP8 payload header. |
// Write payload and set marker bit of the |packet|. |
- // The parameter |last_packet| is true for the last packet of the frame, false |
- // otherwise (i.e., call the function again to get the next packet). |
// Returns true on success, false otherwise. |
- bool NextPacket(RtpPacketToSend* packet, bool* last_packet) override; |
+ bool NextPacket(RtpPacketToSend* packet) override; |
ProtectionType GetProtectionType() override; |
@@ -85,15 +86,7 @@ class RtpPacketizerVp8 : public RtpPacketizer { |
size_t first_partition_ix; |
} InfoStruct; |
typedef std::queue<InfoStruct> InfoQueue; |
- enum AggregationMode { |
- kAggrNone = 0, // No aggregation. |
- kAggrPartitions, // Aggregate intact partitions. |
- kAggrFragments // Aggregate intact and fragmented partitions. |
- }; |
- |
- static const AggregationMode aggr_modes_[kNumModes]; |
- static const bool balance_modes_[kNumModes]; |
- static const bool separate_first_modes_[kNumModes]; |
+ |
static const int kXBit = 0x80; |
static const int kNBit = 0x20; |
static const int kSBit = 0x10; |
@@ -105,30 +98,23 @@ class RtpPacketizerVp8 : public RtpPacketizer { |
static const int kKBit = 0x10; |
static const int kYBit = 0x20; |
- // Calculate size of next chunk to send. Returns 0 if none can be sent. |
- size_t CalcNextSize(size_t max_payload_len, |
- size_t remaining_bytes, |
- bool split_payload) const; |
- |
// Calculate all packet sizes and load to packet info queue. |
int GeneratePackets(); |
- // Calculate all packet sizes using Vp8PartitionAggregator and load to packet |
- // info queue. |
- int GeneratePacketsBalancedAggregates(); |
- |
- // Helper function to GeneratePacketsBalancedAggregates(). Find all |
- // continuous sets of partitions smaller than the max payload size (not |
- // max_size), and aggregate them into balanced packets. The result is written |
- // to partition_vec, which is of the same length as the number of partitions. |
- // A value of -1 indicates that the partition is too large and must be split. |
- // Aggregates are numbered 0, 1, 2, etc. For each set of small partitions, |
- // the aggregate numbers restart at 0. Output values min_size and max_size |
- // will hold the smallest and largest resulting aggregates (i.e., not counting |
- // those that must be split). |
- void AggregateSmallPartitions(std::vector<int>* partition_vec, |
- int* min_size, |
- int* max_size); |
+ // Splits given part of payload (one or more partitions) |
+ // to packets with a given capacity. If |last_partition| flag is set then the |
+ // last packet should be reduced by last_packet_reduction_len_. |
+ void GeneratePacketsSplitPayloadBalanced(size_t payload_offset, |
+ size_t payload_len, |
+ size_t capacity, |
+ bool last_partition, |
+ size_t part_idx); |
+ |
+ // Aggregates partitions starting at |part_idx| to packets of |
+ // given |capacity|. Last packet, if containing last partition of the frame |
+ // should be reduced by last_packet_reduction_len_. |
+ // Returns the first unaggregated partition index. |
+ size_t GeneratePacketsAggregatePartitions(size_t part_idx, size_t capacity); |
// Insert packet into packet queue. |
void QueuePacket(size_t start_pos, |
@@ -195,14 +181,12 @@ class RtpPacketizerVp8 : public RtpPacketizer { |
RTPFragmentationHeader part_info_; |
const size_t vp8_fixed_payload_descriptor_bytes_; // Length of VP8 payload |
// descriptors' fixed part. |
- const AggregationMode aggr_mode_; |
- const bool balance_; |
- const bool separate_first_; |
+ const VP8PacketizerMode mode_; |
const RTPVideoHeaderVP8 hdr_info_; |
size_t num_partitions_; |
const size_t max_payload_len_; |
+ const size_t last_packet_reduction_len_; |
InfoQueue packets_; |
- bool packets_calculated_; |
RTC_DISALLOW_COPY_AND_ASSIGN(RtpPacketizerVp8); |
}; |