Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(454)

Side by Side Diff: source/patched-ffmpeg-mt/libavformat/rtpdec.c

Issue 3384002: ffmpeg source update for sep 09 (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/ffmpeg/
Patch Set: Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * RTP input format 2 * RTP input format
3 * Copyright (c) 2002 Fabrice Bellard 3 * Copyright (c) 2002 Fabrice Bellard
4 * 4 *
5 * This file is part of FFmpeg. 5 * This file is part of FFmpeg.
6 * 6 *
7 * FFmpeg is free software; you can redistribute it and/or 7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public 8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version. 10 * version 2.1 of the License, or (at your option) any later version.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 ff_register_dynamic_payload_handler(&ff_mpeg4_generic_dynamic_handler); 58 ff_register_dynamic_payload_handler(&ff_mpeg4_generic_dynamic_handler);
59 ff_register_dynamic_payload_handler(&ff_amr_nb_dynamic_handler); 59 ff_register_dynamic_payload_handler(&ff_amr_nb_dynamic_handler);
60 ff_register_dynamic_payload_handler(&ff_amr_wb_dynamic_handler); 60 ff_register_dynamic_payload_handler(&ff_amr_wb_dynamic_handler);
61 ff_register_dynamic_payload_handler(&ff_h263_1998_dynamic_handler); 61 ff_register_dynamic_payload_handler(&ff_h263_1998_dynamic_handler);
62 ff_register_dynamic_payload_handler(&ff_h263_2000_dynamic_handler); 62 ff_register_dynamic_payload_handler(&ff_h263_2000_dynamic_handler);
63 ff_register_dynamic_payload_handler(&ff_h264_dynamic_handler); 63 ff_register_dynamic_payload_handler(&ff_h264_dynamic_handler);
64 ff_register_dynamic_payload_handler(&ff_vorbis_dynamic_handler); 64 ff_register_dynamic_payload_handler(&ff_vorbis_dynamic_handler);
65 ff_register_dynamic_payload_handler(&ff_theora_dynamic_handler); 65 ff_register_dynamic_payload_handler(&ff_theora_dynamic_handler);
66 ff_register_dynamic_payload_handler(&ff_qdm2_dynamic_handler); 66 ff_register_dynamic_payload_handler(&ff_qdm2_dynamic_handler);
67 ff_register_dynamic_payload_handler(&ff_svq3_dynamic_handler); 67 ff_register_dynamic_payload_handler(&ff_svq3_dynamic_handler);
68 ff_register_dynamic_payload_handler(&ff_mp4a_latm_dynamic_handler);
69 ff_register_dynamic_payload_handler(&ff_vp8_dynamic_handler);
68 70
69 ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfv_handler); 71 ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfv_handler);
70 ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfa_handler); 72 ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfa_handler);
71 } 73 }
72 74
73 static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int l en) 75 static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int l en)
74 { 76 {
75 if (buf[1] != 200) 77 int payload_len;
76 return -1; 78 while (len >= 2) {
77 s->last_rtcp_ntp_time = AV_RB64(buf + 8); 79 switch (buf[1]) {
78 if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE) 80 case RTCP_SR:
79 s->first_rtcp_ntp_time = s->last_rtcp_ntp_time; 81 if (len < 16) {
80 s->last_rtcp_timestamp = AV_RB32(buf + 16); 82 av_log(NULL, AV_LOG_ERROR, "Invalid length for RTCP SR packet\n" );
81 return 0; 83 return AVERROR_INVALIDDATA;
84 }
85 payload_len = (AV_RB16(buf + 2) + 1) * 4;
86
87 s->last_rtcp_ntp_time = AV_RB64(buf + 8);
88 if (s->first_rtcp_ntp_time == AV_NOPTS_VALUE)
89 s->first_rtcp_ntp_time = s->last_rtcp_ntp_time;
90 s->last_rtcp_timestamp = AV_RB32(buf + 16);
91
92 buf += payload_len;
93 len -= payload_len;
94 break;
95 case RTCP_BYE:
96 return -RTCP_BYE;
97 default:
98 return -1;
99 }
100 }
101 return -1;
82 } 102 }
83 103
84 #define RTP_SEQ_MOD (1<<16) 104 #define RTP_SEQ_MOD (1<<16)
85 105
86 /** 106 /**
87 * called on parse open packet 107 * called on parse open packet
88 */ 108 */
89 static void rtp_init_statistics(RTPStatistics *s, uint16_t base_sequence) // cal led on parse open packet. 109 static void rtp_init_statistics(RTPStatistics *s, uint16_t base_sequence) // cal led on parse open packet.
90 { 110 {
91 memset(s, 0, sizeof(RTPStatistics)); 111 memset(s, 0, sizeof(RTPStatistics));
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 rtcp_bytes /= 50; // mmu_man: that's enough for me... VLC sends much less bt w !? 220 rtcp_bytes /= 50; // mmu_man: that's enough for me... VLC sends much less bt w !?
201 if (rtcp_bytes < 28) 221 if (rtcp_bytes < 28)
202 return -1; 222 return -1;
203 s->last_octet_count = s->octet_count; 223 s->last_octet_count = s->octet_count;
204 224
205 if (url_open_dyn_buf(&pb) < 0) 225 if (url_open_dyn_buf(&pb) < 0)
206 return -1; 226 return -1;
207 227
208 // Receiver Report 228 // Receiver Report
209 put_byte(pb, (RTP_VERSION << 6) + 1); /* 1 report block */ 229 put_byte(pb, (RTP_VERSION << 6) + 1); /* 1 report block */
210 put_byte(pb, 201); 230 put_byte(pb, RTCP_RR);
211 put_be16(pb, 7); /* length in words - 1 */ 231 put_be16(pb, 7); /* length in words - 1 */
212 put_be32(pb, s->ssrc); // our own SSRC 232 // our own SSRC: we use the server's SSRC + 1 to avoid conflicts
213 put_be32(pb, s->ssrc); // XXX: should be the server's here! 233 put_be32(pb, s->ssrc + 1);
234 put_be32(pb, s->ssrc); // server SSRC
214 // some placeholders we should really fill... 235 // some placeholders we should really fill...
215 // RFC 1889/p64 236 // RFC 1889/p64
216 extended_max= stats->cycles + stats->max_seq; 237 extended_max= stats->cycles + stats->max_seq;
217 expected= extended_max - stats->base_seq + 1; 238 expected= extended_max - stats->base_seq + 1;
218 lost= expected - stats->received; 239 lost= expected - stats->received;
219 lost= FFMIN(lost, 0xffffff); // clamp it since it's only 24 bits... 240 lost= FFMIN(lost, 0xffffff); // clamp it since it's only 24 bits...
220 expected_interval= expected - stats->expected_prior; 241 expected_interval= expected - stats->expected_prior;
221 stats->expected_prior= expected; 242 stats->expected_prior= expected;
222 received_interval= stats->received - stats->received_prior; 243 received_interval= stats->received - stats->received_prior;
223 stats->received_prior= stats->received; 244 stats->received_prior= stats->received;
(...skipping 14 matching lines...) Expand all
238 } else { 259 } else {
239 uint32_t middle_32_bits= s->last_rtcp_ntp_time>>16; // this is valid, ri ght? do we need to handle 64 bit values special? 260 uint32_t middle_32_bits= s->last_rtcp_ntp_time>>16; // this is valid, ri ght? do we need to handle 64 bit values special?
240 uint32_t delay_since_last= ntp_time - s->last_rtcp_ntp_time; 261 uint32_t delay_since_last= ntp_time - s->last_rtcp_ntp_time;
241 262
242 put_be32(pb, middle_32_bits); /* last SR timestamp */ 263 put_be32(pb, middle_32_bits); /* last SR timestamp */
243 put_be32(pb, delay_since_last); /* delay since last SR */ 264 put_be32(pb, delay_since_last); /* delay since last SR */
244 } 265 }
245 266
246 // CNAME 267 // CNAME
247 put_byte(pb, (RTP_VERSION << 6) + 1); /* 1 report block */ 268 put_byte(pb, (RTP_VERSION << 6) + 1); /* 1 report block */
248 put_byte(pb, 202); 269 put_byte(pb, RTCP_SDES);
249 len = strlen(s->hostname); 270 len = strlen(s->hostname);
250 put_be16(pb, (6 + len + 3) / 4); /* length in words - 1 */ 271 put_be16(pb, (6 + len + 3) / 4); /* length in words - 1 */
251 put_be32(pb, s->ssrc); 272 put_be32(pb, s->ssrc);
252 put_byte(pb, 0x01); 273 put_byte(pb, 0x01);
253 put_byte(pb, len); 274 put_byte(pb, len);
254 put_buffer(pb, s->hostname, len); 275 put_buffer(pb, s->hostname, len);
255 // padding 276 // padding
256 for (len = (6 + len) % 4; len % 4; len++) { 277 for (len = (6 + len) % 4; len % 4; len++) {
257 put_byte(pb, 0); 278 put_byte(pb, 0);
258 } 279 }
(...skipping 30 matching lines...) Expand all
289 len = url_close_dyn_buf(pb, &buf); 310 len = url_close_dyn_buf(pb, &buf);
290 if ((len > 0) && buf) 311 if ((len > 0) && buf)
291 url_write(rtp_handle, buf, len); 312 url_write(rtp_handle, buf, len);
292 av_free(buf); 313 av_free(buf);
293 314
294 /* Send a minimal RTCP RR */ 315 /* Send a minimal RTCP RR */
295 if (url_open_dyn_buf(&pb) < 0) 316 if (url_open_dyn_buf(&pb) < 0)
296 return; 317 return;
297 318
298 put_byte(pb, (RTP_VERSION << 6)); 319 put_byte(pb, (RTP_VERSION << 6));
299 put_byte(pb, 201); /* receiver report */ 320 put_byte(pb, RTCP_RR); /* receiver report */
300 put_be16(pb, 1); /* length in words - 1 */ 321 put_be16(pb, 1); /* length in words - 1 */
301 put_be32(pb, 0); /* our own SSRC */ 322 put_be32(pb, 0); /* our own SSRC */
302 323
303 put_flush_packet(pb); 324 put_flush_packet(pb);
304 len = url_close_dyn_buf(pb, &buf); 325 len = url_close_dyn_buf(pb, &buf);
305 if ((len > 0) && buf) 326 if ((len > 0) && buf)
306 url_write(rtp_handle, buf, len); 327 url_write(rtp_handle, buf, len);
307 av_free(buf); 328 av_free(buf);
308 } 329 }
309 330
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
424 else 445 else
425 return 0; 446 return 0;
426 } 447 }
427 } 448 }
428 449
429 if (len < 12) 450 if (len < 12)
430 return -1; 451 return -1;
431 452
432 if ((buf[0] & 0xc0) != (RTP_VERSION << 6)) 453 if ((buf[0] & 0xc0) != (RTP_VERSION << 6))
433 return -1; 454 return -1;
434 if (buf[1] >= 200 && buf[1] <= 204) { 455 if (buf[1] >= RTCP_SR && buf[1] <= RTCP_APP) {
435 rtcp_parse_packet(s, buf, len); 456 return rtcp_parse_packet(s, buf, len);
436 return -1;
437 } 457 }
438 payload_type = buf[1] & 0x7f; 458 payload_type = buf[1] & 0x7f;
439 if (buf[1] & 0x80) 459 if (buf[1] & 0x80)
440 flags |= RTP_FLAG_MARKER; 460 flags |= RTP_FLAG_MARKER;
441 seq = AV_RB16(buf + 2); 461 seq = AV_RB16(buf + 2);
442 timestamp = AV_RB32(buf + 4); 462 timestamp = AV_RB32(buf + 4);
443 ssrc = AV_RB32(buf + 8); 463 ssrc = AV_RB32(buf + 8);
444 /* store the ssrc in the RTPDemuxContext */ 464 /* store the ssrc in the RTPDemuxContext */
445 s->ssrc = ssrc; 465 s->ssrc = ssrc;
446 466
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 577
558 res = parse_fmtp(stream, data, attr, value); 578 res = parse_fmtp(stream, data, attr, value);
559 if (res < 0 && res != AVERROR_PATCHWELCOME) { 579 if (res < 0 && res != AVERROR_PATCHWELCOME) {
560 av_free(value); 580 av_free(value);
561 return res; 581 return res;
562 } 582 }
563 } 583 }
564 av_free(value); 584 av_free(value);
565 return 0; 585 return 0;
566 } 586 }
OLDNEW
« no previous file with comments | « source/patched-ffmpeg-mt/libavformat/rtpdec.h ('k') | source/patched-ffmpeg-mt/libavformat/rtpdec_asf.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698