Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-19 Thread Martin Storsjö

On Tue, 19 Apr 2022, Marton Balint wrote:




On Sat, 16 Apr 2022, Martin Storsjö wrote:


On Fri, 15 Apr 2022, Tristan Matthews wrote:

 This avoids having to do one pass to calculate the full length to 

allocate

 followed by a second pass to actually append values.
 ---
 libavformat/librtmp.c | 124 +++---
 1 file changed, 33 insertions(+), 91 deletions(-)

 diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c
 index 43013e46e0..b7e9fc81cf 100644
 --- a/libavformat/librtmp.c
 +++ b/libavformat/librtmp.c
 @@ -25,6 +25,7 @@
  */

 #include "libavutil/avstring.h"
 +#include "libavutil/bprint.h"
 #include "libavutil/mathematics.h"
 #include "libavutil/opt.h"
 #include "avformat.h"
 @@ -38,6 +39,7 @@

 typedef struct LibRTMPContext {
 const AVClass *class;
 +AVBPrint filename;
 RTMP rtmp;
 char *app;
 char *conn;
 @@ -50,7 +52,6 @@ typedef struct LibRTMPContext {
 char *pageurl;
 char *client_buffer_time;
 int live;
 -char *temp_filename;
 int buffer_size;
 } LibRTMPContext;


This looks ok to me.

(I guess it also could be considered viable to not store the AVBprint in 
the 
context but detach an allocated string instead; that would decrease the 
persistent allocation size a little, at the cost of some more copying, but 
the difference is probably negligible, so this probably is sensible as is.)


Agreed.



Let's still wait for Marton's review too.


LGTM as well. Thanks.


Pushed now then.

// Martin
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-18 Thread Marton Balint



On Sat, 16 Apr 2022, Martin Storsjö wrote:


On Fri, 15 Apr 2022, Tristan Matthews wrote:


 This avoids having to do one pass to calculate the full length to allocate
 followed by a second pass to actually append values.
 ---
 libavformat/librtmp.c | 124 +++---
 1 file changed, 33 insertions(+), 91 deletions(-)

 diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c
 index 43013e46e0..b7e9fc81cf 100644
 --- a/libavformat/librtmp.c
 +++ b/libavformat/librtmp.c
 @@ -25,6 +25,7 @@
  */

 #include "libavutil/avstring.h"
 +#include "libavutil/bprint.h"
 #include "libavutil/mathematics.h"
 #include "libavutil/opt.h"
 #include "avformat.h"
 @@ -38,6 +39,7 @@

 typedef struct LibRTMPContext {
 const AVClass *class;
 +AVBPrint filename;
 RTMP rtmp;
 char *app;
 char *conn;
 @@ -50,7 +52,6 @@ typedef struct LibRTMPContext {
 char *pageurl;
 char *client_buffer_time;
 int live;
 -char *temp_filename;
 int buffer_size;
 } LibRTMPContext;


This looks ok to me.

(I guess it also could be considered viable to not store the AVBprint in the 
context but detach an allocated string instead; that would decrease the 
persistent allocation size a little, at the cost of some more copying, but 
the difference is probably negligible, so this probably is sensible as is.)


Agreed.



Let's still wait for Marton's review too.


LGTM as well. Thanks.

Marton
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-16 Thread Martin Storsjö

On Fri, 15 Apr 2022, Tristan Matthews wrote:


This avoids having to do one pass to calculate the full length to allocate
followed by a second pass to actually append values.
---
libavformat/librtmp.c | 124 +++---
1 file changed, 33 insertions(+), 91 deletions(-)

diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c
index 43013e46e0..b7e9fc81cf 100644
--- a/libavformat/librtmp.c
+++ b/libavformat/librtmp.c
@@ -25,6 +25,7 @@
 */

#include "libavutil/avstring.h"
+#include "libavutil/bprint.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "avformat.h"
@@ -38,6 +39,7 @@

typedef struct LibRTMPContext {
const AVClass *class;
+AVBPrint filename;
RTMP rtmp;
char *app;
char *conn;
@@ -50,7 +52,6 @@ typedef struct LibRTMPContext {
char *pageurl;
char *client_buffer_time;
int live;
-char *temp_filename;
int buffer_size;
} LibRTMPContext;


This looks ok to me.

(I guess it also could be considered viable to not store the AVBprint in 
the context but detach an allocated string instead; that would decrease 
the persistent allocation size a little, at the cost of some more copying, 
but the difference is probably negligible, so this probably is sensible as 
is.)


Let's still wait for Marton's review too.

// Martin

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-15 Thread Tristan Matthews
This avoids having to do one pass to calculate the full length to allocate
followed by a second pass to actually append values.
---
 libavformat/librtmp.c | 124 +++---
 1 file changed, 33 insertions(+), 91 deletions(-)

diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c
index 43013e46e0..b7e9fc81cf 100644
--- a/libavformat/librtmp.c
+++ b/libavformat/librtmp.c
@@ -25,6 +25,7 @@
  */
 
 #include "libavutil/avstring.h"
+#include "libavutil/bprint.h"
 #include "libavutil/mathematics.h"
 #include "libavutil/opt.h"
 #include "avformat.h"
@@ -38,6 +39,7 @@
 
 typedef struct LibRTMPContext {
 const AVClass *class;
+AVBPrint filename;
 RTMP rtmp;
 char *app;
 char *conn;
@@ -50,7 +52,6 @@ typedef struct LibRTMPContext {
 char *pageurl;
 char *client_buffer_time;
 int live;
-char *temp_filename;
 int buffer_size;
 } LibRTMPContext;
 
@@ -76,7 +77,7 @@ static int rtmp_close(URLContext *s)
 RTMP *r = >rtmp;
 
 RTMP_Close(r);
-av_freep(>temp_filename);
+av_bprint_finalize(>filename, NULL);
 return 0;
 }
 
@@ -97,8 +98,8 @@ static int rtmp_open(URLContext *s, const char *uri, int 
flags)
 LibRTMPContext *ctx = s->priv_data;
 RTMP *r = >rtmp;
 int rc = 0, level;
-char *filename = s->filename;
-int len = strlen(s->filename) + 1;
+/* This needs to stay allocated for as long as the RTMP context exists. */
+av_bprint_init(>filename, 0, AV_BPRINT_SIZE_UNLIMITED);
 
 switch (av_log_get_level()) {
 default:
@@ -112,118 +113,58 @@ static int rtmp_open(URLContext *s, const char *uri, int 
flags)
 RTMP_LogSetLevel(level);
 RTMP_LogSetCallback(rtmp_log);
 
-if (ctx->app)  len += strlen(ctx->app)  + sizeof(" app=");
-if (ctx->tcurl)len += strlen(ctx->tcurl)+ sizeof(" tcUrl=");
-if (ctx->pageurl)  len += strlen(ctx->pageurl)  + sizeof(" pageUrl=");
-if (ctx->flashver) len += strlen(ctx->flashver) + sizeof(" flashver=");
-
+av_bprintf(>filename, "%s", s->filename);
+if (ctx->app)
+av_bprintf(>filename, " app=%s", ctx->app);
+if (ctx->tcurl)
+av_bprintf(>filename, " tcUrl=%s", ctx->tcurl);
+if (ctx->pageurl)
+av_bprintf(>filename, " pageUrl=%s", ctx->pageurl);
+if (ctx->swfurl)
+av_bprintf(>filename, " swfUrl=%s", ctx->swfurl);
+if (ctx->flashver)
+av_bprintf(>filename, " flashVer=%s", ctx->flashver);
 if (ctx->conn) {
 char *sep, *p = ctx->conn;
-int options = 0;
-
 while (p) {
-options++;
+av_bprintf(>filename,  " conn=");
 p += strspn(p, " ");
 if (!*p)
 break;
 sep = strchr(p, ' ');
+if (sep)
+*sep = '\0';
+av_bprintf(>filename, "%s", p);
+
 if (sep)
 p = sep + 1;
 else
 break;
 }
-len += options * sizeof(" conn=");
-len += strlen(ctx->conn);
 }
-
 if (ctx->playpath)
-len += strlen(ctx->playpath) + sizeof(" playpath=");
+av_bprintf(>filename, " playpath=%s", ctx->playpath);
 if (ctx->live)
-len += sizeof(" live=1");
+av_bprintf(>filename, " live=1");
 if (ctx->subscribe)
-len += strlen(ctx->subscribe) + sizeof(" subscribe=");
-
+av_bprintf(>filename, " subscribe=%s", ctx->subscribe);
 if (ctx->client_buffer_time)
-len += strlen(ctx->client_buffer_time) + sizeof(" buffer=");
-
+av_bprintf(>filename, " buffer=%s", ctx->client_buffer_time);
 if (ctx->swfurl || ctx->swfverify) {
-len += sizeof(" swfUrl=");
-
 if (ctx->swfverify)
-len += strlen(ctx->swfverify) + sizeof(" swfVfy=1");
+av_bprintf(>filename, " swfUrl=%s swfVfy=1", ctx->swfverify);
 else
-len += strlen(ctx->swfurl);
+av_bprintf(>filename, " swfUrl=%s", ctx->swfurl);
 }
 
-if (!(ctx->temp_filename = filename = av_malloc(len)))
+if (!av_bprint_is_complete(>filename)) {
+av_bprint_finalize(>filename, NULL);
 return AVERROR(ENOMEM);
-
-av_strlcpy(filename, s->filename, len);
-if (ctx->app) {
-av_strlcat(filename, " app=", len);
-av_strlcat(filename, ctx->app, len);
-}
-if (ctx->tcurl) {
-av_strlcat(filename, " tcUrl=", len);
-av_strlcat(filename, ctx->tcurl, len);
-}
-if (ctx->pageurl) {
-av_strlcat(filename, " pageUrl=", len);
-av_strlcat(filename, ctx->pageurl, len);
-}
-if (ctx->swfurl) {
-av_strlcat(filename, " swfUrl=", len);
-av_strlcat(filename, ctx->swfurl, len);
-}
-if (ctx->flashver) {
-av_strlcat(filename, " flashVer=", len);
-av_strlcat(filename, ctx->flashver, len);
-}
-if (ctx->conn) {
-char *sep, *p = ctx->conn;
-while (p) {
-av_strlcat(filename, " conn=", len);
-  

Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-15 Thread Tristan Matthews
On Wed, Apr 13, 2022 at 3:40 PM Marton Balint  wrote:

>
>
> On Wed, 13 Apr 2022, Martin Storsjö wrote:
>
> > On Mon, 11 Apr 2022, Tristan Matthews wrote:
> >
> >>  This avoids having to do one pass to calculate the full length to
> allocate
> >>  followed by a second pass to actually append values.
> >>  ---
> >>  libavformat/librtmp.c | 123 +++---
> >>  1 file changed, 32 insertions(+), 91 deletions(-)
> >
> > Thanks, this patch looks good to me. I'll wait for a little while still
> if
> > Marton wants to comment on it, before I go ahead and push it.
>
> According to commit 865461099e062de5a3a109c2a5be98004c11d8bd the buffer
> passed to RTMP_SetupURL has to be kept as long as the RTMP context is
> alive.
>
>
Oh good catch, I should've dug deeper as to why ctx->temp_filename existed.

Best,
Tristan



> Regards,
> Marton
> ___
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
>
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-13 Thread Martin Storsjö

On Wed, 13 Apr 2022, Marton Balint wrote:




On Wed, 13 Apr 2022, Martin Storsjö wrote:


On Mon, 11 Apr 2022, Tristan Matthews wrote:

 This avoids having to do one pass to calculate the full length to 

allocate

 followed by a second pass to actually append values.
 ---
 libavformat/librtmp.c | 123 +++---
 1 file changed, 32 insertions(+), 91 deletions(-)


Thanks, this patch looks good to me. I'll wait for a little while still if 
Marton wants to comment on it, before I go ahead and push it.


According to commit 865461099e062de5a3a109c2a5be98004c11d8bd the buffer 
passed to RTMP_SetupURL has to be kept as long as the RTMP context is 
alive.


Oh, excellent catch, thanks!

// Martin
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-13 Thread Marton Balint



On Wed, 13 Apr 2022, Martin Storsjö wrote:


On Mon, 11 Apr 2022, Tristan Matthews wrote:


 This avoids having to do one pass to calculate the full length to allocate
 followed by a second pass to actually append values.
 ---
 libavformat/librtmp.c | 123 +++---
 1 file changed, 32 insertions(+), 91 deletions(-)


Thanks, this patch looks good to me. I'll wait for a little while still if 
Marton wants to comment on it, before I go ahead and push it.


According to commit 865461099e062de5a3a109c2a5be98004c11d8bd the buffer 
passed to RTMP_SetupURL has to be kept as long as the RTMP context is 
alive.


Regards,
Marton
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-13 Thread Martin Storsjö

On Mon, 11 Apr 2022, Tristan Matthews wrote:


This avoids having to do one pass to calculate the full length to allocate
followed by a second pass to actually append values.
---
libavformat/librtmp.c | 123 +++---
1 file changed, 32 insertions(+), 91 deletions(-)


Thanks, this patch looks good to me. I'll wait for a little while still 
if Marton wants to comment on it, before I go ahead and push it.


// Martin

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".


[FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *

2022-04-11 Thread Tristan Matthews
This avoids having to do one pass to calculate the full length to allocate
followed by a second pass to actually append values.
---
 libavformat/librtmp.c | 123 +++---
 1 file changed, 32 insertions(+), 91 deletions(-)

diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c
index 43013e46e0..7b379e48ee 100644
--- a/libavformat/librtmp.c
+++ b/libavformat/librtmp.c
@@ -25,6 +25,7 @@
  */
 
 #include "libavutil/avstring.h"
+#include "libavutil/bprint.h"
 #include "libavutil/mathematics.h"
 #include "libavutil/opt.h"
 #include "avformat.h"
@@ -50,7 +51,6 @@ typedef struct LibRTMPContext {
 char *pageurl;
 char *client_buffer_time;
 int live;
-char *temp_filename;
 int buffer_size;
 } LibRTMPContext;
 
@@ -76,7 +76,6 @@ static int rtmp_close(URLContext *s)
 RTMP *r = >rtmp;
 
 RTMP_Close(r);
-av_freep(>temp_filename);
 return 0;
 }
 
@@ -94,11 +93,11 @@ static int rtmp_close(URLContext *s)
  */
 static int rtmp_open(URLContext *s, const char *uri, int flags)
 {
+AVBPrint filename;
 LibRTMPContext *ctx = s->priv_data;
 RTMP *r = >rtmp;
 int rc = 0, level;
-char *filename = s->filename;
-int len = strlen(s->filename) + 1;
+av_bprint_init(, 0, AV_BPRINT_SIZE_UNLIMITED);
 
 switch (av_log_get_level()) {
 default:
@@ -112,118 +111,58 @@ static int rtmp_open(URLContext *s, const char *uri, int 
flags)
 RTMP_LogSetLevel(level);
 RTMP_LogSetCallback(rtmp_log);
 
-if (ctx->app)  len += strlen(ctx->app)  + sizeof(" app=");
-if (ctx->tcurl)len += strlen(ctx->tcurl)+ sizeof(" tcUrl=");
-if (ctx->pageurl)  len += strlen(ctx->pageurl)  + sizeof(" pageUrl=");
-if (ctx->flashver) len += strlen(ctx->flashver) + sizeof(" flashver=");
-
+av_bprintf(, "%s", s->filename);
+if (ctx->app)
+av_bprintf(, " app=%s", ctx->app);
+if (ctx->tcurl)
+av_bprintf(, " tcUrl=%s", ctx->tcurl);
+if (ctx->pageurl)
+av_bprintf(, " pageUrl=%s", ctx->pageurl);
+if (ctx->swfurl)
+av_bprintf(, " swfUrl=%s", ctx->swfurl);
+if (ctx->flashver)
+av_bprintf(, " flashVer=%s", ctx->flashver);
 if (ctx->conn) {
 char *sep, *p = ctx->conn;
-int options = 0;
-
 while (p) {
-options++;
+av_bprintf(,  " conn=");
 p += strspn(p, " ");
 if (!*p)
 break;
 sep = strchr(p, ' ');
+if (sep)
+*sep = '\0';
+av_bprintf(, "%s", p);
+
 if (sep)
 p = sep + 1;
 else
 break;
 }
-len += options * sizeof(" conn=");
-len += strlen(ctx->conn);
 }
-
 if (ctx->playpath)
-len += strlen(ctx->playpath) + sizeof(" playpath=");
+av_bprintf(, " playpath=%s", ctx->playpath);
 if (ctx->live)
-len += sizeof(" live=1");
+av_bprintf(, " live=1");
 if (ctx->subscribe)
-len += strlen(ctx->subscribe) + sizeof(" subscribe=");
-
+av_bprintf(, " subscribe=%s", ctx->subscribe);
 if (ctx->client_buffer_time)
-len += strlen(ctx->client_buffer_time) + sizeof(" buffer=");
-
+av_bprintf(, " buffer=%s", ctx->client_buffer_time);
 if (ctx->swfurl || ctx->swfverify) {
-len += sizeof(" swfUrl=");
-
 if (ctx->swfverify)
-len += strlen(ctx->swfverify) + sizeof(" swfVfy=1");
+av_bprintf(, " swfUrl=%s swfVfy=1", ctx->swfverify);
 else
-len += strlen(ctx->swfurl);
+av_bprintf(, " swfUrl=%s", ctx->swfurl);
 }
 
-if (!(ctx->temp_filename = filename = av_malloc(len)))
+if (!av_bprint_is_complete()) {
+av_bprint_finalize(, NULL);
 return AVERROR(ENOMEM);
-
-av_strlcpy(filename, s->filename, len);
-if (ctx->app) {
-av_strlcat(filename, " app=", len);
-av_strlcat(filename, ctx->app, len);
-}
-if (ctx->tcurl) {
-av_strlcat(filename, " tcUrl=", len);
-av_strlcat(filename, ctx->tcurl, len);
-}
-if (ctx->pageurl) {
-av_strlcat(filename, " pageUrl=", len);
-av_strlcat(filename, ctx->pageurl, len);
-}
-if (ctx->swfurl) {
-av_strlcat(filename, " swfUrl=", len);
-av_strlcat(filename, ctx->swfurl, len);
-}
-if (ctx->flashver) {
-av_strlcat(filename, " flashVer=", len);
-av_strlcat(filename, ctx->flashver, len);
-}
-if (ctx->conn) {
-char *sep, *p = ctx->conn;
-while (p) {
-av_strlcat(filename, " conn=", len);
-p += strspn(p, " ");
-if (!*p)
-break;
-sep = strchr(p, ' ');
-if (sep)
-*sep = '\0';
-av_strlcat(filename, p, len);
-
-if (sep)
-p = sep + 1;
-else
-break;
-}
-}
-if (ctx->playpath) {
-