X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Frtpdec.c;h=48995e7de4d1ad50deab81372bf4ea146007ba64;hb=c1736936982e9b0d3400462eda2b0bf410f6e003;hp=7d8fc2c1de9eb12c1f7352af6a060ce1b9527d1f;hpb=be73a544af0b626f31c484d3f96e67d68f4175ea;p=ffmpeg diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index 7d8fc2c1de9..48995e7de4d 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -1,6 +1,6 @@ /* * RTP input format - * Copyright (c) 2002 Fabrice Bellard. + * Copyright (c) 2002 Fabrice Bellard * * This file is part of FFmpeg. * @@ -22,15 +22,17 @@ /* needed for gethostname() */ #define _XOPEN_SOURCE 600 -#include "libavcodec/bitstream.h" +#include "libavcodec/get_bits.h" #include "avformat.h" #include "mpegts.h" #include #include "network.h" -#include "rtp_internal.h" +#include "rtpdec.h" +#include "rtp_asf.h" #include "rtp_h264.h" +#include "rtp_vorbis.h" //#define DEBUG @@ -60,6 +62,10 @@ void av_register_rtp_dynamic_payload_handlers(void) ff_register_dynamic_payload_handler(&mp4v_es_handler); ff_register_dynamic_payload_handler(&mpeg4_generic_handler); ff_register_dynamic_payload_handler(&ff_h264_dynamic_handler); + ff_register_dynamic_payload_handler(&ff_vorbis_dynamic_handler); + + ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfv_handler); + ff_register_dynamic_payload_handler(&ff_ms_rtp_asf_pfa_handler); } static int rtcp_parse_packet(RTPDemuxContext *s, const unsigned char *buf, int len) @@ -382,7 +388,6 @@ static void finalize_packet(RTPDemuxContext *s, AVPacket *pkt, uint32_t timestam addend = av_rescale(s->last_rtcp_ntp_time - s->first_rtcp_ntp_time, s->st->time_base.den, (uint64_t)s->st->time_base.num << 32); pkt->pts = addend + delta_timestamp; } - pkt->stream_index = s->st->index; } /** @@ -407,7 +412,7 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, /* return the next packets, if any */ if(s->st && s->parse_packet) { timestamp= 0; ///< Should not be used if buf is NULL, but should be set to the timestamp of the packet returned.... - rv= s->parse_packet(s->dynamic_protocol_context, + rv= s->parse_packet(s->ic, s->dynamic_protocol_context, s->st, pkt, ×tamp, NULL, 0, flags); finalize_packet(s, pkt, timestamp); return rv; @@ -437,6 +442,8 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, return -1; } payload_type = buf[1] & 0x7f; + if (buf[1] & 0x80) + flags |= RTP_FLAG_MARKER; seq = AV_RB16(buf + 2); timestamp = AV_RB32(buf + 4); ssrc = AV_RB32(buf + 8); @@ -471,8 +478,9 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, s->read_buf_index = 0; return 1; } + return 0; } else if (s->parse_packet) { - rv = s->parse_packet(s->dynamic_protocol_context, + rv = s->parse_packet(s->ic, s->dynamic_protocol_context, s->st, pkt, ×tamp, buf, len, flags); } else { // at this point, the RTP header has been stripped; This is ASSUMING that there is only 1 CSRC, which in't wise. @@ -534,9 +542,12 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt, break; } - // now perform timestamp things.... - finalize_packet(s, pkt, timestamp); + pkt->stream_index = st->index; } + + // now perform timestamp things.... + finalize_packet(s, pkt, timestamp); + return rv; }