[FFmpeg-cvslog] avformat/rtsp: load the sdp file with avio_read_to_bprint()

Limin Wang git at videolan.org
Sat Dec 4 03:28:22 EET 2021


ffmpeg | branch: master | Limin Wang <lance.lmwang at gmail.com> | Thu Dec  2 18:12:12 2021 +0800| [98054e4f018fefb83c1903de99cdd9e9c3394e85] | committer: Limin Wang

avformat/rtsp: load the sdp file with avio_read_to_bprint()

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>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=98054e4f018fefb83c1903de99cdd9e9c3394e85
---

 libavformat/rtsp.c | 25 +++++++++----------------
 1 file changed, 9 insertions(+), 16 deletions(-)

diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index cd3d284da6..deaed34db4 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -2372,9 +2372,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);
@@ -2385,22 +2385,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 */



More information about the ffmpeg-cvslog mailing list