Unified · Split
| @@ -13,7 +13,7 @@ · 12 unmodified lines | |||
| 13 | int mainstacksize = 128*1024; | 13 | int mainstacksize = 128*1024; |
| 14 | 14 | ||
| 15 | static Image *curim; | 15 | static Image *curim; |
| 16 | static u8int *rgb; | 16 | static u8int *curpx; |
| 17 | static uvlong lastframe; | 17 | static uvlong lastframe; |
| 18 | static int audiofd = -1; | 18 | static int audiofd = -1; |
| 19 | static Channel *audiosync; | 19 | static Channel *audiosync; |
| @@ -81,21 +81,26 @@ drawframe(Frame *f) · 61 unmodified lines | |||
| 81 | if(curim != nil && (Dx(curim->r) != f->w || Dy(curim->r) != f->h)){ | 81 | if(curim != nil && (Dx(curim->r) != f->w || Dy(curim->r) != f->h)){ |
| 82 | freeimage(curim); | 82 | freeimage(curim); |
| 83 | curim = nil; | 83 | curim = nil; |
| 84 | free(rgb); | 84 | free(curpx); |
| 85 | rgb = nil; | 85 | curpx = nil; |
| 86 | } | 86 | } |
| 87 | r = Rect(0,0,f->w,f->h); | 87 | r = Rect(0,0,f->w,f->h); |
| 88 | if(curim == nil) | ||
| 89 | curim = allocimage(display, r, bw ? GREY8 : RGB24, 0, DNofill); | ||
| 90 | if(rgb == nil) | ||
| 91 | rgb = malloc(f->w*f->h*(bw ? 1 : 3)); | ||
| 92 | if(bw){ | 88 | if(bw){ |
| 89 | if(curim == nil) | ||
| 90 | curim = allocimage(display, r, GREY8, 0, DNofill); | ||
| 91 | if(curpx == nil) | ||
| 92 | curpx = malloc(f->w*f->h); | ||
| 93 | for(y = 0; y < f->h; y++) | 93 | for(y = 0; y < f->h; y++) |
| 94 | memmove(rgb+f->w*y, f->yuv[0]+f->ystride*y, f->w); | 94 | memmove(curpx+f->w*y, f->yuv[0]+f->ystride*y, f->w); |
| 95 | loadimage(curim, r, curpx, f->w*f->h); | ||
| 95 | }else{ | 96 | }else{ |
| 96 | yuv420_rgb24(f->w, f->h, f->yuv[0], f->yuv[1], f->yuv[2], f->ystride, f->uvstride, rgb, f->w*3); | 97 | if(curim == nil) |
| 98 | curim = allocimage(display, r, RGB24, 0, DNofill); | ||
| 99 | if(curpx == nil) | ||
| 100 | curpx = malloc(f->w*f->h*3); | ||
| 101 | yuv420_rgb24(f->w, f->h, f->yuv[0], f->yuv[1], f->yuv[2], f->ystride, f->uvstride, curpx, f->w*3); | ||
| 102 | loadimage(curim, r, curpx, f->w*f->h*3); | ||
| 97 | } | 103 | } |
| 98 | loadimage(curim, r, rgb, f->w*f->h*(bw ? 1 : 3)); | ||
| 99 | 104 | ||
| 100 | dispdelay = nanosec() - x; | 105 | dispdelay = nanosec() - x; |
| 101 | 106 | ||