shithub: rtmp

Download patch

ref: e95674db1eb82210f12fb429cc848613e24e704f
parent: dad1582627ca77f86f0a6c64d9503a36cab8f00c
author: Sigrid Solveig Haflínudóttir <ftrvxmtrx@gmail.com>
date: Thu Jul 29 09:43:53 EDT 2021

[Aa]mf0 → [Aa]₀

--- a/amf0.c
+++ b/amf0.c
@@ -24,13 +24,13 @@
 }while(0)
 
 u8int *
-amf0null(u8int *p, u8int *e)
+a₀null(u8int *p, u8int *e)
 {
-	return amf0byte(p, e, Anull);
+	return a₀byte(p, e, Anull);
 }
 
 u8int *
-amf0bool(u8int *p, u8int *e, int v)
+a₀bool(u8int *p, u8int *e, int v)
 {
 	atleast("bool", 2);
 	*p++ = Abool;
@@ -39,7 +39,7 @@
 }
 
 u8int *
-amf0byte(u8int *p, u8int *e, u8int byte)
+a₀byte(u8int *p, u8int *e, u8int byte)
 {
 	atleast("byte", 1);
 	*p++ = byte;
@@ -47,7 +47,7 @@
 }
 
 u8int *
-amf0i16(u8int *p, u8int *e, s16int i)
+a₀i16(u8int *p, u8int *e, s16int i)
 {
 	atleast("i16", 2);
 	*p++ = i >> 8;
@@ -56,7 +56,7 @@
 }
 
 u8int *
-amf0i24(u8int *p, u8int *e, s32int i)
+a₀i24(u8int *p, u8int *e, s32int i)
 {
 	atleast("i24", 3);
 	*p++ = i >> 16;
@@ -66,7 +66,7 @@
 }
 
 u8int *
-amf0i32(u8int *p, u8int *e, s32int i)
+a₀i32(u8int *p, u8int *e, s32int i)
 {
 	atleast("i32", 4);
 	*p++ = i >> 24;
@@ -77,7 +77,7 @@
 }
 
 u8int *
-amf0num(u8int *p, u8int *e, double v)
+a₀num(u8int *p, u8int *e, double v)
 {
 	union {
 		double v;
@@ -100,7 +100,7 @@
 }
 
 u8int *
-amf0str(u8int *p, u8int *e, char *s)
+a₀str(u8int *p, u8int *e, char *s)
 {
 	int n;
 
@@ -108,34 +108,34 @@
 	if(n <= 0xffff){
 		atleast("str", 1+2+n);
 		*p++ = Astr;
-		return (u8int*)memmove(amf0i16(p, e, n), s, n) + n;
+		return (u8int*)memmove(a₀i16(p, e, n), s, n) + n;
 	}
 
 	atleast("lstr", 1+4+n);
 	*p++ = Alstr;
-	return (u8int*)memmove(amf0i32(p, e, n), s, n) + n;
+	return (u8int*)memmove(a₀i32(p, e, n), s, n) + n;
 }
 
 u8int *
-amf0arr(u8int *p, u8int *e)
+a₀arr(u8int *p, u8int *e)
 {
-	return amf0byte(p, e, Aarr);
+	return a₀byte(p, e, Aarr);
 }
 
 u8int *
-amf0obj(u8int *p, u8int *e)
+a₀obj(u8int *p, u8int *e)
 {
-	return amf0byte(p, e, Aobj);
+	return a₀byte(p, e, Aobj);
 }
 
 u8int *
-amf0end(u8int *p, u8int *e)
+a₀end(u8int *p, u8int *e)
 {
-	return amf0i24(p, e, Aend);
+	return a₀i24(p, e, Aend);
 }
 
 static u8int *
-amf0kv(u8int *p, u8int *e, char *name)
+a₀kv(u8int *p, u8int *e, char *name)
 {
 	int n;
 
@@ -144,31 +144,31 @@
 		return nil;
 	}
 	atleast("kv", 2+n);
-	p = amf0i16(p, e, n);
+	p = a₀i16(p, e, n);
 
 	return (u8int*)memmove(p, name, n) + n;
 }
 
 u8int *
