Unified · Split
| @@ -19,7 +19,7 @@ usage(void) · 18 unmodified lines | ||
| 19 | 19 | void |
| 20 | 20 | threadmain(int argc, char **argv) |
| 21 | 21 | { |
| 22 | − Biobuf *a, *v; | |
| 22 | + Biobuf *a, v; | |
| 23 | 23 | u64int ns; |
| 24 | 24 | ulong sid; |
| 25 | 25 | IVFrame f; |
| @@ -41,7 +41,7 @@ threadmain(int argc, char **argv) · 15 unmodified lines | ||
| 41 | 41 | |
| 42 | 42 | if(argc != 1) |
| 43 | 43 | usage(); |
| 44 | − if((v = Bfdopen(0, OREAD)) == nil || ivfopen(v, &ivf) != 0) | |
| 44 | + if(Binit(&v, 0, OREAD) != 0 || ivfopen(&v, &ivf) != 0) | |
| 45 | 45 | sysfatal("%r"); |
| 46 | 46 | if(strcmp(ivf.type, "AVC1") != 0) |
| 47 | 47 | sysfatal("not H.264"); |
| @@ -58,14 +58,20 @@ threadmain(int argc, char **argv) · 10 unmodified lines | ||
| 58 | 58 | |
| 59 | 59 | memset(&f, 0, sizeof(f)); |
| 60 | 60 | for(;;){ |
| 61 | − if(ivfread(v, &f) != 0) | |
| 61 | + if(ivfread(&v, &f) != 0) | |
| 62 | 62 | sysfatal("%r"); |
| 63 | 63 | if(f.sz == 0) |
| 64 | 64 | break; |
| 65 | 65 | ns = ivfns(&ivf, f.ts)/1000000ULL; |
| 66 | − if(rtmpdata(r, sid, ns, Tvideo, f.buf, f.sz) != 0) | |
| 67 | − sysfatal("%r"); | |
| 66 | + if(rtmpdata(r, sid, ns, Tvideo, f.buf, f.sz) != 0){ | |
| 67 | + fprint(2, "%r\n"); | |
| 68 | + break; | |
| 69 | + } | |
| 68 | 70 | } |
| 69 | 71 | |
| 72 | + if(a != nil) | |
| 73 | + Bterm(a); | |
| 74 | + rtmpclose(r); | |
| 75 | + | |
| 70 | 76 | threadexitsall(nil); |
| 71 | 77 | } |
| @@ -404,23 +404,6 @@ err: · 403 unmodified lines | ||
| 404 | 404 | return -1; |
| 405 | 405 | } |
| 406 | 406 | |
| 407 | −static void | |
| 408 | −rtmpfree(RTMP *r) | |
| 409 | −{ | |
| 410 | − free(r->i.b); | |
| 411 | − free(r->o.b); | |
| 412 | − free(r->tcurl); | |
| 413 | − free(r->app); | |
| 414 | − free(r->inst); | |
| 415 | − free(r->path); | |
| 416 | − if(r->c != nil){ | |
| 417 | − sendp(r->c, "done"); | |
| 418 | − chanfree(r->c); | |
| 419 | − } | |
| 420 | − Bterm(r); | |
| 421 | − free(r); | |
| 422 | −} | |
| 423 | − | |
| 424 | 407 | static int |
| 425 | 408 | pong(RTMP *r, s32int n) |
| 426 | 409 | { |
| @@ -621,7 +604,7 @@ err: · 194 unmodified lines | ||
| 621 | 604 | qunlock(r); |
| 622 | 605 | } |
| 623 | 606 | |
| 624 | − rtmpfree(r); | |
| 607 | + chanclose(r->c); | |
| 625 | 608 | |
| 626 | 609 | threadexitsall(res == 0 ? nil : "error"); |
| 627 | 610 | } |
| @@ -994,6 +977,21 @@ msgfmt(Fmt *f) · 366 unmodified lines | ||
| 994 | 977 | return 0; |
| 995 | 978 | } |
| 996 | 979 | |
| 980 | +static void | |
| 981 | +rtmpfree(RTMP *r) | |
| 982 | +{ | |
| 983 | + free(r->i.b); | |
| 984 | + free(r->o.b); | |
| 985 | + free(r->tcurl); | |
| 986 | + free(r->app); | |
| 987 | + free(r->inst); | |
| 988 | + free(r->path); | |
| 989 | + if(r->c != nil) | |
| 990 | + chanfree(r->c); | |
| 991 | + Bterm(r); | |
| 992 | + free(r); | |
| 993 | +} | |
| 994 | + | |
| 997 | 995 | RTMP * |
| 998 | 996 | rtmpdial(char *url) |
| 999 | 997 | { |
| @@ -1098,5 +1096,6 @@ rtmpclose(RTMP *r) · 98 unmodified lines | ||
| 1098 | 1096 | if(r->fd >= 0) |
| 1099 | 1097 | close(r->fd); |
| 1100 | 1098 | if(r->c != nil) |
| 1101 | − chanclose(r->c); | |
| 1099 | + recvp(r->c); | |
| 1100 | + rtmpfree(r); | |
| 1102 | 1101 | } |