This change introduces a new algorithm for aggregating small
partitions into packets. The algorithm is based on a tree-search
to find an optimal allocation of the packets, such that the
difference in size between packets is minimized.
The new method is used when partition aggregation is allowed and
balanced packets are requested. Otherwise, the old method is used.
The new method is implemented using the new classes
Vp8PartitionAggregator and PartitionTreeNode. Both classes have
dedicated unit tests.
In order to facilitate the new algorithm, the packetizer was
redesigned to calculate all packet sizes when the first packet is
extracted. The information about all packets is stored in a packet
queue structure, which is then popped for each packet extracted.
Finally, a bug in the old packetizer algorithm was fixed. The bug
caused a +/-1 error in packet sizes when balanced packets were
produced. The unit test were updated accordingly.
TEST=rtp_rtcp_unittests: PartitionTreeNode.* Vp8PartitionAggregator.* RtpFormatVp8Test.*
Review URL: https://webrtc-codereview.appspot.com/345008
git-svn-id: http://webrtc.googlecode.com/svn/trunk@1447 4adac7df-926f-26a2-2b94-8c16560cd09d
The packetizer class is changed so that the max payload size is
provided on construction of the class rather than for each packet.
The tests are re-written to comply with the new design.
Also fixing a few errors in the tests.
Review URL: http://webrtc-codereview.appspot.com/335010
git-svn-id: http://webrtc.googlecode.com/svn/trunk@1280 4adac7df-926f-26a2-2b94-8c16560cd09d
This is the first change in a series of changes to get new functionality
into the VP8 packetizer.
This first refactors the RtpFormatVp8Test class, without changing the
operation of the tested RtpFormatVp8 class. A test helper class
RtpFormatVp8TestHelper is introduced to reduce code duplication.
Review URL: http://webrtc-codereview.appspot.com/304009
git-svn-id: http://webrtc.googlecode.com/svn/trunk@1258 4adac7df-926f-26a2-2b94-8c16560cd09d
This change avoids having old packets end up on the current packet list for FEC decoding, and so they are immediately sent out to jitter buffer.
The current list of packets for FEC decoding are sent out only when new packet arrives (with time-stamp greater than current).
Review URL: http://webrtc-codereview.appspot.com/322009
git-svn-id: http://webrtc.googlecode.com/svn/trunk@1222 4adac7df-926f-26a2-2b94-8c16560cd09d
Updated RtpFormatVp8, ModuleRTPUtility, VP8Encoder and VP8Decoder
to support a new LayerSync ("Y") bit. Note, in VP8Encoder the bit
must be used together with a non-negative value for temporalIdx.
Fixing the plumbing between RTP module and and from VP8 wrapper.
Updating unit tests; all pass.
The new bit is yet to be used by the VP8 wrapper.
Review URL: http://webrtc-codereview.appspot.com/323008
git-svn-id: http://webrtc.googlecode.com/svn/trunk@1169 4adac7df-926f-26a2-2b94-8c16560cd09d
A set of the packet masks (up 10x10 size) are modified for the following reasons:
1) have more even column and row degree (number of 1 bits), when possible.
2) if cases where the column degree cannot be constant across source packets, placed the extra 1 bit in the first packet column (so little more protection on 1st partition), as opposed to having some ~middle source packet have the extra bit.
3) in some cases, made the mask a little more sparse/reduced the overlap.
Overall the average recovery is a little better with these masks.
Mask sizes above 10 will be updated in future changelist.
Review URL: http://webrtc-codereview.appspot.com/305001
git-svn-id: http://webrtc.googlecode.com/svn/trunk@1113 4adac7df-926f-26a2-2b94-8c16560cd09d
A new RtpRtcpClock interface has been added to rtp_rtcp_defines.h
and provides time facilities used by an RTP/RTCP module. Also,
NTP constants have been made public in the
webrtc::ModuleRTPUtility namespace to make implementation of
external clocks easier.
An overloaded version of CreateRtpRtcp() accepts a clock argument. By
default, if no clock is provided, the module uses the system clock
(old ModuleRTPUtility implementation).
Throughout the RTP/RTCP module code, calls to TickTime and
ModuleRTPUtility time functions have been replaced with calls to time
methods on a clock object.
The following classes take a clock object in their constructor and
hold a _clock field (either directly, or inherited from a parent):
Bitrate
ModuleRtpRtcpImpl
RTCPReceiver
RTCPSender
RTPReceiver
RTPSender
RTPSenderAudio
RTPSenderVideo
Methods from other classes that do not derive any of those and
require a time take an additional nowMS parameter, that should be
the result of calling GetTimeInMS() on a clock object.
Review URL: http://webrtc-codereview.appspot.com/268017
git-svn-id: http://webrtc.googlecode.com/svn/trunk@1076 4adac7df-926f-26a2-2b94-8c16560cd09d