-amf0kvbool(u8int *p, u8int *e, char *name, int v)
+a₀kvbool(u8int *p, u8int *e, char *name, int v)
 {
-	return amf0bool(amf0kv(p, e, name), e, v);
+	return a₀bool(a₀kv(p, e, name), e, v);
 }
 
 u8int *
-amf0kvnum(u8int *p, u8int *e, char *name, double v)
+a₀kvnum(u8int *p, u8int *e, char *name, double v)
 {
-	return amf0num(amf0kv(p, e, name), e, v);
+	return a₀num(a₀kv(p, e, name), e, v);
 }
 
 u8int *
-amf0kvstr(u8int *p, u8int *e, char *name, char *v)
+a₀kvstr(u8int *p, u8int *e, char *name, char *v)
 {
-	return amf0str(amf0kv(p, e, name), e, v);
+	return a₀str(a₀kv(p, e, name), e, v);
 }
 
 u8int *
-amf0byteget(u8int *p, u8int *e, u8int *byte)
+a₀byteget(u8int *p, u8int *e, u8int *byte)
 {
 	atleast("byte", 1);
 	*byte = *p;
@@ -176,7 +176,7 @@
 }
 
 u8int *
-amf0i16get(u8int *p, u8int *e, s16int *i)
+a₀i16get(u8int *p, u8int *e, s16int *i)
 {
 	atleast("i16", 2);
 	*i = p[0]<<8 | p[1];
@@ -184,7 +184,7 @@
 }
 
 u8int *
-amf0i24get(u8int *p, u8int *e, s32int *i)
+a₀i24get(u8int *p, u8int *e, s32int *i)
 {
 	atleast("i24", 3);
 	*i = p[0]<<16 | p[1]<<8 | p[2];
@@ -192,7 +192,7 @@
 }
 
 u8int *
-amf0i32get(u8int *p, u8int *e, s32int *i)
+a₀i32get(u8int *p, u8int *e, s32int *i)
 {
 	atleast("i32", 4);
 	*i = p[0]<<24 | p[1]<<16 | p[2]<<8 | p[3];
@@ -200,7 +200,7 @@
 }
 
 u8int *
-amf0i32leget(u8int *p, u8int *e, s32int *i)
+a₀i32leget(u8int *p, u8int *e, s32int *i)
 {
 	atleast("i32le", 4);
 	*i = p[0] | p[1]<<8 | p[2]<<16 | p[3]<<24;
@@ -208,7 +208,7 @@
 }
 
 void
-amf0free(Amf0 *a)
+a₀free(A₀ *a)
 {
 	int i;
 
@@ -222,18 +222,18 @@
 	case Tobj:
 		for(i = 0; i < a->obj.n; i++){
 			free(a->obj.k[i]);
-			amf0free(a->obj.v[i]);
+			a₀free(a->obj.v[i]);
 		}
 		break;
 	case Tarr:
 		for(i = 0; i < a->arr.n; i++)
-			amf0free(a->arr.v[i]);
+			a₀free(a->arr.v[i]);
 	case Tnull:
 	case Tnum:
 	case Tbool:
 		break;
 	default:
-		sysfatal("unknown amf0 type %d", a->type);
+		sysfatal("unknown a₀ type %d", a->type);
 	}
 
 	free(a);
@@ -240,7 +240,7 @@
 }
 
 u8int *
