ref: 65ab0d034b729354c1f13712284b555be5504a0b
parent: 69e9efa847c03924caef9db2a0a4db586ddcc2f9
author: qwx <qwx@sciops.net>
date: Sun Oct 15 20:01:35 EDT 2023
file: recognize and differentiate opus
--- a/sys/src/cmd/file.c
+++ b/sys/src/cmd/file.c
@@ -153,6 +153,8 @@
int istga(void);
int ismp3(void);
int ismp4(void);
+int isoggvorbis(void);
+int isoggopus(void);
int ismung(void);
int isp9bit(void);
int isp9font(void);
@@ -203,6 +205,8 @@
isicocur, /* windows icon or cursor file */
isface, /* ascii face file */
istga,
+ isoggvorbis,
+ isoggopus,
ismp4,
ismp3,
@@ -874,7 +878,6 @@
"\033%-12345X", "HPJCL file", 9, "application/hpjcl",
"\033Lua", "Lua bytecode", 4, OCTET,
"ID3", "mp3 audio with id3", 3, "audio/mpeg",
- "OggS", "ogg audio", 4, "audio/ogg",
".snd", "sun audio", 4, "audio/basic",
"\211PNG", "PNG image", 4, "image/png",
"P1\n", "ppm", 3, "image/ppm",
@@ -1299,6 +1302,28 @@
return 1;
}
return 0;
+}
+
+int
+isoggvorbis(void)
+{
+ if(memcmp(&buf[0], "OggS", 4) != 0)
+ return 0;
+ if(memcmp(&buf[29], "vorbis", 6) != 0)
+ return 0;
+ print("%s\n", mime ? "audio/ogg;codecs=vorbis" : "ogg audio");
+ return 1;
+}
+
+int
+isoggopus(void)
+{
+ if(memcmp(&buf[0], "OggS", 4) != 0)
+ return 0;
+ if(memcmp(&buf[28], "OpusHead", 8) != 0)
+ return 0;
+ print("%s\n", mime ? "audio/ogg;codecs=opus" : "ogg audio");
+ return 1;
}
/*