[FFmpeg-devel] [PATCH v3 1/2] avformat/rtsp: load the sdp file with avio_read_to_bprint()
lance.lmwang at gmail.com
lance.lmwang at gmail.com
Thu Dec 2 12:37:38 EET 2021
From: Limin Wang <lance.lmwang at gmail.com>
this allows getting rid of the hardcoded max size of SDP.
Reviewed-by: Martin Storsjö <martin at martin.st>
Signed-off-by: Limin Wang <lance.lmwang at gmail.com>
---
libavformat/rtsp.c | 25 +++++++++----------------
1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index e6a4993..17ffac2 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -2373,9 +2373,9 @@ static int sdp_read_header(AVFormatContext *s)
{
RTSPState *rt = s->priv_data;
RTSPStream *rtsp_st;
- int size, i, err;
- char *content;
+ int i, err;
char url[MAX_URL_SIZE];
+ AVBPrint bp;
if (!ff_network_init())
return AVERROR(EIO);
@@ -2386,22 +2386,15 @@ static int sdp_read_header(AVFormatContext *s)
rt->lower_transport = RTSP_LOWER_TRANSPORT_CUSTOM;
/* read the whole sdp file */
- /* XXX: better loading */
- content = av_malloc(SDP_MAX_SIZE);
- if (!content) {
+ av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED);
+ err = avio_read_to_bprint(s->pb, &bp, INT_MAX);
+ if (err < 0 ) {
ff_network_close();
- return AVERROR(ENOMEM);
+ av_bprint_finalize(&bp, NULL);
+ return err;
}
- size = avio_read(s->pb, content, SDP_MAX_SIZE - 1);
- if (size <= 0) {
- av_free(content);
- ff_network_close();
- return AVERROR_INVALIDDATA;
- }
- content[size] ='\0';
-
- err = ff_sdp_parse(s, content);
- av_freep(&content);
+ err = ff_sdp_parse(s, bp.str);
+ av_bprint_finalize(&bp, NULL);
if (err) goto fail;
/* open each RTP stream */
--
1.8.3.1
More information about the ffmpeg-devel
mailing list