]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/librist.c
avfilter/vf_ssim: remove unnecessary check
[ffmpeg] / libavformat / librist.c
index 789cefda362a795274a92b78c9aa2fc2b257498e..01a3f9c122a3897e50ebcc29c22a96daf1492122 100644 (file)
 
 #include <librist/librist.h>
 
+// RIST_MAX_PACKET_SIZE - 28 minimum protocol overhead
+#define MAX_PAYLOAD_SIZE (10000-28)
+
 typedef struct RISTContext {
     const AVClass *class;
 
-    int queue_count;
     int profile;
     int buffer_size;
+    int packet_size;
     int log_level;
     int encryption;
     char *secret;
@@ -59,8 +62,9 @@ static const AVOption librist_options[] = {
     { "simple",      NULL,              0,                   AV_OPT_TYPE_CONST, {.i64=RIST_PROFILE_SIMPLE},   0, 0, .flags = D|E, "profile" },
     { "main",        NULL,              0,                   AV_OPT_TYPE_CONST, {.i64=RIST_PROFILE_MAIN},     0, 0, .flags = D|E, "profile" },
     { "advanced",    NULL,              0,                   AV_OPT_TYPE_CONST, {.i64=RIST_PROFILE_ADVANCED}, 0, 0, .flags = D|E, "profile" },
-    { "buffer_size", "set buffer_size", OFFSET(buffer_size), AV_OPT_TYPE_INT,   {.i64=0},                     0, INT_MAX, .flags = D|E },
-    { "log_level",   "set loglevel",    OFFSET(log_level),   AV_OPT_TYPE_INT,   {.i64=-1},                   -1, INT_MAX, .flags = D|E },
+    { "buffer_size", "set buffer_size in ms", OFFSET(buffer_size), AV_OPT_TYPE_INT, {.i64=0},                 0, 30000, .flags = D|E },
+    { "pkt_size",    "set packet size", OFFSET(packet_size), AV_OPT_TYPE_INT,   {.i64=1316},                  1, MAX_PAYLOAD_SIZE,    .flags = D|E },
+    { "log_level",   "set loglevel",    OFFSET(log_level),   AV_OPT_TYPE_INT,   {.i64=RIST_LOG_INFO},        -1, INT_MAX, .flags = D|E },
     { "secret", "set encryption secret",OFFSET(secret),      AV_OPT_TYPE_STRING,{.str=NULL},                  0, 0,       .flags = D|E },
     { "encryption","set encryption type",OFFSET(encryption), AV_OPT_TYPE_INT   ,{.i64=0},                     0, INT_MAX, .flags = D|E },
     { NULL }
@@ -83,12 +87,11 @@ static int log_cb(void *arg, enum rist_log_level log_level, const char *msg)
     switch (log_level) {
     case RIST_LOG_ERROR:    level = AV_LOG_ERROR;   break;
     case RIST_LOG_WARN:     level = AV_LOG_WARNING; break;
-    case RIST_LOG_NOTICE:   level = AV_LOG_VERBOSE; break;
-    case RIST_LOG_INFO:     level = AV_LOG_INFO;    break;
+    case RIST_LOG_NOTICE:   level = AV_LOG_INFO;    break;
+    case RIST_LOG_INFO:     level = AV_LOG_VERBOSE; break;
     case RIST_LOG_DEBUG:    level = AV_LOG_DEBUG;   break;
     case RIST_LOG_DISABLE:  level = AV_LOG_QUIET;   break;
-    case RIST_LOG_SIMULATE: level = AV_LOG_TRACE;   break;
-    default: level = AV_LOG_PANIC;
+    default: level = AV_LOG_WARNING;
     }
 
     av_log(arg, level, "%s", msg);
@@ -124,13 +127,17 @@ static int librist_open(URLContext *h, const char *uri, int flags)
     if (ret < 0)
         return risterr2ret(ret);
 
-    if (flags & AVIO_FLAG_WRITE)
+    if (flags & AVIO_FLAG_WRITE) {
+        h->max_packet_size = s->packet_size;
         ret = rist_sender_create(&s->ctx, s->profile, 0, logging_settings);
+    }
     if (ret < 0)
         goto err;
 
-    if (flags & AVIO_FLAG_READ)
+    if (flags & AVIO_FLAG_READ) {
+        h->max_packet_size = MAX_PAYLOAD_SIZE;
         ret = rist_receiver_create(&s->ctx, s->profile, logging_settings);
+    }
     if (ret < 0)
         goto err;
 
@@ -150,7 +157,7 @@ static int librist_open(URLContext *h, const char *uri, int flags)
     }
 
     if (s->secret && peer_config->secret[0] == 0)
-        av_strlcpy(peer_config->secret, s->secret, FFMIN(RIST_MAX_STRING_SHORT - 1, strlen(s->secret)));
+        av_strlcpy(peer_config->secret, s->secret, RIST_MAX_STRING_SHORT);
 
     if (s->secret && (s->encryption == 128 || s->encryption == 256))
         peer_config->key_size = s->encryption;
@@ -168,8 +175,6 @@ static int librist_open(URLContext *h, const char *uri, int flags)
     if (ret < 0)
         goto err;
 
-    h->max_packet_size = 9968;
-
     return 0;
 
 err:
@@ -184,16 +189,19 @@ static int librist_read(URLContext *h, uint8_t *buf, int size)
     const struct rist_data_block *data_block;
     int ret;
 
-    ret = rist_receiver_data_read(s->ctx, &data_block, s->queue_count <= 0 ? POLLING_TIME : 0);
+    ret = rist_receiver_data_read(s->ctx, &data_block, POLLING_TIME);
     if (ret < 0)
         return risterr2ret(ret);
 
-    if (ret == 0 || data_block->payload_len <= 0)
-        return 0;
+    if (ret == 0)
+        return AVERROR(EAGAIN);
 
-    s->queue_count = ret - 1;
-    size = data_block->payload_len;
+    if (data_block->payload_len > MAX_PAYLOAD_SIZE) {
+        rist_receiver_data_block_free((struct rist_data_block**)&data_block);
+        return AVERROR_EXTERNAL;
+    }
 
+    size = data_block->payload_len;
     memcpy(buf, data_block->payload, size);
     rist_receiver_data_block_free((struct rist_data_block**)&data_block);