Unified · Split
| @@ -19,7 +19,7 @@ usage(void) · 18 unmodified lines | |||
| 19 | void | 19 | void |
| 20 | threadmain(int argc, char **argv) | 20 | threadmain(int argc, char **argv) |
| 21 | { | 21 | { |
| 22 | Biobuf *a, *v; | 22 | Biobuf *a, v; |
| 23 | u64int ns; | 23 | u64int ns; |
| 24 | ulong sid; | 24 | ulong sid; |
| 25 | IVFrame f; | 25 | IVFrame f; |
| @@ -41,7 +41,7 @@ threadmain(int argc, char **argv) · 15 unmodified lines | |||
| 41 | 41 | ||
| 42 | if(argc != 1) | 42 | if(argc != 1) |
| 43 | usage(); | 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 | sysfatal("%r"); | 45 | sysfatal("%r"); |
| 46 | if(strcmp(ivf.type, "AVC1") != 0) | 46 | if(strcmp(ivf.type, "AVC1") != 0) |
| 47 | sysfatal("not H.264"); | 47 | sysfatal("not H.264"); |
| @@ -58,14 +58,20 @@ threadmain(int argc, char **argv) · 10 unmodified lines | |||
| 58 | 58 | ||
| 59 | memset(&f, 0, sizeof(f)); | 59 | memset(&f, 0, sizeof(f)); |
| 60 | for(;;){ | 60 | for(;;){ |
| 61 | if(ivfread(v, &f) != 0) | 61 | if(ivfread(&v, &f) != 0) |
| 62 | sysfatal("%r"); | 62 | sysfatal("%r"); |
| 63 | if(f.sz == 0) | 63 | if(f.sz == 0) |
| 64 | break; | 64 | break; |
| 65 | ns = ivfns(&ivf, f.ts)/1000000ULL; | 65 | ns = ivfns(&ivf, f.ts)/1000000ULL; |
| 66 | if(rtmpdata(r, sid, ns, Tvideo, f.buf, f.sz) != 0) | 66 | if(rtmpdata(r, sid, ns, Tvideo, f.buf, f.sz) != 0){ |
| 67 | sysfatal("%r"); | 67 | fprint(2, "%r\n"); |
| 68 | break; | ||
| 69 | } | ||
| 68 | } | 70 | } |
| 69 | 71 | ||
| 72 | if(a != nil) | ||
| 73 | Bterm(a); | ||
| 74 | rtmpclose(r); | ||
| 75 | |||
| 70 | threadexitsall(nil); | 76 | threadexitsall(nil); |
| 71 | } | 77 | } |
| @@ -404,23 +404,6 @@ err: · 403 unmodified lines | |||
| 404 | return -1; | 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 | static int | 407 | static int |
| 425 | pong(RTMP *r, s32int n) | 408 | pong(RTMP *r, s32int n) |
| 426 | { | 409 | { |
| @@ -621,7 +604,7 @@ err: · 194 unmodified lines | |||
| 621 | qunlock(r); | 604 | qunlock(r); |
| 622 | } | 605 | } |
| 623 | 606 | ||
| 624 | rtmpfree(r); | 607 | chanclose(r->c); |
| 625 | 608 | ||
| 626 | threadexitsall(res == 0 ? nil : "error"); | 609 | threadexitsall(res == 0 ? nil : "error"); |
| 627 | } | 610 | } |
| @@ -994,6 +977,21 @@ msgfmt(Fmt *f) · 366 unmodified lines | |||
| 994 | return 0; | 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 | RTMP * | 995 | RTMP * |
| 998 | rtmpdial(char *url) | 996 | rtmpdial(char *url) |
| 999 | { | 997 | { |
| @@ -1098,5 +1096,6 @@ rtmpclose(RTMP *r) · 98 unmodified lines | |||
| 1098 | if(r->fd >= 0) | 1096 | if(r->fd >= 0) |
| 1099 | close(r->fd); | 1097 | close(r->fd); |
| 1100 | if(r->c != nil) | 1098 | if(r->c != nil) |
| 1101 | chanclose(r->c); | 1099 | recvp(r->c); |
| 1100 | rtmpfree(r); | ||
| 1102 | } | 1101 | } |