History

[Aa]mf0 → [Aa]₀

Sigrid Solveig Haflínudóttir committed 5 years ago

Commit e95674d1 parent dad15824 files · +135 −135Browse files

Unified · Split

4 files
  1. amf0.c +50 −50
  2. amf0.h +27 −27
  3. flv.c +21 −21
  4. rtmp.c +37 −37
amf0.c+50−50
@@ -24,13 +24,13 @@ enum { · 23 unmodified lines
24}while(0)24}while(0)
25 25
26u8int *26u8int *
27amf0null(u8int *p, u8int *e)27a₀null(u8int *p, u8int *e)
28{28{
29 return amf0byte(p, e, Anull);29 return a₀byte(p, e, Anull);
30}30}
31 31
32u8int *32u8int *
33amf0bool(u8int *p, u8int *e, int v)33a₀bool(u8int *p, u8int *e, int v)
34{34{
35 atleast("bool", 2);35 atleast("bool", 2);
36 *p++ = Abool;36 *p++ = Abool;
@@ -39,7 +39,7 @@ amf0bool(u8int *p, u8int *e, int v) · 2 unmodified lines
39}39}
40 40
41u8int *41u8int *
42amf0byte(u8int *p, u8int *e, u8int byte)42a₀byte(u8int *p, u8int *e, u8int byte)
43{43{
44 atleast("byte", 1);44 atleast("byte", 1);
45 *p++ = byte;45 *p++ = byte;
@@ -47,7 +47,7 @@ amf0byte(u8int *p, u8int *e, u8int byte) · 1 unmodified line
47}47}
48 48
49u8int *49u8int *
50amf0i16(u8int *p, u8int *e, s16int i)50a₀i16(u8int *p, u8int *e, s16int i)
51{51{
52 atleast("i16", 2);52 atleast("i16", 2);
53 *p++ = i >> 8;53 *p++ = i >> 8;
@@ -56,7 +56,7 @@ amf0i16(u8int *p, u8int *e, s16int i) · 2 unmodified lines
56}56}
57 57
58u8int *58u8int *
59amf0i24(u8int *p, u8int *e, s32int i)59a₀i24(u8int *p, u8int *e, s32int i)
60{60{
61 atleast("i24", 3);61 atleast("i24", 3);
62 *p++ = i >> 16;62 *p++ = i >> 16;
@@ -66,7 +66,7 @@ amf0i24(u8int *p, u8int *e, s32int i) · 3 unmodified lines
66}66}
67 67
68u8int *68u8int *
69amf0i32(u8int *p, u8int *e, s32int i)69a₀i32(u8int *p, u8int *e, s32int i)
70{70{
71 atleast("i32", 4);71 atleast("i32", 4);
72 *p++ = i >> 24;72 *p++ = i >> 24;
@@ -77,7 +77,7 @@ amf0i32(u8int *p, u8int *e, s32int i) · 4 unmodified lines
77}77}
78 78
79u8int *79u8int *
80amf0num(u8int *p, u8int *e, double v)80a₀num(u8int *p, u8int *e, double v)
81{81{
82 union {82 union {
83 double v;83 double v;
@@ -100,7 +100,7 @@ amf0num(u8int *p, u8int *e, double v) · 16 unmodified lines
100}100}
101 101
102u8int *102u8int *
103amf0str(u8int *p, u8int *e, char *s)103a₀str(u8int *p, u8int *e, char *s)
104{104{
105 int n;105 int n;
106 106
@@ -108,34 +108,34 @@ amf0str(u8int *p, u8int *e, char *s) · 1 unmodified line
108 if(n <= 0xffff){108 if(n <= 0xffff){
109 atleast("str", 1+2+n);109 atleast("str", 1+2+n);
110 *p++ = Astr;110 *p++ = Astr;
111 return (u8int*)memmove(amf0i16(p, e, n), s, n) + n;111 return (u8int*)memmove(a₀i16(p, e, n), s, n) + n;
112 }112 }
113 113
114 atleast("lstr", 1+4+n);114 atleast("lstr", 1+4+n);
115 *p++ = Alstr;115 *p++ = Alstr;
116 return (u8int*)memmove(amf0i32(p, e, n), s, n) + n;116 return (u8int*)memmove(a₀i32(p, e, n), s, n) + n;
117}117}
118 118
119u8int *119u8int *
120amf0arr(u8int *p, u8int *e)120a₀arr(u8int *p, u8int *e)
121{121{
122 return amf0byte(p, e, Aarr);122 return a₀byte(p, e, Aarr);
123}123}
124 124
125u8int *125u8int *
126amf0obj(u8int *p, u8int *e)126a₀obj(u8int *p, u8int *e)
127{127{
128 return amf0byte(p, e, Aobj);128 return a₀byte(p, e, Aobj);
129}129}
130 130
131u8int *131u8int *
132amf0end(u8int *p, u8int *e)132a₀end(u8int *p, u8int *e)
133{133{
134 return amf0i24(p, e, Aend);134 return a₀i24(p, e, Aend);
135}135}
136 136
137static u8int *137static u8int *
138amf0kv(u8int *p, u8int *e, char *name)138a₀kv(u8int *p, u8int *e, char *name)
139{139{
140 int n;140 int n;
141 141
@@ -144,31 +144,31 @@ amf0kv(u8int *p, u8int *e, char *name) · 2 unmodified lines
144 return nil;144 return nil;
145 }145 }
146 atleast("kv", 2+n);146 atleast("kv", 2+n);
147 p = amf0i16(p, e, n);147 p = a₀i16(p, e, n);
148 148
149 return (u8int*)memmove(p, name, n) + n;149 return (u8int*)memmove(p, name, n) + n;
150}150}
151 151
152u8int *152u8int *
153amf0kvbool(u8int *p, u8int *e, char *name, int v)153a₀kvbool(u8int *p, u8int *e, char *name, int v)
154{154{
155 return amf0bool(amf0kv(p, e, name), e, v);155 return a₀bool(a₀kv(p, e, name), e, v);
156}156}
157 157
158u8int *158u8int *
159amf0kvnum(u8int *p, u8int *e, char *name, double v)159a₀kvnum(u8int *p, u8int *e, char *name, double v)
160{160{
161 return amf0num(amf0kv(p, e, name), e, v);161 return a₀num(a₀kv(p, e, name), e, v);
162}162}
163 163
164u8int *164u8int *
165amf0kvstr(u8int *p, u8int *e, char *name, char *v)165a₀kvstr(u8int *p, u8int *e, char *name, char *v)
166{166{
167 return amf0str(amf0kv(p, e, name), e, v);167 return a₀str(a₀kv(p, e, name), e, v);
168}168}
169 169
170u8int *170u8int *
171amf0byteget(u8int *p, u8int *e, u8int *byte)171a₀byteget(u8int *p, u8int *e, u8int *byte)
172{172{
173 atleast("byte", 1);173 atleast("byte", 1);
174 *byte = *p;174 *byte = *p;
@@ -176,7 +176,7 @@ amf0byteget(u8int *p, u8int *e, u8int *byte) · 1 unmodified line
176}176}
177 177
178u8int *178u8int *
179amf0i16get(u8int *p, u8int *e, s16int *i)179a₀i16get(u8int *p, u8int *e, s16int *i)
180{180{
181 atleast("i16", 2);181 atleast("i16", 2);
182 *i = p[0]<<8 | p[1];182 *i = p[0]<<8 | p[1];
@@ -184,7 +184,7 @@ amf0i16get(u8int *p, u8int *e, s16int *i) · 1 unmodified line
184}184}
185 185
186u8int *186u8int *
187amf0i24get(u8int *p, u8int *e, s32int *i)187a₀i24get(u8int *p, u8int *e, s32int *i)
188{188{
189 atleast("i24", 3);189 atleast("i24", 3);
190 *i = p[0]<<16 | p[1]<<8 | p[2];190 *i = p[0]<<16 | p[1]<<8 | p[2];
@@ -192,7 +192,7 @@ amf0i24get(u8int *p, u8int *e, s32int *i) · 1 unmodified line
192}192}
193 193
194u8int *194u8int *
195amf0i32get(u8int *p, u8int *e, s32int *i)195a₀i32get(u8int *p, u8int *e, s32int *i)
196{196{
197 atleast("i32", 4);197 atleast("i32", 4);
198 *i = p[0]<<24 | p[1]<<16 | p[2]<<8 | p[3];198 *i = p[0]<<24 | p[1]<<16 | p[2]<<8 | p[3];
@@ -200,7 +200,7 @@ amf0i32get(u8int *p, u8int *e, s32int *i) · 1 unmodified line
200}200}
201 201
202u8int *202u8int *
203amf0i32leget(u8int *p, u8int *e, s32int *i)203a₀i32leget(u8int *p, u8int *e, s32int *i)
204{204{
205 atleast("i32le", 4);205 atleast("i32le", 4);
206 *i = p[0] | p[1]<<8 | p[2]<<16 | p[3]<<24;206 *i = p[0] | p[1]<<8 | p[2]<<16 | p[3]<<24;
@@ -208,7 +208,7 @@ amf0i32leget(u8int *p, u8int *e, s32int *i) · 1 unmodified line
208}208}
209 209
210void210void
211amf0free(Amf0 *a)211a₀free(A₀ *a)
212{212{
213 int i;213 int i;
214 214
@@ -222,25 +222,25 @@ amf0free(Amf0 *a) · 7 unmodified lines
222 case Tobj:222 case Tobj:
223 for(i = 0; i < a->obj.n; i++){223 for(i = 0; i < a->obj.n; i++){
224 free(a->obj.k[i]);224 free(a->obj.k[i]);
225 amf0free(a->obj.v[i]);225 a₀free(a->obj.v[i]);
226 }226 }
227 break;227 break;
228 case Tarr:228 case Tarr:
229 for(i = 0; i < a->arr.n; i++)229 for(i = 0; i < a->arr.n; i++)
230 amf0free(a->arr.v[i]);230 a₀free(a->arr.v[i]);
231 case Tnull:231 case Tnull:
232 case Tnum:232 case Tnum:
233 case Tbool:233 case Tbool:
234 break;234 break;
235 default:235 default:
236 sysfatal("unknown amf0 type %d", a->type);236 sysfatal("unknown a₀ type %d", a->type);
237 }237 }
238 238
239 free(a);239 free(a);
240}240}
241 241
242u8int *242u8int *
243amf0parse(Amf0 **amf0, u8int *p, u8int *e)243a₀parse(A₀ **a₀, u8int *p, u8int *e)
244{244{
245 s16int s16;245 s16int s16;
246 union {246 union {
@@ -248,9 +248,9 @@ amf0parse(Amf0 **amf0, u8int *p, u8int *e) · 1 unmodified line
248 u64int u;248 u64int u;
249 }x;249 }x;
250 int n;250 int n;
251 Amf0 *a;251 A₀ *a;
252 252
253 *amf0 = nil;253 *a₀ = nil;
254 atleast("type", 1);254 atleast("type", 1);
255 a = ecalloc(1, sizeof(*a));255 a = ecalloc(1, sizeof(*a));
256 a->type = -1;256 a->type = -1;
@@ -272,11 +272,11 @@ amf0parse(Amf0 **amf0, u8int *p, u8int *e) · 15 unmodified lines
272 a->type = Tbool;272 a->type = Tbool;
273 break;273 break;
274 case Alstr:274 case Alstr:
275 if((p = amf0i32get(p, e, &n)) == nil)275 if((p = a₀i32get(p, e, &n)) == nil)
276 return nil;276 return nil;
277 if(0){277 if(0){
278 case Astr:278 case Astr:
279 if((p = amf0i16get(p, e, &s16)) == nil)279 if((p = a₀i16get(p, e, &s16)) == nil)
280 return nil;280 return nil;
281 n = s16;281 n = s16;
282 }282 }
@@ -288,7 +288,7 @@ amf0parse(Amf0 **amf0, u8int *p, u8int *e) · 5 unmodified lines
288 case Aobj:288 case Aobj:
289 atleast("obj", 3); /* Aend should be there anyway */289 atleast("obj", 3); /* Aend should be there anyway */
290 for(a->obj.n = 0;;){290 for(a->obj.n = 0;;){
291 if((p = amf0i16get(p, e, &s16)) == nil)291 if((p = a₀i16get(p, e, &s16)) == nil)
292 break;292 break;
293 if(s16 == 0){293 if(s16 == 0){
294 atleast("obj end?", 1);294 atleast("obj end?", 1);
@@ -307,7 +307,7 @@ amf0parse(Amf0 **amf0, u8int *p, u8int *e) · 12 unmodified lines
307 a->obj.v = erealloc(a->obj.v, sizeof(*a->obj.v)*a->obj.n);307 a->obj.v = erealloc(a->obj.v, sizeof(*a->obj.v)*a->obj.n);
308 a->obj.k[a->obj.n-1] = estrndup(p, n);308 a->obj.k[a->obj.n-1] = estrndup(p, n);
309 p += n;309 p += n;
310 if((p = amf0parse(&a->obj.v[a->obj.n-1], p, e)) == nil){310 if((p = a₀parse(&a->obj.v[a->obj.n-1], p, e)) == nil){
311 werrstr("obj val: %r");311 werrstr("obj val: %r");
312 break;312 break;
313 }313 }
@@ -315,16 +315,16 @@ amf0parse(Amf0 **amf0, u8int *p, u8int *e) · 1 unmodified line
315 a->type = Tobj;315 a->type = Tobj;
316 break;316 break;
317 case Aarr:317 case Aarr:
318 if((p = amf0i32get(p, e, &a->arr.n)) == nil)318 if((p = a₀i32get(p, e, &a->arr.n)) == nil)
319 break;319 break;
320 a->arr.v = emalloc(sizeof(*a->arr.v)*a->arr.n);320 a->arr.v = emalloc(sizeof(*a->arr.v)*a->arr.n);
321 for(n = 0; n < a->arr.n; n++){321 for(n = 0; n < a->arr.n; n++){
322 if((p = amf0parse(&a->arr.v[n], p, e)) == nil){322 if((p = a₀parse(&a->arr.v[n], p, e)) == nil){
323 werrstr("arr el: %r");323 werrstr("arr el: %r");
324 break;324 break;
325 }325 }
326 }326 }
327 if((p = amf0i24get(p, e, &n)) == nil || n != Aend){327 if((p = a₀i24get(p, e, &n)) == nil || n != Aend){
328 p = nil;328 p = nil;
329 werrstr("array doesn't end with Aend");329 werrstr("array doesn't end with Aend");
330 }330 }
@@ -341,20 +341,20 @@ amf0parse(Amf0 **amf0, u8int *p, u8int *e) · 10 unmodified lines
341 }341 }
342 342
343 if(p == nil)343 if(p == nil)
344 amf0free(a);344 a₀free(a);
345 else345 else
346 *amf0 = a;346 *a₀ = a;
347 347
348 return p;348 return p;
349}349}
350 350
351int351int
352amf0fmt(Fmt *f)352a₀fmt(Fmt *f)
353{353{
354 Amf0 *a;354 A₀ *a;
355 int i;355 int i;
356 356
357 a = va_arg(f->args, Amf0*);357 a = va_arg(f->args, A₀*);
358 358
359 switch(a->type){359 switch(a->type){
360 case Tstr:360 case Tstr:
@@ -382,7 +382,7 @@ amf0fmt(Fmt *f) · 21 unmodified lines
382 fmtprint(f, "null");382 fmtprint(f, "null");
383 break;383 break;
384 default:384 default:
385 sysfatal("unknown amf0 type %d", a->type);385 sysfatal("unknown a₀ type %d", a->type);
386 }386 }
387 387
388 return 0;388 return 0;
amf0.h+27−27
@@ -7,49 +7,49 @@ enum { · 6 unmodified lines
7 Tobj,7 Tobj,
8};8};
9 9
10typedef struct Amf0 Amf0;10typedef struct A₀ A₀;
11 11
12struct Amf0 {12struct A₀ {
13 int type;13 int type;
14 union {14 union {
15 char *str;15 char *str;
16 double num;16 double num;
17 u8int bool;17 u8int bool;
18 struct {18 struct {
19 Amf0 **v;19 A₀ **v;
20 int n;20 int n;
21 }arr;21 }arr;
22 struct {22 struct {
23 char **k;23 char **k;
24 Amf0 **v;24 A₀ **v;
25 int n;25 int n;
26 }obj;26 }obj;
27 };27 };
28};28};
29 29
30u8int *amf0null(u8int *p, u8int *e);30u8int *a₀null(u8int *p, u8int *e);
31u8int *amf0i16(u8int *p, u8int *e, s16int i);31u8int *a₀i16(u8int *p, u8int *e, s16int i);
32u8int *amf0bool(u8int *p, u8int *e, int v);32u8int *a₀bool(u8int *p, u8int *e, int v);
33u8int *amf0byte(u8int *p, u8int *e, u8int byte);33u8int *a₀byte(u8int *p, u8int *e, u8int byte);
34u8int *amf0i24(u8int *p, u8int *e, s32int i);34u8int *a₀i24(u8int *p, u8int *e, s32int i);
35u8int *amf0i32(u8int *p, u8int *e, s32int i);35u8int *a₀i32(u8int *p, u8int *e, s32int i);
36u8int *amf0num(u8int *p, u8int *e, double v);36u8int *a₀num(u8int *p, u8int *e, double v);
37u8int *amf0str(u8int *p, u8int *e, char *s);37u8int *a₀str(u8int *p, u8int *e, char *s);
38u8int *amf0arr(u8int *p, u8int *e);38u8int *a₀arr(u8int *p, u8int *e);
39u8int *amf0obj(u8int *p, u8int *e);39u8int *a₀obj(u8int *p, u8int *e);
40u8int *amf0end(u8int *p, u8int *e);40u8int *a₀end(u8int *p, u8int *e);
41u8int *amf0kvnum(u8int *p, u8int *e, char *name, double v);41u8int *a₀kvnum(u8int *p, u8int *e, char *name, double v);
42u8int *amf0kvstr(u8int *p, u8int *e, char *name, char *v);42u8int *a₀kvstr(u8int *p, u8int *e, char *name, char *v);
43u8int *amf0kvbool(u8int *p, u8int *e, char *name, int v);43u8int *a₀kvbool(u8int *p, u8int *e, char *name, int v);
44 44
45u8int *amf0byteget(u8int *p, u8int *e, u8int *byte);45u8int *a₀byteget(u8int *p, u8int *e, u8int *byte);
46u8int *amf0i16get(u8int *p, u8int *e, s16int *i);46u8int *a₀i16get(u8int *p, u8int *e, s16int *i);
47u8int *amf0i24get(u8int *p, u8int *e, s32int *i);47u8int *a₀i24get(u8int *p, u8int *e, s32int *i);
48u8int *amf0i32get(u8int *p, u8int *e, s32int *i);48u8int *a₀i32get(u8int *p, u8int *e, s32int *i);
49u8int *amf0i32leget(u8int *p, u8int *e, s32int *i);49u8int *a₀i32leget(u8int *p, u8int *e, s32int *i);
50 50
51u8int *amf0parse(Amf0 **a, u8int *p, u8int *e);51u8int *a₀parse(A₀ **a, u8int *p, u8int *e);
52void amf0free(Amf0 *a);52void a₀free(A₀ *a);
53 53
54#pragma varargck type "A" Amf0*54#pragma varargck type "A" A₀*
55int amf0fmt(Fmt *f);55int a₀fmt(Fmt *f);
flv.c+21−21
@@ -27,25 +27,25 @@ flvscript(u8int *p, u8int *e, int w, int h, int audio) · 26 unmodified lines
27 p0 = p;27 p0 = p;
28 *p++ = Fvideo;28 *p++ = Fvideo;
29 psz = p;29 psz = p;
30 p = amf0i24(p, e, 0); /* sz set later */30 p = a₀i24(p, e, 0); /* sz set later */
31 p = amf0i24(p, e, ts);31 p = a₀i24(p, e, ts);
32 *p++ = ts>>24;32 *p++ = ts>>24;
33 p = amf0i24(p, e, stream);33 p = a₀i24(p, e, stream);
34 34
35 d = p;35 d = p;
36 p = amf0str(p, e, "onMetaData");36 p = a₀str(p, e, "onMetaData");
37 p = amf0arr(p, e);37 p = a₀arr(p, e);
38 p = amf0i32(p, e, audio ? 5 : 4);38 p = a₀i32(p, e, audio ? 5 : 4);
39 p = amf0kvnum(p, e, "duration", 0.0);39 p = a₀kvnum(p, e, "duration", 0.0);
40 p = amf0kvnum(p, e, "width", w);40 p = a₀kvnum(p, e, "width", w);
41 p = amf0kvnum(p, e, "height", h);41 p = a₀kvnum(p, e, "height", h);
42 p = amf0kvnum(p, e, "videocodecid", EncH264);42 p = a₀kvnum(p, e, "videocodecid", EncH264);
43 if(audio)43 if(audio)
44 p = amf0kvnum(p, e, "audiocodecid", EncAAC);44 p = a₀kvnum(p, e, "audiocodecid", EncAAC);
45 p = amf0end(p, e);45 p = a₀end(p, e);
46 amf0i24(psz, e, p-d);46 a₀i24(psz, e, p-d);
47 47
48 return amf0i32(p, e, p-p0);48 return a₀i32(p, e, p-p0);
49}49}
50 50
51u8int *51u8int *
@@ -61,10 +61,10 @@ flvdata(u8int *p, u8int *e, u32int pts, u32int dts, void *data, int sz, int type · 9 unmodified lines
61 p0 = p;61 p0 = p;
62 *p++ = type;62 *p++ = type;
63 psz = p;63 psz = p;
64 p = amf0i24(p, e, 0); /* size to be set later */64 p = a₀i24(p, e, 0); /* size to be set later */
65 p = amf0i24(p, e, dts);65 p = a₀i24(p, e, dts);
66 *p++ = dts >> 24;66 *p++ = dts >> 24;
67 p = amf0i24(p, e, stream);67 p = a₀i24(p, e, stream);
68 68
69 d = p;69 d = p;
70 if(type == Faudio){70 if(type == Faudio){
@@ -75,12 +75,12 @@ flvdata(u8int *p, u8int *e, u32int pts, u32int dts, void *data, int sz, int type · 4 unmodified lines
75 *p++ = ((fl & FlKey) ? 0x10 : 0x20) | EncH264;75 *p++ = ((fl & FlKey) ? 0x10 : 0x20) | EncH264;
76 *p++ = (fl & FlHdr) ? 0 : 1;76 *p++ = (fl & FlHdr) ? 0 : 1;
77 pts = ((fl & FlHdr) || pts < dts) ? 0 : (pts - dts);77 pts = ((fl & FlHdr) || pts < dts) ? 0 : (pts - dts);
78 p = amf0i24(p, e, pts);78 p = a₀i24(p, e, pts);
79 if((fl & FlHdr) == 0)79 if((fl & FlHdr) == 0)
80 p = amf0i32(p, e, sz);80 p = a₀i32(p, e, sz);
81 }81 }
82 p = (u8int*)memmove(p, data, sz) + sz;82 p = (u8int*)memmove(p, data, sz) + sz;
83 amf0i24(psz, e, p-d);83 a₀i24(psz, e, p-d);
84 84
85 return amf0i32(p, e, p-p0);85 return a₀i32(p, e, p-p0);
86}86}
rtmp.c+37−37
@@ -72,7 +72,7 @@ typedef struct Message Message; · 71 unmodified lines
72#pragma varargck type "M" Message*72#pragma varargck type "M" Message*
73 73
74struct Command {74struct Command {
75 void (*cb)(RTMP *r, int ok, Amf0 *a[NumCb], void *aux);75 void (*cb)(RTMP *r, int ok, A₀ *a[NumCb], void *aux);
76 void *aux;76 void *aux;
77 int tid;77 int tid;
78 78
@@ -114,18 +114,18 @@ struct RTMP { · 35 unmodified lines
114 u8int biobuf[Biobufsz];114 u8int biobuf[Biobufsz];
115};115};
116 116
117#define putnull() do{ r->p = amf0null(r->p, r->e); }while(0)117#define putnull() do{ r->p = a₀null(r->p, r->e); }while(0)
118#define puti16(i) do{ r->p = amf0i16(r->p, r->e, i); }while(0)118#define puti16(i) do{ r->p = a₀i16(r->p, r->e, i); }while(0)
119#define puti24(i) do{ r->p = amf0i24(r->p, r->e, i); }while(0)119#define puti24(i) do{ r->p = a₀i24(r->p, r->e, i); }while(0)
120#define puti32(i) do{ r->p = amf0i32(r->p, r->e, i); }while(0)120#define puti32(i) do{ r->p = a₀i32(r->p, r->e, i); }while(0)
121#define putnum(v) do{ r->p = amf0num(r->p, r->e, v); }while(0)121#define putnum(v) do{ r->p = a₀num(r->p, r->e, v); }while(0)
122#define putstr(s) do{ r->p = amf0str(r->p, r->e, s); }while(0)122#define putstr(s) do{ r->p = a₀str(r->p, r->e, s); }while(0)
123#define putarr() do{ r->p = amf0arr(r->p, r->e); }while(0)123#define putarr() do{ r->p = a₀arr(r->p, r->e); }while(0)
124#define putobj() do{ r->p = amf0obj(r->p, r->e); }while(0)124#define putobj() do{ r->p = a₀obj(r->p, r->e); }while(0)
125#define putend() do{ r->p = amf0end(r->p, r->e); }while(0)125#define putend() do{ r->p = a₀end(r->p, r->e); }while(0)
126#define putkvnum(name, v) do{ r->p = amf0kvnum(r->p, r->e, name, v); }while(0)126#define putkvnum(name, v) do{ r->p = a₀kvnum(r->p, r->e, name, v); }while(0)
127#define putkvstr(name, s) do{ r->p = amf0kvstr(r->p, r->e, name, s); }while(0)127#define putkvstr(name, s) do{ r->p = a₀kvstr(r->p, r->e, name, s); }while(0)
128#define putkvbool(name, s) do{ r->p = amf0kvbool(r->p, r->e, name, s); }while(0)128#define putkvbool(name, s) do{ r->p = a₀kvbool(r->p, r->e, name, s); }while(0)
129 129
130#define putcommand(name, cb_) do { \130#define putcommand(name, cb_) do { \
131 putstr(name); \131 putstr(name); \
@@ -240,20 +240,20 @@ rtmprecv(RTMP *r) · 108 unmodified lines
240 ts = 0;240 ts = 0;
241 len = 0;241 len = 0;
242 if(hsz >= szs[Type2]){242 if(hsz >= szs[Type2]){
243 h = amf0i24get(h, e, (s32int*)&ts); /* FIXME proper timestamps? */243 h = a₀i24get(h, e, (s32int*)&ts); /* FIXME proper timestamps? */
244 if(hsz >= szs[Type1]){244 if(hsz >= szs[Type1]){
245 h = amf0i24get(h, e, &len);245 h = a₀i24get(h, e, &len);
246 h = amf0byteget(h, e, &byte);246 h = a₀byteget(h, e, &byte);
247 r->msg.type = byte;247 r->msg.type = byte;
248 if(hsz >= szs[Type0])248 if(hsz >= szs[Type0])
249 h = amf0i32leget(h, e, &msid);249 h = a₀i32leget(h, e, &msid);
250 }250 }
251 }251 }
252 252
253 if(ts == 0xffffff){ /* exntended timestamp */253 if(ts == 0xffffff){ /* exntended timestamp */
254 if(readn(r->i, h, 4) != 4)254 if(readn(r->i, h, 4) != 4)
255 goto err;255 goto err;
256 h = amf0i32get(h, h+4, (s32int*)&ts);256 h = a₀i32get(h, h+4, (s32int*)&ts);
257 }257 }
258 258
259 /* FIXME do all consecutive chunks use Type3? */259 /* FIXME do all consecutive chunks use Type3? */
@@ -302,12 +302,12 @@ rtmpsend(RTMP *r) · 42 unmodified lines
302 hsz = szs[r->msg.fmt];302 hsz = szs[r->msg.fmt];
303 e = h + hsz;303 e = h + hsz;
304 if(hsz >= szs[Type2]){304 if(hsz >= szs[Type2]){
305 h = amf0i24(h, e, 0); /* FIXME put actual timestamps? */305 h = a₀i24(h, e, 0); /* FIXME put actual timestamps? */
306 if(hsz >= szs[Type1]){306 if(hsz >= szs[Type1]){
307 h = amf0i24(h, e, r->msg.sz);307 h = a₀i24(h, e, r->msg.sz);
308 h = amf0byte(h, e, r->msg.type);308 h = a₀byte(h, e, r->msg.type);
309 if(hsz >= szs[Type0])309 if(hsz >= szs[Type0])
310 h = amf0i32(h, e, r->msg.sid);310 h = a₀i32(h, e, r->msg.sid);
311 }311 }
312 }312 }
313 assert(h != nil);313 assert(h != nil);
@@ -333,17 +333,17 @@ rtmpsend(RTMP *r) · 19 unmodified lines
333 if(debug){333 if(debug){
334 fprint(2, "← %M", &r->msg);334 fprint(2, "← %M", &r->msg);
335 if(r->msg.type == AMF0Command){335 if(r->msg.type == AMF0Command){
336 Amf0 *a;336 A₀ *a;
337 u8int *s, *e;337 u8int *s, *e;
338 fprint(2, ":");338 fprint(2, ":");
339 s = r->msg.data;339 s = r->msg.data;
340 e = s + r->msg.sz;340 e = s + r->msg.sz;
341 for(; s != nil && s != e;){341 for(; s != nil && s != e;){
342 if((s = amf0parse(&a, s, e)) != nil)342 if((s = a₀parse(&a, s, e)) != nil)
343 fprint(2, " %A", a);343 fprint(2, " %A", a);
344 else344 else
345 fprint(2, " %r");345 fprint(2, " %r");
346 amf0free(a);346 a₀free(a);
347 }347 }
348 }348 }
349 fprint(2, "\n");349 fprint(2, "\n");
@@ -406,7 +406,7 @@ static void · 56 unmodified lines
406loop(void *aux)406loop(void *aux)
407{407{
408 int res, n, ok;408 int res, n, ok;
409 Amf0 *a[NumCb];409 A₀ *a[NumCb];
410 u8int *s, *e;410 u8int *s, *e;
411 s16int s16;411 s16int s16;
412 Message *m;412 Message *m;
@@ -419,7 +419,7 @@ loop(void *aux) · 6 unmodified lines
419 memset(a, 0, sizeof(a));419 memset(a, 0, sizeof(a));
420 for(;;){420 for(;;){
421 for(n = 0; n < nelem(a); n++)421 for(n = 0; n < nelem(a); n++)
422 amf0free(a[n]);422 a₀free(a[n]);
423 memset(a, 0, sizeof(a));423 memset(a, 0, sizeof(a));
424 424
425 qlock(r);425 qlock(r);
@@ -428,7 +428,7 @@ loop(void *aux) · 2 unmodified lines
428 if(debug)428 if(debug)
429 fprint(2, "rtmp loop: %r\n");429 fprint(2, "rtmp loop: %r\n");
430 for(n = 0; n < nelem(a); n++)430 for(n = 0; n < nelem(a); n++)
431 amf0free(a[n]);431 a₀free(a[n]);
432 break;432 break;
433 }433 }
434 434
@@ -443,7 +443,7 @@ loop(void *aux) · 8 unmodified lines
443 c = nil;443 c = nil;
444 ok = 1;444 ok = 1;
445 for(n = 0; n < NumCb; n++){445 for(n = 0; n < NumCb; n++){
446 if((s = amf0parse(&a[n], s, e)) == nil)446 if((s = a₀parse(&a[n], s, e)) == nil)
447 goto err;447 goto err;
448 switch(n){448 switch(n){
449 case CbCommand:449 case CbCommand:
@@ -481,7 +481,7 @@ loop(void *aux) · 31 unmodified lines
481 break;481 break;
482 482
483 case SetChunkSize:483 case SetChunkSize:
484 if(amf0i32get(s, e, &r->chunkin) == nil)484 if(a₀i32get(s, e, &r->chunkin) == nil)
485 goto err;485 goto err;
486 if(r->chunkin < 2){486 if(r->chunkin < 2){
487 werrstr("invalid chunk size: %d", r->chunkin);487 werrstr("invalid chunk size: %d", r->chunkin);
@@ -492,9 +492,9 @@ loop(void *aux) · 4 unmodified lines
492 break;492 break;
493 493
494 case UserControl:494 case UserControl:
495 if((s = amf0i16get(s, e, &s16)) == nil)495 if((s = a₀i16get(s, e, &s16)) == nil)
496 goto err;496 goto err;
497 if(amf0i32get(s, e, &n) == nil)497 if(a₀i32get(s, e, &n) == nil)
498 n = -1;498 n = -1;
499 switch(s16){499 switch(s16){
500 case CtlStreamBegin:500 case CtlStreamBegin:
@@ -518,14 +518,14 @@ loop(void *aux) · 17 unmodified lines
518 break;518 break;
519 519
520 case WindowAckSize:520 case WindowAckSize:
521 if(amf0i32get(s, e, &r->winacksz) == nil)521 if(a₀i32get(s, e, &r->winacksz) == nil)
522 goto err;522 goto err;
523 if(debug)523 if(debug)
524 fprint(2, ": %d\n", r->winacksz);524 fprint(2, ": %d\n", r->winacksz);
525 break;525 break;
526 526
527 case SetBandwidth:527 case SetBandwidth:
528 if((s = amf0i32get(s, e, &r->bw)) == nil || amf0byteget(s, e, &r->bwlimit) == nil)528 if((s = a₀i32get(s, e, &r->bw)) == nil || a₀byteget(s, e, &r->bwlimit) == nil)
529 goto err;529 goto err;
530 if(debug)530 if(debug)
531 fprint(2, ": %d (%s)\n", r->bw, r->bwlimit < nelem(bwlimit2s) ? bwlimit2s[r->bwlimit] : "???");531 fprint(2, ": %d (%s)\n", r->bw, r->bwlimit < nelem(bwlimit2s) ? bwlimit2s[r->bwlimit] : "???");
@@ -594,7 +594,7 @@ err: · 62 unmodified lines
594}594}
595 595
596static void596static void
597streamcreated(RTMP *, int ok, Amf0 *a[NumCb], void *aux)597streamcreated(RTMP *, int ok, A₀ *a[NumCb], void *aux)
598{598{
599 Channel *sid;599 Channel *sid;
600 600
@@ -638,7 +638,7 @@ rtmpstream(RTMP *r, ulong *sid) · 37 unmodified lines
638}638}
639 639
640static void640static void
641connected(RTMP *r, int ok, Amf0 *a[NumCb], void *)641connected(RTMP *r, int ok, A₀ *a[NumCb], void *)
642{642{
643 if(strcmp(a[CbCommand]->str, "_result") != 0)643 if(strcmp(a[CbCommand]->str, "_result") != 0)
644 sendp(r->c, smprint("expected '_result', got %#q", a[CbCommand]->str));644 sendp(r->c, smprint("expected '_result', got %#q", a[CbCommand]->str));
@@ -698,7 +698,7 @@ rtmpdial(char *url) · 53 unmodified lines
698 int f, port, ctl;698 int f, port, ctl;
699 RTMP *r;699 RTMP *r;
700 700
701 fmtinstall('A', amf0fmt);701 fmtinstall('A', a₀fmt);
702 fmtinstall('T', msgtypefmt);702 fmtinstall('T', msgtypefmt);
703 fmtinstall('M', msgfmt);703 fmtinstall('M', msgfmt);
704 quotefmtinstall();704 quotefmtinstall();

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t