| @@ -6,6 +6,15 @@ · 5 unmodified lines |
| 6 | | 6 | |
| 7 | enum { | 7 | enum { |
| 8 | Maxstreams = 2, | 8 | Maxstreams = 2, |
| | 9 | Bufsz = 64*1024, |
| | 10 | }; |
| | 11 | |
| | 12 | typedef struct MCaux MCaux; |
| | 13 | |
| | 14 | struct MCaux { |
| | 15 | int fd; |
| | 16 | Biobuf bio; |
| | 17 | u8int buf[Bufsz]; |
| 9 | }; | 18 | }; |
| 10 | | 19 | |
| 11 | static int | 20 | static int |
| @@ -47,6 +56,16 @@ audfmt(char *fmt) · 35 unmodified lines |
| 47 | return -1; | 56 | return -1; |
| 48 | } | 57 | } |
| 49 | | 58 | |
| | 59 | static void |
| | 60 | freeaux(void *aux) |
| | 61 | { |
| | 62 | MCaux *a; |
| | 63 | |
| | 64 | a = aux; |
| | 65 | close(a->fd); |
| | 66 | free(a); |
| | 67 | } |
| | 68 | |
| 50 | static Stream * | 69 | static Stream * |
| 51 | mcopen(char *filename, int *num, int *failed) | 70 | mcopen(char *filename, int *num, int *failed) |
| 52 | { | 71 | { |
| @@ -54,6 +73,7 @@ mcopen(char *filename, int *num, int *failed) · 1 unmodified line |
| 54 | char *line; | 73 | char *line; |
| 55 | int p, pid, n, ns; | 74 | int p, pid, n, ns; |
| 56 | Biobuf b; | 75 | Biobuf b; |
| | 76 | MCaux *a; |
| 57 | char *argv[] = { | 77 | char *argv[] = { |
| 58 | "mcfs", | 78 | "mcfs", |
| 59 | filename, | 79 | filename, |
| @@ -82,9 +102,16 @@ mcopen(char *filename, int *num, int *failed) · 22 unmodified lines |
| 82 | if(nvideo < 1 && strcmp(v[1], "video") == 0){ | 102 | if(nvideo < 1 && strcmp(v[1], "video") == 0){ |
| 83 | s->video.w = atoi(v[3]); | 103 | s->video.w = atoi(v[3]); |
| 84 | s->video.h = atoi(v[4]); | 104 | s->video.h = atoi(v[4]); |
| 85 | if(mcfs(argv, &sp) > 0 && ivfopenb(Bfdopen(sp, OREAD), s, failed) == 0){ | 105 | if(mcfs(argv, &sp) > 0){ |
| 86 | nvideo++; | 106 | if((a = malloc(sizeof(*a))) == nil) |
| 87 | ns++; | 107 | sysfatal("memory"); |
| | 108 | a->fd = sp; |
| | 109 | s->aux = a; |
| | 110 | s->freeaux = freeaux; |
| | 111 | if(Binits(&a->bio, sp, OREAD, a->buf, Bufsz) == 0 && ivfopenb(&a->bio, s, failed) == 0){ |
| | 112 | nvideo++; |
| | 113 | ns++; |
| | 114 | } |
| 88 | } | 115 | } |
| 89 | }else if(naudio < 1 && strcmp(v[1], "audio") == 0 && (s->fmt = audfmt(v[2])) >= 0){ | 116 | }else if(naudio < 1 && strcmp(v[1], "audio") == 0 && (s->fmt = audfmt(v[2])) >= 0){ |
| 90 | s->audio.nchan = atoi(v[3]); | 117 | s->audio.nchan = atoi(v[3]); |