On Tue, 18 Oct 2016, Luca Barbato wrote:

Useful to test protocols that require options to be used.
---
tools/aviocat.c | 23 ++++++++++++++++++++---
1 file changed, 20 insertions(+), 3 deletions(-)

diff --git a/tools/aviocat.c b/tools/aviocat.c
index 59244a8..fffcbe3 100644
--- a/tools/aviocat.c
+++ b/tools/aviocat.c
@@ -26,7 +26,8 @@

static int usage(const char *argv0, int ret)
{
-    fprintf(stderr, "%s [-b bytespersec] [-d duration] input_url 
output_url\n", argv0);
+    fprintf(stderr, "%s [-b bytespersec] [-d duration] [-oi <options>] [-oo 
<options>] input_url output_url\n", argv0);
+    fprintf(stderr, "<options>: AVOptions expressed as key=value, 
:-separated\n");
    return ret;
}

@@ -38,6 +39,8 @@ int main(int argc, char **argv)
    int64_t start_time;
    char errbuf[50];
    AVIOContext *input, *output;
+    AVDictionary *in_opts = NULL;
+    AVDictionary *out_opts = NULL;

    av_register_all();
    avformat_network_init();
@@ -49,6 +52,20 @@ int main(int argc, char **argv)
        } else if (!strcmp(argv[i], "-d") && i + 1 < argc) {
            duration = atoi(argv[i + 1]);
            i++;
+        } else if (!strcmp(argv[i], "-oi") && i + 1 < argc) {
+            if (av_dict_parse_string(&in_opts, argv[i + 1], "=", ":", 0) < 0) {
+                fprintf(stderr, "Cannot parse option string %s\n",
+                        argv[i + 1]);
+                return usage(argv[0], 1);
+            }
+            i++;
+        } else if (!strcmp(argv[i], "-oo") && i + 1 < argc) {
+            if (av_dict_parse_string(&out_opts, argv[i + 1], "=", ":", 0) < 0) 
{
+                fprintf(stderr, "Cannot parse option string %s\n",
+                        argv[i + 1]);
+                return usage(argv[0], 1);
+            }
+            i++;
        } else if (!input_url) {
            input_url = argv[i];
        } else if (!output_url) {
@@ -60,7 +77,7 @@ int main(int argc, char **argv)
    if (!output_url)
        return usage(argv[0], 1);

-    ret = avio_open2(&input, input_url, AVIO_FLAG_READ, NULL, NULL);
+    ret = avio_open2(&input, input_url, AVIO_FLAG_READ, NULL, &in_opts);
    if (ret) {
        av_strerror(ret, errbuf, sizeof(errbuf));
        fprintf(stderr, "Unable to open %s: %s\n", input_url, errbuf);
@@ -75,7 +92,7 @@ int main(int argc, char **argv)
        }
        bps = size / duration;
    }
-    ret = avio_open2(&output, output_url, AVIO_FLAG_WRITE, NULL, NULL);
+    ret = avio_open2(&output, output_url, AVIO_FLAG_WRITE, NULL, &out_opts);
    if (ret) {
        av_strerror(ret, errbuf, sizeof(errbuf));
        fprintf(stderr, "Unable to open %s: %s\n", output_url, errbuf);
--
2.9.2

Should the dictionary be freed afterwards (in case it contained options that weren't used), to make sure it doesn't show any leaks if ran in valgrind?

Other than that, LGTM!

// Martin
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to