]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/snappy.c
mpeg12dec: move setting first_field to mpeg_field_start()
[ffmpeg] / libavcodec / snappy.c
index 13ef1ec137706fa2309912e4dcb35bb5c7974e5e..df6c6b386ae25c02326c891af6ab023e824a60ec 100644 (file)
@@ -128,7 +128,17 @@ static int64_t decode_len(GetByteContext *gb)
     return len;
 }
 
-int ff_snappy_uncompress(GetByteContext *gb, uint8_t **buf, int64_t *size)
+int64_t ff_snappy_peek_uncompressed_length(GetByteContext *gb)
+{
+    int pos = bytestream2_get_bytes_left(gb);
+    int64_t len = decode_len(gb);
+
+    bytestream2_seek(gb, -pos, SEEK_END);
+
+    return len;
+}
+
+int ff_snappy_uncompress(GetByteContext *gb, uint8_t *buf, int64_t *size)
 {
     int64_t len = decode_len(gb);
     int ret     = 0;
@@ -137,11 +147,11 @@ int ff_snappy_uncompress(GetByteContext *gb, uint8_t **buf, int64_t *size)
     if (len < 0)
         return len;
 
-    if ((ret = av_reallocp(buf, len)) < 0)
-        return AVERROR(ENOMEM);
+    if (len > *size)
+        return AVERROR_BUG;
 
     *size = len;
-    p     = *buf;
+    p     = buf;
 
     while (bytestream2_get_bytes_left(gb) > 0) {
         uint8_t s = bytestream2_get_byte(gb);
@@ -152,13 +162,13 @@ int ff_snappy_uncompress(GetByteContext *gb, uint8_t **buf, int64_t *size)
             ret = snappy_literal(gb, p, len, val);
             break;
         case SNAPPY_COPY_1:
-            ret = snappy_copy1(gb, *buf, p, len, val);
+            ret = snappy_copy1(gb, buf, p, len, val);
             break;
         case SNAPPY_COPY_2:
-            ret = snappy_copy2(gb, *buf, p, len, val);
+            ret = snappy_copy2(gb, buf, p, len, val);
             break;
         case SNAPPY_COPY_4:
-            ret = snappy_copy4(gb, *buf, p, len, val);
+            ret = snappy_copy4(gb, buf, p, len, val);
             break;
         }