diff options
author | Martin Storsjö <martin@martin.st> | 2012-12-11 15:52:18 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2013-01-08 17:47:27 +0200 |
commit | 42805eda554a7fc44341282771531e7837ac72b7 (patch) | |
tree | e41f5c23404f95ebaf2e5bf8687ae83eaee92742 /libavformat | |
parent | 9c80ed836a511293f4cc3a858060969d32f2b1ce (diff) | |
download | ffmpeg-42805eda554a7fc44341282771531e7837ac72b7.tar.gz |
rtpdec: Store the dynamic payload handler in the rtpdec context
This allows calling other dynamic payload handler functions if
needed.
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/rtpdec.c | 17 | ||||
-rw-r--r-- | libavformat/rtpdec.h | 2 |
2 files changed, 10 insertions, 9 deletions
diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index 08150b734a..348b796d83 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -425,7 +425,7 @@ void ff_rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx, RTPDynamicProtocolHandler *handler) { s->dynamic_protocol_context = ctx; - s->parse_packet = handler->parse_packet; + s->handler = handler; } /** @@ -540,9 +540,10 @@ static int rtp_parse_packet_internal(RTPDemuxContext *s, AVPacket *pkt, return 1; } return 0; - } else if (s->parse_packet) { - rv = s->parse_packet(s->ic, s->dynamic_protocol_context, - s->st, pkt, ×tamp, buf, len, seq, flags); + } else if (s->handler && s->handler->parse_packet) { + rv = s->handler->parse_packet(s->ic, s->dynamic_protocol_context, + s->st, pkt, ×tamp, buf, len, seq, + flags); } else { /* At this point, the RTP header has been stripped; * This is ASSUMING that there is only 1 CSRC, which isn't wise. */ @@ -680,13 +681,13 @@ static int rtp_parse_one_packet(RTPDemuxContext *s, AVPacket *pkt, if (s->prev_ret <= 0) return rtp_parse_queued_packet(s, pkt); /* return the next packets, if any */ - if (s->st && s->parse_packet) { + if (s->st && s->handler && s->handler->parse_packet) { /* timestamp should be overwritten by parse_packet, if not, * the packet is left with pts == AV_NOPTS_VALUE */ timestamp = RTP_NOTS_VALUE; - rv = s->parse_packet(s->ic, s->dynamic_protocol_context, - s->st, pkt, ×tamp, NULL, 0, 0, - flags); + rv = s->handler->parse_packet(s->ic, s->dynamic_protocol_context, + s->st, pkt, ×tamp, NULL, 0, 0, + flags); finalize_packet(s, pkt, timestamp); return rv; } else { diff --git a/libavformat/rtpdec.h b/libavformat/rtpdec.h index 7c51f5a8d2..75863b8ccb 100644 --- a/libavformat/rtpdec.h +++ b/libavformat/rtpdec.h @@ -184,7 +184,7 @@ struct RTPDemuxContext { uint8_t buf[RTP_MAX_PACKET_LENGTH]; /* dynamic payload stuff */ - DynamicPayloadPacketHandlerProc parse_packet; + const RTPDynamicProtocolHandler *handler; PayloadContext *dynamic_protocol_context; }; |