]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/vivo.c
avformat/hlsenc: Remove deprecated localtime options
[ffmpeg] / libavformat / vivo.c
index c9e9c37f37dfbede0a94504c8fe025cc5c135984..fb58aa61785a8cad452af8f334c71c950cd7892e 100644 (file)
@@ -36,11 +36,12 @@ typedef struct VivoContext {
     int type;
     int sequence;
     int length;
+    int duration;
 
     uint8_t  text[1024 + 1];
 } VivoContext;
 
-static int vivo_probe(AVProbeData *p)
+static int vivo_probe(const AVProbeData *p)
 {
     const unsigned char *buf = p->buf;
     unsigned c, length = 0;
@@ -59,9 +60,10 @@ static int vivo_probe(AVProbeData *p)
     if (c & 0x80 || length > 1024 || length < 21)
         return 0;
 
-    if (memcmp(buf, "\r\nVersion:Vivo/", 15))
+    buf += 2;
+    if (memcmp(buf, "Version:Vivo/", 13))
         return 0;
-    buf += 15;
+    buf += 13;
 
     if (*buf < '0' || *buf > '2')
         return 0;
@@ -166,7 +168,7 @@ static int vivo_read_header(AVFormatContext *s)
             value = strchr(key, ':');
             if (!value) {
                 av_log(s, AV_LOG_WARNING, "missing colon in key:value pair '%s'\n",
-                       value);
+                       key);
                 continue;
             }
 
@@ -231,6 +233,12 @@ static int vivo_read_header(AVFormatContext *s)
         ast->codecpar->bits_per_coded_sample = 8;
         ast->codecpar->block_align = 24;
         ast->codecpar->bit_rate = 6400;
+    } else {
+        ast->codecpar->codec_id = AV_CODEC_ID_SIREN;
+        ast->codecpar->bits_per_coded_sample = 16;
+        ast->codecpar->block_align = 40;
+        ast->codecpar->bit_rate = 6400;
+        vivo->duration = 320;
     }
 
     ast->start_time        = 0;
@@ -246,7 +254,7 @@ static int vivo_read_packet(AVFormatContext *s, AVPacket *pkt)
     VivoContext *vivo = s->priv_data;
     AVIOContext *pb = s->pb;
     unsigned old_sequence = vivo->sequence, old_type = vivo->type;
-    int stream_index, ret = 0;
+    int stream_index, duration, ret = 0;
 
 restart:
 
@@ -262,10 +270,12 @@ restart:
     case 1:
     case 2: // video
         stream_index = 0;
+        duration = 1;
         break;
     case 3:
     case 4: // audio
         stream_index = 1;
+        duration = vivo->duration;
         break;
     default:
         av_log(s, AV_LOG_ERROR, "unknown packet type %d\n", vivo->type);
@@ -273,32 +283,29 @@ restart:
     }
 
     if ((ret = av_get_packet(pb, pkt, vivo->length)) < 0)
-        goto fail;
+        return ret;
 
     // get next packet header
     if ((ret = vivo_get_packet_header(s)) < 0)
-        goto fail;
+        return ret;
 
     while (vivo->sequence == old_sequence &&
            (((vivo->type - 1) >> 1) == ((old_type - 1) >> 1))) {
         if (avio_feof(pb)) {
-            ret = AVERROR_EOF;
-            break;
+            return AVERROR_EOF;
         }
 
         if ((ret = av_append_packet(pb, pkt, vivo->length)) < 0)
-            break;
+            return ret;
 
         // get next packet header
         if ((ret = vivo_get_packet_header(s)) < 0)
-            break;
+            return ret;
     }
 
     pkt->stream_index = stream_index;
+    pkt->duration = duration;
 
-fail:
-    if (ret < 0)
-        av_packet_unref(pkt);
     return ret;
 }