summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavformat/rtpdec.c25
-rw-r--r--libavformat/rtpdec.h5
2 files changed, 30 insertions, 0 deletions
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 */