From 016bc031ebe5c3e75809749a3f409f9f2c4a1d7a Mon Sep 17 00:00:00 2001 From: Josh Allmann Date: Mon, 28 Jun 2010 11:24:12 +0000 Subject: [PATCH] rtpdec: Add generic function for iterating over FMTP configuration lines This will be used for cleaning up code that is common among RTP depacketizers. Patch by Josh Allmann, joshua dot allmann at gmail Originally committed as revision 23847 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/rtpdec.c | 25 +++++++++++++++++++++++++ libavformat/rtpdec.h | 5 +++++ 2 files changed, 30 insertions(+) diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c index 456e2e42de..74858f638a 100644 --- a/libavformat/rtpdec.c +++ b/libavformat/rtpdec.c @@ -531,3 +531,28 @@ void rtp_parse_close(RTPDemuxContext *s) } av_free(s); } + +int ff_parse_fmtp(AVStream *stream, PayloadContext *data, const char *p, + int (*parse_fmtp)(AVStream *stream, + PayloadContext *data, + char *attr, char *value)) +{ + char attr[256]; + char value[4096]; + int res; + + // remove protocol identifier + while (*p && *p == ' ') p++; // strip spaces + while (*p && *p != ' ') p++; // eat protocol identifier + while (*p && *p == ' ') p++; // strip trailing spaces + + while (ff_rtsp_next_attr_and_value(&p, + attr, sizeof(attr), + value, sizeof(value))) { + + res = parse_fmtp(stream, data, attr, value); + if (res < 0) + return res; + } + return 0; +} diff --git a/libavformat/rtpdec.h b/libavformat/rtpdec.h index 439fcc2b4d..86af2b9d45 100644 --- a/libavformat/rtpdec.h +++ b/libavformat/rtpdec.h @@ -172,6 +172,11 @@ void ff_register_dynamic_payload_handler(RTPDynamicProtocolHandler *handler); int ff_rtsp_next_attr_and_value(const char **p, char *attr, int attr_size, char *value, int value_size); ///< from rtsp.c, but used by rtp dynamic protocol handlers. +int ff_parse_fmtp(AVStream *stream, PayloadContext *data, const char *p, + int (*parse_fmtp)(AVStream *stream, + PayloadContext *data, + char *attr, char *value)); + void av_register_rtp_dynamic_payload_handlers(void); #endif /* AVFORMAT_RTPDEC_H */