-amf0parse(Amf0 **amf0, u8int *p, u8int *e)
+a₀parse(A₀ **a₀, u8int *p, u8int *e)
 {
 	s16int s16;
 	union {
@@ -248,9 +248,9 @@
 		u64int u;
 	}x;
 	int n;
-	Amf0 *a;
+	A₀ *a;
 
-	*amf0 = nil;
+	*a₀ = nil;
 	atleast("type", 1);
 	a = ecalloc(1, sizeof(*a));
 	a->type = -1;
@@ -272,11 +272,11 @@
 		a->type = Tbool;
 		break;
 	case Alstr:
-		if((p = amf0i32get(p, e, &n)) == nil)
+		if((p = a₀i32get(p, e, &n)) == nil)
 			return nil;
 		if(0){
 	case Astr:
-			if((p = amf0i16get(p, e, &s16)) == nil)
+			if((p = a₀i16get(p, e, &s16)) == nil)
 				return nil;
 			n = s16;
 		}
@@ -288,7 +288,7 @@
 	case Aobj:
 		atleast("obj", 3); /* Aend should be there anyway */
 		for(a->obj.n = 0;;){
-			if((p = amf0i16get(p, e, &s16)) == nil)
+			if((p = a₀i16get(p, e, &s16)) == nil)
 				break;
 			if(s16 == 0){
 				atleast("obj end?", 1);
@@ -307,7 +307,7 @@
 			a->obj.v = erealloc(a->obj.v, sizeof(*a->obj.v)*a->obj.n);
 			a->obj.k[a->obj.n-1] = estrndup(p, n);
 			p += n;
-			if((p = amf0parse(&a->obj.v[a->obj.n-1], p, e)) == nil){
+			if((p = a₀parse(&a->obj.v[a->obj.n-1], p, e)) == nil){
 				werrstr("obj val: %r");
 				break;
 			}
@@ -315,16 +315,16 @@
 		a->type = Tobj;
 		break;
 	case Aarr:
-		if((p = amf0i32get(p, e, &a->arr.n)) == nil)
+		if((p = a₀i32get(p, e, &a->arr.n)) == nil)
 			break;
 		a->arr.v = emalloc(sizeof(*a->arr.v)*a->arr.n);
 		for(n = 0; n < a->arr.n; n++){
-			if((p = amf0parse(&a->arr.v[n], p, e)) == nil){
+			if((p = a₀parse(&a->arr.v[n], p, e)) == nil){
 				werrstr("arr el: %r");
 				break;
 			}
 		}
-		if((p = amf0i24get(p, e, &n)) == nil || n != Aend){
+		if((p = a₀i24get(p, e, &n)) == nil || n != Aend){
 			p = nil;
 			werrstr("array doesn't end with Aend");
 		}
@@ -341,20 +341,20 @@
 	}
 
 	if(p == nil)
-		amf0free(a);
+		a₀free(a);
 	else
-		*amf0 = a;
+		*a₀ = a;
 
 	return p;
 }
 
 int
-amf0fmt(Fmt *f)
+a₀fmt(Fmt *f)
 {
-	Amf0 *a;
+	A₀ *a;
 	int i;
 
-	a = va_arg(f->args, Amf0*);
+	a = va_arg(f->args, A₀*);
 
 	switch(a->type){
 	case Tstr:
@@ -382,7 +382,7 @@
 		fmtprint(f, "null");
 		break;
 	default:
-		sysfatal("unknown amf0 type %d", a->type);
+		sysfatal("unknown a₀ type %d", a->type);
 	}
 
 	return 0;
--- a/amf0.h
+++ b/amf0.h
@@ -7,9 +7,9 @@
 	Tobj,
 };
 
-typedef struct Amf0 Amf0;
+typedef struct A₀ A₀;
 
-struct Amf0 {
+struct A₀ {
 	int type;
 	union {
 		char *str;
@@ -16,40 +16,40 @@
 		double num;
 		u8int bool;
 		struct {
-			Amf0 **v;
+			A₀ **v;
 			int n;
 		}arr;
 		struct {
 			char **k;
-			Amf0 **v;
+			A₀ **v;
 			int n;
 		}obj;
 	};
 };
 
-u8int *amf0null(u8int *p, u8int *e);
-u8int *amf0i16(u8int *p, u8int *e, s16int i);
-u8int *amf0bool(u8int *p, u8int *e, int v);
-u8int *amf0byte(u8int *p, u8int *e, u8int byte);
-u8int *amf0i24(u8int *p, u8int *e, s32int i);
-u8int *amf0i32(u8int *p, u8int *e, s32int i);
-u8int *amf0num(u8int *p, u8int *e, double v);
-u8int *amf0str(u8int *p, u8int *e, char *s);
-u8int *amf0arr(u8int *p, u8int *e);
-u8int *amf0obj(u8int *p, u8int *e);
-u8int *amf0end(u8int *p, u8int *e);
-u8int *amf0kvnum(u8int *p, u8int *e, char *name, double v);
-u8int *amf0kvstr(u8int *p, u8int *e, char *name, char *v);
-u8int *amf0kvbool(u8int *p, u8int *e, char *name, int v);
+u8int *a₀null(u8int *p, u8int *e);
+u8int *a₀i16(u8int *p, u8int *e, s16int i);
+u8int *a₀bool(u8int *p, u8int *e, int v);
+u8int *a₀byte(u8int *p, u8int *e, u8int byte);
+u8int *a₀i24(u8int *p, u8int *e, s32int i);
+u8int *a₀i32(u8int *p, u8int *e, s32int i);
+u8int *a₀num(u8int *p, u8int *e, double v);
+u8int *a₀str(u8int *p, u8int *e, char *s);
+u8int *a₀arr(u8int *p, u8int *e);
+u8int *a₀obj(u8int *p, u8int *e);
+u8int *a₀end(u8int *p, u8int *e);
+u8int *a₀kvnum(u8int *p, u8int *e, char *name, double v);
+u8int *a₀kvstr(u8int *p, u8int *e, char *name, char *v);
+u8int *a₀kvbool(u8int *p, u8int *e, char *name, int v);
 
-u8int *amf0byteget(u8int *p, u8int *e, u8int *byte);
-u8int *amf0i16get(u8int *p, u8int *e, s16int *i);
-u8int *amf0i24get(u8int *p, u8int *e, s32int *i);
-u8int *amf0i32get(u8int *p, u8int *e, s32int *i);
-u8int *amf0i32leget(u8int *p, u8int *e, s32int *i);
+u8int *a₀byteget(u8int *p, u8int *e, u8int *byte);
+u8int *a₀i16get(u8int *p, u8int *e, s16int *i);
+u8int *a₀i24get(u8int *p, u8int *e, s32int *i);
+u8int *a₀i32get(u8int *p, u8int *e, s32int *i);
+u8int *a₀i32leget(u8int *p, u8int *e, s32int *i);
 
-u8int *amf0parse(Amf0 **a, u8int *p, u8int *e);
-void amf0free(Amf0 *a);
+u8int *a₀parse(A₀ **a, u8int *p, u8int *e);
+void a₀free(A₀ *a);
 
-#pragma varargck type "A" Amf0*
-int amf0fmt(Fmt *f);
+#pragma varargck type "A" A₀*
+int a₀fmt(Fmt *f);
--- a/flv.c
+++ b/flv.c
@@ -27,25 +27,25 @@
 	p0 = p;
 	*p++ = Fvideo;
 	psz = p;
-	p = amf0i24(p, e, 0); /* sz set later */
-	p = amf0i24(p, e, ts);
+	p = a₀i24(p, e, 0); /* sz set later */
+	p = a₀i24(p, e, ts);
 	*p++ = ts>>24;
-	p = amf0i24(p, e, stream);
+	p = a₀i24(p, e, stream);
 
 	d = p;
-	p = amf0str(p, e, "onMetaData");
-	p = amf0arr(p, e);
-	p = amf0i32(p, e, audio ? 5 : 4);
-	p = amf0kvnum(p, e, "duration", 0.0);
-	p = amf0kvnum(p, e, "width", w);
-	p = amf0kvnum(p, e, "height", h);
-	p = amf0kvnum(p, e, "videocodecid", EncH264);
+	p = a₀str(p, e, "onMetaData");
+	p = a₀arr(p, e);
+	p = a₀i32(p, e, audio ? 5 : 4);
+	p = a₀kvnum(p, e, "duration", 0.0);
+	p = a₀kvnum(p, e, "width", w);
+	p = a₀kvnum(p, e, "height", h);
+	p = a₀kvnum(p, e, "videocodecid", EncH264);
 	if(audio)
-		p = amf0kvnum(p, e, "audiocodecid", EncAAC);
-	p = amf0end(p, e);
-	amf0i24(psz, e, p-d);
+		p = a₀kvnum(p, e, "audiocodecid", EncAAC);
+	p = a₀end(p, e);
+	a₀i24(psz, e, p-d);
 
-	return amf0i32(p, e, p-p0);
+	return a₀i32(p, e, p-p0);
 }
 
 u8int *
@@ -61,10 +61,10 @@
 	p0 = p;
 	*p++ = type;
 	psz = p;
-	p = amf0i24(p, e, 0); /* size to be set later */
-	p = amf0i24(p, e, dts);
+	p = a₀i24(p, e, 0); /* size to be set later */
+	p = a₀i24(p, e, dts);
 	*p++ = dts >> 24;
-	p = amf0i24(p, e, stream);
+	p = a₀i24(p, e, stream);
 
 	d = p;
 	if(type == Faudio){
@@ -75,12 +75,12 @@
 		*p++ = ((fl & FlKey) ? 0x10 : 0x20) | EncH264;
 		*p++ = (fl & FlHdr) ? 0 : 1;
 		pts = ((fl & FlHdr) || pts < dts) ? 0 : (pts - dts);
-		p = amf0i24(p, e, pts);
+		p = a₀i24(p, e, pts);
 		if((fl & FlHdr) == 0)
-			p = amf0i32(p, e, sz);
+			p = a₀i32(p, e, sz);
 	}
 	p = (u8int*)memmove(p, data, sz) + sz;
-	amf0i24(psz, e, p-d);
+	a₀i24(psz, e, p-d);
 
-	return amf0i32(p, e, p-p0);
+	return a₀i32(p, e, p-p0);
 }
--- a/rtmp.c
+++ b/rtmp.c
@@ -72,7 +72,7 @@
 #pragma varargck type "M" Message*
 
 struct Command {
-	void (*cb)(RTMP *r, int ok, Amf0 *a[NumCb], void *aux);
+	void (*cb)(RTMP *r, int ok, A₀ *a[NumCb], void *aux);
 	void *aux;
 	int tid;
 
@@ -114,18 +114,18 @@
 	u8int biobuf[Biobufsz];
 };
 
-#define putnull() do{ r->p = amf0null(r->p, r->e); }while(0)
-#define puti16(i) do{ r->p = amf0i16(r->p, r->e, i); }while(0)
-#define puti24(i) do{ r->p = amf0i24(r->p, r->e, i); }while(0)
-#define puti32(i) do{ r->p = amf0i32(r->p, r->e, i); }while(0)
-#define putnum(v) do{ r->p = amf0num(r->p, r->e, v); }while(0)
-#define putstr(s) do{ r->p = amf0str(r->p, r->e, s); }while(0)
-#define putarr() do{ r->p = amf0arr(r->p, r->e); }while(0)
-#define putobj() do{ r->p = amf0obj(r->p, r->e); }while(0)
-#define putend() do{ r->p = amf0end(r->p, r->e); }while(0)
-#define putkvnum(name, v) do{ r->p = amf0kvnum(r->p, r->e, name, v); }while(0)
-#define putkvstr(name, s) do{ r->p = amf0kvstr(r->p, r->e, name, s); }while(0)
-#define putkvbool(name, s) do{ r->p = amf0kvbool(r->p, r->e, name, s); }while(0)
+#define putnull() do{ r->p = a₀null(r->p, r->e); }while(0)
+#define puti16(i) do{ r->p = a₀i16(r->p, r->e, i); }while(0)
+#define puti24(i) do{ r->p = a₀i24(r->p, r->e, i); }while(0)
+#define puti32(i) do{ r->p = a₀i32(r->p, r->e, i); }while(0)
+#define putnum(v) do{ r->p = a₀num(r->p, r->e, v); }while(0)
+#define putstr(s) do{ r->p = a₀str(r->p, r->e, s); }while(0)
+#define putarr() do{ r->p = a₀arr(r->p, r->e); }while(0)
+#define putobj() do{ r->p = a₀obj(r->p, r->e); }while(0)
+#define putend() do{ r->p = a₀end(r->p, r->e); }while(0)
+#define putkvnum(name, v) do{ r->p = a₀kvnum(r->p, r->e, name, v); }while(0)
+#define putkvstr(name, s) do{ r->p = a₀kvstr(r->p, r->e, name, s); }while(0)
+#define putkvbool(name, s) do{ r->p = a₀kvbool(r->p, r->e, name, s); }while(0)
 
 #define putcommand(name, cb_) do { \
 	putstr(name); \
@@ -240,13 +240,13 @@
 	ts = 0;
 	len = 0;
 	if(hsz >= szs[Type2]){
-		h = amf0i24get(h, e, (s32int*)&ts); /* FIXME proper timestamps? */
+		h = a₀i24get(h, e, (s32int*)&ts); /* FIXME proper timestamps? */
 		if(hsz >= szs[Type1]){
-			h = amf0i24get(h, e, &len);
-			h = amf0byteget(h, e, &byte);
+			h = a₀i24get(h, e, &len);
+			h = a₀byteget(h, e, &byte);
 			r->msg.type = byte;
 			if(hsz >= szs[Type0])
-				h = amf0i32leget(h, e, &msid);
+				h = a₀i32leget(h, e, &msid);
 		}
 	}
 
@@ -253,7 +253,7 @@
 	if(ts == 0xffffff){ /* exntended timestamp */
 		if(readn(r->i, h, 4) != 4)
 			goto err;
-		h = amf0i32get(h, h+4, (s32int*)&ts);
+		h = a₀i32get(h, h+4, (s32int*)&ts);
 	}
 
 	/* FIXME do all consecutive chunks use Type3? */
@@ -302,12 +302,12 @@
 	hsz = szs[r->msg.fmt];
 	e = h + hsz;
 	if(hsz >= szs[Type2]){
-		h = amf0i24(h, e, 0); /* FIXME put actual timestamps? */
+		h = a₀i24(h, e, 0); /* FIXME put actual timestamps? */
 		if(hsz >= szs[Type1]){
-			h = amf0i24(h, e, r->msg.sz);
-			h = amf0byte(h, e, r->msg.type);
+			h = a₀i24(h, e, r->msg.sz);
+			h = a₀byte(h, e, r->msg.type);
 			if(hsz >= szs[Type0])
-				h = amf0i32(h, e, r->msg.sid);
+				h = a₀i32(h, e, r->msg.sid);
 		}
 	}
 	assert(h != nil);
@@ -333,17 +333,17 @@
 	if(debug){
 		fprint(2, "← %M", &r->msg);
 		if(r->msg.type == AMF0Command){
-			Amf0 *a;
+			A₀ *a;
 			u8int *s, *e;
 			fprint(2, ":");
 			s = r->msg.data;
 			e = s + r->msg.sz;
 			for(; s != nil && s != e;){
-				if((s = amf0parse(&a, s, e)) != nil)
+				if((s = a₀parse(&a, s, e)) != nil)
 					fprint(2, " %A", a);
 				else
 					fprint(2, " %r");
-				amf0free(a);
+				a₀free(a);
 			}
 		}
 		fprint(2, "\n");
@@ -406,7 +406,7 @@
 loop(void *aux)
 {
 	int res, n, ok;
-	Amf0 *a[NumCb];
+	A₀ *a[NumCb];
 	u8int *s, *e;
 	s16int s16;
 	Message *m;
@@ -419,7 +419,7 @@
 	memset(a, 0, sizeof(a));
 	for(;;){
 		for(n = 0; n < nelem(a); n++)
-			amf0free(a[n]);
+			a₀free(a[n]);
 		memset(a, 0, sizeof(a));
 
 		qlock(r);
@@ -428,7 +428,7 @@
 			if(debug)
 				fprint(2, "rtmp loop: %r\n");
 			for(n = 0; n < nelem(a); n++)
-				amf0free(a[n]);
+				a₀free(a[n]);
 			break;
 		}
 
@@ -443,7 +443,7 @@
 			c = nil;
 			ok = 1;
 			for(n = 0; n < NumCb; n++){
-				if((s = amf0parse(&a[n], s, e)) == nil)
+				if((s = a₀parse(&a[n], s, e)) == nil)
 					goto err;
 				switch(n){
 				case CbCommand:
@@ -481,7 +481,7 @@
 			break;
 
 		case SetChunkSize:
-			if(amf0i32get(s, e, &r->chunkin) == nil)
+			if(a₀i32get(s, e, &r->chunkin) == nil)
 				goto err;
 			if(r->chunkin < 2){
 				werrstr("invalid chunk size: %d", r->chunkin);
@@ -492,9 +492,9 @@
 			break;
 
 		case UserControl:
-			if((s = amf0i16get(s, e, &s16)) == nil)
+			if((s = a₀i16get(s, e, &s16)) == nil)
 				goto err;
-			if(amf0i32get(s, e, &n) == nil)
+			if(a₀i32get(s, e, &n) == nil)
 				n = -1;
 			switch(s16){
 			case CtlStreamBegin:
@@ -518,7 +518,7 @@
 			break;
 
 		case WindowAckSize:
-			if(amf0i32get(s, e, &r->winacksz) == nil)
+			if(a₀i32get(s, e, &r->winacksz) == nil)
 				goto err;
 			if(debug)
 				fprint(2, ": %d\n", r->winacksz);
@@ -525,7 +525,7 @@
 			break;
 
 		case SetBandwidth:
-			if((s = amf0i32get(s, e, &r->bw)) == nil || amf0byteget(s, e, &r->bwlimit) == nil)
+			if((s = a₀i32get(s, e, &r->bw)) == nil || a₀byteget(s, e, &r->bwlimit) == nil)
 				goto err;
 			if(debug)
 				fprint(2, ": %d (%s)\n", r->bw, r->bwlimit < nelem(bwlimit2s) ? bwlimit2s[r->bwlimit] : "???");
@@ -594,7 +594,7 @@
 }
 
 static void
-streamcreated(RTMP *, int ok, Amf0 *a[NumCb], void *aux)
+streamcreated(RTMP *, int ok, A₀ *a[NumCb], void *aux)
 {
 	Channel *sid;
 
@@ -638,7 +638,7 @@
 }
 
 static void
-connected(RTMP *r, int ok, Amf0 *a[NumCb], void *)
+connected(RTMP *r, int ok, A₀ *a[NumCb], void *)
 {
 	if(strcmp(a[CbCommand]->str, "_result") != 0)
 		sendp(r->c, smprint("expected '_result', got %#q", a[CbCommand]->str));
@@ -698,7 +698,7 @@
 	int f, port, ctl;
 	RTMP *r;
 
-	fmtinstall('A', amf0fmt);
+	fmtinstall('A', a₀fmt);
 	fmtinstall('T', msgtypefmt);
 	fmtinstall('M', msgfmt);
 	quotefmtinstall();