Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
272b3f85 by RĂ©mi Denis-Courmont at 2024-01-15T18:59:09+02:00
decomp: add Zstandard support

- - - - -


2 changed files:

- NEWS
- modules/stream_filter/decomp.c


Changes:

=====================================
NEWS
=====================================
@@ -69,6 +69,7 @@ Access:
  * Deprecates Audio CD CDDB lookups in favor of more accurate Musicbrainz
  * Improved CD-TEXT and added Shift-JIS encoding support
  * Support for YoutubeDL (where available).
+ * On-the-fly Zstandard (zstd) file decompression (where available).
 
 Access output:
  * Added support for the RIST (Reliable Internet Stream Transport) Protocol


=====================================
modules/stream_filter/decomp.c
=====================================
@@ -46,12 +46,17 @@
 static int  OpenGzip (vlc_object_t *);
 static int  OpenBzip2 (vlc_object_t *);
 static int  OpenXZ (vlc_object_t *);
+static int  OpenZstd(vlc_object_t *);
 static void Close (vlc_object_t *);
 
 vlc_module_begin ()
     set_subcategory (SUBCAT_INPUT_STREAM_FILTER)
     set_capability ("stream_filter", 320)
 
+    set_description (N_("Zstandard decompression"))
+    set_callbacks (OpenZstd, Close)
+
+    add_submodule ()
     set_description (N_("LZMA decompression"))
     set_callbacks (OpenXZ, Close)
 
@@ -396,3 +401,23 @@ static int OpenXZ (vlc_object_t *obj)
     msg_Dbg (obj, "detected xz compressed stream");
     return Open (stream, "xzcat");
 }
+
+/**
+ * Detects zstd file format
+ */
+static int OpenZstd(vlc_object_t *obj)
+{
+    stream_t *stream = (stream_t *)obj;
+    const uint8_t *peek;
+
+    /* (Try to) parse the Zstd frame header (minimum size is 6 bytes) */
+    if (vlc_stream_Peek(stream->s, &peek, 6) < 6)
+        return VLC_ENOTSUP;
+    if (memcmp(peek, "\x28\xb5\x2f\xfd", 4)) /* magic number */
+        return VLC_ENOTSUP;
+    if (peek[4] & 0x08) /* reserved bit */
+        return VLC_ENOTSUP;
+
+    msg_Dbg(obj, "detected zstd compressed stream");
+    return Open(stream, "zstdcat");
+}



View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/272b3f85f474180b19ec17ab6e1b53ab4dddbc43

-- 
View it on GitLab: 
https://code.videolan.org/videolan/vlc/-/commit/272b3f85f474180b19ec17ab6e1b53ab4dddbc43
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance
_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to