rtp_first_dynamic_payload_handler = handler;
}
-void av_register_rtp_dynamic_payload_handlers(void)
+void ff_register_rtp_dynamic_payload_handlers(void)
{
ff_register_dynamic_payload_handler(&ff_amr_nb_dynamic_handler);
ff_register_dynamic_payload_handler(&ff_amr_wb_dynamic_handler);
ff_register_dynamic_payload_handler(&ff_mpeg_video_dynamic_handler);
ff_register_dynamic_payload_handler(&ff_mpeg4_generic_dynamic_handler);
ff_register_dynamic_payload_handler(&ff_mpegts_dynamic_handler);
- ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfv_handler);
ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfa_handler);
+ ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfv_handler);
ff_register_dynamic_payload_handler(&ff_qcelp_dynamic_handler);
ff_register_dynamic_payload_handler(&ff_qdm2_dynamic_handler);
ff_register_dynamic_payload_handler(&ff_qt_rtp_aud_handler);
AVIOContext *pb;
uint8_t *buf;
int64_t now;
- uint16_t first_missing, missing_mask;
+ uint16_t first_missing = 0, missing_mask = 0;
if (!fd && !avio)
return -1;
rtp_init_statistics(&s->statistics, 0);
if (st) {
switch (st->codec->codec_id) {
- case AV_CODEC_ID_MPEG1VIDEO:
- case AV_CODEC_ID_MPEG2VIDEO:
- case AV_CODEC_ID_MP2:
- case AV_CODEC_ID_MP3:
- case AV_CODEC_ID_MPEG4:
- case AV_CODEC_ID_H263:
- case AV_CODEC_ID_H264:
- st->need_parsing = AVSTREAM_PARSE_FULL;
- break;
- case AV_CODEC_ID_VORBIS:
- st->need_parsing = AVSTREAM_PARSE_HEADERS;
- break;
case AV_CODEC_ID_ADPCM_G722:
/* According to RFC 3551, the stream clock rate is 8000
* even if the sample rate is 16000. */
{
unsigned int ssrc;
int payload_type, seq, flags = 0;
- int ext;
+ int ext, csrc;
AVStream *st;
uint32_t timestamp;
int rv = 0;
+ csrc = buf[0] & 0x0f;
ext = buf[0] & 0x10;
payload_type = buf[1] & 0x7f;
if (buf[1] & 0x80)
len -= 12;
buf += 12;
+ len -= 4 * csrc;
+ buf += 4 * csrc;
+ if (len < 0)
+ return AVERROR_INVALIDDATA;
+
/* RFC 3550 Section 5.3.1 RTP Header Extension handling */
if (ext) {
if (len < 4)
s->st, pkt, ×tamp, buf, len, seq,
flags);
} else if (st) {
- /* At this point, the RTP header has been stripped;
- * This is ASSUMING that there is only 1 CSRC, which isn't wise. */
- av_new_packet(pkt, len);
+ if ((rv = av_new_packet(pkt, len)) < 0)
+ return rv;
memcpy(pkt->data, buf, len);
pkt->stream_index = st->index;
} else {
int ff_rtp_finalize_packet(AVPacket *pkt, AVIOContext **dyn_buf, int stream_idx)
{
+ int ret;
av_init_packet(pkt);
pkt->size = avio_close_dyn_buf(*dyn_buf, &pkt->data);
pkt->stream_index = stream_idx;
- pkt->destruct = av_destruct_packet;
- *dyn_buf = NULL;
+ *dyn_buf = NULL;
+ if ((ret = av_packet_from_data(pkt, pkt->data, pkt->size)) < 0) {
+ av_freep(&pkt->data);
+ return ret;
+ }
return pkt->size;
}