• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
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
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_FEC_PRIVATE_TABLES_BURSTY_H_
12 #define WEBRTC_MODULES_RTP_RTCP_SOURCE_FEC_PRIVATE_TABLES_BURSTY_H_
13 
14 // This file contains a set of packets masks for the FEC code. The masks in
15 // this table are specifically designed to favor recovery of bursty/consecutive
16 // loss network conditions. The tradeoff is worse recovery for random losses.
17 // These packet masks are currently defined to protect up to 12 media packets.
18 // They have the following property: for any packet mask defined by the
19 // parameters (k,m), where k = number of media packets, m = number of FEC
20 // packets, all "consecutive" losses of size <= m are completely recoverable.
21 // By consecutive losses we mean consecutive with respect to the sequence
22 // number ordering of the list (media and FEC) of packets. The difference
23 // between these masks (|kFecMaskBursty|) and |kFecMaskRandom| type, defined
24 // in fec_private_tables.h, is more significant for longer codes
25 // (i.e., more packets/symbols in the code, so larger (k,m), i.e.,  k > 4,
26 // m > 3).
27 
28 #include "webrtc/typedefs.h"
29 
30 namespace {
31 
32 const uint8_t kMaskBursty1_1[2] = {
33   0x80, 0x00
34 };
35 
36 const uint8_t kMaskBursty2_1[2] = {
37   0xc0, 0x00
38 };
39 
40 const uint8_t kMaskBursty2_2[4] = {
41   0x80, 0x00,
42   0xc0, 0x00
43 };
44 
45 const uint8_t kMaskBursty3_1[2] = {
46   0xe0, 0x00
47 };
48 
49 const uint8_t kMaskBursty3_2[4] = {
50   0xc0, 0x00,
51   0xa0, 0x00
52 };
53 
54 const uint8_t kMaskBursty3_3[6] = {
55   0x80, 0x00,
56   0xc0, 0x00,
57   0x60, 0x00
58 };
59 
60 const uint8_t kMaskBursty4_1[2] = {
61   0xf0, 0x00
62 };
63 
64 const uint8_t kMaskBursty4_2[4] = {
65   0xa0, 0x00,
66   0xd0, 0x00
67 };
68 
69 const uint8_t kMaskBursty4_3[6] = {
70   0xc0, 0x00,
71   0x60, 0x00,
72   0x90, 0x00
73 };
74 
75 const uint8_t kMaskBursty4_4[8] = {
76   0x80, 0x00,
77   0xc0, 0x00,
78   0x60, 0x00,
79   0x30, 0x00
80 };
81 
82 const uint8_t kMaskBursty5_1[2] = {
83   0xf8, 0x00
84 };
85 
86 const uint8_t kMaskBursty5_2[4] = {
87   0xd0, 0x00,
88   0xa8, 0x00
89 };
90 
91 const uint8_t kMaskBursty5_3[6] = {
92   0x70, 0x00,
93   0x90, 0x00,
94   0xc8, 0x00
95 };
96 
97 const uint8_t kMaskBursty5_4[8] = {
98   0xc0, 0x00,
99   0x60, 0x00,
100   0x30, 0x00,
101   0x88, 0x00
102 };
103 
104 const uint8_t kMaskBursty5_5[10] = {
105   0x80, 0x00,
106   0xc0, 0x00,
107   0x60, 0x00,
108   0x30, 0x00,
109   0x18, 0x00
110 };
111 
112 const uint8_t kMaskBursty6_1[2] = {
113   0xfc, 0x00
114 };
115 
116 const uint8_t kMaskBursty6_2[4] = {
117   0xa8, 0x00,
118   0xd4, 0x00
119 };
120 
121 const uint8_t kMaskBursty6_3[6] = {
122   0x94, 0x00,
123   0xc8, 0x00,
124   0x64, 0x00
125 };
126 
127 const uint8_t kMaskBursty6_4[8] = {
128   0x60, 0x00,
129   0x38, 0x00,
130   0x88, 0x00,
131   0xc4, 0x00
132 };
133 
134 const uint8_t kMaskBursty6_5[10] = {
135   0xc0, 0x00,
136   0x60, 0x00,
137   0x30, 0x00,
138   0x18, 0x00,
139   0x84, 0x00
140 };
141 
142 const uint8_t kMaskBursty6_6[12] = {
143   0x80, 0x00,
144   0xc0, 0x00,
145   0x60, 0x00,
146   0x30, 0x00,
147   0x18, 0x00,
148   0x0c, 0x00
149 };
150 
151 const uint8_t kMaskBursty7_1[2] = {
152   0xfe, 0x00
153 };
154 
155 const uint8_t kMaskBursty7_2[4] = {
156   0xd4, 0x00,
157   0xaa, 0x00
158 };
159 
160 const uint8_t kMaskBursty7_3[6] = {
161   0xc8, 0x00,
162   0x74, 0x00,
163   0x92, 0x00
164 };
165 
166 const uint8_t kMaskBursty7_4[8] = {
167   0x38, 0x00,
168   0x8a, 0x00,
169   0xc4, 0x00,
170   0x62, 0x00
171 };
172 
173 const uint8_t kMaskBursty7_5[10] = {
174   0x60, 0x00,
175   0x30, 0x00,
176   0x1c, 0x00,
177   0x84, 0x00,
178   0xc2, 0x00
179 };
180 
181 const uint8_t kMaskBursty7_6[12] = {
182   0xc0, 0x00,
183   0x60, 0x00,
184   0x30, 0x00,
185   0x18, 0x00,
186   0x0c, 0x00,
187   0x82, 0x00
188 };
189 
190 const uint8_t kMaskBursty7_7[14] = {
191   0x80, 0x00,
192   0xc0, 0x00,
193   0x60, 0x00,
194   0x30, 0x00,
195   0x18, 0x00,
196   0x0c, 0x00,
197   0x06, 0x00
198 };
199 
200 const uint8_t kMaskBursty8_1[2] = {
201   0xff, 0x00
202 };
203 
204 const uint8_t kMaskBursty8_2[4] = {
205   0xaa, 0x00,
206   0xd5, 0x00
207 };
208 
209 const uint8_t kMaskBursty8_3[6] = {
210   0x74, 0x00,
211   0x92, 0x00,
212   0xc9, 0x00
213 };
214 
215 const uint8_t kMaskBursty8_4[8] = {
216   0x8a, 0x00,
217   0xc5, 0x00,
218   0x62, 0x00,
219   0x31, 0x00
220 };
221 
222 const uint8_t kMaskBursty8_5[10] = {
223   0x30, 0x00,
224   0x1c, 0x00,
225   0x85, 0x00,
226   0xc2, 0x00,
227   0x61, 0x00
228 };
229 
230 const uint8_t kMaskBursty8_6[12] = {
231   0x60, 0x00,
232   0x30, 0x00,
233   0x18, 0x00,
234   0x0e, 0x00,
235   0x82, 0x00,
236   0xc1, 0x00
237 };
238 
239 const uint8_t kMaskBursty8_7[14] = {
240   0xc0, 0x00,
241   0x60, 0x00,
242   0x30, 0x00,
243   0x18, 0x00,
244   0x0c, 0x00,
245   0x06, 0x00,
246   0x81, 0x00
247 };
248 
249 const uint8_t kMaskBursty8_8[16] = {
250   0x80, 0x00,
251   0xc0, 0x00,
252   0x60, 0x00,
253   0x30, 0x00,
254   0x18, 0x00,
255   0x0c, 0x00,
256   0x06, 0x00,
257   0x03, 0x00
258 };
259 
260 const uint8_t kMaskBursty9_1[2] = {
261   0xff, 0x80
262 };
263 
264 const uint8_t kMaskBursty9_2[4] = {
265   0xd5, 0x00,
266   0xaa, 0x80
267 };
268 
269 const uint8_t kMaskBursty9_3[6] = {
270   0x92, 0x00,
271   0xc9, 0x00,
272   0x74, 0x80
273 };
274 
275 const uint8_t kMaskBursty9_4[8] = {
276   0xc5, 0x00,
277   0x62, 0x00,
278   0x39, 0x00,
279   0x8a, 0x80
280 };
281 
282 const uint8_t kMaskBursty9_5[10] = {
283   0x1c, 0x00,
284   0x85, 0x00,
285   0xc2, 0x80,
286   0x61, 0x00,
287   0x30, 0x80
288 };
289 
290 const uint8_t kMaskBursty9_6[12] = {
291   0x30, 0x00,
292   0x18, 0x00,
293   0x0e, 0x00,
294   0x82, 0x80,
295   0xc1, 0x00,
296   0x60, 0x80
297 };
298 
299 const uint8_t kMaskBursty9_7[14] = {
300   0x60, 0x00,
301   0x30, 0x00,
302   0x18, 0x00,
303   0x0c, 0x00,
304   0x07, 0x00,
305   0x81, 0x00,
306   0xc0, 0x80
307 };
308 
309 const uint8_t kMaskBursty9_8[16] = {
310   0xc0, 0x00,
311   0x60, 0x00,
312   0x30, 0x00,
313   0x18, 0x00,
314   0x0c, 0x00,
315   0x06, 0x00,
316   0x03, 0x00,
317   0x80, 0x80
318 };
319 
320 const uint8_t kMaskBursty9_9[18] = {
321   0x80, 0x00,
322   0xc0, 0x00,
323   0x60, 0x00,
324   0x30, 0x00,
325   0x18, 0x00,
326   0x0c, 0x00,
327   0x06, 0x00,
328   0x03, 0x00,
329   0x01, 0x80
330 };
331 
332 const uint8_t kMaskBursty10_1[2] = {
333   0xff, 0xc0
334 };
335 
336 const uint8_t kMaskBursty10_2[4] = {
337   0xaa, 0x80,
338   0xd5, 0x40
339 };
340 
341 const uint8_t kMaskBursty10_3[6] = {
342   0xc9, 0x00,
343   0x74, 0x80,
344   0x92, 0x40
345 };
346 
347 const uint8_t kMaskBursty10_4[8] = {
348   0x62, 0x00,
349   0x39, 0x00,
350   0x8a, 0x80,
351   0xc5, 0x40
352 };
353 
354 const uint8_t kMaskBursty10_5[10] = {
355   0x85, 0x00,
356   0xc2, 0x80,
357   0x61, 0x40,
358   0x30, 0x80,
359   0x18, 0x40
360 };
361 
362 const uint8_t kMaskBursty10_6[12] = {
363   0x18, 0x00,
364   0x0e, 0x00,
365   0x82, 0x80,
366   0xc1, 0x40,
367   0x60, 0x80,
368   0x30, 0x40
369 };
370 
371 const uint8_t kMaskBursty10_7[14] = {
372   0x30, 0x00,
373   0x18, 0x00,
374   0x0c, 0x00,
375   0x07, 0x00,
376   0x81, 0x40,
377   0xc0, 0x80,
378   0x60, 0x40
379 };
380 
381 const uint8_t kMaskBursty10_8[16] = {
382   0x60, 0x00,
383   0x30, 0x00,
384   0x18, 0x00,
385   0x0c, 0x00,
386   0x06, 0x00,
387   0x03, 0x00,
388   0x80, 0x80,
389   0xc0, 0x40
390 };
391 
392 const uint8_t kMaskBursty10_9[18] = {
393   0xc0, 0x00,
394   0x60, 0x00,
395   0x30, 0x00,
396   0x18, 0x00,
397   0x0c, 0x00,
398   0x06, 0x00,
399   0x03, 0x00,
400   0x01, 0x80,
401   0x80, 0x40
402 };
403 
404 const uint8_t kMaskBursty10_10[20] = {
405   0x80, 0x00,
406   0xc0, 0x00,
407   0x60, 0x00,
408   0x30, 0x00,
409   0x18, 0x00,
410   0x0c, 0x00,
411   0x06, 0x00,
412   0x03, 0x00,
413   0x01, 0x80,
414   0x00, 0xc0
415 };
416 
417 const uint8_t kMaskBursty11_1[2] = {
418   0xff, 0xe0
419 };
420 
421 const uint8_t kMaskBursty11_2[4] = {
422   0xd5, 0x40,
423   0xaa, 0xa0
424 };
425 
426 const uint8_t kMaskBursty11_3[6] = {
427   0x74, 0x80,
428   0x92, 0x40,
429   0xc9, 0x20
430 };
431 
432 const uint8_t kMaskBursty11_4[8] = {
433   0x39, 0x00,
434   0x8a, 0x80,
435   0xc5, 0x40,
436   0x62, 0x20
437 };
438 
439 const uint8_t kMaskBursty11_5[10] = {
440   0xc2, 0xc0,
441   0x61, 0x00,
442   0x30, 0xa0,
443   0x1c, 0x40,
444   0x85, 0x20
445 };
446 
447 const uint8_t kMaskBursty11_6[12] = {
448   0x0e, 0x00,
449   0x82, 0x80,
450   0xc1, 0x40,
451   0x60, 0xa0,
452   0x30, 0x40,
453   0x18, 0x20
454 };
455 
456 const uint8_t kMaskBursty11_7[14] = {
457   0x18, 0x00,
458   0x0c, 0x00,
459   0x07, 0x00,
460   0x81, 0x40,
461   0xc0, 0xa0,
462   0x60, 0x40,
463   0x30, 0x20
464 };
465 
466 const uint8_t kMaskBursty11_8[16] = {
467   0x30, 0x00,
468   0x18, 0x00,
469   0x0c, 0x00,
470   0x06, 0x00,
471   0x03, 0x40,
472   0x80, 0xa0,
473   0xc0, 0x40,
474   0x60, 0x20
475 };
476 
477 const uint8_t kMaskBursty11_9[18] = {
478   0x60, 0x00,
479   0x30, 0x00,
480   0x18, 0x00,
481   0x0c, 0x00,
482   0x06, 0x00,
483   0x03, 0x00,
484   0x01, 0x80,
485   0x80, 0x40,
486   0xc0, 0x20
487 };
488 
489 const uint8_t kMaskBursty11_10[20] = {
490   0xc0, 0x00,
491   0x60, 0x00,
492   0x30, 0x00,
493   0x18, 0x00,
494   0x0c, 0x00,
495   0x06, 0x00,
496   0x03, 0x00,
497   0x01, 0x80,
498   0x00, 0xc0,
499   0x80, 0x20
500 };
501 
502 const uint8_t kMaskBursty11_11[22] = {
503   0x80, 0x00,
504   0xc0, 0x00,
505   0x60, 0x00,
506   0x30, 0x00,
507   0x18, 0x00,
508   0x0c, 0x00,
509   0x06, 0x00,
510   0x03, 0x00,
511   0x01, 0x80,
512   0x00, 0xc0,
513   0x00, 0x60
514 };
515 
516 const uint8_t kMaskBursty12_1[2] = {
517   0xff, 0xf0
518 };
519 
520 const uint8_t kMaskBursty12_2[4] = {
521   0xaa, 0xa0,
522   0xd5, 0x50
523 };
524 
525 const uint8_t kMaskBursty12_3[6] = {
526   0x92, 0x40,
527   0xc9, 0x20,
528   0x74, 0x90
529 };
530 
531 const uint8_t kMaskBursty12_4[8] = {
532   0x8a, 0x80,
533   0xc5, 0x40,
534   0x62, 0x20,
535   0x39, 0x10
536 };
537 
538 const uint8_t kMaskBursty12_5[10] = {
539   0x61, 0x00,
540   0x30, 0xa0,
541   0x1c, 0x50,
542   0x85, 0x20,
543   0xc2, 0x90
544 };
545 
546 const uint8_t kMaskBursty12_6[12] = {
547   0x82, 0x90,
548   0xc1, 0x40,
549   0x60, 0xa0,
550   0x30, 0x50,
551   0x18, 0x20,
552   0x0c, 0x10
553 };
554 
555 const uint8_t kMaskBursty12_7[14] = {
556   0x0c, 0x00,
557   0x07, 0x00,
558   0x81, 0x40,
559   0xc0, 0xa0,
560   0x60, 0x50,
561   0x30, 0x20,
562   0x18, 0x10
563 };
564 
565 const uint8_t kMaskBursty12_8[16] = {
566   0x18, 0x00,
567   0x0c, 0x00,
568   0x06, 0x00,
569   0x03, 0x00,
570   0x80, 0xa0,
571   0xc0, 0x50,
572   0x60, 0x20,
573   0x30, 0x10
574 };
575 
576 const uint8_t kMaskBursty12_9[18] = {
577   0x30, 0x00,
578   0x18, 0x00,
579   0x0c, 0x00,
580   0x06, 0x00,
581   0x03, 0x00,
582   0x01, 0x80,
583   0x80, 0x50,
584   0xc0, 0x20,
585   0x60, 0x10
586 };
587 
588 const uint8_t kMaskBursty12_10[20] = {
589   0x60, 0x00,
590   0x30, 0x00,
591   0x18, 0x00,
592   0x0c, 0x00,
593   0x06, 0x00,
594   0x03, 0x00,
595   0x01, 0x80,
596   0x00, 0xc0,
597   0x80, 0x20,
598   0xc0, 0x10
599 };
600 
601 const uint8_t kMaskBursty12_11[22] = {
602   0xc0, 0x00,
603   0x60, 0x00,
604   0x30, 0x00,
605   0x18, 0x00,
606   0x0c, 0x00,
607   0x06, 0x00,
608   0x03, 0x00,
609   0x01, 0x80,
610   0x00, 0xc0,
611   0x00, 0x60,
612   0x80, 0x10
613 };
614 
615 const uint8_t kMaskBursty12_12[24] = {
616   0x80, 0x00,
617   0xc0, 0x00,
618   0x60, 0x00,
619   0x30, 0x00,
620   0x18, 0x00,
621   0x0c, 0x00,
622   0x06, 0x00,
623   0x03, 0x00,
624   0x01, 0x80,
625   0x00, 0xc0,
626   0x00, 0x60,
627   0x00, 0x30
628 };
629 
630 const uint8_t* kPacketMaskBursty1[1] = {
631   kMaskBursty1_1
632 };
633 
634 const uint8_t* kPacketMaskBursty2[2] = {
635   kMaskBursty2_1,
636   kMaskBursty2_2
637 };
638 
639 const uint8_t* kPacketMaskBursty3[3] = {
640   kMaskBursty3_1,
641   kMaskBursty3_2,
642   kMaskBursty3_3
643 };
644 
645 const uint8_t* kPacketMaskBursty4[4] = {
646   kMaskBursty4_1,
647   kMaskBursty4_2,
648   kMaskBursty4_3,
649   kMaskBursty4_4
650 };
651 
652 const uint8_t* kPacketMaskBursty5[5] = {
653   kMaskBursty5_1,
654   kMaskBursty5_2,
655   kMaskBursty5_3,
656   kMaskBursty5_4,
657   kMaskBursty5_5
658 };
659 
660 const uint8_t* kPacketMaskBursty6[6] = {
661   kMaskBursty6_1,
662   kMaskBursty6_2,
663   kMaskBursty6_3,
664   kMaskBursty6_4,
665   kMaskBursty6_5,
666   kMaskBursty6_6
667 };
668 
669 const uint8_t* kPacketMaskBursty7[7] = {
670   kMaskBursty7_1,
671   kMaskBursty7_2,
672   kMaskBursty7_3,
673   kMaskBursty7_4,
674   kMaskBursty7_5,
675   kMaskBursty7_6,
676   kMaskBursty7_7
677 };
678 
679 const uint8_t* kPacketMaskBursty8[8] = {
680   kMaskBursty8_1,
681   kMaskBursty8_2,
682   kMaskBursty8_3,
683   kMaskBursty8_4,
684   kMaskBursty8_5,
685   kMaskBursty8_6,
686   kMaskBursty8_7,
687   kMaskBursty8_8
688 };
689 
690 const uint8_t* kPacketMaskBursty9[9] = {
691   kMaskBursty9_1,
692   kMaskBursty9_2,
693   kMaskBursty9_3,
694   kMaskBursty9_4,
695   kMaskBursty9_5,
696   kMaskBursty9_6,
697   kMaskBursty9_7,
698   kMaskBursty9_8,
699   kMaskBursty9_9
700 };
701 
702 const uint8_t* kPacketMaskBursty10[10] = {
703   kMaskBursty10_1,
704   kMaskBursty10_2,
705   kMaskBursty10_3,
706   kMaskBursty10_4,
707   kMaskBursty10_5,
708   kMaskBursty10_6,
709   kMaskBursty10_7,
710   kMaskBursty10_8,
711   kMaskBursty10_9,
712   kMaskBursty10_10
713 };
714 
715 const uint8_t* kPacketMaskBursty11[11] = {
716   kMaskBursty11_1,
717   kMaskBursty11_2,
718   kMaskBursty11_3,
719   kMaskBursty11_4,
720   kMaskBursty11_5,
721   kMaskBursty11_6,
722   kMaskBursty11_7,
723   kMaskBursty11_8,
724   kMaskBursty11_9,
725   kMaskBursty11_10,
726   kMaskBursty11_11
727 };
728 
729 const uint8_t* kPacketMaskBursty12[12] = {
730   kMaskBursty12_1,
731   kMaskBursty12_2,
732   kMaskBursty12_3,
733   kMaskBursty12_4,
734   kMaskBursty12_5,
735   kMaskBursty12_6,
736   kMaskBursty12_7,
737   kMaskBursty12_8,
738   kMaskBursty12_9,
739   kMaskBursty12_10,
740   kMaskBursty12_11,
741   kMaskBursty12_12
742 };
743 
744 const uint8_t** kPacketMaskBurstyTbl[12] = {
745   kPacketMaskBursty1,
746   kPacketMaskBursty2,
747   kPacketMaskBursty3,
748   kPacketMaskBursty4,
749   kPacketMaskBursty5,
750   kPacketMaskBursty6,
751   kPacketMaskBursty7,
752   kPacketMaskBursty8,
753   kPacketMaskBursty9,
754   kPacketMaskBursty10,
755   kPacketMaskBursty11,
756   kPacketMaskBursty12
757 };
758 
759 }  // namespace
760 #endif  // WEBRTC_MODULES_RTP_RTCP_SOURCE_FEC_PRIVATE_TABLES_BURSTY_H_
761