* [FFmpeg-devel] [PATCH 1/1] librtmp: make flashVer case consistent
@ 2022-04-06 5:11 Tristan Matthews
2022-04-09 18:45 ` Marton Balint
0 siblings, 1 reply; 12+ messages in thread
From: Tristan Matthews @ 2022-04-06 5:11 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Tristan Matthews
This is basically a cosmetic change (no functional difference).
---
libavformat/librtmp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c
index 43013e46e0..b23adb9593 100644
--- a/libavformat/librtmp.c
+++ b/libavformat/librtmp.c
@@ -115,7 +115,7 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
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=");
+ if (ctx->flashver) len += strlen(ctx->flashver) + sizeof(" flashVer=");
if (ctx->conn) {
char *sep, *p = ctx->conn;
--
2.32.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: make flashVer case consistent
2022-04-06 5:11 [FFmpeg-devel] [PATCH 1/1] librtmp: make flashVer case consistent Tristan Matthews
@ 2022-04-09 18:45 ` Marton Balint
2022-04-11 15:48 ` Tristan Matthews
0 siblings, 1 reply; 12+ messages in thread
From: Marton Balint @ 2022-04-09 18:45 UTC (permalink / raw)
To: FFmpeg development discussions and patches
On Wed, 6 Apr 2022, Tristan Matthews wrote:
> This is basically a cosmetic change (no functional difference).
>
> ---
> libavformat/librtmp.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c
> index 43013e46e0..b23adb9593 100644
> --- a/libavformat/librtmp.c
> +++ b/libavformat/librtmp.c
> @@ -115,7 +115,7 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
> 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=");
> + if (ctx->flashver) len += strlen(ctx->flashver) + sizeof(" flashVer=");
Actually this whole rtmp_open function should be reworked to use an
AVBPrint buffer to generate the rtmp URL. The way it works now -
calculating the length first then creating the actual sting - is
very ugly.
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-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: make flashVer case consistent
2022-04-09 18:45 ` Marton Balint
@ 2022-04-11 15:48 ` Tristan Matthews
2022-04-11 15:49 ` [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char * Tristan Matthews
0 siblings, 1 reply; 12+ messages in thread
From: Tristan Matthews @ 2022-04-11 15:48 UTC (permalink / raw)
To: FFmpeg development discussions and patches
On Sat, Apr 9, 2022 at 2:45 PM Marton Balint <cus@passwd.hu> wrote:
>
>
> On Wed, 6 Apr 2022, Tristan Matthews wrote:
>
> > This is basically a cosmetic change (no functional difference).
> >
> > ---
> > libavformat/librtmp.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/libavformat/librtmp.c b/libavformat/librtmp.c
> > index 43013e46e0..b23adb9593 100644
> > --- a/libavformat/librtmp.c
> > +++ b/libavformat/librtmp.c
> > @@ -115,7 +115,7 @@ static int rtmp_open(URLContext *s, const char *uri,
> int flags)
> > 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=");
> > + if (ctx->flashver) len += strlen(ctx->flashver) + sizeof("
> flashVer=");
>
> Actually this whole rtmp_open function should be reworked to use an
> AVBPrint buffer to generate the rtmp URL. The way it works now -
> calculating the length first then creating the actual sting - is
> very ugly.
>
>
Oh yeah good call, I will follow up with that instead.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-11 15:48 ` Tristan Matthews
@ 2022-04-11 15:49 ` Tristan Matthews
2022-04-13 8:52 ` Martin Storsjö
0 siblings, 1 reply; 12+ messages in thread
From: Tristan Matthews @ 2022-04-11 15:49 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: 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 = &ctx->rtmp;
RTMP_Close(r);
- av_freep(&ctx->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 = &ctx->rtmp;
int rc = 0, level;
- char *filename = s->filename;
- int len = strlen(s->filename) + 1;
+ av_bprint_init(&filename, 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(&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);
- 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) {
- av_strlcat(filename, " playpath=", len);
- av_strlcat(filename, ctx->playpath, len);
- }
- if (ctx->live)
- av_strlcat(filename, " live=1", len);
- if (ctx->subscribe) {
- av_strlcat(filename, " subscribe=", len);
- av_strlcat(filename, ctx->subscribe, len);
- }
- if (ctx->client_buffer_time) {
- av_strlcat(filename, " buffer=", len);
- av_strlcat(filename, ctx->client_buffer_time, len);
- }
- if (ctx->swfurl || ctx->swfverify) {
- av_strlcat(filename, " swfUrl=", len);
-
- if (ctx->swfverify) {
- av_strlcat(filename, ctx->swfverify, len);
- av_strlcat(filename, " swfVfy=1", len);
- } else {
- av_strlcat(filename, ctx->swfurl, len);
- }
}
RTMP_Init(r);
- if (!RTMP_SetupURL(r, filename)) {
+ /* This will modify filename by null terminating the URL portion */
+ if (!RTMP_SetupURL(r, filename.str)) {
rc = AVERROR_UNKNOWN;
goto fail;
}
@@ -247,9 +186,11 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
#endif
s->is_streamed = 1;
+ av_bprint_finalize(&filename, NULL);
return 0;
fail:
- av_freep(&ctx->temp_filename);
+ av_bprint_finalize(&filename, NULL);
+
if (rc)
RTMP_Close(r);
--
2.32.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-11 15:49 ` [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char * Tristan Matthews
@ 2022-04-13 8:52 ` Martin Storsjö
2022-04-13 19:39 ` Marton Balint
0 siblings, 1 reply; 12+ messages in thread
From: Martin Storsjö @ 2022-04-13 8:52 UTC (permalink / raw)
To: FFmpeg development discussions and patches; +Cc: Tristan Matthews
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-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-13 8:52 ` Martin Storsjö
@ 2022-04-13 19:39 ` Marton Balint
2022-04-13 20:02 ` Martin Storsjö
2022-04-15 11:51 ` Tristan Matthews
0 siblings, 2 replies; 12+ messages in thread
From: Marton Balint @ 2022-04-13 19:39 UTC (permalink / raw)
To: FFmpeg development discussions and patches
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-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-13 19:39 ` Marton Balint
@ 2022-04-13 20:02 ` Martin Storsjö
2022-04-15 11:51 ` Tristan Matthews
1 sibling, 0 replies; 12+ messages in thread
From: Martin Storsjö @ 2022-04-13 20:02 UTC (permalink / raw)
To: FFmpeg development discussions and patches
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-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-13 19:39 ` Marton Balint
2022-04-13 20:02 ` Martin Storsjö
@ 2022-04-15 11:51 ` Tristan Matthews
2022-04-15 11:53 ` Tristan Matthews
1 sibling, 1 reply; 12+ messages in thread
From: Tristan Matthews @ 2022-04-15 11:51 UTC (permalink / raw)
To: FFmpeg development discussions and patches
On Wed, Apr 13, 2022 at 3:40 PM Marton Balint <cus@passwd.hu> 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-request@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-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-15 11:51 ` Tristan Matthews
@ 2022-04-15 11:53 ` Tristan Matthews
2022-04-16 20:06 ` Martin Storsjö
0 siblings, 1 reply; 12+ messages in thread
From: Tristan Matthews @ 2022-04-15 11:53 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: 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 = &ctx->rtmp;
RTMP_Close(r);
- av_freep(&ctx->temp_filename);
+ av_bprint_finalize(&ctx->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 = &ctx->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(&ctx->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(&ctx->filename, "%s", s->filename);
+ if (ctx->app)
+ av_bprintf(&ctx->filename, " app=%s", ctx->app);
+ if (ctx->tcurl)
+ av_bprintf(&ctx->filename, " tcUrl=%s", ctx->tcurl);
+ if (ctx->pageurl)
+ av_bprintf(&ctx->filename, " pageUrl=%s", ctx->pageurl);
+ if (ctx->swfurl)
+ av_bprintf(&ctx->filename, " swfUrl=%s", ctx->swfurl);
+ if (ctx->flashver)
+ av_bprintf(&ctx->filename, " flashVer=%s", ctx->flashver);
if (ctx->conn) {
char *sep, *p = ctx->conn;
- int options = 0;
-
while (p) {
- options++;
+ av_bprintf(&ctx->filename, " conn=");
p += strspn(p, " ");
if (!*p)
break;
sep = strchr(p, ' ');
+ if (sep)
+ *sep = '\0';
+ av_bprintf(&ctx->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(&ctx->filename, " playpath=%s", ctx->playpath);
if (ctx->live)
- len += sizeof(" live=1");
+ av_bprintf(&ctx->filename, " live=1");
if (ctx->subscribe)
- len += strlen(ctx->subscribe) + sizeof(" subscribe=");
-
+ av_bprintf(&ctx->filename, " subscribe=%s", ctx->subscribe);
if (ctx->client_buffer_time)
- len += strlen(ctx->client_buffer_time) + sizeof(" buffer=");
-
+ av_bprintf(&ctx->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(&ctx->filename, " swfUrl=%s swfVfy=1", ctx->swfverify);
else
- len += strlen(ctx->swfurl);
+ av_bprintf(&ctx->filename, " swfUrl=%s", ctx->swfurl);
}
- if (!(ctx->temp_filename = filename = av_malloc(len)))
+ if (!av_bprint_is_complete(&ctx->filename)) {
+ av_bprint_finalize(&ctx->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);
- 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) {
- av_strlcat(filename, " playpath=", len);
- av_strlcat(filename, ctx->playpath, len);
- }
- if (ctx->live)
- av_strlcat(filename, " live=1", len);
- if (ctx->subscribe) {
- av_strlcat(filename, " subscribe=", len);
- av_strlcat(filename, ctx->subscribe, len);
- }
- if (ctx->client_buffer_time) {
- av_strlcat(filename, " buffer=", len);
- av_strlcat(filename, ctx->client_buffer_time, len);
- }
- if (ctx->swfurl || ctx->swfverify) {
- av_strlcat(filename, " swfUrl=", len);
-
- if (ctx->swfverify) {
- av_strlcat(filename, ctx->swfverify, len);
- av_strlcat(filename, " swfVfy=1", len);
- } else {
- av_strlcat(filename, ctx->swfurl, len);
- }
}
RTMP_Init(r);
- if (!RTMP_SetupURL(r, filename)) {
+ /* This will modify filename by null terminating the URL portion */
+ if (!RTMP_SetupURL(r, ctx->filename.str)) {
rc = AVERROR_UNKNOWN;
goto fail;
}
@@ -249,9 +190,10 @@ static int rtmp_open(URLContext *s, const char *uri, int flags)
s->is_streamed = 1;
return 0;
fail:
- av_freep(&ctx->temp_filename);
+
if (rc)
RTMP_Close(r);
+ av_bprint_finalize(&ctx->filename, NULL);
return rc;
}
--
2.32.0
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-15 11:53 ` Tristan Matthews
@ 2022-04-16 20:06 ` Martin Storsjö
2022-04-18 22:06 ` Marton Balint
0 siblings, 1 reply; 12+ messages in thread
From: Martin Storsjö @ 2022-04-16 20:06 UTC (permalink / raw)
To: FFmpeg development discussions and patches; +Cc: Tristan Matthews
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-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-16 20:06 ` Martin Storsjö
@ 2022-04-18 22:06 ` Marton Balint
2022-04-19 20:22 ` Martin Storsjö
0 siblings, 1 reply; 12+ messages in thread
From: Marton Balint @ 2022-04-18 22:06 UTC (permalink / raw)
To: FFmpeg development discussions and patches
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-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char *
2022-04-18 22:06 ` Marton Balint
@ 2022-04-19 20:22 ` Martin Storsjö
0 siblings, 0 replies; 12+ messages in thread
From: Martin Storsjö @ 2022-04-19 20:22 UTC (permalink / raw)
To: FFmpeg development discussions and patches
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-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2022-04-19 20:23 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-06 5:11 [FFmpeg-devel] [PATCH 1/1] librtmp: make flashVer case consistent Tristan Matthews
2022-04-09 18:45 ` Marton Balint
2022-04-11 15:48 ` Tristan Matthews
2022-04-11 15:49 ` [FFmpeg-devel] [PATCH 1/1] librtmp: use AVBPrint instead of char * Tristan Matthews
2022-04-13 8:52 ` Martin Storsjö
2022-04-13 19:39 ` Marton Balint
2022-04-13 20:02 ` Martin Storsjö
2022-04-15 11:51 ` Tristan Matthews
2022-04-15 11:53 ` Tristan Matthews
2022-04-16 20:06 ` Martin Storsjö
2022-04-18 22:06 ` Marton Balint
2022-04-19 20:22 ` Martin Storsjö
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git